From c6edb7884255bd200e91b66fe36da58618f9bfb2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 29 Dec 2021 10:12:57 +0000 Subject: [PATCH] Publish autogenerated nightly docs --- ...CENSE.txt => NanumBarunGothic-LICENSE.txt} | 12 +- .../nightly/latest/NanumBarunGothic.ttf.woff | Bin 0 -> 677868 bytes .../nightly/latest/NanumBarunGothic.ttf.woff2 | Bin 0 -> 399468 bytes .../public/docs-rs/bdk/nightly/latest/ayu.css | 2 +- .../docs-rs/bdk/nightly/latest/bdk/all.html | 7 +- .../blockchain/any/enum.AnyBlockchain.html | 32 +- .../any/enum.AnyBlockchainConfig.html | 41 +- .../latest/bdk/blockchain/any/index.html | 15 +- .../enum.CompactFiltersError.html | 67 +- .../bdk/blockchain/compact_filters/index.html | 25 +- .../struct.BitcoinPeerConfig.html | 33 +- .../struct.CompactFiltersBlockchain.html | 28 +- ...struct.CompactFiltersBlockchainConfig.html | 35 +- .../compact_filters/struct.Mempool.html | 24 +- .../compact_filters/struct.Peer.html | 24 +- .../latest/bdk/blockchain/electrum/index.html | 15 +- .../electrum/struct.ElectrumBlockchain.html | 44 +- .../struct.ElectrumBlockchainConfig.html | 43 +- .../bdk/blockchain/enum.Capability.html | 49 +- .../blockchain/esplora/enum.EsploraError.html | 75 +- .../latest/bdk/blockchain/esplora/index.html | 20 +- .../bdk/blockchain/esplora/sidebar-items.js | 2 +- .../esplora/struct.EsploraBlockchain.html | 49 +- .../struct.EsploraBlockchainConfig.html | 55 +- .../ureq/struct.EsploraBlockchainConfig.html | 11 - .../bdk/blockchain/fn.log_progress.html | 7 +- .../bdk/blockchain/fn.noop_progress.html | 7 +- .../latest/bdk/blockchain/fn.progress.html | 7 +- .../nightly/latest/bdk/blockchain/index.html | 51 +- .../blockchain/struct.EsploraBlockchain.html | 49 +- .../bdk/blockchain/struct.LogProgress.html | 35 +- .../bdk/blockchain/struct.NoopProgress.html | 35 +- .../bdk/blockchain/trait.Blockchain.html | 21 +- .../trait.ConfigurableBlockchain.html | 11 +- .../latest/bdk/blockchain/trait.Progress.html | 9 +- .../bdk/blockchain/type.ProgressData.html | 7 +- .../bdk/database/any/enum.AnyBatch.html | 56 +- .../bdk/database/any/enum.AnyDatabase.html | 85 +- .../database/any/enum.AnyDatabaseConfig.html | 42 +- .../latest/bdk/database/any/index.html | 23 +- .../any/struct.SledDbConfiguration.html | 32 +- .../any/struct.SqliteDbConfiguration.html | 32 +- .../nightly/latest/bdk/database/index.html | 30 +- .../latest/bdk/database/memory/index.html | 11 +- .../memory/struct.MemoryDatabase.html | 95 +- .../latest/bdk/database/sidebar-items.js | 2 +- .../bdk/database/struct.SqliteDatabase.html | 89 +- .../latest/bdk/database/struct.SyncTime.html | 32 + .../bdk/database/trait.BatchDatabase.html | 13 +- .../bdk/database/trait.BatchOperations.html | 38 +- .../database/trait.ConfigurableDatabase.html | 11 +- .../latest/bdk/database/trait.Database.html | 37 +- .../descriptor/checksum/fn.get_checksum.html | 7 +- .../latest/bdk/descriptor/checksum/index.html | 11 +- .../bdk/descriptor/enum.Descriptor.html | 75 +- .../latest/bdk/descriptor/enum.Legacy.html | 73 +- .../latest/bdk/descriptor/enum.Segwitv0.html | 73 +- .../bdk/descriptor/error/enum.Error.html | 61 +- .../latest/bdk/descriptor/error/index.html | 11 +- .../nightly/latest/bdk/descriptor/index.html | 51 +- .../policy/enum.BuildSatisfaction.html | 43 +- .../descriptor/policy/enum.PolicyError.html | 47 +- .../descriptor/policy/enum.Satisfaction.html | 61 +- .../policy/enum.SatisfiableItem.html | 73 +- .../latest/bdk/descriptor/policy/index.html | 33 +- .../descriptor/policy/struct.Condition.html | 47 +- .../bdk/descriptor/policy/struct.PkOrF.html | 31 +- .../bdk/descriptor/policy/struct.Policy.html | 31 +- .../descriptor/policy/type.ConditionMap.html | 7 +- .../policy/type.FoldedConditionMap.html | 7 +- .../struct.DerivedDescriptorKey.html | 51 +- .../bdk/descriptor/struct.Miniscript.html | 105 +- .../latest/bdk/descriptor/template/index.html | 35 +- .../bdk/descriptor/template/struct.Bip44.html | 26 +- .../template/struct.Bip44Public.html | 26 +- .../bdk/descriptor/template/struct.Bip49.html | 26 +- .../template/struct.Bip49Public.html | 26 +- .../bdk/descriptor/template/struct.Bip84.html | 26 +- .../template/struct.Bip84Public.html | 26 +- .../bdk/descriptor/template/struct.P2Pkh.html | 26 +- .../descriptor/template/struct.P2Wpkh.html | 26 +- .../template/struct.P2Wpkh_P2Sh.html | 26 +- .../template/trait.DescriptorTemplate.html | 11 +- .../template/type.DescriptorTemplateOut.html | 7 +- .../bdk/descriptor/trait.ExtractPolicy.html | 7 +- .../trait.IntoWalletDescriptor.html | 7 +- .../bdk/descriptor/trait.ScriptContext.html | 55 +- .../descriptor/type.DerivedDescriptor.html | 7 +- .../descriptor/type.ExtendedDescriptor.html | 7 +- .../bdk/descriptor/type.HdKeyPaths.html | 7 +- .../latest/bdk/descriptor/type.KeyMap.html | 7 +- .../bdk/nightly/latest/bdk/enum.Error.html | 135 +- .../nightly/latest/bdk/enum.KeychainKind.html | 45 +- .../bdk/nightly/latest/bdk/enum.Utxo.html | 39 +- .../bdk/nightly/latest/bdk/fn.version.html | 7 +- .../docs-rs/bdk/nightly/latest/bdk/index.html | 83 +- .../latest/bdk/keys/bip39/enum.Language.html | 73 +- .../bdk/keys/bip39/enum.MnemonicType.html | 111 - .../bip39/enum.WordCount.html} | 38 +- .../nightly/latest/bdk/keys/bip39/index.html | 23 +- .../latest/bdk/keys/bip39/sidebar-items.js | 2 +- .../bdk/keys/bip39/struct.Mnemonic.html | 173 +- .../latest/bdk/keys/bip39/struct.Seed.html | 48 - .../bip39/type.MnemonicWithPassphrase.html | 11 +- .../latest/bdk/keys/enum.DescriptorKey.html | 28 +- .../bdk/keys/enum.DescriptorPublicKey.html | 59 +- .../bdk/keys/enum.DescriptorSecretKey.html | 38 +- .../latest/bdk/keys/enum.ExtendedKey.html | 44 +- .../latest/bdk/keys/enum.KeyError.html | 57 +- .../bdk/keys/enum.ScriptContextEnum.html | 35 +- .../latest/bdk/keys/fn.any_network.html | 7 +- .../latest/bdk/keys/fn.mainnet_network.html | 7 +- .../latest/bdk/keys/fn.merge_networks.html | 7 +- .../latest/bdk/keys/fn.test_networks.html | 7 +- .../bdk/nightly/latest/bdk/keys/index.html | 67 +- .../bdk/keys/struct.DescriptorSinglePriv.html | 24 +- .../bdk/keys/struct.DescriptorSinglePub.html | 45 +- .../latest/bdk/keys/struct.GeneratedKey.html | 36 +- .../struct.PrivateKeyGenerateOptions.html | 37 +- .../bdk/keys/struct.SortedMultiVec.html | 75 +- .../latest/bdk/keys/trait.DerivableKey.html | 27 +- .../bdk/keys/trait.ExtScriptContext.html | 7 +- .../keys/trait.GeneratableDefaultOptions.html | 13 +- .../latest/bdk/keys/trait.GeneratableKey.html | 17 +- .../bdk/keys/trait.IntoDescriptorKey.html | 21 +- .../latest/bdk/keys/trait.ScriptContext.html | 55 +- .../nightly/latest/bdk/keys/type.KeyMap.html | 7 +- .../latest/bdk/keys/type.ValidNetworks.html | 7 +- .../nightly/latest/bdk/macro.descriptor.html | 29 +- .../nightly/latest/bdk/macro.fragment.html | 59 +- .../bdk/nightly/latest/bdk/sidebar-items.js | 2 +- ...rmationTime.html => struct.BlockTime.html} | 49 +- .../nightly/latest/bdk/struct.FeeRate.html | 37 +- .../nightly/latest/bdk/struct.LocalUtxo.html | 35 +- .../latest/bdk/struct.TransactionDetails.html | 39 +- .../latest/bdk/struct.WeightedUtxo.html | 29 +- .../bdk/nightly/latest/bdk/trait.Vbytes.html | 7 +- .../latest/bdk/type.ConfirmationTime.html | 7 + .../latest/bdk/types/struct.BlockTime.html | 11 + .../bdk/types/struct.ConfirmationTime.html | 11 - .../bdk/types/type.ConfirmationTime.html | 11 + .../enum.AddressValidatorError.html | 52 +- .../bdk/wallet/address_validator/index.html | 19 +- .../trait.AddressValidator.html | 7 +- .../bdk/wallet/coin_selection/index.html | 29 +- .../struct.BranchAndBoundCoinSelection.html | 24 +- .../struct.CoinSelectionResult.html | 24 +- .../struct.LargestFirstCoinSelection.html | 29 +- .../trait.CoinSelectionAlgorithm.html | 7 +- .../type.DefaultCoinSelectionAlgorithm.html | 7 +- .../latest/bdk/wallet/enum.AddressIndex.html | 34 +- .../latest/bdk/wallet/export/index.html | 15 +- .../wallet/export/struct.WalletExport.html | 30 +- .../bdk/wallet/fn.get_funded_wallet.html | 7 +- .../fn.wallet_name_from_descriptor.html | 5 + .../bdk/nightly/latest/bdk/wallet/index.html | 40 +- .../latest/bdk/wallet/sidebar-items.js | 2 +- .../bdk/wallet/signer/enum.SignerError.html | 62 +- .../bdk/wallet/signer/enum.SignerId.html | 53 +- .../latest/bdk/wallet/signer/index.html | 35 +- .../bdk/wallet/signer/struct.SignOptions.html | 29 +- .../wallet/signer/struct.SignerOrdering.html | 43 +- .../signer/struct.SignersContainer.html | 29 +- .../bdk/wallet/signer/trait.Signer.html | 7 +- .../latest/bdk/wallet/struct.AddressInfo.html | 28 +- .../latest/bdk/wallet/struct.Wallet.html | 82 +- .../bdk/wallet/time/fn.get_timestamp.html | 7 +- .../nightly/latest/bdk/wallet/time/index.html | 11 +- .../latest/bdk/wallet/trait.IsDust.html | 7 +- .../tx_builder/enum.ChangeSpendPolicy.html | 69 +- .../wallet/tx_builder/enum.TxOrdering.html | 71 +- .../latest/bdk/wallet/tx_builder/index.html | 27 +- .../bdk/wallet/tx_builder/struct.BumpFee.html | 29 +- .../wallet/tx_builder/struct.CreateTx.html | 29 +- .../wallet/tx_builder/struct.TxBuilder.html | 44 +- .../tx_builder/trait.TxBuilderContext.html | 7 +- .../docs-rs/bdk/nightly/latest/dark.css | 2 +- .../implementors/core/clone/trait.Clone.js | 2 +- .../latest/implementors/core/cmp/trait.Eq.js | 2 +- .../implementors/core/cmp/trait.PartialEq.js | 2 +- .../implementors/core/convert/trait.From.js | 2 +- .../core/default/trait.Default.js | 2 +- .../implementors/core/fmt/trait.Debug.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 +- .../serde/de/trait.Deserialize.js | 2 +- .../implementors/serde/ser/trait.Serialize.js | 2 +- .../docs-rs/bdk/nightly/latest/light.css | 2 +- .../public/docs-rs/bdk/nightly/latest/main.js | 4 +- .../docs-rs/bdk/nightly/latest/noscript.css | 2 +- .../noto-sans-kr-v13-korean-regular.woff | Bin 287068 -> 0 bytes .../docs-rs/bdk/nightly/latest/rust-logo.png | Bin 5758 -> 0 bytes .../docs-rs/bdk/nightly/latest/rustdoc.css | 2 +- .../bdk/nightly/latest/search-index.js | 2 +- .../docs-rs/bdk/nightly/latest/search.js | 2 +- .../docs-rs/bdk/nightly/latest/settings.html | 7 +- .../bdk/nightly/latest/source-files.js | 2 +- .../bdk/nightly/latest/source-script.js | 2 +- .../latest/src/bdk/blockchain/any.rs.html | 49 +- .../blockchain/compact_filters/mod.rs.html | 77 +- .../blockchain/compact_filters/peer.rs.html | 143 +- .../blockchain/compact_filters/store.rs.html | 197 +- .../blockchain/compact_filters/sync.rs.html | 49 +- .../src/bdk/blockchain/electrum.rs.html | 377 ++- .../src/bdk/blockchain/esplora/api.rs.html | 239 ++ .../src/bdk/blockchain/esplora/mod.rs.html | 231 +- .../src/bdk/blockchain/esplora/ureq.rs.html | 415 ++- .../latest/src/bdk/blockchain/mod.rs.html | 65 +- .../src/bdk/blockchain/script_sync.rs.html | 793 ++++++ .../latest/src/bdk/blockchain/utils.rs.html | 780 ------ .../latest/src/bdk/database/any.rs.html | 177 +- .../latest/src/bdk/database/keyvalue.rs.html | 167 +- .../latest/src/bdk/database/memory.rs.html | 213 +- .../latest/src/bdk/database/mod.rs.html | 161 +- .../latest/src/bdk/database/sqlite.rs.html | 2343 +++++++++-------- .../src/bdk/descriptor/checksum.rs.html | 15 +- .../latest/src/bdk/descriptor/derived.rs.html | 47 +- .../latest/src/bdk/descriptor/dsl.rs.html | 173 +- .../latest/src/bdk/descriptor/error.rs.html | 17 +- .../latest/src/bdk/descriptor/mod.rs.html | 127 +- .../latest/src/bdk/descriptor/policy.rs.html | 339 +-- .../src/bdk/descriptor/template.rs.html | 43 +- .../bdk/nightly/latest/src/bdk/error.rs.html | 45 +- .../nightly/latest/src/bdk/keys/bip39.rs.html | 89 +- .../nightly/latest/src/bdk/keys/mod.rs.html | 251 +- .../bdk/nightly/latest/src/bdk/lib.rs.html | 23 +- .../nightly/latest/src/bdk/psbt/mod.rs.html | 19 +- .../latest/src/bdk/testutils/mod.rs.html | 47 +- .../bdk/nightly/latest/src/bdk/types.rs.html | 85 +- .../src/bdk/wallet/address_validator.rs.html | 13 +- .../src/bdk/wallet/coin_selection.rs.html | 67 +- .../latest/src/bdk/wallet/export.rs.html | 59 +- .../nightly/latest/src/bdk/wallet/mod.rs.html | 511 ++-- .../latest/src/bdk/wallet/signer.rs.html | 127 +- .../latest/src/bdk/wallet/time.rs.html | 19 +- .../latest/src/bdk/wallet/tx_builder.rs.html | 141 +- .../latest/src/bdk/wallet/utils.rs.html | 91 +- .../docs-rs/bdk/nightly/latest/storage.js | 2 +- 244 files changed, 7852 insertions(+), 6731 deletions(-) rename docs/.vuepress/public/docs-rs/bdk/nightly/latest/{noto-sans-kr-v13-korean-regular-LICENSE.txt => NanumBarunGothic-LICENSE.txt} (90%) create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic.ttf.woff create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic.ttf.woff2 delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/ureq/struct.EsploraBlockchainConfig.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SyncTime.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html rename docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/{blockchain/esplora/struct.EsploraGetHistory.html => keys/bip39/enum.WordCount.html} (50%) delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html rename docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/{struct.ConfirmationTime.html => struct.BlockTime.html} (51%) create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/type.ConfirmationTime.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.BlockTime.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.ConfirmationTime.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/type.ConfirmationTime.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/fn.wallet_name_from_descriptor.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular.woff delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/rust-logo.png create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/api.rs.html create mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/script_sync.rs.html delete mode 100644 docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic-LICENSE.txt similarity index 90% rename from docs/.vuepress/public/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt rename to docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic-LICENSE.txt index 922d5fdc18..0bf46682b5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular-LICENSE.txt +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic-LICENSE.txt @@ -1,8 +1,14 @@ -Copyright 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. +Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/), -This Font Software is licensed under the SIL Open Font License, Version 1.1. +with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, +NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, +Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, Naver NanumMyeongjoEco, +NanumMyeongjoEco, Naver NanumGothicLight, NanumGothicLight, NanumBarunGothic, +Naver NanumBarunGothic, NanumSquareRound, NanumBarunPen, MaruBuri -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL ----------------------------------------------------------- diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic.ttf.woff b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic.ttf.woff new file mode 100644 index 0000000000000000000000000000000000000000..fb063e8fb7dc5435c591560e257903a35f76ee6a GIT binary patch literal 677868 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�V}voaFqxt%Zg{VM#@wHx_$8V#Cr+my$Gh|2HpY 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

!^663JK4d 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

-7(&`knvx@xQTc^{&1Hdl#=< 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

`%Zt(*MsT=U0tt;ZWU z|71#UD@~~AKWi9x`}c?Y_q#tnH*lQVd}N`Q#*2eupO5hu@Gbb5&cB5}I`-jQ>Gf+r zd|P#C+J_4p)wTwofH{#(K3ulfG( z%4V*$XS&i^svb2v;(D~!yX*csZ*@Jnczh1kmt6dra_n80=v?b*OH=i9__Tjp=x0|u zrW9ZNskbV7x`-(=awmcboBmx{^0t{D$9e990};ZWfEF9 zbM@~3D=rpDCTwfE7qb7Jjk#6nMiqhf!fzsMrq^dPFEbIkzkK$)cV{+FE$@6%=~^=N z=En%Xh3l*eDps2oRA{ex?ag(LHOk`82^pDZS|SUg6en&u?!o-UeX`UYxy@pCyvk3c zSeL!I&=BpgRr=1ikk5Mc^CZM4PY@8EKI74`!ouR>hY4|?Z7$4}O7Cha3_rh}U!zDb z>^&1#g+NYQe3N2cpV2hy4YM`c*Gn{5`3Q#_U1eLuH+@fyQyXf9@18!^Kd=dKtbqUEI zjlbk@{_$F>R3zx}Ze8D;#p@S`=`q!GiLvPY>GcSkc`<_Z*#Tq!c>+5-)1Ig`DSn8n zwVkMKtQ^jEuRVT$h2xVWx=%`~HQ1yds$2Z!_dF$Od{FIGN7SWw<(-^$Jg2(s=XxG> zR^K2SrgTt8fob;2YTb~$w%v}I59_|<*xvD8eTJ#Xcv8^@uEr|qACo-X6i&`oQ&B#^ zw?p*)1}7En=od%y*G<%6>3*>B`ufg00menn2Q4c89%NRUp1iEzGC|U&=W|3y$|lK^ zDJgSv4@mwyxIjaCi){6z=tl;%i=TB_d|5AC^nOLxqD6tKstIRiv=@jMf0>vc*Uz+= z;ki_nqWIVUD-XKYa#c6TwraiI!2G~yL+(j7UcLX@w}{xB-?yUbtN6u`RJX}#I}&}9 z7SCG2chf!bk>;Y8vc|LSF)Ani-COMvyzrx)Y3lr@OM6{{XG;3cQtURhl)BEc+5a$K zy-;Vxylb+16Zo8$o-e!O z*nU9bUv$Kdtf^g_wg>M$PW_4e?nE z$~6CQd2rij$$juxduLIUrA0FP()(!_KOf#ATJnrNC?`8`qwdv%d}TkZyF1z=MfjQR zZyucBo%JzK?C5UB4EE}pMPkpRM4mStFT3zIPfT)l(TC{=jed&1;WZQA=Wzbop}z;j z{&gQa%Ut!Y^qRUd8~=p%qOH>=omN{Nr#qE@S^DRAw#TuHH&>e3FL=Iyvv-D(W#No1 z>K84p^c-85z_cbeM@5SJZ03=clb4h-?H3syKU4j@f&ZeN&%?FiFH2088+(7#d$WOI zulcl|?N_Q!Xk4+H_QhO1QdN@eZkU(0u6NShyvrw~QyWz_oJiQC*QDOCAwjun8*?7x zI*aoxXOe6#s^5Hjp(#atpN>wF#~_$@b9o*D}BSR{X15?$ldnzd?Q-+r1BR7vtBim*4W>cdP!yZ(CbiuU_%9aEVi% zy?WKc>86+U8>VkP@8I51!*1Zbo8e;1p<{6gf7^H~L{~{NPF5E>m3+lPe#3tX zI;mz&&!1Q2ukF6S4`GPWSUt_J;oOtlU6J3-GCs;!OMH{iI4LZAyYOp$+6}2qcXl0e z+S7HY_XLabLg`J1stP)Gx!W#W+pwT%?c(jqhrE4CY+yA__6uhy=O z7F7_e^L}z}*0k5#(t4R(4!rirlilI@x5dCRw{}}OyN)?OpR@N2Vbz7-^rkY)|4^Rz z=iZ(tPL_5Ss=4v5x%S5Q%+g;5v8t_BEE4zqelhbX7b{2G_QF8^9}|DwT=4W~0mrQ3 zz9~Joti$;%1gw|V9;{rY{WU`OWy|_?j#0mx{JRuco;z~vQN6pNu_M+@v+a-ckLHrE zSxRNgBYFCL4&_`G6ay2fp`5RZ&w5VNO&~*95&6powy?a!= zCN_Qxu79!WbL#Xaxud@?GOzXYnpo@O5t~=nn)Jc&M@V`3mZQ0KT;&aNs=qI6Ub4UZ zoyw_qCfb*~-X2dnI)7pMx%+2lIv=Ssy_I(H`3uIn^O=`Bu9ybf?rz(-_~~* zZ5@+aKAj5}vb{fjB4Ktb+iXq4xd+X-dCh{8teSJhq+FIADPfzqb#>=f z6DwEEDZjAg_Gj1onR4ZLsQlEc@Mzs?@@;okvi*^~O<(SocizyJHB?!o{O#4x;*$nG z7r*JT`fvt5c)wru>Q$G^@oLh4xPLFdRQR|YmVf_Z%*OS zbM|c$_qUfeZ1Qk44*GC$o?~;z75TKPZ|n&&^DQQJ{OvgswT@qEo|8w|ymBsGD3$LrS z#@Sb^Nm^|&J^VpVD0?S=>%o|V*4^;&GSc8^- zwawBJs1`^SXjwc@?!at`pE~iuoosS`N+M0dsvrD6n0C}{$P}Kq+d)^`&cUEYy9rt<=pJ4CtEBiQ~Qn>q4i5K3DOa-f0>{v<XYrRGt5Z)e_;Rn^#p3dw0yT?{md&rG8!&7YVEnW3 zi=h13j6*WJmuxBF{IR^VXm``ywq=|vx|jDXvDW>=WpNksK{nnf#A&bn`?zOspv+dT?x#DvL!d{49P}T~lE`4{P z)9OQmnWnjX)Etv(6u0KBE zypZyHs8H@i@PUJ||Fwet+~Q8JC~^Co>v%b4QFq#Rwq-Z>W`Fby{bs#t zdVD>vjQ@r04;B^L3w9{9xJ#cF`F{H9RAnEN&<$bXY;%oR&ctu{z4jt^8RP4{FALrr zwJg@Nf3fh#-bI^p#cB_~<4F?>dYhio@p^TbzeSeuZW~?OpmoJ7*WH`D+j#QtUrVb} z-9LTaW60{9-1^9IX{>wLtF}Nz3-fHfs>%BqyX*Kro4>io7TYgxTg7d7;eP3?=9B>ZQWKk(ml$$eWNUq$(0;pgI^x<~a}-#12@I?UMH?&BmctbP9R z>IV-)mt@*s{9=AsA)h02cM#XJX;Thxnl6YBjlbdW&HL-rz52IHQuCvBOgTI8CggyPY*>m;AGB=xX?bTtq3R0PC&H7u>)x;0T>Zzi+ghq`+pNY8Hm$Gh&rTkzxBbO0 z9TjU^67m1QoyO*(&FuUqIYm32oQ;hGp8q!YO%XHRw^?oXbEOTTlT)pyF6Wv)?dY^O z=T6<4DIL5?OLuC@_nMN#n`mUvgPUVfLvx z=3=_H%*?uU9&LGW( zv+&uv%oEQqc$)5Rvz+qEzRB{b+Gq8&-al)c3ctOHJQm&a(l=Ry^87P)QV+a;*A zckhymhu!X6)-L5J6^&=Q_jz8*;ou+rF)wZUEM<5FHotrMWWK{223PLyCJQSn#99O= z|E^NqeO$wm$uF&7#f-@^-uHUC@2$D_Wp?4g>)K%l&itMo$S*Zp%rLp6HZrZ}Re)rL z)9+0`{FV!@XkPmvb^qscy9Cq*d4KrtO$YVv2!t(5-m*P>PH;h=Q=D ze;sN`HakOIUtj*`aWc`oYZaqlWcHLNPqokNuVIa_N#&CHd^hIPr;TaxcHdrw7CgP+ zdF9jEWjD{bJi74u`62aHW?7bMyZnCXhF7jRUo2`LmQi!t*|)e;uX~?vYIn26&EQa8aebzKZm(O1H#QnOUb?*eLyq&p zN7I#h^LNkBc$>8}|MnE~-3}A z(%g6L$F`902W1cc{IvSPe5dR&8^?~o6_tXSE7yd0{cSUF-FR&K-M%l&1or;gxAtYr z4~;js>-uVLzjh7jd$oSHc_4RGu;)Bam;YTY>yPZ17}T5I{XE2`Aa8kkb@bbtb)Cyr z-QLM0Jn!v{FJJaKDcbz-p84l_(bjbBp6A^ze<~7pnIFG;`}WkwzR&zO{rowZ$8N4U zzu3P`^K@SOpV58o|L?o~seh+r+pK2a<=1Vl`lox@zjQ{>ltcd#n46YFrp#xM*(^M% z__tX_N0@TgN85`(b}yXYy+uxkRbJ74dpWO$d)+(vBkX@Ue(tQD7@sqB{%_-x{nvl( zTq!6d{^)t$I>xEaZU?M4YO{ZOWU;dOFRMgxsueHg(Y(b`x zbm~y zdue6v^R`CXPrq4v`P5Wtvo$e0S7zPtsPVseBGE3AdDZ4ASD80E85ub>UA`RfJbS`? z>lq(;4}$)W<^Zf+?FG?fokx zlUm2TxU>58fr`w$Df?=Ea{hS5V<$cPqRG6@V-ebWVhleP&A-g~{KVUv0jWwO<6uiPA$$Rj@w?y3GVZ^`p#$4rgqu!?CPbXgkXxNO?mn=4a)zh3`9bmp29 zwQ0+gSkms?^$qQnKfPwzu}M=t)z38D^tkBf$H&Jf?*45Ub%u%IdR6)NDy!$Z$@sYf?4wni(ZH{AURCX%ntlT>G2zTj_&9=_c-g9`&`l+ux;6UKT7n z(eqi;da+6KW4C|e)>$O6V)F9?Okc$-GVh)*`^p%l(mnBT&pQ}d=xv#af5*5nXNHO)J;^U{eozjj{gJNxt5cgB6ca;&4a?Uw3Y zB4fvHlTgnSTB@XZTOdR>Q*)Bh&uW3VwK>zpo~IG+PjRc>mjllX#^fGFSb()fK?GZ_Q*1hJmtHR8W?uBMQh#5`g4IVK9DlgJp*gF2 zTf{Aw56SvWTCr=n>i+QWIM9AmIOKoLXWoSQVl#Q`-l#;a<*oZO)qE+#ze(n3o^bELH5U6B^LB||o>2Hw=);~FnVLT~3ZCuXP{wY*FWC8r@Nz%K<&z`d za@Rd!Sow3O0_*SPzRf?sn@?yBNv%msdlECm&!dKKdoK9BW%UQPg{fUsy~hXsc?4BE0YcB-*O^8ovvCl%Pzny zuFWMx`M3FvgAI$b?y5d3o!;;?!%(uY)b65ec3`>Aj%4=5`$J#%nXk8&tJ#;pcqaFT zhtH=YlRW1I^8vQz37h2^bV^Jb-A zq~yvcr`+EExp1RuPVBcGTfTfu{_?}5DChG0`X;uY{acc6Z(8%>_7vrZp$d*b=Edc(vOzUIr# zJU=n^giS9^ZC3f5HTgiHNuP^3)Gnx6v+m8WiT8@nlpJu4z4>)}9 zklsu#>lNC&bv%;h%3hfo`||+1jX`Sa)b_j=^!NAHtS`~THY$~0K8$}B$lbI+9< zcNQPozCQSG`pR8DxaLRB%2g7W6Sakd>)$=!Ss7baac(KA*%DM*zi?Tn#An|l4b2%+ zX?O4U%)X!}zpShLithu{l&4M-1`e@ZQ}{QX**=lgY=P>k|7ZCZ7sVpVO|#I6`mFE_C*Hok9c zUQqfqOX6#a{>z(1tE;xnnbmRZWcSBU2aP_hel3=@ao)=8jq8F>7IdtM+Qk>I-B9=K z(yC(@UTsg|n-aFtd*iZgI?2XYCF0l~s-(0m-N5X5;;zHpl^3TQk2KqKW&Xsv%PgxL-@EPN4_UwBROR-mJ01vV-brdb^y#6OLB)%J9kUib zyk_SyhvQ9-!qNqTXR7y#ond2F*Pd#@UTc;0C11!mud-;vJDCTEUd>jhxYu74(f{8= z-EQL|;i*@>E@WR&*x_1z`$6L3xfXxc1^rxSw)yjnXEuj!^oG7Vb8cQyjoihHYn2Q; z`}H?=^XRUd_Fvd+<0|Y~JUxZngJ<<_q)AKX$eJRkqJ`8~7T z=O&)jVway5{I}|~W88eZ55`4}i|vih`!0UA(=tL$ddvg;;&%1`Pt?Fj^9{XU9?eZ^2C6- zSq;;3I_J!IzC`rd%6F>Fr{eZLP)wR9aHU}G#kSXMCsLRvT&wg=USU76@{D}KnqN{I zLSN_IVNl$@e6`{8BmwQV&u{WXyYr{sxXHyiA?}*V#9!PmjcRX8N1bQ7C=U`1iiDxp|_K-|XoO5q@mmCOUm@<9x=~UrtUAf1v-XbN2pDE|#N8ulyQcxNV%f zc1DEE%G9zY?At@9?+v_AaxZQ1i$;yl{bzdI554a`vi-t#fr-W4PkpcY$US!btydj= zZ_X;qr#}im@a=oER{qY7Pn*nBTt7ADiHdXXy(DX_{P@!4$4bV*yLRuWs@%D&TJ*o|z9*-xd>B;Y8Es%UUqix->z~l(oCWDT>ZJ(|R{GkL=D!sc zxVTxp*6v~BwbI4YS2zBC7|rJP<%fn;{JL!)gll%*Dsc2??{r>jv6wyj$ZUfdz1Isl zFDWL-Z2Q#n*!Eh3OsU1qBTuuMA9L5T&Y9D3B4?d@m___cJr0@cmsM|Qh8*IQi8#RL zG%fPd7qhD;ezfta&z9hQ@Z;3f)7RHTeth_9;?=9l?jhmz#tusF@4Bl=DtPnq`1tYh z_*@N9iu`ja^smT*qz4W=Ca>9|b-DVR$I>E|Nt%wqYR!cQW;xGTyg=EqrLsG8-mIM) zRMwP~=UwY-Ix*?$%goSso>xEKwp+fdl<%a|Q|ZjCa4({NCuU2*O)(XIVRfiaO1y*g^4mx zm+#U4a{jjNxtq~KJ6=V){ZaV$PW_U`sg0BUjoOcH6)fj_SjAERyUTNd?-3;mAUl6&1{pFttb}z%>Q*-mbz;5 z-2?aEMK;gO^Ar>{hOTJE24;N{NE&(6=V%zw7$)TBwL?o+qVVZvQQ9*=GUR_Yo{4+jRcH1RLU*%nUI;uR{`1S88P20P=A7+0LyTPU<*md`x zVO!z1p35a|D|i2T=CG&Z_vTW)YUO(YGFx|*T+^|L+ocd#d;fOV(>WFAFHaHrH~H`P z&o6y;_ZbycZx%Y^^z9Fa<-~po?-HBqS2OOPpIaX4sCDvJL%;5~kI4a6H5PaFE;fIe zyf#k$=GvFZx>IjW`TOI%q*d&k-jZ{Qu_n)+ue0N|D7X;%!2W%^PDKCz3({xZxABT>g|2koU*0o$b>>$t-}UX*5M5}tbiLoQkX3tA zAAG&7Z|Ca&eBo8&_KjDsTs?WNZQdc9N4k7+@9)?)PVe1&k3oLDPF+k!V|>DSjruoY z`Fk&}OfH`d$}91CI|Og+}c-`COG%hA_gUV5m--)~(@Q?}jYMz%S9)-?@Yt?wRG@+N4f zpXyxd7q#Vzr^1W-^7EpaCuhE8+EZ( zxA@;Vn->}V&AODE7$&<+CNSx}i<-Z3#npRj z_H4;iyXeZ!{nwYB`~8K3htkz2PXAlV_V)F`uM2+P-TmSC?I72=b7D5E4$WG-J9fJH zMuvOmXRoMQ^*oPXnm1fl!uHn%-_}RVVw~@NPP{CV#u;^PZRvLVCCtsXE;sIOOP#)K zsX|BBom~0SI~zWV9g6Y$*u9$h=$;!w^F#atBX&$_U)*Lcdc=OVr{kwso!z(X8QUkT z`z4hB-dy~=;kMuWjW@2HITE}xzE zZP})P7c;Zw3(8HNB_%v>;+f>f87#Bim)%@0w*2Pu1qmkvcH~F);&xrX8RHHPvZyLsZb{$ZWC+BC@Mt4HZJ5gkp<#>H6; z2HQEzCa#_~U0Hu$PvLDV{eNbPuXQFW>;KdJt>jq5^6AmjKL$S6G~e75|97%}f4_TA zc9Q>m6aLJK9X;YAHy5*SyziE>zy9p4{KfOS4R06BXAZlSZ)Pg~ZyIks(?i|4Jrgsu zxzlR=CWZ9w+&xA1MT+#cl~#LligUhPn^#jh@741+3Sm_no3HG1nGtttQVH+JFK3SW zw5NJR+a>eQWUdl8bdBQ#!#fVAJx9HQ+dc0m@t)}Nes%EaGna`LSwTflJ7nK5gl#x+ zbiGx#?1`>(-_AYI5U6-o^fYl|QQv`j5yR6Hx6OXa5y}#J^MmPP&-*$e$=XiZ{u1sI z&(;_0+fpQ{_c7|C>%1#$#hc2d;as zI@{?Nslj#Xu4dRf9nO0{+7;?F{wq(_ajI=LK7BdtmgSkt##?4zF|}@aFnQ^g%QtIk zH;XM=v$*TS*R%SL;wP`LoVdgBntjsk*~yvL8}Ci}>U4DOEa#)^gjioJ7V+|pI(e$F zwdYItx90iFUh%AwO!++Xe2VggT$>$d!uGc37s>fu%9Af&A(%heYkThPHih#_Ps(p9 zzRptYU&+`xeG8w&rG^76vc^B)~MwtPa4`2}B$q|lvQx@&mwPM9C37J`*rsaw6jB76QPyP9VRf_w5#!c(lnOXCK{yvL6r<5~S zHDUSBb?;bMo7oQ5vV<3AzLH6@sJ~k$X*g&9uIvq)>!#~Z+^1?{)AT#-<(EpilO7ig zUP)}Yu28~SeWfwr&^l*{GL2(VhvGJ$WvV{AWWJ+~uL)O9&fQf)lNS}=-C0@b^`qO@ z?Su!<=0ip?#&a$+H5)ul6r92TEwG>GZD7bJ*TRqD@e7V$U3@Y9e~!jR_iYPpeRx%b zznx&KeJFlK><7<=he5U749Ch_uBFYATYGkv(W!@T)px&aIa%(LY^Zd|n>@Rw{6-{qv5Rur77RbkzskpC3Qv zR&cC%tl^jzGwbW+D;K^kXFg`}dh62*Y~HK7Hy%Ck^Lt5;(c1jxSN*@gYravHbINwL z^Hsjtw&K`ABYWSF$F>!hJwlYtiLnmEaJbjw>*|Iqe zY-{*jcKbecmOizP%|b(6yJN54jP2JsC)`;rZsYzzQoJNn&VN@c?^+4}1*dzZA5_*d z+nBo?&r=S_f6c+_*UT8;9kiBxeFFQLb3Qlycj*Pi9d~#uFtdkunnr;hWB%2kS}qxT z%b1H_+alt$FBhzlQ>ZcJowcB2b)%fR)GpZ_1&kFns{^XvZv9cWW6sOTuaA6s9mI70 zLdZ>?9ozFVL(QVtFKbM&-^_6D?EIC#UVh1ZP&CV~H6LjcwaE1)QZv4(EET*-Dzd4`%=-(R0Y zvTr-$4@+1E7#CPG)R=hA*(_+L$9{+V`T6^8+oiLvzF6b8B%tGnk)_f3=PiuO7m8~1 z8a$A3(|Ef(#%oEaF(_2lZZO;MXByWY=kVUK#3vfVT9u3PPvGHG_>gJL&Uv)ymipWpc; zPjILAuZ&)`^uKFFa-1{PZem-KD!xa`pdn|%4Dsi?N)z4+GG^Nr&8jTCk#}lE1kbfg zT2+Vk|0w=lsC<*t_V1;gmp*W;OrMe;Dr%_QXK7=Wd+h6ilp`EF+RYxjZRWOF=aQKH z%_Vr>={no{taeQ2_6J=2pjzNCxzHxD{BCwr?DMr3-Zmdvwavx-?F)HNCWmd!m$crh z_KD7X`7}o`za;+9)?3|Ig!8s4iHlUEt7kN^@SI9}TOMU?YJH00E; zjoq7f^%QURbsl*`rt8{ztAx0#zl(LPKGIoN$H`e&*J<+lTy;0xD6Ox^uybD5aSly!dI>ks|hF+XR?t}@OkA0zgxQ~GVdf4-o4Vy(h#*+)JbqB(yY z`}5@w+mX<)L*6Vq3MF~PYLm99GT%EUy(QC}tN%}JQC4|A`_;KeH&5(p`B;${3)za! z%~;Hy@%l>v8i9%_)C<42$<5+kyla)&qgd%buazb? zd$}%)I9~GQ)HOBvMGvoPceTfKEWTXYrcldu^h{b!p3;=5Yo&S;@0u{Zez2O)bP})8 z%{E?XfpxcCZ=}aZ%s1K79mVq2@z$o7-OtX>wEfR)y6d#ImLSKk4wnxRPCg|$IVC<$ zM#o#&XIbQ<-^|WqIX%Jn28Z1KC@yxh za_;Y&rg??V{aM_$EjjYZ>RQKNX*wmPUzt8M)vjw+xO?GhT+8ZXkzBER@6Wm*DtB1o z#F=Z%M$xA=q)R7c@;`i@<2xbKU-Ed(1kXgp6DGnkTYfl}H2c)?gnnjM6bW~;_t3Oi z_TP0zY)HTU{?(ry)h?emhtS3QyZreOH^xVp9)AntL(wtWddbQ@N zDBlSRdHE{xK|9}SULJvuNvCUrY?ds1Xe1Q8tGA!aUtmL0s844Ri(b0l{C#}y z5AD5Q$8Dp3!qiZ;(?xOlI}Z`_DYIrwnzeqjsiA69Sf9d{BF)*8R>fVr#x#F*kgv~6 z_KhFrdHmSSv9-|HyE)8Hc*`gM-xp40*6uquQ|*V9^!jw+Ek)5$GfsNHUe&3&^uvuD zxqr%&Uk7);?$7f%>3>?_?yIlQn+~>pFm9C9ZSu4aPCCJ~`r(6T377m`&UqMc9-O>* zX@YK(`qfwx{w&%XUHk@d&xHC zp`cM*MZ)^HBL&hEANH_JF5%f8m_L2~+WnKIx@SndTe5lO&Q+ZXHM{zrrd`aLuX%#e z=;*hdsRGdt{T07sF$QgQg zycV9_{L#arPweC&r6)3u2RgXQ1hg#m;|pBJwiY)Rbp_j&%`y*|z63;6D3$bL`vD|w~F z*(PmSEqLcbQN5EUpUlr?JFP$Fq{d#*ZcpCv@Ca96aQ(amd+n499!IZIZNLJN@@eDtf#4{~7^~UrHr~7K&zSdU|SRiZ{=SF6Isjzc2Z4m0^OsXG+TCkHYQK z&9g3jzMegQY7F!5w38{D)6QR;mbk`1f0_DM zGU{^k^e1h9+IXh-JP=s8D<+9|-||U@ZtA^nEI)q8mdm*y7W^j9*YIeaern6E8A{iD zqkRHxd(L_<=+^vWy_@9*_giIy{p-(1pSbyTFKCoAe5bkIvJ+~a=kHE*e8tOS^!NSs z?EhLn`B%v6i}kNxc~Q*6f2Up-|k$z zw#YK?!gWpmxb=URKQXhg3s#$LnLTZrPtxj(Mx5n0e-{;9eWBvz`hoRuX#2y8so%=% zkKeprtaAO+kz2neMzisr|MB|kEqB%L2i6KEee9U1yfsy5niA8oQz}YF3nt#}b^6$= z^w+4fZQC?YlRG+UmY+&nujKFNe5jQ>vt=qHqj0Jaue1BX)Z=QtR)w1bg2I=?t6jXY z&WLm8>S{lcShb4{XD(c{OFX!MK~aC*74@URLQ-na9~yN^x85@9oPR4=?c-z({{V$W zuRghKZT*!hw6=p|hW6wPfxlX(_RODoQDaZ2!oI*Y@oE>(?a|dftujIMB>S$wh$%0p zKARyZIDML!_{52K=Dt1kc;}|VnMb@#g6l3XU4C5ppO@Bpk#8)~oYsH8pFY8}-~x|D zx&iYt+q%8q-cOQ0u=AwR&6Gp$7p$AG!aQCvFd&ZayR5{*wG)2qy(=no)7kC7?~C4S z6-Ra~3;DhLv&h7nrQr@PsY|yx9b)-wQz5WztJR|8%Vs>|>Qro!;}dF^b7Cy>IL@2G zo~5l~S05}Y#Qf+}t-;@#mPxM{ay-|*!@`)nI;JU7QOVDtR4ywpR`FwivvmG0r=+W= zM6<8y#cyN__gJuB`0tTTaWkyqrah9MFh%6S{6%YZjPLj@|M$7-?c+)B4=$9NxhCxp zOYYUf`>uuBPFb4NRN1_$eQ(J2a|cho%gL{vSSxZ~`;_Aofk&@|UOLV3E#*DD*zB4? z%Ew?aj=!Jnrlq{s<&F6}<%)rglFs{ko-*z+hXu}j<#?r(!=+PRKSTp}$!pF{33*xfWU0`^r5;NztvGQhvt+mU+KlpynM^5RAqUoX zUSjrmX|mXh|IDR#bWOKW?yVprDv-TFZ7>*m0vB~ODaBSQUpPlPwHn7HUCsI-Iy*5^vi&6nY;`t|F# z)vDSk6V=QZm)P742m70$eFneOs~2Tox_s>OHTmU3&0k zoA5zhtveD0b30^;w_N_iopVrE;Lc+9J%8y6lfzm4d77j|}Fxq)n3S z@owM0*^A8*H8WT4e3-0gRN%k$ejal`#_ZG;`J$iGbqvI|>|oiGxPG=m%DwGgKREs? ze)Lt5%xP^+*`WE|A?M^JmpMFcH*f6zfg7rFFX#b*pyGRB2qB;VN_^Z4!&wms~UbYs%AA8h`$(IC*&S zp-+F9tB*de{!$b^=jD})x4mC>P6%nZ(*5+V?+w!{hjn|V9#K6wx%0ukqmGsG1)n}Y zY`!`3h+gSii7CA@oEFP}o!49&IZcP@goL}Nz|){;!`p$roqa2Je`9(lbY`2q=1LpW z(gL3ZiTUzk62i~VByGH@GtJoOZ>*4Wo%!V!B_|6H?O; zyKil&rrR!Gd-`QM$ zq~pB)Qf<9u*-4tmJ$0VWyK3>?Le_ibq*aA+m0GgioMFdeXwc2&;?5o$>A3C(Y z_&rN&Yw@u8v-?)*uAa9wEk}Z0t?62NgZbP})a=MA}Typ{`j@r+A(8g=TaH~%9Q6deTqR{kdVEO>cz_^XPz!C`=m1Y4SV!`R-R z6QAr^wnO&!)s+UCKjKO^JgqC8e#A@c_3@B*L0mUPa~l3;H}KYI9@klJFR(M&EqEW_ z)Fxk5)eZi<9TU?2Hhz%3$5!a^RQk2SllxCreeZhX=jzjSRK2{&z`!4?zIPl7 zx*=k?R9$_JZ1lUy@AP6?O)j0 zkj&olU)c+K*W{Q8M!uBTm+Fvl-uL1k*}uwSZx1?bv)Q;|_K}4ex;qU|71Uj+R1Szl7REL<`Em1=j>lAabV;N6gupWCq1#yKET^Mr=@(W>g>kL*(>KIQnl z?{q{~Y{OAM*@TVyexhe|Idp#S2-vt-!$&&d=C&EHE~z>^d3fNh(i^EWPuXsBzx_Ms zpM2qa#``H>|Mow(W3}~b zKRBmcXvh6`5_|Y}t-P9Y`pqA{*(}RViZ(?4KWuv0$-Gp^fHf-5LN=q)i8ZR^PtWvE z$shNv3lhmVd8l#PS@S1_9kq|8S*FBJKBRmjj;lXFe*O*yp9A}s=!9xFPOEi^m&y3a z-m=Ky^nLD=x1UzThij$U1)SdGy1><8$7}ONu9AQ5+Iq8=y!yhl=0W#ctshDqI{NDR zXHOsIvb)mg`7UG%lg#D+4|X0Yn)F+UJ;UtQo&TmhtQpH5Fq{pJdd~St)$8dbRc{}` zS<dwe7L_l+e|nFY<|1Q|L!rz=V1Sg(-KMl@dy_{@W~yXA_(DDy_9mR$p7W zJXc4zHsqf2rRt+yJFM*1n@uy0@cCY4^oZNk@cqd@XJ0!o1_-mL!s_C;evW)|hELij8N-p1=H#7I#w}iMhhMGTf7;?PNu`mB>J?ZG{GmH}c zZz5DPmkC>^spM{TR^gq0BU3f=>x3nu?JeJOye}m^7Vvz{Y{&e&V|VWDCH_CxO_~(D z`+Za>)|x~;AMO-y96)uzWh(Z(`2C9}?5 zn-QqBjzRY3OI<&cOOsQu0Qt*8LQ>&n+h zW7aGPKJV%H+_~uB^f{NB;5S_iY8n7-xqzQY}@a8vVDJZQC7Hlao@WHHgTPKcds`cT)5bJ z#=%-I!ySAwcP(87%{|r|OgEOjTR7`Lr2Ves<^#F)axCW#F1F?q*r8T%>|cg8^Nb5e zb{hEix!)E)pSh*>*x6>cb9w8Y%nW_I#Z)W3tm?SO)4FZWPowzA^{ zTIx>A%LS$??=;p~IY)slc&A!{MAoLG+tm1*cif8l^u|f`+LJlYmz<1TRZ|eV-+IFr z>C=_jdt!sGTmD@8Y)Kn0)4yl`*n+Mvjf-ORjIAtlo7s59a3x22@8KnRt^V~}V)b;E zNaRlM&d4aPS?;u;=M>+R!;Lv^ul^{kJbh$|9@p!qZ=Wxj9%^}_z*=a+k5#Gsx1S0e z&Mt0P-pupf?!#h{w=lY^Ky?iDpW7eonX7!*(NPzJ?EV5>tBCX;5nxk{!A<(R=z53SKm2i z`xpK$>iS#Xted~h`S(2AZ^?^lXU|<)Yu5Mo#XU^#dRO?YEw9>ymP`J@DrfP0^R9De0_@=H%o!xU71)sl~%IyyH;{?@G>&%C**y9-iyb z>T_!Ex#IIbe(m_`9`Nt+Yqx znv}ft*LpGe$Nw8EuZh2WxivDCRDl9xp5i$`mIk_*tp~lQ0%__x(^_ZSaVAU@6PVsN)Puse+W=Jk%^*q^CAR=KsEuE_;_Jv2n znTI0so|NWVg#rd=i*IP{s zpCvr+qHedckH2`)rX_;^7!woQv;}4E*aQVT&#Uw7biXb){n>nHmvwdD^)CN0E|xN2 zJrZ`4r{k-_`&G+kGbOR#;_UD=Im-Y0iy`X~K5J=#*Dl}JO;~6xAQ9Clz!C^JCaTxhi+{TRE_=tP1AEKemTuqUo?4bx=}>p%!o513%Yuu)^2r;%itp%? zXniC*SCIFZ?A*CMjT@vE&YCH^#KSA7rA0)gkW1p`n#QS&8|^;cWL(3xHJ&HzV7uPR z2hNKe_kUdB$@=*C7PbR+C1wm^)2H9QF=KXkxI$mz(q)^Hj$GkfthvS1Z>~Yp7maks zOr=Hc?`O<6h-&qd5Ow*{R{gZxpNre|yY!Ktztw*QG8(j(Rb?#HH21&Qxb+{?!He@P zlA=!hGTFwq?_b&9mWd6!E-bhp@MDpm#9v*1r||T2qd$jsYwVq*q%>)lrp=++8eyih zO!4cjgnm>_-4oQjbHWvoAG;FtKRlhjoN4N-H%!MD|Gsd*etW>bH=ds9qQ4tGHzvC= z1s}*>eVB3mRIjI}rfT~#uAj!ozQ=3R=IW=j zsw3jI5@H5PkyqOEa=p`6R?v!4@I zFFO4-_~qhxYuGBUsD(^fdwlI&-xZ>VO%pymIQWF?vg=2i1ue!5(Ree{pH%ax8OjXRDl6c*~Pbo0zqrPg0X1ry9 z*Zq553$k-m?2m4$2)I_k9r<{r?IC%~fZx09vI1`Ix8KQn`qRPPGtZ`84V+bTpE1(( z@6`qCcFwGkKK<#C^`^6_p+VM7fqKl@o6eN8m|xX!lr!Pk*Ou?Y?C2u%F*sWP+?Fo& zt5^N!H7I;|I>&O!r(@C|9%f9IKHOiFJi|9S`6cz&&9=?6``*gQC(Adk>wW)d4d3(HSuEQGUz#QSbdIQJs^7pX!Y}Jp_r*=Ot@K)E zL^|ife;uqki)SZqjx|3nD*IFTm+?+ZyV4_PH`>VVw!CvkV(X=n8mmo?-t%5enrySs zPDyu$dioQ#Cu$o$7u=0kzqBS-xvlhjW9fe8ngg#Fe7~{r$*;423+|fwU5|BsbM^GQ z2(!+Eib*?u3E#fz*3O}@Em&@1;gcJ$gP z$;W>x=C{d}^&V%1rQ!OYj)!+`C~}GoCZ$h!xTm7iX z(o2rAns)^Fo_qOiwOj473l-P94yIpxv`Tu((=~j*HO^&TeWKk^`*oG)ll`(q&0BaR zJ@x)oeR`6A?v=^@14<@oc>;fni<`I1dHM3CoJMV`#~vl881cE13m+705iGoGYkMx! zCvU>Ez8#KHCRvpWXIZSjHb>Ja?U&gO$EbPz(o0-F?zZ_K<@m3cDdL#^(PO`V^X5%B z{@?$Og6{I_r0^S-zL|L;)5`hy=Q2NinlfW9^IR4?Rim7q)eIKv@){XFXkKvI{buvl zs}=wDKDe}`_z~;p!qhJfIa^;cCQf{QMSr%9Li*ac&6i#=UYr^-=|7KbR#9V2(LvTE zt8gtRJ%QNyYM&+*WEQW`Fjy?_Ew=92ClkRxH}=(TgD~K(?z_qc*JM= zL`&}B*uG@@teso)yIAtSis}4fs5EYSZt`uy_ly(g*YRs~%t*1A-=$ZurnP(1;d?zw zhFuKeoRds7yeoGZdRvy-l{V~9QL~OX{WRP)Oin#GdM^Elxj5^QhqvAr z@A~$eW9z?e)oIt-4^G^8KGL1-6w|f%b#HXfcl4iksQ;n$!}CjK-`u#r#|x^q8q3a& zi;X$AvTA$8=Q7UwPfpy}F!jZ|sSDEBTq?yS{ML(oNnmFyWY%;)cCsvd;baBQf7e%r zS0%-6-C+{7ZtX@H-OCSl1+m`A=v$s_{=+~{Qa@EBZJ&<+i=D1$UD==f$M+or3E^n-5AY z-J|R!mA_J@**>X%@js5EVpFqDPt$d)XStSl{Ey(?;-X)oA`|32j%W&bc127QJjB7p z$CuRNP|&I%{wG^Ew=_{SGSYL>hxzuiO}no+?PKoHUvcMdNwZytzLs`i?Zz2SzmvEQ z?hal)DKz}Lf?>$IJZ?i3?(WP@`pY=*?-bsu1ymcojQH8 zP;6>oV5+J>)7|xZywd*f^yDks`-f}h@8@bddS_h=GZT)l);`g+`t{QU>nW>u?2>zQ zk74$;2?0%PD_*<5T)ceRbbr?G^Mww&F9@1$GnXTD*KscG=zOnb-PwDXTZv)r;;hV*4R; zpzej{7qo?O_(%U|g^&eu|1y_X%-pl_`&>zt-;R6Z*ZJ zwR%@`(|?;g$&Y4LPN?3vx`4MhHs@N*hTM-qn_hg1viy;7F=^BD)GIs94=haE8!0c( z^!(f5S?gOS`)DZ4ON_MZ+q7ot+t|gIJ^np?xb9<#z4GL*XV1=^b5d~W@@|WnK^Fg8 z+KfJ!`tE+n@{+H5n&jDAz8)tFE*LR-l;me^jB4ApV%oxlb5~wISt2j?q#<(h@=3vU z5e-+BHm?&q^jE>6spFgYg!oFP^=5xg1@9NVqr%*oVbt)gHZE86h@Rk@v>A31t&cO(?6sZzr(9 z{Jw(F7X|gknn^1AcLgrp7na+>zE~u|BWuFMB*x$2Z|7*vi*t(8o40QN*RR(PJkMU7 zaet-$gvI>l=Kg;CHR`LpY3$uCGm_WV{8ExR=-83GRZ?x*BHm(#k8uvA(|VR0op#D8 z{C#fC7rQlQJY@Uh&$vvFxVIuOe*Nc??`LDIn{rP~H0!^|`6KA-hWhL0Odo7c|Nidq zllM=i9d38Lk~nvxQdd^$;-(#;OZP?Pt3Q~hU=8?Q)Y-#%h?_I&LE@ygE&>fW!5U2Fcn zp~_{Wz||%ZZLy%Woi}g({q*_d_w`p-|I0Y=l>M1EOVLh;N%PP0B)Yg8JI$!bN!?|! z&FEmd_woJ(ttnI_X99@oD`(r+l8G!uj5|;)m<)8B^cMvYPiFa=X`+CL<32LcH zv$p&bczAc}-N~YJ9<2T_)hIG3eyP5>ii-?arqHW$JF{hf_4p4wmNl88nZsl&?PBei z!E^GEoCJq&fWM%MNvG@Vr?-4nbIu;>>2Y((xW{lYi&Mpf^HWEIM)_26`>vB;!z$f= zvwv_lSXeoE)7mw6*|*pwH-6Jo5HY@dVqHtwzYL4TEs?bbLE6#eF^ac=m&jb$j}B4VDJvR?ke{QFn^vS3=SagI`}Jf0_M-bJgFhumAr3 zet02*McuSq;I&0?q>GQT^DU#PotBo(3c;0@-ddji(>*q)BreogoSY${)9gRnqe9?! zbbGvx>5~^}hxz}S3#@#SwKc}CFJyJ7*48Seg?oQ4|0gW)*1E&7@NCYfZ|;!~HnVnne0|%W5S*21{vu~rc=nge3XSKkWj%1O zW<2I|F6U1KD~?k+hs4VyZY}@sKVRzZns@` zvs_)eoV(=ULf1cAJ}r!z^u+JAup*zIF3-8PFl+aN9{vYQ`5Q{@Upw7pKCmw|`$Uhu z{TZg}xOmsJzdsfCrPUb5rX+6d{_;MY(KdDKe&*$eI5%+lMZ8@;)0L^Ph*Nu?pMpW; zTjymz+&g*0s*@5lZku0sKhfj!b+W7DYTLhk?bh8_%_Sq>rtWBy)Z3QFR+0bDY15lm z&vZV#yYn;U=+(0;N*$XvmNrhk#>#oWmi^qn0;a44VVR1cTl?2Vy`SB4?YE@#wQ9?s z{M+vJpG?_XTy$)Caf?vrgvolGd^}v7oLnx~etTM^cO>!~Z@%X*v@}KiP&U(ptnkbY zRi|P?{3RpoviU5Z{K$?>xXHcwMB?%I!>>FyuAVn#vHQV^=l3_>sA~z^!!lXgTRU!1 z{nQ1ozq*+I;ht5r)uVVJQ{U9J8EYE!-bQ?M515j2u$9~4&+pT2+HvdD+{<@IF8R0i zSjN%){A)c`R>x}3Q*bc(IXiFLKOL8|HbFi&i(*eiI{f;6|H(h?rLRt>x@rHD)!90` zIqc8kN3E()&L8Fes?I0J@{qlE(Oq>P)#dN%AGW@)TOSawWxoAUwc|y;=#TRwqdsz< zpSyX-^14}D6xEEK4nKXlL9~9UQ|V5wsE?OIorN#b;ltr}zQ0cM z)UN;i#O?8K>8%Js*O{B#9RCEa+82?!<GQwuc%Zc;W2&2U9kWbn(u4bs(*L#`Y`fn#S$q184G-N6{-nhW7UJ_0LT${)R1DGieRuY=y?_c}JY5C6=Es z@|(|Q{;9l+wO>gXBp`1bt1h3<~)60d(+?!I?p($QO6wZrxV+NW4pahTV5Y}r;nIqdS4HL1^^Y!FV3 z6!^oE@soea+idfnAM)Kc-`}ofoS!*$#UtCCZ~MRdb9veAVZZft zg?D^jF?dBYO;{;!KkJ@L&#{eN|6d4C*&VVfc6Zr9!B2W~1Rp!Bc+B!3_BBgFir={d ze`<_!Gd1;y)K#XdT1ss8 zHm4;9BJ zhhA#1*}v?Skh*&L!Fu_c?ua#)S9WzZxD`*n<0Jp`={|Mk0~`XCjQf@^j9s8Ed7pWi z-Yene`@2_M&L}CcYJIO)HNQjBI<}svC$c4e_rnL-(j5;9jlVoUc%b#iR-w<=YjXCP zO{#HNGuOmhpWXkS%X`PecNRX{c9uQ;_*sR+4oSjwx<@x&FFV8P{vexEVGrNpoWc!7 z+MM|jJF^!EhV!l4%D4C1IiUjKY0p@fC>La&maWb`#oh9I&Cy?#3Aep}Y<xmP6IoLykik#N{R)7@*;!fN3~rm3k97QR!+VSOCB!e{lxP0kbSC;Yvj zYn^s+6Tiayx{Z4?ZrUVoSyTM{K--y;#K3}#jR!<@xxEuTw4I8bLS*)-sc7?Z?PcvW zy5FSn`D=V=<86_^I)35Q<%gn|TS?u!)DR;seMsV7RJcRy_G=5<8j3fiIxl(DreO7Y zpHk#8;zaR3b99tQ7D0=0u-Us=Yx&sc|mj_pHzulg&P5Pcy%O;OCEp0a6um9Y3I6B^; z=~#)%9@i4blQ&B)f4RQ@zg$br@=enBesOr0n(T2EJFlg9Ui|!}_*>igS>6TT6~+dI}ZeEi$UtbVfi$+5}mj(<)XSwCEx z8<5v#{7`q-fk$1l+}-;cRvc!1+q&JZ>9Owe!w=Vbvt{kcejoQ>zx(x#AEvRT?6TO_ z^HA5~yY!*xww>|$weQqRtG|9{IBHZK%4>tzcT1L^_mv;CKC)|Av7zVp zoc6!!SH14I-{pM(Gz#KM< zCp8Z>KZj~rDEkCyUOXN(r;Xvh^P-6!clR`HI?;XSfLuxEH*e(0_ zcJ2S<#rbjS@_q6WYnCcWtqZ;5<-!~$BcvYu@Icg2N2VQ*JdeG-9`upvI@fj~eTUZN zTf!^2EFODu?Y|zhF627b_D5c>zV|NqP2MhWaNe)#@~sk@i*1+ieAuooS>ffqQ#IB( z>!@z0)rq3r9`Ti_mWC&T|Gziw5&2~P`)ZZTkE%&s=XtLdWv`FQb4mB#^jWppaE^Pt^?SqQ4gBgF6J1|Gr3eS`o8u|F#fQ0r59%++``{4>z;!Zq$CCqvrhO_R|NKj%`0#@V6|c;G{9@ z?-}AUE32aQ*=?^pE;zYTFU(T(P0T;3ndN`iGHqb?D`UNW-$^xi%L%us!B5vuShKH- zEv6t}ockT`w7nLyWy(r2`68@7yA~a}xO7Lt%)L#ipIDb{SieY0{7m`A1iKrbZ@o?t z%X)Hm!>gMi%CFyEi}<{Vy|B%1Po!8QKR694L{FaJzhwC=C^(NC!< z&ocv-B?>baWC%0+PhB1M{MjVot3^}2^tSKnY-Ff+TCB_0uake6Go;EVJACo+mnG`6 zXK%T+?3v}4)F=F_R{O`XE!DCqc46G>Y|QRHb9IoT#O08pr9pb_?;pzge78T%bpOyy z<-h;Z1&+pEp7kns29E(37pL4~-?L|Zy;Nf&PbTgRE{ujWRH z>IL05m=F4AUz>ENzAU9t`9jg-|C^bUb^mLAe9*nJUNieW(`r{e1JR!oU%P&L?Vk6u;6Q`#mGzp}-*~Nd zUAN|P#;byf+OhgYCj^RanhUGfdHhW(yuU+l-M)E$ih}R&d%ZF~_|mQKYp*@{E3?$- zcu9DBZ&X;8$yAAJb=MQGUYQWT|L*SZQLnC-lpb>r>;A)W*vYl-Y1PEN)syGvy}SKg z_to_h_2X)*UGt2tek#7+{pR-cKOgq~`+I+3ov--xHCv;eLBl{dH~8(M%mrx~*IVD_@(>_4+*b6T7JgoAg4>==S~B^_u0S z9A9(s&OLeTibPw--2N5CxA#2#a`N=4Q`26qUlBJ+%J0eEeM%atB3C9{yuegddvSG% zf4S-i!qKCzC;q`7_4{73KWr5>^?|2@f++3?w;Udd?wt9P<*)A_bYGS~7l)xKc5 zaNS}3#KkAgKYV|h_@TLR*_ObS{%ZthpO7(RTa_O4VO134a)I;{$yP;=Lpe5x>b32< zz0a>X$MG(2%30=<`4_hD6RI-^+ABKMsy)QN;{KJtK`ai*b5+kZ>pimJaH;(@vHimL zzw*8$zEIdGy|%$}Ng(mV9wf z;x$vp*KMC8#2e}k2SzV^fB)D4{$s1MyRU}nZ)gl<|21L0fb4p5MVwmNT6Wv!Hur&5i;7z0_XH-gZLB&d`gi{Ib%OIGUS0pT zknLu}FVhKE%qOv5_-?=TL-Pct^viZ!_gRvwa3z9@GEREfZ>3suF(Aw|k%YOs7N1v#I{6*|no~*Q;*WDXd!Qd@a!T z?%%8*2LskyEaBQ6VDDn<-MDa7!ykbcB{F|H{gWk^2G2dT^k4PUkI70*W%r+MP5b4r z?+@FF)KxM@`&Q{?msowerRux!)rNQNNvmVpSa+T=4&S5{GOgQU*QBq;_GJN6%Tkvm zZu~1FB=Pt8Vu#}TUCY}~Wr&+Oe0n5hlKrGLb=SWO9BbEpQ!v>SuC2u)bibiu%gGjR zZnlJs^^O^R7pA5!j9jd(;}ITnQEG|Cua?yb4wIK&E4zI?YJzS?*o)4mx_@4nNw4-= ztzy6ViqtOdr_F4}OTQjE!MCg943}c!%ymbK#Ux+ubxUsZX`h%|zHxbEvVz!mA?xK^ zPfy`EHKYCTLPv(mwmP8?@ABK$N_zjkG*ywcvbFBDs(0dw zMeeb0WWy|2xuyQ;nH~K3c-r2>oQd{Utv%jX#e}k6?Xry|FMNkXUwXFDyL1~URiYOzJJ*EkU31J zrKg@c7Pt4qWcCM>AK$XE{5fBJwS1Ti>ti;psm$!Whu$62c#~K2?WFiSyU5z*k8EyC zi4S1-pI&6NUAMOC^yI7Gwf&l(ntG-3njDFmyYsx=&qs6BSLcVvFudP>>d1AO{EW{} z&Q$w{-Cz4dG$&)Kr)B;8+M;8B)mOg{{lgR%-%KdT3_GyLHlJ(?|ysjUbkau{(avo`eNJflolRtpRE6OuFcQnSKAlA`@GBQ)9c>e z-u!_5=kI6USvbQvS^4MF+k2~W7u3z~e!S0r{`M8|I`5Xee)M2XQAKFw&#YJCU6Y$< zy2w9T#?0+B-+EV<(x)G}v0I-d9bK7aAj~6UJ1wSh|M{eIH#@Jf)Tw#N&MNgjpFPFu z(>cptx2^G&4$O6IAGdyelKJItyI9?V4RHmMx<{|eTdTcc6DsrgxtL9Fapc}#6RIz4 zPZV`Mv2JI_8!3)AkzR4`_w7$VWas{U+BLDhQEr#gC$nF6ePxb`iTihHya^YG4RxO9 ze1H0t56!KASz2w29B=q5EL_+4N3u44vD5<2JLQ5mYcGVZRgJ#zT`<^Gf0xD^B@X@d zD*6lG7f&&eoWYVO6fT=E&wT&c$)bOL`o@L5OS@Se`C;q9$;&3JfAn5B`C}lP{8{F>Ash7K8>pXSog?nF0-I~21x{$MyzxMwWZhMpIMj^Ky zvTdDBovM$SZb^4gnIo#V;Qi?vKINK+*Yj?~HwQlAG ztGTY%*`i)Ymc*WN&tA;(`e(*OyLUUTRh2hXCmQ|~sFj~|@O-hXVm}*canFD8d;5|P&8@Ochu-Xn%i*%VvW?X$r7??p zBI_z$o5WRV>^c`tWu-KRg~cywvHi}QkR2=DZlv~B#`+uctL=+_{|mUZM0Tdi@r-8YtLgsrRwLAfbJ8{w)7%Ah)~|vcEGOAXSQHq4y&c%k?lt+##RmtYSKRNj zVhmWegqN51^~!jgShj;NKdFl^JFW2H=%MKzs{i7)94&ZTDO_>;--HjFO;zr(T|MkR z>HUNE(iS;AOLCP@$xI4sTYA^+5}(HY%MG~;3O)pUQvUPT{M#<2%=N-Y`OfY;`rL#| zw(@;=Z`4-*jq$v3?7b7#tUrE#Kfheh?1h|fRJ3Fcg*9&c+qt23{U1l>vZg!x{+^6| z@mq84LdNY(vz}~UzF-y?tedhdSm_~&Kj>N)+}pfxPNnV z{`UL1m#v2D3N!oU`48XM`<_1IDZX$nOJ~6}>(+hw4?Wr*8nvgj_x1TS%w4-;QIm*R zn5bxIXypDg4+To?PE;iSR(usyeK?hMooLF}O-;^MR?2iYd5D$%xxck(jog2Gm$`>F z>Uem}Z7o}?usVGqf8g>wozQZA=Zc)HKb*N!#`uNOUCEVOCS@6#d5k1l^M*FWsE#KlVF5q~R7S!S_`#3{yi@6L3F zMqFSibxWJCk(Q$V$Z?OBR&_{>*yi$OMFBNcQ>Go4U3=)!p*M-2K6J>(Pvr7Wcl5cO z?&#xrROjo9BRba_a^9|BS^4Mp(*O^1hX(5-wJj(6n-U9k_82T*FzeupYfG8_)z^mH zJap>Bg(`<7s^5gVm#?gt`tg=0lc!H`*}DRr(}y)9MJF!gJ)o?+Q8Cme@}zG6WuFJ$ z3l0_WY-&1?%bxl*>?Dgs_ym=GX09f2^J0WnOB|l))SAlQxM^3jNJi<+X`v~TuBt8y z)O;MS5UDxohLK%;gc^p#PMp~Ze)mp1zjE@Rua>42Gv4X`wH4@`=o0NNwD7hAo83YG9}(h*F6ydVHybQJHq-i*d7ELjO!}Tr z6}nRCzD76LIX@V^Wt*E?C$fF>$3ODiM)&`Fd5i0t&Cz0)i+bL^^g>cZk=LUsi+2X4 z&G)&P5Mttyp(_>Ox;#q6ckXMuRi#-XyIsE+^*my`tl@X%*b|;lddnxZ? zTkzfITl{#d$}KhqZZ+epve>xt*eBI9b&&-|PF(q!{tw%X?=F}urkuK^`%1y8-%NFL zzO7hWa{4&0`|ACM9Oc>JJ09kIjn$P?iGAyD)cKfq@|g(VV`pX-Oltfb`%%K;B+tpK zz5Y{H`K@XA`*JW?fgnzfDzu55hv*cv|6+4fG6@F4w$?jYv zB|g2W`}6joIf>^AKX=SySUx9_bE9yGowAbc_;TY?n|~6b zdf{p7@7R4x3$kd}`fllS*MG&z<8Fm}r=0y&Ew8-RDdFN zxxc9ITl-F}+dp}a3ha4ux47VBbMSPl=nzrCsCxb0yZW)enxX=Z>&?=dw1MsEv);D3 z<*IL)u2!y0Zl8PB-(nHppA}n5-tDOr=Qy{;@Ym<#Q&qWm9^^m1bCZvuzoRbWY%kB+ z-`2f%!?kK1Ss7m}<4`p$I4j%Ac&C7aVUE3GL-ze(28Z`nS8B06i2 zx{|V{w3MenVrl( zie2F{yQy=x^I3-U&>KA8_XUb+8|1Ym?|ArxD^z^PwT|DrjMb#$IM;bk`t5x={UyuR z&ZGLvydn>O;y#vi=d|phy>n)m)UNq=|LrO#)wnzBCY9@ zgZOs|YR`D-$de}C8Xq6o({r$+@bvp>^91f&tLpG}-+wTt!gEL4*>!2fK99m(m$I_D zl}`Nq?NraX1Qu84kC}yqyoUldzFhJ|arJRAe&1^uYRMeMa~lr4{=Uv6W^zX0;qauC zg9i=sPBlE6b7Rhf2@>D`yfZS}?J1*p^pSm`lg;w`)d4ov8{6jQ2<_KXGCg1~b8SPI zlxkyX>FLj2i5pk_Sf~`^thwf4>1xwGecK9VewzJ1+T&) ze-7^w`4Q&1_!1MdvZ7C-kB_RpONZhKg_iwmoPKmStz?zA;AYHTwN-yjuLwJfi-Ygg z<;F`L9X*0qZd@bfn8DR1z@_*nN%W9@vgxdi5{J^#cP}=(xX5~4r%P$OfRs_d{&s;~ zosW~Ud+!RWuC-4TJ=EDLb=HOFVYIq}iu5n;+j|tv+PMGxaoQ#FBVQYX1ycH6d8PZk~SX-fGw?N{>8%9^=6|2H#CY4q$%zgHEGr^CW-<^z~d}emJR@?TjfP?39 zh2v&&9F$&o%HhKf5)+6=we5%0Br@pDFzE2+<5jk|X z#3c1teZQO_XLw$6gS;h!!JbupOP7-!k_ z&0kjS)|`+RY}v%4*Kh7@w)1)9rq45tAIQ1P;HYCU&sFl_%sAuDv5-quSxewh@13TE znfYe3V+Cd%l@IUyU9R!KvbgKqDlW$S<9r2=mT!LYRn2%wbAfVw+WLvi)sj_-rEFJE zWVg7km}nW}8_`x!muqoNajXA+<=z@*v!V|xxu0D0Ok-G{_^|!0nSg=)qo)z#>hg^9 z#gtyW5sj!f`@wl`|TZCud#-mVx(>RMmAkh4vl=F_Wek<|X_8Tu(7}xV&M*W4^gttCs!k7k>GR`9guwWHaWl z_39>pIpO(@&T3rTvjp|R-aot>m)7vBEa1k`^yBW;`jr`X*nZ!#v6k3zFnxE(UiNRjfvb=A$Yv`&Xpi=nHH`K*VqEmfx?qRLLJcjw zWBqK0-1p}zmubA=CpKyWJzU{h&Jghf4Lqigmt#K3Q9h*yqc(_ z^Vod1h1-`SMs6!LWaNuJOU&G78PjJIa!Ni_=*&T*bvGw&G^lYg6hD~xG^xN2pzf7*Fe8LyKhcVLv}dk52^Jc_Kw5_k0vptkHSANLI3|p{lv(6_3th z;g5Aie9D*Al?@fAPn>9T=)yM12h)O$wr$+pWVC1L$B#36c)lG-aub^Nv3u_>mZ(!N zeD<6^*k*m;Z&TZvQ$Vx@3y8)WnHqTewa}s9tDG`Sn~?ef1$D z7UL|Z)`(-d)uo(ks+Z}>Z#GVhRry%BLhr2Wj`?W~#eP>)xz)wL@~;Svm_9M}U|Zd< zT140*vZ}V(drS7#Jl-{TCPb~= zqG;s3XI;6A)U=PwVkM2GbW+!dUO)PzCB$=yX~3~lZ3TwY45!a~qnbT6u zJX$Kro>lK}+_~`UOV6}v<~=bY)1WtV0!VjMS{@9|oHVOr&6THL6IV(czgSl2leqQKj|uT26GbCb1jO3Y3YSlP zp>4*KAnCv#hs(3nfu_JhORX-I|N#%coempm8@lu`^$RR@x$|3kuT@WTCr)yp^CfQ z4ojkE&Q+3{6S~!EwmtKcHz(@_r~Q+EtG02<4tCyKEK+Crr(Knec*P7=*J;~}v^lr_CU4&J;I(J@qKtp>txp(vzN~-F zVY1^@H}nLbIw^T@O3Sq6rxY*zVlTd7s$sq7WNyx>4)@gd{r+}}N&(Z( zsP53SUaMjny4x<<2p6 z?t;^DHM?fqo4M_j&fci>zyGufQh7c&X>N)YO9=`wJ#SR4}WwoWaff|FCDL*O&2=2(&N#_)0T7o&3vO2mv&!+ zbFs$+^S;AtcN$HO?W+<_*#2!9!{>Wnen{-tBd?YF^m5>rfa}52*PEoJ{XY2h%G2HR z^%m?t{4ZzP%v^It)x(abSuEE6@#i-E#Zu5YJz;sd-{S3iSbWw$$a5^b%N&v!u{d^t zTjz1brJ5@_yDnVl`ZDL^(}=~*kBggY5AFKNb?Anza0O>;XXn>R7Oe_fwS1&jc$||t z^=zu_T!Hu=Q?0G*0uTMwu-GUY_Pl#}@r!v4r!-TiT{(-gq*^3f@7jTbdxUt?E^M8< zB=2>3gWNCP1Ljw!(`4be8!_=@iArC%$)G{{F4~ z?Qq~;jn>xi@FJ@Tf4|HBJS#8yYPIOGC3*VEEBBckpR{W(`jYAwd6Uy82=AM1`nrAf z)mPe6pWQsCy&$7~@~*wTUEz2=f~RW^SZoJ=Qiz#TljD9u^Ct1ifUYEKD~9)+dEM~ z=8rVJUTt%CSn@_&AtmK|{(jcR-wcb{<(f^)z2w^`aj%fmacz(nYDn)GGV6j+=>k!vzTV~&fsV6Nh$5j$N$V3zsOllvYEIkE5SudIlCaIEJbmC{E?pL{8BBmA8CF3 zRJ>)&gQ_*AYmQ&tp()}yWvS@V)y-@^YaI+sW=EepD=j!#EJ`!%T*I_$iz`pEF{iET zU1s6E&;QI{X1?Ev1-^cZ{-zjzw)$~>LZz+ij)ie5@@LZ?pLsp`No|d&-QEz^y?>wH zvr*d|CDall*%~loQrV4zEtQ*Zd(SZUi#mOZQ}e0wIpIJp4^7^)o;4fe1A-X*#Sh8F z_RUrQJI`;?^vnD5&0~K#zP|bC-fw-^OLKO;V|aMibfblu#kuf@vyY{C)=XLBs5D1C zpZUY4jYmow>-VMK>gE`k7qwWS!nap`)Q|!|1L%UIIF4ZwlQYdh&M2^67widqAtFJ?5zUFFY!yAyais^rDjgJpLd4 z{|zU4vNf;noGN7y8@ysmcoU#hv%Q2{Oz{(-?Q2I8FMqb zAMm{5TO@OS^7a!|^Y(1Cv}ESyI&s}-N#@I!nU{LjY!GmZkWg0P;d8O=bv`2Wo2P|4 zqDcFOS>Aag19O2hTuBETkLqZIR%a-Fe06Z*Rk11&r)w|OpFef^Sj)WRqrw&woA#NO zGsJC0D(a*DOw!r+;aSOqkEI9i^)IQo7WRsT>m zba|???bqwdm0v$je8kMjY-Id=iCFGt$;VcZmD#TD z|5_&6wRl9&ag}PFST$4eZCc-z^Bo}!eacHt@&rnDuf1hyzEsc7sI=axIPI8BhlyP= zhfCB9o%u>lvVH!$n}k=CY~7~zC9D@bZ3P?i`R;aTf88khs`LqyhpK5i zL-D^{*-D1LjIo3+TgV}ZV%UzzgIQpmrP%9>q|+ap2e1q`C)brtDpP4 z6rFZTK$JDz_|uIEl}nc=9F1-2`u)1nq|h=X#$&eHziB}+sXEb{%NOoYG&Fh}@MwX~ zO(x%<$eM2*E_EsXeOYWp4`Ldwc&9k-b@}yub;G( zSNh^z!rk&}{4$v@^|goBtXvtr^QX3D|TW_9J{ghOnJG)ZqbgPAKeQcwhIST&wj8+W$D%( zrw*D)THcV9mRU2SrpfX~;>=aQ`)1};PQ60)S6o%D{i%)TV=+#%8X%^nZDifHFB%2-My>5Pd)mq!HR2l0ivAfci%d90lqwXw0(9Gx~Yx-pkAT_eLz+7m(z4 ztjh5s-{g(wbxz(mRQ#Ob`*kB>$=Nz9`%m^Po#Z2P3uG+JYvbS5?Am zIt4DsDkitEbJ*9sxS;Wy;_DLL9I$;(%F2K|*!KgaOxrBX8Ir`@0a?Em~(PAsO)XZM*CM+5At4L`h75Vy{K zkaT98cWy?yumyAR*7SKpJh zm@Kqqam1sg+ph3<)vg!HX}q!~iAkgR%A0!+4vLtrZVEZ4m{lf|{$<^jfGawaxmV8Y zI`1yISDT$j@qAZYHlKfDirMi~N?UC9nQ6_ud!;4%*|q;`eZMU(Jeao8^!^$DT#pWs z{}T)hw6pikij~rr<`aLD)R$Gol{ZuM*|c+;yJDEQ{wwU7yPr+HIkVvHG^cGj-HQbC zPQIR98T#7w5HGKj$3-DSSLwOeAFO_HQR95}m&w(|iU`TXpveF6BF^>&vkN~QJm}e9m3*{oYj*gWip6y&J}mrTT;s81SG;}is+Ey* zXUv^DW5QIRU`3i4em)*RV@3!rE^wf#lw*-ZJoENrzrN@tZ%~Q58YG#)?Z4+Og zZ1ku~qb6vkVUm2RPrY4QbfBEa-@Yhs_#OS^dp&2=WZnbkIj@DcMBaDq`YO6S zMNij5!|mopZ(&nzjceP*eyj{qeBFJT|8sZCntpM~qpfTDU%o${m~id8W$NdkHTrFt z$A0xWTyy`&?4V0C-`|S@O^jN!BY>R&9i)HcdUsSA{|3|1w8H6nk zdgSPLL-xs$udi8n{iWrdch1~0Kj*@JpT9pYeo;&Ma^PHWU+KSoJI9@|OKryJvc5L!3-GJ^%`(}zrf0_Ts0C3TDi752Z`XcOy_)kQ zg{3Yi{rgGIRplZ49r+g~H{^alDY}YrRpA4px}aO7})Tehs)B68)*9ku(5`tN+bJ6SM+=Yu87{l^#2UAlSfd&5fo-$x#NKllCW z%U@z*P5=HLT-4vuvhng)_X9^-TP(v*6%$xu!=m3;umx`qwqb>{nIe;(c)rf8+D&R4vCRjZOD8C#1-&{l}nJq`ysk?Y#7! zu=008S0>EV)8XRN6`Qf>>OxH(&q|N74MsCpbDndt&cAnf9>?;g1NP+x96q1f-yN|& zrm(?y?Uz4`5ByYkIWx@5bW6~pEM7^^pqjS!=~>fl1f+Z9I)u$^1WcdQzG<}3oc#6V z*|{?g3VNz2`L(H7bO;I^;&2Ll&|MHJ9_iMoFZ6SX`~~U72evRAP`zj7)+igEx%_{# zL4jS2=-O2#USGvd?qoYy*ZHe-Hr`)PhVc1V0nJK?2W%nMN!L?8)Fx7bEvL= zwe02k`v0~ZKmAh8H~bcy_9`P`y3V{%r+NDGmhRt@FVAsj`6lTbe?PqJ{t|eOrELG^ zFREu6r9A)aJaO^BJN6A~HpiKEyM!P3@$W$6**9?*+z zsNsy~=$LZYwZ-fIixYwZr8^ePJ@C%G;KS1riw)H$ANbtZTCV@${^HjG3F7MvzCYwD zzW;OQ>!0prpBDyZmbP++)Gqih?DAlvL|&~<+lp-y?5ZN>`zxN6f1bhejd9t}T;&b< zw|Wma&5c#PS6jEb$lYnf&kGsbR&8FlO8@KRgEAHl;fF;x-tyy^)={d&V$H&pU1Y(s z`=Mn^g1BRl-PJ~cH?`u<8-7kuinyxa|5b|9*Yw6c?RkC6`3tnzqW{_?ZK&2PJ{86D zO(5lQe}j0}L8e8AjM%E>^wzHoOWNSnwC=u-hDUzEaUHho&Hpkg7cqO0 zXgz$|D_C%&IrZiQ$%f(yoNBY;m7k^US)#LX$&;${^L%~NITxy@6!GXDtCf7T@3P_@ zN6U>jT}#DwOr2x1t%}wtXPQs zfa#H0G?QkNBz zFa1*g{HV%XCAg5a;%#UH`?=~#bN2JtKL7Rkjpe?q8^xFYD7G4XopbC+z`p+co^t*$ z2d_{W_s?&W0`2pzO<+k3F*L7cd1J|Jy!qL~dBwZu&MThX@u9_g`*gAEm)7r%`qlW~ z#&do>?^YY;?4Q?*<*sj-c4f!D&SP5z`d{y0C=9LHbk1O%y9(Egf|&l+$5kCZ--OmZ zom7^!vt`D+mHCV&G2XWxZu5`6^2uQ0+m-cy4t)5~TqalNz*0GB=YEMV?pvbVhDuK5DzdLRD-1^LOxAUGxUf1QXkM*~daci)wrMugGj~=>kp(teg0*6(3oUA=^fp`D9Jp99!k$9bx^{|oU(@Ad@ZpeG8`BOOY zZd+RFxie3%Jl++%G2DD=(X4-Go(p!q zvqHtSIJ{OSoRIjW($_Vy(eG~gLRpn<4;Hg~@=4vg@}Dy!j!A9PR^h$PTQ23SymfxR zc1XhW_MTfjg++l85v5geZko*xdqpD-X!5)iylks5cjm1l&kKJoS=M**VMvOG+NMi~ zq?X*;S)-RG;YQ z(rvu7C_es3jMZJfbzZ`oO&2aqofPvVtZ~(qjhmWlly?38j|P#N0E!yzcm^Mq6XH{;S8sY{NQt zg>U&WZ=pfb&dblmboLP*F8==i_Rpv%7?sUVPbT zmw314#=(3KDurG9c;i`2iJv$vg*xD)d>cjm@t&$4!>9((YtDCKldsrmG;y2fng(-%jl z;n-|EJUTh6NuOyAy34e>sbBRl8Yk{gcw%l7_=Y4cAhk581?Z#MJz zI?)g8>1xxLrt@}8Vwv9c>6lvK>i1`#m^^s;c-!8CD?|OR#sBjP4ZO{SuvDgQYatXVZL=U{Xi z&ps3O?PqKrdoSL0Mn!V_nK|OR`I~MS37>b4PFwJ^ys_f6=;wZune~n*{sjO0Rk`R` zX5y74&Y$&l)(Fk=P<3={6OEg?gv;&Oe2btfvyXe{iFCRteAdrT@rlX^omFHt{j}^% z-Px1RXCCqWvT3iVo&VQGb!IP?wOtd*<&8PC`pw(9oux_ddk$`Y_Tt`5-t&p?&+z*n zztEg{{Ps<2;Xk)NJzc+W|E)S_Hgi*6xl8&{xA%Ll&dj>DskrDy=O&%Wv)BFIYy3U- zj`iZ^H^=?-^{4h5S}i~aZi_-d zZI*xU%DsO~B}?|-z942@{N|_rmA1#)J9&@a{3ze_>kGfYzrD%p>kZB2;!ozpf1$zO{k)|et2Gu%h`AZIJdNz?7C4$$V5Qu0?W)!lJ0I_jX@)Ve+5=U-dv3`y439Zx9K3DHm2~U; z)n}Afz7A$xF~xXW;KQx==30ln-$SkC6ICsr`kIz;9Z=$rINV{- zWu)QgsL|b*IAe|#PjJ%72|L-Y2uyyTQ7Syc@cxUF2E7j?YJ~Jc!&0YO?Rr{w{ps$f zc3MUu(i65<&)UAarjMO7u-u@jNA8yuMRM<6q3&x~0b zA<-Rb-Wszvs4eb{b20C#`Et&&Gj_(sBd_8cO?K{E@RL>IDPzl|jR8|4kDqbh={51G zbdcV{TZ&2Drz*DGkeU9&XZgCtF-qm_d;Bit@UNRz^)g?~5 zcq>vU;I;V3oFz5SYL%x%KY1H=C6Lp-V(ppiU0WAua%@<^_-E2XiR~6A%w9|ml)L|* zA&ftn^R(yY5Sxk9bmOIqbE3JAbev9l=y2-c`{~-|N9QcImN;6&y#AVELbz_~YSv|H zr;=}N@=91yv|a1Yq77FsJMKJdAt~1Uwm^MxN!q++>$>j0cVo4=t&$wLCM#5R)gdP5 zSpBbuCM|6$TOKbh)?sb)P&T(mbytg%+vkd+w54Gl<{oqYtv1UNGM%<$58u_Id5*nn z|GKjrSl7yEkjAj#Na5uA6`!BlFia|AQD|i_(bjZkYdFxr7_-rFZa}2aCx)owcbl`S zZ}XpY{Ox}>pYOoZi<@H}yPpj|WjROcU9drg&ewbE!=B7Hv3Dr3E>GNb(P&!F(cq0P zXVvZ}JlA&F&e!fQEv8iDe0yTvEw`N!$Dev?M{KQ$4SDk=#vtbQ0+XYf_WR==$1E&U z$yeRg>$~{&8uu^hCa>mSDCF66-|z2I*@lIoKh?iXZh|9p79=)`{qLSBAOe#dxYvYhwQemis53eF$ToaWB!ofBtw^riBm z!sY9EgAYZSP1j1-s(7{FLaKePL!ka*WheRbtG9jCn7i?H`W#PV`{niA*Y-`W`rY)n zw(j2Jyk$b|D*In-&#$@cy1PG{ zeQD|+g}2kAEBskDy z&41)o-OE24$Itg!9$a|uq|k!9cb1=%dAvVAzP01zq!6d%_p9d33*GzR)YJ_o zs)VL2wQswqJYT@HT-WDp6zAqui@d@P7N=g-(Om78b!v@G-HjQ6#vY!%p;tw^gHNyS zJ>~mPJ3KS`>aP`7G`F18J$!(__{6MlGwG2y)){bv->6S zwWqF^n+9&?4VyGq;IB=YlhLfKqpDAjdY_v1LDXkmboZ3nO|m+=tJj^sVdB&N+v)-P z*2JBM4y}JMMK5*gr;?i3&8GzRRjyqaot_hR@`2NddHWN)XP(&bL-k?NJa5@oMTv*?o?cfxob=zcb=ua$TMoH< zmh92e+#GZ;n00B|`O3eq)TZirSpF27xpMV2iJyXjUncMTQ+{dBl$HOu&qZAA-pX!& zbH@6+*KFI5@$LV}rsHlN$+VBn^7G|SF*zY&y)!hEid3K4v|C+y`7hVnEAOg@w`S4( z4$CXuTc%XID4Djq8_o>k%bKWr?((h>!JW6%%Rc%9Ij=ev^Ig`cpw%+*TqOItGpT+D zYMx1cxX9gp$^PBh>tgRWIB&>T+@_QGP~qtMN5ywv6^L_QTDnu=?2RDF1sYPfC#`*S zwIx;U|50s|&ZyXkS5Iy~c_wEnyLu4yOh6otnIUnJ+&d`t>{kA zj1^}Zqdy(96g}`PCdI}_dU}Sbk^`=+PWXsUtTUxDY|m~ z`qSWDjCT(={5t#kS-9ihyujbSr5BT1{myRe_!Yfw?P=l?AH;n|B%HUV3x8>eH5&%G+*kPVkSO(ihTeb&2)X zGxN(8x2h`c{;9ffXp_T2+Z9q@7qs?hS?T2k+_&5&F0%eaaC(DBb%J7G$FDOR%JVu!ioKB&kApwSF`&w=VO%*n>!U< z&Yjt^pjKYi_CwVF><8(~)g~{WR~GfIdV%}0n95`A?)-ah{Wt$`;^oOFFMoe~y05!3 z>D1KU_7+tSrvBUCto}`P^6zsN%_nLYV=J#u(f0rU<3;23-|>v)vD19w%6>lGneR7m zPSMku@8xYj6#bWeaPsfTC;yDkpXtr6Dm*py`JdM>8ux$O&m0#c-oIX2?p$r-hg(y$ zKQb&6|8<{r{nJ>@84`?B%b(tSFKhcD>A(F!`Oj@uhRd)1T~jY_`yuFm^n=bf5tOOr+HD~JV_lwNG2IXy3JMh^^ zHY<4bm8bUe8GgKNV$`_#W+j8vk;e>A;sQmP6tuL(l^L$;RV{IUB($12M*ni0_x2#Y z_d8h*oELk;Tx6CWCePuqY9fEfX)TQ>%r(<1qxXyabco%$UFfHS^ruE|jt2Pyuf-oR z7h5X+$xrmlVDUdF&B6S+at>pnhVJSs>1zTM{bt0j-XJ>dN%XBbT68i(ZMGvRL@&q3{;gGBzjHwue_tpX>>IDITsJaYF2= z$ns;S%V%!WTWli~8#{IS(~#N0M&S>X{v6`_p(t`@z4h)HCFxp)tt_7IcO!GRS!=Ic zXZ%Amd!6-UD;Fl2{xe*h(XT{quCc!L)G@Nx`^CdcL9s!pAMg1v#IUh`&fcakci&Rb zpmI`I=eG%O_A^Cd1W(TWe(#leA~>0aq~)s@Z&~DXWKzV>vdbPpuLQN< zo{;`JWtnGYahxl|pR`1VDUY}`XY0;kIN+c*gT*1|;o^!EWdEA_dm*P{VFTTR%Dl;$e^)%!g{B=s6f4>#r3y!qNAVM zc|CnpZE3Q!d-a-m>xJZhoO7yKz@YwTfq{BTqxwRP;|+O_eAg8U%z8X6*U?ibFmBez z<~5Q#_#T}6nD1P!?=05n%2!p|eB;bt~*ioQKEiPdY^-TRqgA48#dee>A4G2<6B~Un&0bP zU=cApsKO?|u-&Z7S3t&<=gPIN*!Kon!71TZi#SX4A|T66iOtW~9n6Hk|(lL`@#kXEUyn|teK_~VZH?jHwayCvI>|7=ir z%xt9hvGMK=_AfWs_he~*Ys}uqQQc{x#bv)*gClLxf;CKr4M7`AuX9y8tm0l6(zDp% z9Z&q%qgJdR625&kbxY%BlY8^}F!P@M5$z9TS-yl!$owh(I$~$@&E%(Q%_j95`<__M zu$`2>X(zw%k4>2mich|eu{isFj$d87<=OWlXFmx?EMY2rV7rBb`{Zh;tEx+*D?^+E#}j`u$<|nrmA$Ge~pt zcZ<2UMmvKvr+>AWy=(XE3-U$#RVw;7rhI(2ytwRi3RkPowYMcDCqK+hjqPh&x32Bj zI=!O(YhTnI?Jl=p&w4XTZSjh*ZdKR7B1_k$Yrd{s`?XY8_eq^#iT#d>@4;t}F6WhL zd7t(!+;z$4<#$Z~m;U9~eQUJROLgkj=ry@UE1eXlZjG!xd)6-Ai1U8v$tQRD&S*Rn zG`yudePvKAukYKpzPyrF%?~(59<;9h&ax|X_RULbOGUW6ZlxJ6p1rDSa$LU6yRT{s zIiz`KuRr}zV*lF38y7F$xNz^>JL_5R=G(oqJpMQ9?Oe&F)^C5rd$s!9O6@N#Ig)hq zckiO#OZ|V;an4`A^5k=Ghv_?AojjLLS#mTdZ)(EviCdzYI$aDd-0^uQ?)v?A$;U5~ z&z?)?-Oz0BP;-rWU;Mn7_dMU(enn8<&{Nd^MYTmpr^}BZG??~j?wE4N6Vu>!t-I_gld?lOHc?%Rd{1z}@UgTV3 z8#<5AW=5lV*Mqa_C(p2)zkcI|^M^ElBaXNvzY5L|r$3eaxh`1|$dYeonaTGp?Yt*P z+{-y1yb=p5cm0T8`=sddoawUvmmi5o z|L6a7TlwanvOB+DKA715`6u4i#C&)mHcBvx+-Dcow|>EMwlaU%Z!(&F$T`_3Z1* zM{g|n;dM4A{9WcdpKg8sIgU&b+;yz~<0^cAH16!3q%}2Y)mfX3`+h$voWFdhuix1fd_Mc$`QyL4$?xY%?_br~P}1Q3;9;e}-;PO> zmVMgnF4{S z&6=}nHFv6PpOSL_xvku@jf-aQ|F(7Z?%f}oChgnza?i1QB@GW^+6(G7a9C{4=Cb`g zt0*$hcc$QTUv|DbEd`6Fs@CTInX~L)$(#pYl;*tGm75=0Ji~VTjx!C#civQVdcJor zllK!B{_Df~s{PumFF#*=XS-xlxVc_Lgy(<5t-rf3UtR5KpfF|Xlx& zu6;EizbZBV@;tXM+0&nit(Kg6y2-^m>{kp+k%q3D+YYunO#H^v(#|bqG@j$l%zyvK z)z|rZKK@#N&%(rJS8YYb?-vGdGUes+@^5e1c=^VSj3v&BO0WHXoSU=h-p-FzI!D=)TgYcKEV zJ5bs=Ra^L@>FVgxuV1aU-u6wgHI$ERmUb&&6Td&XgjpstZr`4rnHd@@SFXQ)Wk-z5 z@oMp9j~!kgaL6vIh?SOWTKf5C#~OKkpKGhGEnIl*$*+fI&MHY4SPL%1v&J?4pA~#< zf8MT%f66aEIF@Ve=2n(-o1^^bu3bqF|NV2DdVTez$h96}>_6;6&S`q@tbhID-`~a2 z-}UqR7cyjbY(4xm_wegmw}%IeRtK3q!ZH~*owHEZUcHw0bkt=diwn1m zEN*0#?L3pVeDaB3_ghcinh~+jrtzOj=I*)6a?O-p>#dj-JS}Tg-|C?3>sz+2i=Dlx zVz1chk@ZtGx_@c=;ObC&u+QuC9NZ-vRd#D$Ddh@>C;*3Y;RrPUz%NiKV$y& zw~qgJ?k%X)ezdCe>#MNM=hMxE-$@^I=ALXiC1#`2ObH2(3vv3nYIXNH=4rZI+m;$} zZBuTo-S*qBOLx~6WbfH+-N!X&$GMbCFMHgSUhivt7SY&N|{DU&A+&n`Dbm4-~N7)C*Q3n-gkfYrPIT)Zolx)zfCE=kHJFE zr-;Vr=IWU)193syNmnj)txE6lf%RPw)5GxUF+MK;=7q| z?fg91UteodeAhTjFOP127eAxV`SMz4``8(44!*p$@cIQSlj&{1Md?m z{Qh&zulY33cKN$|rC#-WOhx;bM?Eg^E-5gOl9TGX_T!J%RQ6(fu6tTX-k+DbTlQ?` zZMX9=7w=uTaj%cdeTVtAz8bTsSr;<4N_}a6P_^G7^7r@j)U8_+Bh%fYCvEgFk_^3m zWyRI4TUo9b8<;I$b0bnRCVlOT6AxZBSkJDi_K3SG-CJdQa`o+i)#7O)XXmefxUwdf zSzh1g_-5skE+%t4T(YvWvM$OmdVHGuab0|8?_z%7 z`yq>QlUe__Z}0BxI`n?^=ZZaXAJV*a?pze?+v?I=H1*_?Nz$F0&I_eJpVVsd_U^t) z*8^|eH^e-+d2ZQ_O{p7~om;WjEqD9s>^Cmg98=mhwhERPussTEs(;EjC-ZA@h30fU$sv^X8FkURFWq*mu(WU)kQYsi(3+SDyKAU#z20 zTw}QS@Bi}U|I6>bH2a`?!(_Sa>~nH=%dSP3E#Me?}q)>P50VLa%KdF9S+$qf9NXLugON$HqU&*H}l$T zF^GH}#TK?zjh!vZ$8Y(`Hw6Nb<+?t{Gqqj^e)w`IsoG@Un(dbRaw3g$%`US|*8IGe zMQ85$??M|w)`onujQ#87n!DEN=KG>=np0ni+8V|zJX-avYRzGuNgGP+?wg&d*q>2e zE^;@&@3_^O1Z|yp=gT=ZM66Z#9;}g_HHE9lzO~A=oJarJ#&?$coHddfjBc>sKX6?C z@y^f3_pg~Kt;BdwYun1Lx98YB->~rEY{U4R`G;?w`Ih^=r^dX-u10yw<-FIET2k+B zJ5m)GaU;nrzrfh&Q#SYX^*8&TtT#8QQGV7v?_Gh4g~z`trTuxUkKR#SHGNxj(rVVP zO>VQ|a?hX2KX>vx@17aY+#Z;yWWUXQ`1$eCvfi@x%g?12Cdc>xQmTI2$MT15F>6(O zZ%L5E0-+M}+)X>3rLD}^yj=LFcW2Ef7BT*Gev&y!y z@wZ&_*7aP!10PrmOBp!4IbA~Z z!Ef{J$2s3uEdT%O!%dBS+i#zFduYR!yHar{*NdA-yilApU!dv27Y;igSs&|n>Kv!I zA3un>tJ%?=ay05&yjI~}VydeGA#vgBQuCti)D|pwB_47lQH9T0iXuF!dL-4Hc zF^40{zu()NfAH3)jplYaf7e{%I>hj0^8B?kniyXkT=;3rw}aQtYjGwDtlR0ZN3-(J*Q(`|Ic;)Qm?q)Ms~lk z@~#rSi!;^p<8o9xKS<8dP`UW-(%Y{){@(UE*nMc9e%>%HS20sm`Ct6T zgl+YU_R8Xi@BH;!--_?QIqlfZRZCvjvTSLHDO{D;fBWs-tX2DMo^(G7;$^=3t(IpC z-=DMB=AOLKydvtwmfPEt7o7aeabbHJb65MGy(Q61`+Mu98LR%AINy7x?tG7r>FUw{ zdEWM2{}mo=m%DxTM%7v*#XO8S2%)XX+V8;Q$l; zQ>80J-f2~b{tObR*q*a8Xz#2uj;|HPEW&26etT86`(u*eu1)vE6>myKCY;Xwnr^nx z^mE5rZ;^>*w-^7+PLo+bQ)a>3vrN2apD$BguGS{-KHk1e$T|4SNvGwrYinzE-F%-u zBk$Vme=~f{tF1($ggfU58CciYwOc+A=57({3{Y@Ov8jF|)W&4#c&}u0`a*kM=J)ft zbXH0iWK3NkY8S~7pPo^!xNqBqhpU}-Xly@j7%#oA`G=GCpXFkE4wWwwjhnFj(0s2S zMQ4vruQPt6Z9HuPtJkv`PG$ekGp4_pX8%u6VxDb&4Oe8a(cbQ_W!0aaiariLQCIOs zNh$lBX3B$P1&{r6t#aSo@3-gs(QlfvJaFog^UVMF?L7X!3Ml{db>2tKl>5p-k*t1- z)!QGRS@-3&YEi1Wr zu-W0;?H4~}XW8Xs{qT2wbJ?wC@;;D*9U4=auBuzKzBzeDWK+9*tw@ONC9A_Cna?JjInw5nN`I>! zIXzo_N8Wyu)4OVK=G=PJ7?-|uvbEr(zZsfbBC>NT=Y_9)d0RT?`1#LPOAAf)&&g)x zMa14cvTenb+Bn8}G5cTNh}*Kx*6z8-n*BaKN4Soydv#oS2HtRd(hD>sc>2SwX&GC+n!xMX7^Xj@KNS*zeJVB3_0bEOq1P`O0Am1 z&0cu)h z`qlpos8@@iuO;HI;)?R5e?_lvOhB-z;-u(ZJza>lfbRWE5x>q+L-&@JjocG3S z`@L$7&w1}OKFR9(XLHy?=j;vE3YBXHlAT|*9$z`qeDX;%zg@(ZB`+9GsW>@^+6lcr z@I`rJnVZsVDXB~5SAW{n?LQtKt}oiH;iWQ7Y3^!9hWDaDyVa(w)?wV`?U}!ZyUpDs z%6sOn*?#Y~uID#+aYwDO`05j1CXRQ`TVF4E{?Dtwy6JsJ`S*2qcgHtAd#x{D{qo_n zkU0%eUJhsP#i~rvUi-M?+x-(^MJ>`(zaTahH1_FZ$&L}Ty^w~+zQ?+UvB2S&gBSs zp~JK)+eqVB;dw1N*9m2%<>d$2FYgxCo|P{rt#)?^i} zgUoNHjWew;&VOcg@lEsO%LXN%=GpF$-TP+FmT!BOZF9TCv+Ce())}ksKReyPIj78d z>8{>9yQ}-G7)p&xm)M^zU9!2^G56)s^kuTo%}q^&(r&aGERIS1nqIR!PyVCq5uT58 zbJD%6r~AM1d2jnK@m=PDH+GfgS^n#7>fh|0Z?^qNC)=VX6NlVaPoFPijX!ze=gsyf zTU%QWZY|K~I_bY}az>`w{x8Ry?tJMtn6PizPRlypx^A&QCf7^O*J!&iyxOC0qbz&> z=9QND_x67O;XZl!9WKGW+P_minG2*pU)C*{`}ToVoAkc^&rd>b8Ld9>;}Nsz!PCOe zp5~Ei7u%tb5h*DJ`*qwa|{lN zV0AQhO3u;Gm?Px&xwt89)n_^OqXK(O@|2G7ysG~&e?#`<=ie=5-foC>GhY10YU{z{ zT^((I1&#=E#1=aycW_CkU*VI}oWB}#ZgXr9vvH7Q!0WwhHe~dgb8p$W zz|%$I$llh*3+(#c$%jjmxBcsO{G-^vHq7#@Q%+{4eNwh_EL)3R;DrT>JdgUE9Aj?T zoICP1Iq`{=|5JyO18O^W8Xe<%>EoCdVj^|w2k%{{yn+oIq-VU+%Um=&pR?57X3757 zi#J z8&p=^o&A2r{fi+o4ZJm_sZ)}tt-cdFan?gCH{+5=&DX@!=N+*RdcSw0b^W{}nj9PD zVtNGjo3cOBe!*K8T`>7>aoL%=kG5O3A2+V5&ZxdTiNU0cXO6`Ab(dIv1itm;<=B{R z>UhWO?28FMd9PlN}gl}UTpG>jVOAO2?s@2}zO*76y}``)w{*71HyT^#fDk!#kq9~09pes!kHSO&)1F+DxM ztnXj0`#$~0`L4PTRx)|)n-=%p@M?Z>#W@F+`)Q6H*V8@UJ@(XA(wXa$_RQ_cTr-zV zJDVr)_|HkG~d}>Pvq;_5Xa|A5j0oW0z#Z+}je5 zm){ZQeHYWf7M{S{rf$;lB-`N40V#{$-C{*<_7@d&=Q_;0`cxo@VgAMc7sA}`N&dY( zkxlA@>5_vBD>D;pTW=&BZeioA)4k@jX2I14Z??SI;nEWlQCb(qYW(KW z$y3r1RU5Ay;at7zOayDTb>Km(^M%@y&L_^C{v4X97`n#(zh%X>)nKSvfn)D_`V$opSzCwbCb zQ+Z-VS?Z&o|4v?_UP4?^ges=qn(8WR97X&h~t2d_@Tz=Z0 zd-`z4e&ZKzTi@Q1ct1ZsceUHrw@ikw-b%m`haRF)`lJnsMP zb2dG@1&_&v>^pb%@%d-b`&I>Z?sVvp|680YckH0B$hS8i`zFtHEX+I3UP@6}JT`+j?yjZoXoBp0W(9!U-=CKo)`Y@9ja!*Zr0b`Jdh6AD(Vo=?%P zxb%rbcw)jMx0KwL7PC!}pG1Cam>`rL8n<@e+$j;->RxN&=J8CANIG?bbLA~#)iCLs zw!8RiLOi^;1zq*)3V6KX@V3b&#?9g>OQRFELXMS{_SIqLv)2>1)d*9z#Q=%MmRCM~$8B%A;J?{A&c4O$c9(hpu!QMkl)O~mL zlstaMt)WtT)6()~w&kHs8k^lzu5EM1JGZ#b>)r79 z(lptiEs}=Dk*og+?TPpJxIbv7(d^v6S&yySOFxIs_&)XVnHdR9B?%{1nW!&%apJ>0 z#~GEo1Ja^;9-qnCRUl++5_4QoAuU8{;-BxGcBs;#;RvxlLF*5_MC7&dUA@=daLy(q)&)dT3F53vvAEV-_hUgC;#TWf1s?2 z)$Pt3`$eR_Tz>X4bf?YPUXN(q$CbOdZK4uHGgsc9rTFmoj27M&7Wtg@L65Y8y2`~x zPTS6Cd3Rp#Z+Y|mIRR&HAD-<03tJ z414QOR9~9=(Dv+7#}9kVoLrams-^eqJo)?1%1y}4Px*dzOuWO_-^rU!?!WlXlD*XG zyM(~4i?@yE_W7qga9O=p%Qv>vWixaBr`_!y%wNAU9r@QH_c8ioIs5Y?YsByN9?d(N znZ#Ez1iCE7TdyU!t0DQuije~ z@U~4Lk1=dQL50XW{R6^od!9W=+x>mcjGuqx6E;fkYd>0*XuiKq_K8%=3MsBtVHFc1 zHYJreL~}jA_H6E<+=vyYi=st?@;Q_9!Uebdx8~n6uh=lk_FHt%wkyojLstt#?e%&3 z;F{*|SPz|_RWmqGJ$T1-&#rO9jb&Hg7X7*-{c_oRv!BxE%XUUvl+Lc5{jTTj`MtI3 z@3*PCsqL*j&a$=j)b{KRHT=`=zsR>Z{WR+-oB2;Op`SnA?k+3byXEjDgP(7$)iTbV zod5Oh?$s05e6{a*>o0PamajYF|Htge z`N+KR*DUr2WzDoJf1eYJSD#h!n{Uy7{==&ucDsg5FdAq0l-8Un9rc)eqYuY~H zeGInQXN;CNEKc~iX3ECs^xnI-IE63lznhygv3e!j+Wg5!7fBXbn9Wc;Se^3mW6_E$ zHXqiRotF7ovHx=8hhN)vAN!cMCCa3k?>NUnZU@UfLi>Ug?!B56`LXD2k=RioNrC-+ zzph40a;(>B4nMJ6Xv=anogm%s?ssdsSQ}qA={r96nziYpWs%r<9kV4S*FNxa-r%vF zE%VFmly=_=+t)tVZaocqy+D!qI@9`w_2L}mvu>sd7g*Y?^NsTi?JCL1oNc_LOxva4 zX=D{Elh(rW)lNxQwd#-DU4Q05>EZB&TcfqjKJFBmyj(nUcJ`Ws-Od|0t**_w`Za0& z3csfk1`(lm-FAh~Eo}e(F!aOHqYK4%GrQg~f4V~c&Zd+@vMo%Rhh7}Kw?U@TIsTmV zKd!s0eI@f(YzjE$_k{O;*718A&ibmS#A&Vin&)!QI-{Itwo$?ThU+@hz8B>_zBp}D zyL$EdhW<+({0~C~-cNmA`MyBymR6rbcotR~W<69D%#Dy0?w&d!UF77P zt-VzmJNmD$;9fMVEz88^mb-VvsjO2=R)jM%{#drmFW{j5`W0HjKc{}Ro+I`+W5d5c zYB#uUuY1G2Zn>=K+hkg+K*ehFmqwn~CgNe~C54bh5f2Gwjt=;8f+%0&(`HO-sRl9^{4?%Mf0$otRNm@U_SyXQgOQe)=trYzs}yP2=|K6G1_KK<;q zPQe(vL~|p)@6NT0FDZUoZ6ke#?XJ}F?8&@p3+unjUf6$7Y3papQ(o%=*JNLnxRw9z zXhCE{?}L3iBnoP|4&|M=qBG57d1AP-mblUCsXC5x*VQR_K5$y5rc&N%!*#o%G3@(n z-DZ;>=j+dAFRY#*Cb>EwEiIe%Rhv}uqeWpn+l3?q?}P^|d^&IE6)lF<;V+*C7Zw-% zbUP-pV5*cNQ`FKF#kgkXPM!eI+__g&OHQ7xwF^?E8>91L=Uzq+|_rmsTDu$tpYtCHbzIt|R z$?L0cC3m!opHEG1w~lrCv3?!n&Nco|<;*0vIP*R4VAU70-p~E__1P({{mMOJnUggR z<-IsoP`TpN&VMb}JNp{;-R`)?sU4{vaP>kGH-Aoy)6XR$8o7a!wc5QFXf2Oh^5V0} zj;g0cq7P>O?DGj#I~!t|*7a`IilRHmmfX=k7}}>A{*>Xy{JFU%AKw{^f17{jI(v6e zf6rdN3J+C1t(JApdAjP}Csn3C+a8g;HbYNO&nt52(ltU8<#Zdi{aWbD!=>Ngv2h9C z+WNu}zN?F0o$bDsz2#rx-Z?vqGBlT$WTtYSSGl%*W&i39r>yU{I=eVlvh^Ha`Rv?^ zW4?FihW%;INNc=4ui&i9l_cfllQ$=MO%$7c;h^bk##V2eMZyn0s}_bBD=rQDrIZ)b zlCU&pN7}24T}Gyp{g(9lU-6k16=TdAaCXW0t3DCR|G!90UHZ;{_I#yx-|hZn9SpsC z=iPCqcgvqEeCOuPOObhAw}pLoynWIBRLk$qsaK^gxBM=Ba%$CEy_hi1B&qjq#p~7_ zdiVY0mUrxzRvtgb*DSPXOHS3&iS5gF)+>h_EdQQZ_^SG)(t%lTC%w8d_r;{8t{-k} zT(sXo_f&Ur(DS)xC7Z6zn$hQaO_*`D*GZ8Uo`sEJZl<~d_R-5%TyM~_v(Mr9e=0__^)fj-4NFDmn)}6k*TKVRoCGc;oG@ z9M?{^JwacX4ja7He%iKf-Tv~jzMee{vQLxGKi+n1R z-9JU)TQ$7eKbQRG{?Z$v>1`T*^idY;vb?=Z|LV<|awxs+%h{skJN!~(J!gM;9doYt zSx;X3vkPwpu1xRWTW7KOcJc%_?juSsj=6Y?=|u;~9^ikOv^q%gZd2C+wu03^19$no zTO;Pm6PV0=(f91-!_O1$t_Xf6RFti?x<@J7KKE5!hN@QfqUWt==W4Nw23cR9<=fU9 zci%7FZTppwyE}gFTKYiwX|i(ycOaj`3N4j++=ekrqaySYK8g4w&R7>c_k{VJ4*83} zCpd4%crBJ1GYGbx#xd?KNxtvmz0nX{)%V&b>D6b-_2@Hy>C3 znG*eAigK&(uh6v5Mx}0+uVYR{9`t^i`FXuj-cPfT#S^qsuIgyKy0Yj|*Q2B~PQE=G z7S?$^czK-p{3Q8`d0)de?yS-*e;HK9>8@>1_FCud_U#KpjkoNNyRK2bFze19nWOij zmM8Dkd_3R%S;t=GfH=Fd9|776mt^UAtvXPD>hhiCMpJBht1h{AhKT9udA7MmddSQ5 zhd8n6&rS?naw)Jlxv%H>g8J^>P22@-SGmug{<3Ucb#^o-HV)Ult z_U5b85+9wioUub_UZmZ(f1g`A7x6#e@xxg|$KU<^$qQ`H7x5nY^r_^cebmWW|7^50 z<7b_lyljGT`QM`ti*$=ZLb(DLUV6n7Jt=9UNZyW(Z`iTr#6F?vs%n?HY#-@YWGU=seRw-(^9whddAdusym8i^k~OP5ivGn9`Af1QU3dc@DqUId>5}9uKj+2l**kbLclfBC&+HH?O*`D1 zEpYSK*RWLa+&7mOMmS0~`aOE(`uc9l#;of*W2Jp1dHK&STc}_7^TuaM-ql@lt>%li zElA)^*FC%ANL$i0hi>ydO3zr{Wqw|5ywD``+seaAmHq6Jfoj1|W;Ofv#Vmd+vuN$A zy6#fb-f7xX_;luS>0e#LpHm#c6a8o3+-*HwD<6kEdA2&k+GzL&k{ZQOmAzYx$12;`XT#2BwI|Oo;i+{nZMVGq=k#R5OBN>rAAh)&WWp!I zcU)=xln^eHl+C4Q)eJ83C^`pmHt$wb3DW((=$PVl-n~q^wN(>WN}2MlSga_>H ziCao6&2L^6>)W9eTh61~|M5EoZq!NM*BKC# z>$bH(O=Rs~tJRw(FRR{qqfGtxixv@cp?SV1%CckE2__%&?>{5jwf?`wO~)N8W}QB@ zG+aHnrQ3c|TwP$3+2gY}kIXJ=(Vg5Rc00W6%_w|kE8mc!pU8af=xz7=ZaE@#Pp6l?m)uj4 zBkyee?_K`KkMI9wRaf7S-dOas3$j~M_2gafZpo*wrTL%#I`;D3Qn#AZ@d5aaksqt`-iaCqkTrT(auI?aZz8NX6y1lk2-C+#f3NRSKgARaW*D@y>BPW zo%=dtbG6gNBs zHktMBwaEr^&c2#I>He<`3+_9u&Hkm%TiS6!VXtX2QIMIi`i~ocTL@M!5Zm%PVG_iZnPF<|K;0#;!O0Z zxTvVesMKY1PKWS*W0p=3dRW>N+avI2gGX0$_OkrXCoVG1I7 z+;3|-s?E1=$x&N1w?E`}#>9}%H?2Cdp3m_PiEa+nW>sz5xV$X!s@JrPiCLetVy7N( z2(kXz)RX17a-mj8YG9_+l79#8aRi>-@h0ob_I06WCmL?d3R<_y@5y$a>j#_s^bW4# z)t_{A-=cSi!Y(UZy<;5ZyI$z0NQ|z(OZe++zil6fEf$^j%HV$B>iobTho^5zx_WAD zbG&=~V%M3=*Q9ixjyR=tC6P_WdbZKIGWDjvCzTHT%gSATJp26>DYvG+;`7Hg%)XX% zLv?|R{kQhJ9N#WYQkB|yKv(?5>Yq~c5}glhd~U1xV}Ccdb*FgNycyS&{NLnc-ke!I^ZC=v^_7(?c2>SP zz2;v``{9JE>*AI~?Do6+^5ab_QxDVUmd^#QF6%U1dP4d6>s3G5*N0CyB6YV?^H=obHHqFcr#2ZaYgzk=^Y1f7{WG$bpW8D-e;=MUZJMsj zR&O!ytxT6u*ziZpBJThqtS-fLa z!-@R3=jT@(oBPvZ*;`%R+Y_@4KM1!?mMIHfkhRo!W!cVMx8H3jd3EM?^SZU{Q=DdN zZ1tC0r>oEGU7DO9tJZ&QO6Y+gURBOj7F%sjsVy%O+_TsEa z-XYDSk?&-WyqeT+VJ0a&HOCWuhdeCFTw_Sglm+Q=BxTO>zyx^3UYeP}w_G&|g;OXvpPgyO( zB=2gKTdvPj(FmUy96oQ>{gvA3=JVc5+NZauu1(Rl@IUxqOOIc!|~ zd;Vp?2YLtMxFZ{2xthtQ{mzwzC4szBzN@9`^CXpAc08*#2z2}VkJBmU!_P05SAHq~ z$LCP){x4I{`@qU4XHT&HZd&j}d0ptSu#G=od1>W2?Q^Ixe$D-8#l@w3T^;&wG@b1~ zJUHLTP!_V7FDfWb@%brRq3M;AnOA4$lzaBxVYuz{a@JG5->!m>6lW?|99ve{_OsA{ z?PmV+f0y_imed(BU!P~eY^Ldccx70q*Q~ze2OSn(yFc*N_pi5Cx@pV zVgFaNi1Xq33%~PTy(r;aC@*Lb?ev33xWZ#aYN~L>+$)*4r+Pk!tz-3kP_&Cz^+U#5 ztC^k;np--#m!0JJob-sPBJkJym0woR-}b!Nk?)08)dQDSdxq*u$t%BHJTCpY_3`DC z-3NOM?sKwBw>GU^)#hqClc`qOVtZAh*$t&F!lkJvE^j*c?AUx~#+ajy2i3H+g+mu@ zy|+~Q(!*vY-m_*4cNrbH(tS0tv-{p-b@{S$6;*ftG`-c0`0e-VEjL3)o0{x=)BDXI zmtE=x?}%L&Vz=|hjTWH|d_@l@-rU|*B;&t5w549+>nY|}MQXv3v5IM%Tt)v>S#7X6 zw_?rHt9DPF?U`ik?yoNM$_-sK!!W0}yG5y?Zbe)B!j)^MX|I3cd0P8OPN>Jbg1HY_ z6!_+5uTA2pld7G`PB)rH`Kge9;?WP@WveQ#D zEoRu>b+ao}yS8Qd?Fox>J3eLZD{fXS-g0*5^CFY0?3|3C4Ya!t_blBxIXCHuu9YIc zTvW(*g&LXXVpp%)ZOvX4y@&7Y+pKj>XD5e+EJ#ydQ?Tn?neg_A{K*k4c5=EGO;*cn z5?i~i^p0*&@Xs0FdN$1b>4CIgw$xuvx%P<+5%;xWvt$WNH(YIuJ<7)fa4IkI__>~E)zon?mC$zzYll4%c zRY@fKJw(|+U&+#okoBgg96#Z20_;fteY?6K0<3A4{zH;5l z%eC8NU6{G&=6fHna6a!}?(wf+&!@0oTaMY-&GP&g(f1?b&L6}6)Tdurb+qr#FpcWk z%)WNwl%kj|PsFBA7OpheV#mEIzP;~DJ!AWc|1al!`W&|I<+H-aE5?wAGd`zpiX|?0j9f42$c%f0`09zn|KEoO5Wcf@g`HXx(p@ z5;29j_U*jEKBWw+wz$%5L;0)tJc@T|D{A= z)$h*g@9FzjFVy?>*@^e>?94s8++2I^1Z)*%KPMgtoVQa!Mf9vPM+4=Z}Z*v$K&92dw#54%>M80f1!$+ za-*HUpG+=xH~E)*YU=dAk6$#F|NhVR&rqtrKkxRm-}An0)eMjO_kA&Y-}J$T)oFTIP||6Tnr_2cWal%mhmbSv-k%hx|u&6l(N5cgmELFbxxH%`B| zEYyD2Y2@H*15-#n(K1?-HL@{`}?jFKF9>oXk+xtjs&6wOns5 z?3%GM>L5?Z6|PXbiQd+al;pQf*i*(Cbs+BdAMp)+KXnt_K1lp|#`#I}Y2=D5XVLIe zQ%ofPp8oW+CS1tKBI}UIv*HAP>*MP3eMYOjZvNR6lsB_sU6Ho6N<~YDTF!$&(MBWD z_;+GEu4un~ayYH&^Y!kg$@wdud1$XVrfG4w%H7vx(VN0+{BtJt7h6vbZz`BpaOy{! zR{x&Z7R8m$Rr7WzZ3sCy-SX$US#{Ds4g3oJy*W}?v^HdFb&~Alu-SnHJ?tkn%rOeYGSg-trZ)+j`2*n&LI-F(0lVWPrDq&!Y{cZ?&>e*Tl8(Q znOAhoLP&Vda)ZwWdh11|Y-~;SUOiKZ`~KQ@;S(ohntYtP#-TN8$tvNUC9`dw92R-_ z`FnSA`L0>czRBfUEpPoaH{AVR@afII%}vg4&gluisFbT*-7v#q#q*8{cc0d*Y4>&v)FNdi>}_hP<@2H|Jc-)|ai`we-jl!CCHa&P}fll;KT% z)Aw4JW7h(c?*-3F{FTo9a4mY*-ZW`?q?Vnq>B~u6jxBsVY4a`|J^wDu<^X?IELZy0 z6$eGOn5N60x-u!fymG@l?bR+%!*+J8T{S)WZ}r;^oKm-~R8I(2xOwI_AJX#AGAWd- z+nCle=Y662rXv&Ilg=~g(W0yR zYPG`+F8F`wbISFI(o70da(`;5x%-0C`b!UFS!>(bOh4z9>BhekkJMc*d9ut&b%)49 z8x!W0t+m$r8kM=b=JGTBPrv-GI^~q{L0t($L-1Z#Pqtt^uYItk-9h5__~$X+Z$>hW8e9*+;C+? zuhA1Rn@3{atckZSO1HhP>{?T}I(L?!u3N-qpGThWM2&wQk-w2DWPE;=m*DRIHG+SG zk0qr(%7|Q2!M0mJeqYL+ccmJAGc5Xch)$WBfAO2p?(C?mp{6lH?s*HR-pf>|sf)C7 zX1=lC!gTYj*x2qux$T!#9ZieVmaoqHFy+&pSvyaiYR6OeIl1~_=#M~%qE@JhQXpQ9a+5Y zG_NV2$REvlu3dbi+RT+=bAxVkKM+eR-L_3!D!})W>qH~FtOuSm8#hTYuJmM+eR5dk z_bF@Ugh3xlDh` z6z^s1nd4vs5!1^ixnsTOe<#K;pNx_hJNfy6ogFo$e zm3pA5HEolZmv-0br7|nob=OPlrl|T_YBH-IFbmqHw(@k9Uq{Ui_e+Pq2S!;in$OrG zn@%VFxuq?WHpy^A3e7&SRQAH8Gxu{uuS|NnK&@q3^V}sd7t>EoH5ON0 zrS(y~IA_(%igMB88+La+*{T0*)4N@B)+@bR^l7-F^?R|Wc;bsEVVdcYv7TEe`9FX5=jzq9aslb#;f}o82d;F4WRzabpC1wX)73p7 zV(tsazPs~p7hb)(K<4PxPPy>Ae=B9fV|jH>@cMmuarE8!w>z@xF8@;{kS z-S_t1*>V@X3_b2;_Ze2KX0s1xZ4pfLd7dH6#+tZwSM2GGrg^*z)aKbTZ|@F_d-3+% z;*)RB96WvDt>5OGQma3{t(&m(uKkI(a$!GN6CFd+{W+WeOxU%}w>f{ioW>(phPZjN z>tk3p`QJAvi@kfj-1Ns+?tnh|oog9%Zgj2_m^@uLt)fu7`&ms@@PW7Y()i-!KF59B zac=wF&6?~>jsE5r1U!7&{zGu9sV2vz@FRkJ*P|4AChums5W9o*?o*}59rxeLZM_mN zSRDUNV_RSbqIl z=b}Yy&8ve$^gA+3W3Aj|ewi^_IWicgGkkg0z2U{r$n_P!!Z&a@+I=gWD7=R=UN0%( zL};G+d_(Cs7wfY_{@&|Y>+9Fww)pF99=7K~r;UQ2$6e1T=Hy+Uo$2}i%ziKNfb|7e z`Y-*P)%)+j$uc)4vltIKg=*P<_V?D=Y3nLq0$ ztC{3pzIK0C+TX>WYd=3bduI0e^m}_G5AZaEsw$@+@=O0&BDG@IQ~SS5_Nv!AMFxar zMQ!$)9jqJTqp3S%x0&W%#ocX^3A)N$w?rf_nAGfzh&+4!>3WGKz93bn@}miCzd{dx zeSM4dr|{{BO(BYF6nCqI8oDxPdmJ-mIV5#uEtlacNA<9W zY>?Lfecp6K@S=w^7sQ`i>w8Ijjr^f4LavYZZ(KN8(B_!@12dVNeR+lBd^}ZJ za#U2H$$q9_-OHlS%lKXjDfxLyM&xL0 zz{{^pIR_HDrv>y*IC$=gYKE&N-;J5ygXf<7k?-&I|NEt?57(~SCoJuho2u3)t1Pjj zlK=2YgQ5Gc<cEX{5Bt^^yTMN zFFT$JS@Xp7zuoLT6FS;+e@jKk9oc&H=l7eFA|D)g)%FxSalp$c>}TdlNtYw1de5;R z4BlaOjMLtJwg-!oDt}X92>YMw`_E5{J{bLB^J)isvF*JdE~^N0vi*6ZcA|R1u^poS zlJ8V2EYWM3u`H!?;Rz#a_2VMT=fzm$wbxD5b@8s_Uv%R2gZYP&=FLlhh?-rRofefU4GV}E$3b9|3|wEEO~k7Mq(Qyq*XehYq2k72C;vHgPnJN{eB z2kbMpT>om87Uezq(Md=5_6Pz0w!i7v=zeAAa*4F0}oW%bVMfr~otxdeYNdVlaQi)Z(}`b!qVm%cH5b#eX3{7dQcnm0Mg zYqBQo`kQ%|xx?gNkLB0KMh$+?F*)R3C zrug$`YmRAO8$LgYidJSexVOtzoNvBtj{}=>fNltPa>w2jgTTFCW@~*ix%OM?%I)`i zr_GFftg%=AiuknqbJsRh`G;&z+`Ba({|U?giOU+fn=OsEGrd|X-ko(Jj$38-%qjP# zS6{L|P<7$w$t3ArD!(Jwd|w^#-e5_k)s>iz|MPEDv#3m5d%UsWW&NrX$}iYw|2*?{ z=9!f}=8E&34n#;SW)_cfMNQZmep-0pxWbg|Rwv^H0sfvDza`i1u4HY^c|SSxi1neY)W$t=Qw&Y? zmGf%?E4}BGRJi@V`*9^J)A87w&Y_ofxMZ$TjM5ZY@u=vrQ*-05`-%rwzC4`bW39OQ z_x!cp7aeW{+kZG)uY7Z|PFcp^U7;KW@(ewK1oZHXxvNcOFn&+jy zcK_i%elP#i0nfz?E;rryC==l{cm78UGlnfkJPl^s{6D#*>zHF$ws*6#aD12- zyp`H2Hw2|>oR&*x8l2IZ_*_iv*(vX?3K_p7rS`+kcRzf5n|emXLL_2Emg25=9e)i2 zebkzziyO8G`Cj{fQA>_DHkCi@v|+x|W%cL_(kIpP%MDt2)a7=+C{p`jzr;NF#U0jv zzC|3iCmEkKo#s29p0Vb?Y;P&Uf~`9@)bL2{Ppau&Bw)yU>(Y^X<_=pvzcfy7`107b zQj}BExqBK@^V~VYg-b8}t1Ol{EhfY^_v*Ua-Wzn(OvJ06i2BX8=n!xeuY3@GK=FU9 z<@KMRA0BR~J>k;H(h$S-ss7JIo3fSH{)OgBoR$;fO114@%H}*X@x~#M7b0SZ{u@J9`9MiblU!EL-37qnuCH%D2w-olT_>hkw{ksie#; zW)U6hU%#3D%4uP%(}LD{ZAGdPc_PjoL97o>bxdMad6|`G6@E3;$~aOkz-iw^?o%^GoaV`ae2ZS36E!Ycc=iS7jjheh zA5%gec4{7+Y$)sRQ^3@t^1t>><%0)~0^iG6V;>u2$A-GPhVE6hbyhj&A?|nHvUdjj&li0G-rZ3>c!=;z1zt+F~^)V_+Gs<3J1u9laOBsr&#!-f_*E!o)ywf>_r#SCWO@WQUHH>oAgAax>!f7DRhb2=YIx4S+%Zq3 z=*;>FYcj=3t~_$q`6x7x*+c1FoSKQ{lwW?v5x1|n_|0XOifWr^uI6_{`$o;PjAP$> zT&84opH}{uAyDnwQq*8ImsfA%`zyI?bGNjauox_s`Z_CzdvXY(xxt%RM%B1%h&SG{$FID&@MA;zx9oc+Ogb;?UA$E6Wk-++PKS70#ARR zCD+4Rw{>oT-oFEV^J4dl>&-pdqbzW*`fQe$Zm5bv#3%LJ#ZmJ@p4!^loVRgSJDb|a zplIB4I9d0i@|k0Th0ioxv%G>C-PxjlO2yn^mP}9BdcnRc_B4;oO`YpA+LGr@^e@aW6rVXIb{=0_UhXp8 zo>k}U-D4jX9Jnzp=<%zx(97MTQ_qJ#-}~eKpF@Q|qwlLMI;1kyDb8(+s++Ele#gdT z{h>yjHgh`WwFU31-23_2X0az7&+hG;oylHU(6B7oUFC?!t?71KycV#eOb}PQbH#oI zKOg6lD^Ie+rl((fV-Ri=uV1R8tt&Y(${_HkMaSlqoiirz1P8@V*lM58@YDvCnwguwr4ju|v(nJv$FH^)c*Wc-keod?jzM!>L5B ziJyJ+eV!W~J=bS>rqkuM$g@NJGvW=O-}rXpZS}V|i7W=&9Kuhq%Gm4|)JqKTU^#az z@6J83M{!1iQ`S@`R33Mh{hrpEY{= zoUe{0*6`MS)4#Uy#qal~pF_Kgka??)PMoCT9-voEuM`Dd=gzAsLym5p8Bn_mAb z+~R8gr{QXv=fYb%rCdcrcC)OS+j8~Yw4nFRUk=M}y||lk%B}ehd&?5Hmj7t@qJF+n zXOp1guhUbXWPWL0TO;E);bg&*OB3e3mA+KZ`sw&B!6oS**>)?`CO+mkuD_|$nU!^q zjCA<%i{2@0c^kXjz638gW2f-z^2*RtO*$?Z5CZ zQ+$j4ZQd>B{~IU%6d5-h9Z_)c%?}CQro9z! z{@>z0VqeMeVa{v&zakp@Bi=RrU@iO9*s*@?x6h?|9sAjxd{w&Jemu%kv^&Uj@`?G> z@0R-V)@+mRl?N!*t6pckx&NPQ-IvPNzni(l57kR@tHyG~-!VS4KlXBxp?cNknxr;+8Y!rd+xtX`@->|lVie%e-{@&KXLv< z`nh?mlIgEsmPKT(xhnRE`^0Lk*dPBaHMWU#AN>(`$9ms+*B}2vJKmo+5ePjuKY{g; zaoH}W&)d^3@Ao|>e=1P+s$NCES_&hFjKUs!|AW7;_sg+zy1&}h`2B6v+X9aF_jd+l z?+)-jSUuP3c*2Rm*Cv`VWm#IYXE&9n*Gn7-GLqC&&3>_T$?muNYTw%E^*86Lf_IhiQ3q)duYoYEVe$ff2XXI!O5Lw#$S4LH2wwa z{M*C7LceI=HJ*7b0rgL0650d)pEpcS_^EDqW&acXEA^}2dCCX;Uun5uQ>jd)YWdX} zDx%vqbfk`ZmmdVDzf%XkF>iq$EvC#w{N zJ#l8{dku9(A51w0de0d%VG#6)7*K98hFvDvR9}bXrQp#4mP!+JjK- zBCVe%MQ`pD?PNRo=Alev%(R*6Gb7GAnx1QHNw7&SU*Gb;TU@atQ%^Vg?h`eZ>z}!g ztv1`s#p&4QdqU7Pa?$7DmRA|83zjr_CM>RdKRs~2ddm}~*$02|L~>aFK6rcc3|@s6 zs|%NvEf1VoaA&gQhU}18Q)ft8lwI*Q|FfihOM*7X#;1-^3R>P>zKJ&vZD!T%@{ryg z)@XU~wu!;#qnv(Deg)D;9Q+>aapj4$GVDp^rX=q_&!(%^DL;Douv9qeQD{VaTj3Jvx&?*j<{ivYPV3>1`H=YF{Ta(^ z({r{>kE`PR)I9gX^t6V8|344<-T#xYChk7l&x3u7n*JO*^rvajB^S9{GoGkA-FPmQz62y!5^Uk}1 zEr*S|71#~G9&>D~rYZl`8L<7&o+$+n6bj(Gf$55vNb)Em5=hu zwMoxul9IXZoy@&3X|>htsDMubugtE56s8BicVkmDTW~EcY)O%8;xdlVRW4_ZHeC{~ zP}O89Ji~Z_P`3Bq&57*6`1a#uX4+4L+#ZSM1Mb~(9#_s6b3o368M(Zs6s_fbz*?0uQ)`B77` zt-y7Y#_Xm1UWvz_s|D@t)~~2Mn*M&@rHrj+hd%D)`qd$E?C3wC1)+LOU+T%VvHz&h5{s8_zr^ znK_mT`m~&3%sDM2z3tPi#>ky&`z4}o9+%mapuJpj(xVAepPqbq3e(q9>v)(drmP_`QoGd z@oKo+Cqs=w(YDD*|TtY)((q2qn#gnD?i`+v*B9J zHnHmrxtm{o%SmIMqVws><#y)6mHW6l?6&NV^b@F_;5I+`@g$X-@_imw6XnO-EWnjraz5RI6K{SL#*wL zLtn1;Ju*}4^2u2NVV2u0M7SNFyZ*1_cT~DpEbwXG;ioNqJuTOs%jhlSP5pH#? zhnqg;`2KwP%U~Mk=XqbZ-=4vA%yd_{;rovlH*g~-_%N*UlEpQCrH;&Q#(i2;^ z=tFhV@i0e`bI-${pL$z!@WY}<3ny!etn)vtQ4>oHx-s zIW;w=Fx%9cd3Mb^21f=qlYI^jdTfkojL{yA4SN)rwWl5~Y;KUg@WlV8$H9S+E7s{P&z$UMt+R2*+6OabT~cOT znI|+~Dzod9Ajg!8%Q7_E=blXq+K_j-Awl-(G2_+SOExw|wyjaP^7%1~;;#>DmYA@5 zi>q|>pMRKWV<{xm;B+jsE3YF~wA|Z#$BJuV2NwKnbB^3~Mq}O0$heYB`3tUG4+aC3x-RbA+v-^uX&bIa5o7JJv|(~gsGE^7Ck#aHPp;F4!o z(LCWaPm$lOlR4_|WMvIL|7G~3R@_%P`{<_J+h!gz&+g7U$#Zn~q8K*$uRC{0w<|B> zWVP6m@^KTpxNhv0l8oTX7ZlH)eNvF5E6H+f#plhUT2qy*_fL?QJ^lEo+vnBYU2W1l z0lP~KIwcPFED|=0`Lk~KmDSH3g(`RctNGaTh+(hM>d>VcGiNQ2%?rqQck1kF-!Ptu z`6+HQKXX*ZTIrkm$SXfy{?v79YnQ;KrE;D(Za?Mil9TtGkscTJqDn>4#?Z*fGE4uW zOWevoFP{V`ncVp6b%^7Jy1&zg`reBV1-ovv^o#G!R?dH5?eSdT@b8=F3|FnWlv#Nz zmCZ6IJug=%=lS9dbG@A6lv9?syjrYUv(RXfPRNPG=c++(ZHz9I$u+L|di~VvSE2Jqy2jPq?17v`^VoTvS6_ z_{Y^#dyaAac76H8txnE-b1iG%Zx-2T6l;Dt720!_W54*Xme;WXM}v3*)bE`2 z(-jF(+{0(oqS-g6rgE)^k&SluVE` zuJ@^JKwnz&gUk$P1WvLbLvV&U58!J6peru=|``p zhHSt4;`L{Rko2u3W%qfN9!@{y|C&L<>crjR4ePHtG|WF^@tpGmcj(*=OkbEZuWeBY zX4o&)^Y_VQt&UIA_ZPCCxL>WRa)YhXf2-eu&Xeauo;=kw`h0cHjR-SqvuVuLx#nM- zc`OQSF8t1Oa#m}aUFtNYJ9$=zsf#b4Vrj|G$osES{H9Lp7#z{W@*ZbQ7xAvzl zU{w1l^I)E>cbsMNmbqH)jFSVl2h+c~SU^vTp&mFME$9r@wE*QD^#>E&m(O@113 zg~h<^PTYx{rta4L67|frA(G*EkfmD{u? zIc%DxrLKv|lPQwT`(0T&4_3UF_^&PS_gf<~$K(A)PdGd*l9t_0G@j*a#&la<5O= zaO(c>dsf#{Et}$4`(B(4`NRBcs)S)ob-A!=ico~>xf#uu64q+Ge=NV_j^KL-Htuh# zg=c@}8An{c;^H@(xl6`$|F&(9X4=fZdC20S{7wu1eUaPuZj+qY-LQhKws70jvzxV_ zZaweN*xWYJym%VVq%eui|U*sNm@SNsSO*Lm^lPuTS3d{u9nSOw11hI!VpGPPHH zJ5*rtd-*}p$Wu2Oo#ppQIkYqhO#9PmR(bmJ&&u2F&u652EZuoV_M_y+rCTpfTVd6_ zO!1h^#Fh4EbUpWWus3}}ww=Kr2^y^W^!yVl% zkFKApU(d2&*P-IZ*=5yc!N+$zbnLI{Ii^u)@+|z#h93+%o&U zw#v-@3Db|aY+BQ}Mn)=K;6{7(@gyg!^XW&Y-gMj?oBr-vMC~l`3t{`i>&i1GJYOQw zb$vyuk6CiKIivKp&+~3JKJGYakx*<~;P*3ZbLH!6YbTViZHdqoVV|6F?`mv=^wC6S z!S}x&^ab?tPMKhNWbf*$tM>f)V>5Nv6lwYMkB=TNc3g1L;!?(u=c@ae#T9-oVN;S3 zjhWvpU|RR^XVNkg)4fj1Cf#bWyv%iF@-`LkSE-_(KOYnB4-I+osm(LE__4{HLm{ob ztHpIU8D6X{yjUQl{;)Z}K#Kj_ms?_Hdd4dYi)#NqaWhg%&tUs{OC>#JRBl zm~zGNz0&rkOqFEg$xrJtS#8=HfASQx?s)5OQgPP&enz;qd&UgQq=}(QXIG19s)=~H z*=vg2Oi}K%cy1e{&`e%;Xa-2#Qf&%yMB24bEBhiM?OyZES_}c(qTRy8RG*n1*}ZZ8@KhJ zG+5oSrfW*Y9Xqplw%gB7EWK5}LI1tY!*3IE-j~T8;nmt*)B8r^;l&GvKVp=#?q|uj zd=z=o^<+Y^LiS5e_Da#e2_JPQ7@SMbS!iH#F2VD;*E^O;2?tdJE^Jx1V{g|@mkkk| zhr7ByWeH8n(kc7YuHgKv#cf}g_T>Ve!lg-`nr2DHGAi}o&UQ#DWiJZ}eQN6QZ_9Ln zn_Hdyf;=*(%$U8V8!;L;mZvJS{ zxUWSw<(aklc7cn=>+L+{pU=Lk?)67vS;^$|jjXR!v|3b!mfhN1{B$rDVHkE%L^ zmM;xks^FF5+bizmrQ`1vawLnzL^Y1reObJF(jB+6VoReRoM>^Id&AO*`SfPanXUrI zxix!yQq|MkrWNRLy<%OF{cpej@-x!Pg_6c*lbNq=F;y~dUd~n-QFLR{>2vGX$E!bD zDEr;PKH6J;$6NOc+5X)pM8E86|8v6qg7#}6zN)u+dU9(n`ka}rQB*8Csm65C;SRCG zan}6d9ZnXeHX0u*7fs_)a(dpN@LR{)?9=88ClqUqHaShndzbWN!X_Q3pm`#v`7}E` zIv;x~b=`E+{Q64v;`H$MD<(>pwQuY^+|GGSU*%`h;lnpH{y)F-mM_h4Yv{{Tiw!q^ zO8l72)3TOVWs%sN3zmKh?jEqc5gzlR)nUFBU(30z@BYa9ED+9pvaMrs)$PJ$2^OIf zak~|#J8ycyA-TPKj>W8?_jUhkCw!5sRd{RSp}K!n)q{JNt8TNq`OJ3Y{;AaQ^8xer z6W#wVrZZj9TcvEjKK99Q==Ef%&i{QpwtR2drG)M6wfaTB2m9;4yr}&2r}eSgnOXj?-;~AfyvTO;v(}WX zBeie!tM#1TRO+XkS6{_B`}6*J>dg8x>^02inMt0Xk-#fI<#625H$O{H%xgE^Cn-@~ zC%dHPf>Y>bu5Fo5HztQJ=)Lo+-}=Vq)?}0FYu8^-_EI+abZ63}n4QZ!1dc!Ze6x_r z##X-N^5hq@`9->S{c>1jGkt<3%SW3XR@^uLoLLdHPPhG2qdVIkD|yG|@tkLOc0bu< z9sc~Y#p?%x`TuIPuHEABlAOhn@`*?mXqjQ*C0D*owv!! zr)hP0Ro>j&{#NW*F}XJON^a}~`Al5}k*&*NXfZfCCLU(_Iq4c_2OMBiH7~HQ+5|9<=Ia8GubM3?O&r{BCf3~K^FoT6d zD)yF8YG2;P>{&O|4jy^9(Mcnj#ZF_#)%(p&7jv(^dbH59)3nmUCDNx=gE?05)PaLq zvjfg=O-YRu5ECG4-CmE9xm>b>R7mW5^!%9~Dc*PF`y<2i96zC-Ab-_w7$jb~=| zh_8@Yo_GG+za6QUul4rZ?MwaqL^D|JaD5n`*{gQ`>(cDgS6{w#ls;}Y~*ZMu(LKa?&V>%!nfVe zUd5IQ9rv1BW^(Fa)l2owJgoNK!by{x);x?n$rRb5s-kJ;cIX&Sy}2*1m1Nzn328sr zI|@4#bhdVgGH{vYFlzRJB+-o3pvixeL*Ho{W%k`dZx*7AO z`P9`0&m%?qoBPt)#bQJ+n#}AxEc!)yk=?dAAB-10tjRi@skwLhrgZ&_PihLa7?j(L zoMZeul`dVLDn0p#LU_Pdu``O(zHY9qF0}%;pL{2m+$@}ZhWWm=~BmecTK0H^@RTI zU-T|>Vn9!!z>Hh>HD0OuNbX&&q*m zwsW1Tk@j!9w`lqDd#p9juT5504BoN+_luW|vsRYY+e}icXJ@!xYV&Dc`8~#|4gUXD zzna%wa^g$RMK?Qk3;DViVlUI*OyO7+8{r#zspF^ibM9)3MK(s)de)c-%^Nc0W&rXnCuA}#@oMZF;_iV@h@ii{_F1<1< zOvai`Y~kmLYo9!hJ?B1eL(;eJ3pd`I5F@oP^vTpIPc*k2ZK@~>60(kKxIVx7#neNtAKB!hylYXJZJguHq6w zyxFmywM~DPo)$dKV8tL|VR8Q6$@onoPbci}$xrJ}R;k*SvBQ?{>FRZd*Bn@%aDTnR zk)vEDZK+=`O`BWV_x#nS*=AW=odvaT?3>xaF?|Ym(qu*L6JC$B6|_%u^iMyQ7d<^WqY0}cBj+)mbhvu| zm1(laJU0KkC6E5PWU^;RiVGV{la2@5q~s)H%NaZ}3pP&RH~JuFC^NY+x}o{R zf%kDA_j%9YDe3(#TJkKe^2qOBN$Z2(1;}p+UvxUo;=*%A?g`GWG7EM)#4jyod&IEW zkp0JH;|t$~mNA(BS&}Yy2ypBF8chrIP_JL-0ZWD13RByF+TD= zp#NLY@v4uD_a1iqvsPDOU8?Sm^bL3IDozMQl-+#0^GNEkBK|FVPyJLkEO}YY_en~u z^y2arf(m?HUAd9`?=rXCmi~B?P3!B)@C(b0zrJ+lt`z-y=Vr+FazR_6BTg3$b)^sd z2|Ob^F{dk(s~?krKeq;T4N(@Wi^CYIKT=?Sk@X0lD`YEv-9${7)=e_dIyJ*i+ z<{B5a)x#+2?CU+6xlGXk4$s9pBXRbm3HF)?g!Ogx&L^@aeHsCwydqeS7+YT3N2d}b+)(n zdBLOPo$pFESMScS<~rh#yExjcsapHZx2{uO<)_Z4&DXTQIL$RIBIWU0))wLBBDU?u z2M*kOv9DTT+2fYIf0*5OT8qCrsTbPMD!Ad*hiU2uCU037bJJ??QKg#H*C{hj^e$9i z?W?|e@8(jyFXqwD53Q8a3SB(w$DhwepES$2_03<{k+-Q-uV=1<-M3$JEc55A(zB0! zJ9lkyp~Fq9u(9Sl zu#MXi?@g)CZ?H(-JbO0aZ{mvs9A94BnIAq_-nIO;i1WM<&H1vo*^SeeOwL4)c8eI>oZ)>1&?wP_C~wt78%$e%Aezqs=lom~FG_#+j)y z7guOSC^J5P=<}%hSl%zUb$P!e-rWE4;@8^#wYN7^Mn&H?`ElF!Qihz>nmZPkf>eY= z#kyQv--(=9*Zm+vfcLlls#N10_xb)8E)cnvHmCFRn);a*CT+c$*QV*_PcVJIrqm{U z{@pE}tEIb)3%5D*%+3@(vea$HA`vFXvMriXhZ0Y(^pVk0d{!hcoaB)1bS7x=j$gv zTV{9^TdvU6fA7=rk@I?u>X9k=8zZ*m+E`4IV_=TWv2bDJ0irqAyJ#7=WnB=R?C)RD;GG*-skIm%Li8tmbphx9TyMm9PCGyE5t6 z-+kYD`k56iA1NzDR~>Nt*H*XThwu-ZtDoY|1?%qN_%!>P*v@mojwj}XPn{4FoT2`o z$0(&|onOc%Rn{EmoJNn39`l0t%F}lB|KrJEHs7$DH)hAYGE=z^+xHhOzrndNn8)bO zvgqwnr8gvNda~wRH(Zsg>vH1^clLw$`G=0LnD#x<_>X2yPu8W9K85-5%@?eUeKj_m zD&CysI%y)SP)SeLPie)2PK}m~i%KVY3e1+t>^bq|^OB86YxYRqV=DWe{3d%-s`3Rr z$9>NfV~;g$zo>UGYLEAX$aDPtycgP4HVR*ID%mKdnR@y$v&3(4W#0$I&u_-wn39%p zs`~k2?W+Hs<%jvdP51nBd1~;LyR9cY(+wuyhzz+B6Lo9aY{k(48U|J0q~%ee91GSIP2u(7yq>-L))3%`FmykqIjpp2NecVm0ApR^xWczo<*%Y_|B zw-m1DJFvq%>C}P1=To0=DD=IsBUpW5VHM;2*;el!-?TGFdU&tg^Cp5|wd z?Kk>c+`E14r{IJqHCKM$37OG*N3?LsiLxD6O7pVh?>)D>_xsvUy9pI7ZtK1~TEsQ; z%?#1C`RAv3&#Hd?3AcTW9e;n{Rr3G6vs5mix?Z+&q#RDf! z)xBT)dFkDpx$^c)4o5$C?|!xQ&!Z1XGdFDr(A3uR=FM@8R=wEz_wGmCUyMU; z=~XZG49wYLe(G`e;V&E0s*>JG9r(1{e67r%7d3_@mK%1;%8UH6yl4G>!S{0$`Ai`>pogpRT*S z`+sr9&otLD^fSD*>psvPjZS;)-mj`Y zTKCfR38(l2=b-+QVh=5sk5_K2d3ZbI)bps#hWaU2#Y5a@Ezb7hUVU@flZ(wCCaM~? zEchFqlWljXZuR~W?QaiiUwE8LtO>}>)@PqucW+bT!IBOE$-Z{yPbU{1Y@@<+u3t3c>AfG74<2E0njZ%zLSD=)obEAlTXytV*CNBY(k$P2b8N4q=~Q&b@t=P2b;3&iw%3VS9oP2C@v-E{ zn9n%C_&hrO?(2swWe@s1W8M_|JQ6$WqCIt~_6laN5Fe-RWFc$4SuQhrJ|zh?uSwjr zBqei)s*0giluY~27j{zFzdJl-)Q&xvab$f%f0EGtJO2N|gijfBdgkwRay(zmOztaO+QoqJl`ZIQ*qhSTD$uabL9mdnUA z=-ZsrWDlQ{->UcFTkG$F2g$|T+vhJ^aNszT%#R&sIp!qCKH69^DMEv@NON@%ZxBV)FLQ#V+#=N{wI!(WRy>EW3GwIs8vl6S$NGeV1 z4>deIx8L*h!TLGpJwy8$v>gp19iOfdSY~a0Vs_l3I|?rPfq$+4E&4Uz+qm)lT>a%I zr&nKlf9meXlcslfTFb>0cgM#FKYzDlXWFBHDZ3}XXwDW>TKCc`_a(Rb;^64Cih@m7 zL{>L>JwF+c2$^HTTkvh=;nwtw+Ef3AFK`noS-v*x`#`1-=Ry1SWoGoODk zDQ+`aFLZ0?iQMNLwQ3U+J$f9=#EyJ&xp2mq!FKoEE^c4&?2whm{Z}SOO=s*o%JJgDgM?#;>)O7` z^-6j_-4U|7AmaSg$B*ok!xrm^zqqNk^2~|Hl18a)eQ_3x)Xa3fVuYsO3Xz-J^!C!n z@S9789Cz=v`RSFPvGu=(W`@U&%YiyQaJDQ)^3luSLLg?cY8%{ zI;63#_F&B3)%TRIKAoi5oHS`8=e`+F-o2aoWbR76IG;~7=02B{uO4moe07lThU3D& z2iM+{6^T+)R(VlA-Qq!&>2AHVL*Bj6 zUin6C@iO(GNdB;|_Qi?2yf*vj&;CA7yV%k1gjP_paPwEeMJ$eCI~3RH&9=JqQ!6*A zPkZ9A@m;$$z(39}#$7{Qtn8J8VCHKH;3pcPEZ2AP@b}*6xGh3?TF(NdivB&qLOMQ$4@$(mz19e9I=W^F z%TDd4@AjTM66U-PcaK%QG&g=tS^1R>2j@=Q{rG?W#N9pT4NYry?x>jHW*nzFQG04p zr>Eq55)j*ZH4XD?aVR=@g@4A+AHU3rg7^p5s;FC_lGO^ZM-$ zVX5E0+1@MM*|}ehqx@XWmOB-9Qfv~NN@cV^^Bt=FY0r6RZuR+&op;%9RoU)0*%Pu( zM=$J@clV^nkAD97VR7WGRDsV5`PDaH?BU@pi@8+kes#;^NsE7TCsiE$^`Rtg63@D{ zP_Fk|F6{H&*zD5!dF$M`)ibsI%5Lm0?kGQU^1@aoPSKD#I=lDH+%tD?frbCUbMjM` zd7Gr2^!+1aXczCNy2R#HzLQr@_Ef2Oi|Nx-m+Q~r{<34D-iEkL&x^&UmKp^+H3h1f z7kz!X_Up$*FM2LjJWR;Wk?Otw-1yoz#b3f5A9mMy&Rvq4zW1*7ugy}AzVieJnb^y` z&G@u5@R&wm%p4WA$KS<16xH|5dUC?;l3wWajSmvi7bspn)8FIT$X3>*;UbOFBLfFEWKl0xki5O#-n#7mD?H1x1{gBe{o)D*y~lHtM6Q#x0<={n?;G$ zmyp{V|HP!m%`-CJ&rx^$>9Nh0KPEi9d**SVaV_aCKfo7^3~Hp)}nrF}woLi|GK z6Isu`L`ORa*7gY73M}~gt9#ln?z-P8J=f!pU0CjXabn5h>+wBb%vXNUf4t|PQQt2% zfgdHSpT}!u^3M5@vF3UFnje2M3?F+xs;il;xQl~f+nU$8ZE`vfVkd;Kh8zBz(R8Qj zqu1T6;J}w_YC@IwS4170vR~Tj!_u}_Wv;8V&K=Medm52+TB)dY*VC)-$r_ehdtsV!XbVr+&}Fm7ncDPGv1OoXNQG;I;<^X$}pueeEu_`qo7>#&1}~%74I2 z^-pQ8*Nct5%YWZlcDd!)&vP~B&2~n--X<6MI$iV$>zCrq*XI7)5caChN#MvMUQMlY zu4}elbgUChnQ&HO%9>}Irz+UCg-z;wXSJcs*iA&XnGBMqkjP~SC*Ump1F6Mvk z@;ZYj)BMh#&h>b9%2LKMU06ma%ju$ymx%j|$D*E#4rw@NxH&l$axpTPEm(P;%|!6M zHMjj&Igu+9Z}qKn&#JFJ>3gF5%ghP>GtP>Ms9gT;y=19H(Wei8g??Jp?0!6X!h?{+ zWUI?=9;+@{EXqg@+19YWN89U2%N{a&! zvlPF62}@jf{BpF2`2A;-yEn`7-}?A)e*Z3-?C>;zjflOpnP;r`rCU;{$|yC z{=Qml=5y-%(o6+p#4+cfL#B9rNmM_UCWDk-xde^LKCEqK&`W|;WxvzU42ek*}XbyxGuZs#6RPx~F&Zl1aS*YyeC zRzEv`s#o0in73NQad**sOa4Cp&zZTuYMIdFZ=a|AGHNtCHio|&ig&Ny zKi%(yNkMCD-<)X0(w8ol`%0ATB(1jh91$sb>9V=2DDU~Nr+4nne`qNl+n&0;I^N`B zWrUc@r2Ds~?dm^0@7u>S8=e-rP7 zbI;WEPegh}UQSxmm9yGG^H8|NGJ|d3D=Y8#`4r^Eyx(gR^gKNNts29rN%nX3(GfZM>(r`PAlIo7!Vj4!$`Pv9eKFF1GWtRItSFUw3}hx-=JG-+S*xmzB!y_3PVH z+GqPNcAtIb@agWOlCG|jkCJ}f>#P2Ay7JFe<>!KX?XG=t@;$nF-uJQvbKE<1RrOSb zp4&WgnYqaLrc9;HJ++_lZ=NsTabERnZd>ifbJcBu)+#Cg-@iI>d5y{A-BuTl*1p?q zQK`<_C>i1qThMiZ;KKZj;*)!M&7rSY_% zM?$gif+DA5^_^vD9Lk*b1$TARTWj0z9b}f?tTshV#OK^K9dog$=UP*resm4yR^OBG zVnbWT32lY8KZ1KSb)HG>IM#DVYhBx7;m%b?Gtw3<;9U|W(Qt$NXD!P%&21VRx9^mU z;@PXB&!V%!W5@okoN2xKx&i)y8DSFKx}S@tq%Aq|LtN8!A8X)~(gKsE9gCBtji!{X zYm1#V?U{h1>y=~&r7)H!C7~@o?OjWngckKmGGD*-M6c`4%A?7Vxkt0UKFN9OwYci2 zW8}jtO@;N&T2m%Xzj$@)1M51yXyJIJDN{F^PTGBX#?zJ}frMFwf3xJjdKdQJX=>y6 zdR<_4$`1EEyoLvJJ2F10f7rI6WAXDTsZYWjoHJZsPEER^yjEf6tBLn(zMSBXIGQ4_ zb?m|Zmft_P7cbv$z{JR4-kD!;<=$f6H7Cw}$+arszm}zzz3iQV{wB6aZ?E|h6V212 z8*?(sKF3_uNUhM>I5ksU%KXI_<;h=9I-5B96gvor+ulBuFo)5+!~dev)7?zd(q;Lx zk7X^}pE56>chi(9Int2^b=7v!2cJGINHkS0K9t;H>cejMCv$OTPM6<}v=pO-zpgbb zaG9bh&tvhx{Qs;^9cjDLK5c%sbc5znRsX(#zM4G_W-Ml^^;?W=`YL#YPRt6Ob?KpJ zRb6tSz-1AMBVh-)4mtAunEd0`d@i%hv~0Cp^Yt#G4$)6}ZboUyF3OmdVThuN0OU8fb{cS_rc=9a#TwYr@<#u2(%r*PWB_EqB|u+gR$_>n$6MC$R<2 zJ-E>7aq$hw`+q{`Ze05N+yf)8gLRL1LxN-cr#?9Q?3wA$V6FxW?`@0Lmi)QYQ=vIq zH~n>+)~h9g4?j6>5e!>%2E{Q35DFO^;++lfLFQ$o7*&S%CgzwUqPTH2PWEbI@s z)-`VbvpQkNqChb*#}m;hZ(j$n&iu4y>f?|NO+9Wi8$I}W9*Hl$%+#A*x~sEjZAOma zx`yKx+`eB|+V8bveA(A?^vs0RwKEoE)q703IAy8yth+6*V);|IuQ8Wc_9R2~?b0<2 z7I~~v5scC-&CdU}CQMlrC&uP`MM-))W2o}^ur+e4TXY4kpY&-lGU%Az?sxq9x(gXm zs#OmSOu1)sd^ji=!T7&V?9R%6DV3XZ9;IoRzmRt?I<9+CUUyqk=iq$H+99B2={ zvi@4u@slMl7jtcV6m!fqqiVmF#H_nBT7O+z&HO2mbEz-%c_;_`UlQ7pFR8F@G1GZ^>WQxOPW}eZrO|eyS6yG z=Fs+Nmi^72^tAreF{~Gb#{AptJaYpVGlQ-s-M`nLHU6Ef(724_TLT*%@3(_KQ*sS)kEQ3P}3cD z?>_-Q1!oqBT)(uHW!=-Hr>aH|d2d{>c(Lx=FViKb+fTiIkfNUAduik9(8*jgXGTVz zz8#v|eKF;Fd1?6CqXizq44_xKf@iYGX^U{kzE3Pf6>_&*zdQ z?2$Spw)sDnpXI1rt7Fo`xivGoeal2`5&rF3x2;qbMXj6|z{c`1BsPZs3R{NNR>pl> z7^MoVrs!14tQ2OKy;^54b5$a8amk;>t2|j9_2tjGYK5dn9ZR|D<$S2tQfo=;T65i; z2Xg~1Z4%37ynE~QKgm=H6Rx|i*%Ja&KCNj#{;V%nNARjAZ;OdS$Nj5o6-y)bt~{*7 zNXD^DlcV?4IJx7vqD|(#71w)(UQBM!G_-NdGv+_HIJ!W< z{lV?~cRzDzEmaee&(Hh!e6~y9*TCmrcW#sX&&^-g{q2G6icil&)|~pkTYbN4^{02C zirq5X4*uuvuj~Hy;_ix|oZ1;%EOLDRbDyv4{`ST;LbX8Wl|sa(1=}ZW%8J(3(|or! z`G# z_}tBOrL{>9vVN|r-zKHDdg7t0Lbq0xmfkz!lr}A9W6qXMUm16Vc%Ir7t82bH{Itd` z+22>VbZ4%%J~8Rxx2ij>7u@$hJHEX&ioedFLpdz zvm-35i^F5nweE%~8)j6<*uA&qn>oep#^i*p3xY1cem!6P)`>I=uI-Z^{#c#=S90%t zA;}9&ADu7GaT4qJvdzIfRI$cEZ@c-8=@Xnkq}S}{VJ|%N?QF^+jo$_-JNP#A>~Ol1 zu;F5yjY;sXY#pwZxvUSfk^}^0Z%IfT(uvC{Z_@aDi0MGdq$9n%#g0A!PH%SQ^$yNd)ubF)hVPYO=#6jao4R?yb66*FJRW%kf~ zzVDCRHCL^!)w;bYo}X$r|6#$I1H1NG8{7?hv1pQ#vQWm|AkDk468HMe|7w+a*XqD! z<`-8A^lUAg1bgdZ0!RICb4-Ed96_S&zfF73%m>%M+uykb?^9+=^A(3$h97r(0E zny=jRx7Hb6eK>>bG!K(BC*wzXlPL}9OSNJ$7Y6upIFy7aYwI|ep0}vqncOvp;fdHI z`@`|8Jhm@sXPY%KG5Nw}mB60tFWIN>`P01x-ZUH5dPSo#vSKH9ZvDZAd%Ca0N|#S?-iKlND>^486HQJ1_F z$McwttgA!r*iY>`cr$tG?{+_l=W8!rtBcGMzgmAGC{Xj_jUWN>Z;Ssc`2E@N>Du}4 zJ4+Y+&X>IM>h?aq)%oswqEt6^e%R0@b}Z;{R<-!ncQtqJwMS`0_21ikKK9Pa8_p3M zAK#tDeRjjTT8<5Sv*a$SuMjF!cl)5cGB4%pdTGT+7NI}iyGOZ~mnD~9s>)Rp`j+^# z{QjA@IZtbDobuYhw8ypP`re-hqZN!6>1p)Lv~^8hWxUmE!O#85`<$O`?>=O6=KS*e zAso&-Hny{0yR&|^<$le%tCz%w->&)i`+et^?EMp$PZLno`IWi#X~h202>W^O9bd0Z z%4qO*eerTa-;K`!R+|<%H!W_~G+ocvz%Dt?KQ-h3E^h`|jrUVr)T0ZOUK9#r8XFCtL)j8<6@%v2rA9HQxtHTjj zbN_DB_%MGy8LJR$pmk$tsPE9YU^SCzKsWZo=Ps+e0h^XK%VbARbxj8$+x zKabTu!IuAKWTlG{j~7sl`q{sU7HgAezNwxdHC|NeZHKZ;;VV* z*wi-evD+AYUNd69``@j}&z}_DEDUcwp|j|Xge=ehqh(9(?|gUv#2z;Hv_Gwqen&NtMxA}=XotGHKF~h<7)k&7e=3! ziJfxTIH|&G;V(O_5dS?7xBN+e>3omv*1hJ&EBkm{)_rX?b`?n9wRz);&prXN^6s-{ z#but9n?2jw$0_?LkNVzAAfeOG%PQj;dPFE5A9KO%|K?YiYLm zNz^a*ivFFtQqN+uvA*>==e2rPmEUA`EqvWK(L|cb$Ge~5^79kl7!6!w&o_NDn()E% zg1BwE)TE+){Xyr1vz~u!EkAet@m;BzPRq-`*&GOa_sYy#zVJ==)c-9juB;CIJJ~4l zU(ETiR!7at2ifQL$FEp%T>r;{pVy{o>vA7p|9<1`_dC`4dQyGgV|M9Ql`Xux@58>| z66?O#*}dHNLjCibZ#rTz%_nc3Df@IU-R!}h16LEu*6&t|Ep^|mwBp#!{F^GG zk`=qPd!)tA9ll-FGk3$KrFPnPU#=?gmS5YtZB9Vzov=;@#Dmt@FO$=gP=GahfaFx>R$Wtfr4^!P4moOLy0VRjp)xy>-^T zIdA8`d|!1|XIs~cy=ONB@ZFn`RKucu_r>N*{m(Ay##%IZrSDBVThLKZ-(Gb1(2kJ$ z#qECAey%BzPrdi@fvS^R%xk$X%ICG2CmNo;u=MF!Gr!o3=6T{1tUI$y&)=Nuowp_B;vAHU8`!?8JO}!5)vWfRqiar>oEVS2`w^pICh(#Y@NM*rz6? zh&3Eys_*6hUR__dTh~*2$(O@#mp-xOe;WIeQTonG8OGFD$8DFFEeh4v@RIPAd{?o( zE0f{Z_SR-~dD9QpYaadfZTmt~|3hudf_RTEkvJ*MTGrfb`);)i%R|9l$AdmE zPcV5qXLfUN6${-DwNHFHoh#Wz$)sGeJ~B zN<=~|<=CgV_tVc_@X=V7Bi5*4KWWS6{#iR)uiCnQUB(&wIU#FSA5;47sng#tm6?3> zjLby-r>4u99Xz+JyLP7d*~> zUol0)YxCWI9J`V?#b;NovI%v!+;$=*>Voj!iy0^MqGwt1a(DT4f1LAlFDKX6Yb!o_ zPWE2hp>pfR?cYl;`faIqyXhg3docT)aKYKi4X3B_eBV}cqp11jzth6e+w&IYuc;6d zt6AZFus!-;@4DU}*EdIR%USk5uR>HT=HgpfiS_HEw@=gSm=|5U@piVdo_^F9h1&f` zv^PAMl~-D`^z$*UFJ^B}$8w#^wY>F7dh_4!-P+-HKHfI$+<7m93d&ADoMu1cZT-CH z9UtPN9?3-%IBz!(ds7(t*8W;a^E|&BS}V^iNXU*;Vmloa@!V%Uw_4hz3CV8u+B1J| ziw$yg4c5$&VJrIZRBqnX9R+9SG(Nb&Y}V=Q^Y})A)bXa8i0e-4cZpRU47b0S)P8og z9!Fy9y9FgPv?p2cT-$ng^}4rTdgYEv9IF18D!BG&+5a>P(0I1d+`_X_(aJGsp9KF8!+E_r-Ti9rhv%N*IfZmEb! zs>1&NR?lubx?G;DV;59zurawHC9#EV=hWQ?J)Asa z-Y3rYY>=tuma6M zGmTeS^Ic=-{`)9U*)7xkXr+*5;O32Cwz_v?moAiRoYiX`GCy*5Cu0bQ%)^g~Q%=gg zbX+v+R_#JnwkM@tD)ZIX_1}1V?}<}{g4vNa)^l&>KRhO%cVf-SBheu_lCv-625(=q zXV$B*o ^-GoZ&bg$mW-F#Sm62iMyYg2T82^@>jji8YdZQ^v>g>0Rt2Uk&ITUy> z^i!0WNYB!s1vdVNgVKwcSE{ILJ`hOyzi9#AtMu$;@3yRSxSFxO|D5dKkiu&ms%sYe zN}hXX*6+<&)Zz0e+kW<^b#;wtr#@dZ{eS&Vd4qdsN&WjXle`p8s?E;Xv~tP!O`c`J z+fsh#Rj~_It-rLy+udPhSBHX^;F8W29E+5iq(oT)9YtKHh`X``F5!4Ix2E{{y_~Yi zYa92UFPFc5{rTBBM(O9y%(-v-{9J-$(93E6X4b}?N#EC$HA7Ku+Ed|-kEY>~d@sFT zv&V8)s2#J)-E#O7=a!3d`KGrP=n74~*tSJ#?OLa;S2JpEWdu!N;hkWY+9WJ+xXwZP zZj}V171OrGdmZ}veAeB~FnP!1`Jnc1#oH?k^|1~NihiYy7NRnj>=(_wJzo>Y8b_AkR%p8M*e=IJZu6*cbQ)VXZB^7qeQnGuh4#5*=0i2h}G z%QH9Y_$~(-Zo5nVm;CZo!-`)Wl>8y5KH;#Sa8%&!je_#@GSnN z{N;0e->z-j_@TVF)&56}z4PxGmfYuJ&pay0c9+?-gL~ig^VjV17P`#H_G)S5|Jt9m zJZghRX|Jnh#M-y()xeXTF?~UMum0zxDj}>&@0nkFV%HFqy-n)Rn>Z z?D5shH%;c{a`gJG-`~OTBJ3AmmyP?6>$?u^7qeOXdcE9{bM9yC?`zdx2&!UPYAXEC zbKQsSF^@MizKb#!(6aT4Wq#+{yU91^RSLX07;yHUdBo*qu}z)#t{koRy5ae3(w=XVc}_DMmf1g^X~uh` zLHnM@uLw?S)mWh$bzYa4jAb~_Fg)KIcuc5HHBP`l*r2r``U(OUBNkSN+!> zv)y;Ms;h@@pR{XR=QinU8g~NE|DC>3s&dz&iRwQ*_j_3H_g#Ga_Q{Xt(-xKF>g{9KMSEhZe%6&qcFkL<87zEI={igI0qtLbw*tkQjOPgTO#gU1ebE+m zQ!TfG@art)M=O%1mG#YhVD78EGuPXHwx9m3?h9P8Q4Cct>)31Yde?jPu=?b??_IyQsgZzg)~d*=OxKJI1FO zir*eAU-`S`)i&crAL3e$Fa8nO>*gzcd5i4LAIqNenW>7o=6k*1^lh%vv{OBymKc0SwRAj-u!JwW1zxD8jDWVUH()TOFji?3ZiXyQC~S6AlV1A(tu9|$@x zT@~XT)n9a_N+crZ&C=Wj@kKcdvmg3aEU$gdyFr4rIX*zcA;EaXRqd%+rkQ^?ExxAT z%(d4ka*f(7o#V6aY+HV^$iOFlkxqJ)e&LeuLI#%t)@h}h+VHeb7! zYGrUQV3qow`Q=Bf-4-&JvbDBtx%YlWY1le3kyl5LF8QkEzV@)G)rI>DE>5~uT=4q- zo2}o>x1Y4`t9bq-!(pCY|F-XsZzOM(b$?!MAf$O9ZVT@hlkYcv)jQS)3m8??fIFNId%KEo~-`-@>(%N zoYjM`-`4JDQw}h!5Z%iomCzH!s&!RL_2J){%J+^csd|KUK3VcL(|xU}q}K)KshY}b z`>nEKRl*u&O64w}{=1{JJu>H>)$X;^xesjbt9TtWRUu~Txr|R67hl^XBYGm>`Gr01 zP1_GX|8V}>+WXA^GHf#(L>K~MR&e?5!S*i@J=LEcu$~UL`If(yX&|#f&ZY+M~;7 z9DTNS^Q|gNp_;cI!nwns7`1wHx4ZVOyrBXp- ztJR4sw_X#Tz_O<`j^S@2|6D$vE3YMd@0A>}ULL^PWg5hKa6glU^t_FY^^^CrzF)j` zfymqFV-MmRQ`ar#a@px5n>us-3Z|;?6kIwYB}&@$ zO3qVCuV%{s(r+2OwK$6J`L%-IrTm|do>B`xsy#3N>ZfZ@Pd}L69h2`rw?4e>q4G4I zyEz6jY}pC_-#y$nBfm)XbirOf_xT6we#oBje|$gG{l`i9Gd=Y&yV=&onY}N}vTloc z&9ipq#Izr_%a^jwxNRVzf9Lvxx-*6sauR$NPhu)cE@0VsZSkq(Wzkb-8(3Rp7hQ}m zSQFQ8lE5p~S>Io<_fBbDT#Mw1BWKRdHeCE$JMU_*!R;=y|wuiQjnA%3i+T z|9{`fub&JIPrX!G9G`!0&(C(t#Q|qtoaVc``TPscGcTeU1P|F4$8GY{`g(n;c6gmx zdPx4s6KCZXb8PIqI9Gq)k4MHC$JF;v=K5Rr_t)3^XGFX5kDrj#zSwh)u_20K!L16` zMjwk~k@My6nciTp&WdtYdb=pSqx)aQf4d*g^Vjh|UdZst!rXdEYDM(TC)ZOCq)yjf zo^px%AjkX!c^#{@b`$4qPro&7_5Gdq;!+e37&)f3+wkj7esVbJyud_f9oJjYT5i8M zYBoH%5;n17<&VcV3_oNVPxF|@6}9NhDwj!$r|k~ued14v*mUB5YF@;tU5PK3+~j5G z2(w*tyYXB(>tBbc5(~+RnU3mb?@ZV$X2QSSe#T8c%WZ!p%1__6L&jlUP{m%aR_ zeuUei(5|4P_-L8gv%J!;%Kb5ohWD!XPkE!|1L^!Je>s)S_HVwsbb9ydXJP+NH%|TEwD8`Q`Q~07 zlbGDSxDM#%iQ_-z#wB+Mi19 zBMUw=d~vYfdUj#JIo8?iJ8~-+)n1qf#P3a7q4sFE?TjDJ3QVyq3Nn9_^!|0(e%$!0 z_sY-dJWpL}8j2s~>Q0nrVEiT8kWjKVcP0<($8SfLznJg5Fgfz0&~q_;>C>vR3Juog zx38TJc=Nl=CH?h$r_RSbQcAPFC$!mfIbBF?*j<11&Ij|io&J~BFW1}OQSGO#Rgj`Q zf99IrT^qWhc#ob@+I`hxjrZ%!WsmG8G%!zNDY+MOIQ`AZw+rw4=>FucR$II9t+AG5 zaL{*i$u8OLM`{TKCziEzFYnKZ&Y8t1AA5BFeZ_Ca zX$OCH6d$WAd;I;?D^6kcd5w>HvsbLYcX{fi^*Z)>Gf(wC%`x1)dLTrhLPZ--9p_u)zd{Whmr(i6Q0RK)A6r4O(uWH1|380Dle}ZN5apnH0 zuSJdTK73yB>CB!huV%CydvoT^L!nY zRyUoQzt<)?S!(i5wiz*=XN0asKDXetxnTQecYd0fK%)Ks6Bg_p4A-ygxhHm)cf^C zI@av^^0$4O>K&VN+RwHh`OENig>_4?L(WMqWy6qZhZh`bTUcOG^?cgSiIe6U1sUzw z@r!ecg}?gpA01D7)O;NK_uCggyC|>4dq2G7tA^tC zoojPv9)H_zc|2;S__R4QTbbTHH}^=Dta8lAEaNF|l&;<%t#4Yp|F%eBa{nTZ+NfQI zTDMN$e%-G1_or08|Gbp19W1vlt$)~;QY>(M=IuMX8YlSM|NFu7i*N6jtKka&R%dOK zzoivBRqS6x-j9Wcq;I$HJDaPW7VUAvs(N;`SncfFuOkhfpO%Vn`&;%^2>9M-${ z)$r9^(EYPJdEc9Vug*OCtlbm4zw1}3{^p+-zOO&}D0S+c%Wc>1X8h8!&eJJnka~4d zVM8L9hkj+>nbYt5&Yph9@bKvA=bCf-p6%P1YE{ngT>N=n_V3O+*TPmO=VxnsUH`=T z>x{^+ZQE8UDqlGICbapGYtx~F8#i$zSGjqnI2}9CSi!_|K-yXPxvhG>NAzjws7da5 zx#xXMxs+$Au=Xa;kiL{+_@r&i#7a}ct_h#M^laMjVbhm2n*v-9ec5;LB;!ge$3rhp zEl5dv;XlXli+VtB`A_TDlFs|D8cmcw`m@D(opX0~?5d5;m0Na+mD%Q9>CV2Eb7Mo= z*>2y($NG+)zY+NGS0gj;F30AtoJNsOPJxQ=K2DjIdFSDr<~at|*B4&A{Ga`S3hB$pLdo+`7*?zHmIdS64yI=1GHZra}Q=9UB^FiU-{o(6g zZq_!tpdAx*iRsVQ;v-k~Z}|S`Vyx|!ckea{3Az65_#1afF+DHhj{7w3oma|MxbAz< zFDL5up(AjyvRGlkKa*rZu3zh7{qEK`N`Ab)u|w%xVc*o#$CH|Nx?Xw0c}KB;X=lwF zx$>@eynFxkn%{d+^6<@p*C93^%KyFFDEq-sx8$_Yby|zY(x&^uYPLIfti{~mVa~4p@~@{q92Tg1;&4@R#s@jIIgYEV zBJJ7jO%}4{v}Jy1lU&%TW3`=Wj@xAeuNtZURZ5I^)?Tdnz*JXa<@9rt_muax?eb15 zS+oY`fl z``{mmTWil(o|4tN%2!pUHMON^ySEYl1-{iwCLgk_AeY|3wV!o?uzz%+gOpc+v%p+R`y4nueefgv&eR+uedx#Ot?g0 z-hy=}a%L}J{>ZX+tEuDd;JmF{F1YJu-ZpcT%}@UP!K+qu{gux%a&uVg=G>OnDLc12 zZT6|UaIf4TlB%nROl!$SXc`onfbn`ftvRR-G2+UHuYyDa@Y^l!|cEpI>i<W#29}#C|b@ytfn*V;l+BP|GyR}+bAQE$bP!rY#vK2J?rKl`@4eM+u8M_qYmQJVap318C{ew4UUQ_S_)WYl~znF3;(zUwVQgJag;(oFn`j*UHqiYUZxF!1lrBR`1GVMXPtPg|L@v zP0e2RX!#C_V6g^s!==4<{dvt6PB(n&;uOhgt~J$q`lI%MQwLS2r|8MF$xr)aK3yZ7 z{{X-D&tC5-tJNO0FSTjZ%zab$R&%??)bl^Tgz@*e%}46@WX`ws+0UGy`TbDbHckBnA7^CgF8s1c^Zt^zhlA`| zmCa`FUYB}g+fkVkK9={7`fg46DZDVoJ*Dcxy?xzv^#|OR9Z#H`d#XD_XIYfL#@)C;bqV{k_qQqxn7%Sfo)^Eub=b-IaLZQK zpFj4u{Fr~MX0KD8#>7(zOWllP7dr|rbaZ45ocPnRX5j?+De{t`0wN--&h@_x47i}I zHviwh)u~$VE^w!t*zWYyP*V?J{fQIBjH<^;;@`iO);XiRvdVu%B*v!g;dm!5WdIrT!bH-jVy4Ath3j z%(-o<&-(dmuPsjQ zA@8ftYz29b?uL6@PcP`*@mg=m`uI+*(`UR__VwnA9G!jXy0bc)+tUp%U%zW|v2V?H zOQ{gk*FJDtc*&m^PbEcT=btb=u!QTDi2}pyV{cqHEoCmPnRq9wuXC}x{~Uv~Gc94| znL2v&mV_vk#!g(a&@m`P{d`Z~iIbfj=a%ecVY&Tb(&5_&bFVbL-MA;!=Gr5#^xzw( zql0hEzvYpb{ZCQzP1?#Wo(m<^Jx`uFd)8;-6V4xhCJ5MhChotuiRIp-9CQD~{fwIf zWOi7wx=78}P(0>UZ*lC^`T(1z-mB|_lvb@1^VCY!6g>2$B+-S-Fl^4!jX%~Nv)U#a zv#;6o?$u2K@1H)I9bo>;ORq@D@Y_=BE3+$J_BSMnFupruk$++SvehT2P5SwLd-I;} zm;N4Tzg783rQ>%|S@u2a^9|3+cCRp=vo`B&wf)6S9UqEjd}mwEz#pqW*X3{V4}%Z& z{^vIQk+x->RR2$M?!SFUKE!%v->YU!?3#0?x<1HoFW287!@0YDe!IQk_HCW#)sNK| ztKXk%^>uHtXp8aW?{W8x`lFjHt>=EfmoxMGyw6XkD}3W_)_iZPxxTz4u*FRGtc2(D zz57>Rs1JYnR#G9-)TZ&?dGUvRe@^av?sHFi4(naMy`Rr5e_?d%_s8Q3Uy^li^XIm% zi{U;$U230x?%8VnV>!_r(dwV?eK4E*-EIsp0TpCY*=5snswpt!REr>p}LoMrp}o^ z=k(P14)S4Zw@=cpujA5?HQ|Xp7iDMQBNAhw5GI!B;cf1wmh$CwyZTvZ)u*)q>CSt{JuT2yE%*Vq-W%veFw5j3ia#P<}dcTcjR)3e`n8%Q%^6m z-=CV8W_8X{UHCn>jOxAir(xd%I8I$Q@@jpk`Z7{=VOPt^+NMd&K_*Qt6Q4S6IpU~$ zdB@f{wS2<&k4FjL|M#`^sP-$L&iB$KkE-9kzOX%ekDZmqweZ)|g(c^{Uf%s~`mxp& z{s}e@WZ!HJo7 zzy3L8GRd)iTJOVKMlY0t*=jQ%PMQ?|F6()RpuCvATwD5<-MjBNB<;Muv3j%gR9B|E z%zqsBb{{@0@gX*3reKfBD${FLcg^DMni^B~>EuTq`ufP^w#W49K@qbKfnC6^V;R7%}+lmR{Xu8ck;Agckw5c)`d+AE?iJ> z)R=bg`HBPSAF_Tc2t+cFCaXoKxVfhj%=T}HCASDoUJde8TmB97Bqg(K3S{=i4E<#kFVF+irt)ZYmF(}*SFRg1^eroqvtN$ zF8fD`L2>QAOJ$d%XRmLVur~VO)cVHVD@C?nwm6okxh`3zc-oXlQ4eNp-oRAppfB9V z$(+f5H0|%30}_mFhO#-+Zl`VD5xe`qPi^y!hvskBdE#YtNOE0EmDr;PvezEQFW@}) zMs@NbZoH&2#&B2+nEh{${ zJgYl8NvmXA66e>i>hl>Ms;7Q?z@z!Nl=Ym2#^X|k^chBR%OCWtHHynFNR!rlT*`QE zi}vHc!rUFdFC~bdGf3UT&y_w$>v5^jxt78SnWttRl+4~e_iE?$ZF!e3_uuT0mRTgp zSbb|wukX7{GmR}Qav5VkX3SS}-S;+t*L>P7Ztd5B!WAn;uX0%EzJ0#c(%bL!?EIvH z&-@<_+w51d@sBtp&2ROlYw5Qu&C?C{ytHKXcs=Xi%d6bx_j@j$Rp@D(<7EDSb1dhY zH`W4oPsH5upCLQtzPg*(I$z(*t|}>C-t|7ekX+GyYI}3ug5}&V+BCJx#O_+?XqR>5 zMQOL#7wmMh2)Vw0f1Gu}1ighTG!*x3I1r-vMndE71NA+gAOZXIt%)dQ9(u znsn;1ZH2mHY4m;Bv)`%QIZweEAt-%{?4r{7qsSXc4Q zV-_yoSjD8j+h%#v%V5RnALb-%UwX~rTm{#<;-98GIP3uU@eU3THpo|DQMad7t%WiXW|E&5|^}$EeW1-)^=IeKLE0kZPeLZ`y(cghZ>cYFT2fcOsi;i2> z6o1h5kWR|^{!C&2w)G#&ymp(jx9-$YlYb(mmS1;aNfHak0p-VstS@!=sfY@HJazZp zpHA%!Kg*{w*}d|rSJ}guA740^{jqe^!5=66nhUK~^=)B!ygX4+sOh$vfn4ME@9jxC z)t*Ny_C!Q}y*k~?QG#pc*}9~AXB9Wtec=1B+$@P>T1{DFZo*#fonbRdw`@)|cR;Ij>GVJls$ok;@;EfAm1r4DAEIY`qiqes~i( z;Y;bx%?Ey|-Vt0lx$@9&g%5`pyZbMczt}ff-SNvwquU3njMHX65Zb`Eyz%R8i3oY^ zMyVr~buumT+S|C-#2+x$`r6p|m6I)EfB6#*j*9(H4mOmsEI(>e8*@U~%_d=Oo#_0;KKOk3BAv;F`Q&xH^XnqgGajWIt`^ClzTghzq-}_g?*Alh}0bRsjU2LTKAKZ zIkOjhVqlwE&*Y*0aMvNB(<*l~_prJ~Gfpjh5dSJv!`<;g_-2(kXY=0cu{K`WTD#-6 zwc%ll*$GDH(uDG4+j8;yOf)ckBf`%TI$Sy+R<94 zrirGe&J6Na{G;GGdwbcpYNcDZHi{+%ON8+sP~vJ7D7Y-ms-N#GV8hd!qt21h`$#5Jgk7(C@r+Q_ zH@`23^+q+<@~dxdWoNwQ{kqLPsQY+`L;p&L>8hfgOD>(!S-n0`S@p;MTi2?q9Nym9 z;<6<*FUl&yNou>r3#ofsc2x#nc_sACHB!CDHrpZia)YC$= zCp*g6`l(NT#oOxYcO-D4*}Hj3qBcu+`_=}pdhfaGQR@1q|4pWAcrB4VaEyKKrZ-0( z9#;30uqA3VSrY>=?s+Cs^qnyK^hOz8!F zvznN8KRY&&(d@gdZtgq1Idu+4zdq->aqr01x@xhr-#7TgKKgoa%HAV&pUr1@$F{AX zekN{X(YZNOwbQ;oV*Rw$Qu)+r_a_-Y8*M7Q*3VxMk|*@CL}{YiC46q9;OAAYAbE$O!{R$!~HMQeT|uiJLX*OKA!H{r_mh$qU7<^Q{paBYc-Q{|gkD|3s~n(VKej+<8BJ4UhBZ^uH8*|M33R)8`N0y?puZ;q$9k z<^RiX*~E~PdOaev%y(`~oV!&?-<^W|wPzo--&xqYdVbv>M(ZbyQ}1Sk-t65f<*OUE zjb9>d*&5-v0%@Hk|Jc7zKNGvL=-!^G+RwfnkqZcIwPlGP*cmybO9(lB8{L&Jjv9c5k+v=XoFjRi| zigT^cva2Uj3SvLLJ{9_jC+EW%o=V4lhPVhaxu7j6eXzBu)E z>uUCfzEtA_7AqeAvbf*Kqp_fFF3YBiC!f3ZNE#;9-gCZW5IwusF8_LbGyRf$iC_J%Kkw_k`MPMx29*WW(bywgamCR(##>r~a$n(9E3Ln7&}v>GD(trWNd+2pke(%b=7H#(Eoerem)X7$J4*)?mLhGpcG zsa(~XB8#7VvN!tt+1U64|N5hhdkStDx6V<{$+AAQ$%}o<`$miD(&5%imZf>kB@tfEKm+#e<-Phn`Pn6+J(z^-@4mJyn;qHT*T6d~|a5KQz zu3JiuJ1krJEaB;ds9pXEx&CW*bZM+(^wri66wklY(71znW&&%iS^sC*6D;}*&GR4f zUAg+G{smu(x?0*}KA!0(+fF=vo_XKrsQv#50`>Kc4euEGOnsaa;=0}(5@7gokbOci z_d;K{&3#jZqaV*c>bK`;o##L1A8zg0aXzyLOZQU}q|ErZW zwXGEut+hG(CVH`-Ou4@#Eq(d24j0Y3g9qy@T9jlh(yzDPN&0h}ZRuQYN9N0l1q%+H z`DFUs@%#IObM^NbKfZU)Mz8n%&fnh?A1!^Iv9fi3((8~1KN6Q{uda7hf7BjP*06Jq zf?C~+4SODLefzn}$in<8&)r$wkC_sXkMsAg2Y3w0|8e% z8x+OZdDMCt=l#ECy3YN5)T%RI7wYZ5!<~I+m+M8dbq5s>8H78v%<^mD*l6MMV#%@Z z+o#XSjPcvE=>Fl)T+xP(I(?j0D?dKme!JS0w~wi9mk{ff5+$yVqtT`6rvF~O4l+^@8B zvYgzc;F{oA<0NQrEBHCa&F*sS+meY96Rd3n7W$s`((Cq>&=8x^b)=2=vHKGa?H5Xh z61VAS`UTXmoU%wzwma&^zsYT$E?u@=zBYKrX;MbnM*J75< zNMq#)TbO(AtX1gdd$$+Qn8I#*)rj|BW984{A0@uiZuGDQKNV>&^*9jsDzBJ0Z(p_V&Z8M@<#p$kD%;Mz5ov#XgJ)iyW&hXyiCo6o zi@005j;Mr2Oj*7?d~;t-m_6^d30-W*StIQk?_K|9AfbN!Jf_Rb64vnaOnLqP=_i zq?aX}=Nq2qo@;o%TtwXX^b6w|4^__zJ`-M)@QhpO(3hE28~Zfm$kGue3IG| zamw<%Wn{otiTr}hxVrTlE_`|;ve;lzzsmkX6U`M|6TT|2hKA0(#bFsgcg`9v!4;E& zryl$y=bZI(_SC8*$`{bw-uQq-^Ws&W%uy3uF-nK0-WgobT7wt^c z7CSjTMAhug3ZuN$eygj))N*;I@|>;BG=1}I@&c~!{GS8My!nKe{m`m?%)~5I`6ZNT zPMvP>&ZKja%X+l>^cHUlH(_gPl-g@8;jpdGYx=zX9)jWjHZA*dwXNlOp2p|4)OS{k z{hI#83GS@9pHM!vJSHP!P5-5MIp0$&!nU1hn7*++N_%ls=!Odw;uYCx&lJrgwr&vA zpPMHq#JkIF->YT(cNbpg=)19|=av4A)+)(Y0p%Z-x5uz{T@8|acj?D8)tK@i_Ulr>8S^U>re6=%QnfQ+ z{OzD(>-v(T>E9i(n3t_-1?`Jg3b$pOEIBE1N9APJWXPYYs_w5TM{%;t-DZo;#IZo_N3C692J%_@1j`F zEMMox68YluR+iKrIoqJ&!aGk$h9zA; z-`|{Z<-3VT+@EcXfnWH|>jmAHTt2yw;b70-zsXI)x87e%xW+mmc)OR;mY(kI8T>L+ zyIfP7Hh4|k*ZO!}$NONhNeBDSKh*wHoSb}g$L-l4w5&Oek1DRbk;QULQQ*cEfxg3g zE#q!k6{jq|n@lqwdh4U>KkJmrtzJEk9V}{p(tA}npD%k(w-Ko6Jg-tGT zi95Edf17BvK~(vo!1LNAe4kdl7Iw7yRdn`4;Nn{WL5_?yi!(MSW%(KXRa3EamwEJB zTIS7bX(zWeKN;QL#F&fj@R-Z9r9jC1oVA6M-s3&DZ*u&UO|r6%w_=&EAo$5_zp)s^Jk};-K^~8$!n`$GOnq<8_sCAT(9c;<~jWDC;YtdMuF%5 z9?6!#?0tWPRBCPI*@G|cRq1YQ=i7Vl?O~g{zkkNsZi#)l;6uXcnnS0{B;?MvTwr(1 zFqWQj_SnQU*4l{?H`hE<{`tjS?B3Z*s}c!Wn~X;lcXk@cl&zc-+^QFHZs7~*6U_Io zZ+MvP>;L83xx~X|^%~dYCmO`ZFq~UBE%J`4UdzMw8;@CMZJCx>5hhgp%i;5H*L(Ar zE}pTw*m~&8rxi^CGHu$eg?IPtwL5h=dt(#S;&-Zmtm{Bk8`1kWsafN3h)*@$LHD^6lO#PTB zI<0VtK))8}Vg9W>55FCpR<*$3j{wK-Ez<-)KiQa^U?|(h?<9Sz{o&d6?i0@i(oL>1&R#UJ3=&6Z}g;)MneMpLxePz$;qGj@Y_3D#; zrn33AzjYqh?(41i?_ZSSus&$Ll-~92VQQY2*;}Wiq+fJrbCEiozs&cYrpL3?aQD+J zpPoEjMEmz%AX{63q=RbF*6ogeNHfYfxPKU=_C(RvnSo>FE4!Ov!_+; zQNZ>6ha=g)II_oO&SqErUTJ7ueEY$cRO`FHnfkltYLUQg_LBf`vP{d3Z>K#4aycCvbK-YC4hT+`r&rk_U$2g|3Hl*kD- zyEgV*KWy%HsC!M|uggN=$#)EUjn7No`Dp&a%TD28*?PSxx*GktH{!DIM9mKRzGlin z+34p7*4b_R6cFFI{gS#}$b<*0-&|{cF8|ouPI)E!`p2F^&;A^^=3M`(zf*y?_AAd` z`CbXrtd?yH8s50GcgIcfKjpVb`JKuh`O@Xz7r!$r|80@3?pfR@B(wOQpA6fTl$`FF zo<`E|-M>nFnOuG4(VU&`zJB|4^{O!Vy%9ITg9qpRu=-4@&Y?^mPOh&1qIeK1_?SxmZTANC84=fh?6EJPv z-b>R(jEjPUii(1QijF$P$2T6h9`51x^e%hEu33LWALzfzeSdPA_jSiR=Y!5=NiSGG zMauYQuEZQizQ~M+JA5ymxtR6*%)--$zdd-MJDq3wWcg!n8oLGdKW;bdTD0gM7pv9m zxf7?&oH=cx?lbleO-&VyH9F3G(;B>E@}FO>DcT_VcDHYOS9bPIpTZ=ixtelHlX<6} zu3r+YlWA%Ba?b>TdG#E!#_XE|T23#EdRhMMjk=3mn9uK2UtX(?n|A%m%5_-te^uzm z-kFkn9|y5_@36bFEWq-fbXn`Mb1YgMJLTSS@$2jT{B%N1@2AX>h4<1Ox-9h~pNr_t z{3v`P`>^W5y@q-#IW`_qE!-(F{mIc|UN_#aj6JM+-grk!lcZi}&xK{F%aUR)#ZS7@ z<-O>zWXvLt@9H~TG(42l=RG{A%@%#YHQROJHn#N=IZpX^J=UidZQ1&Cnao>@l_d*& z%B)n4ja5~(wU6p+oH*ZqUcLGHp9yU5m#mkWvv}Xf-kC{u6?t?1-Z-so%^ {D`5z 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 c0}lfqR1U%yV~}8A%t_GcYg!0AlFkB>(^b literal 0 HcmV?d00001 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic.ttf.woff2 b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/NanumBarunGothic.ttf.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1866ad4bcea609c1008f722bb47b8207534e9c7c GIT binary patch literal 399468 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 z%0D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

0bKPVRdWOH@rq&fFb{-5%{$JvcBK_KkW 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%0DFddo!j?Fr6q>A`r>< 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 literal 0 HcmV?d00001 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/ayu.css b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/ayu.css index af24cd6cca..53a919812c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/ayu.css +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/ayu.css @@ -1 +1 @@ - body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar{background-color:#14191f;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 transparent;}.sidebar{scrollbar-color:#5c6773 transparent;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#0f1419;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ef57ff;}.content span.union,.content a.union{color:#98a01c;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#6380a0;}.content span.primitive,.content a.primitive{color:#32889b;}.content span.traitalias,.content a.traitalias{color:#57d399;}.content span.keyword,.content a.keyword{color:#de5249;}.content span.externcrate,.content span.mod,.content a.mod{color:#acccf9;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#99e0c9;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#cfbcf5;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#c5c5c5;}body.source .example-wrap pre.rust a{background:#333;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#39AFD7;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.search-input:disabled{background-color:#3e3e3e;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help span.bottom,#help span.top{border-color:#5c6773;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:rgba(255,236,164,0.06);}:target{border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.type,.content a.type,.block a.current.type{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;} \ No newline at end of file + body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar{background-color:#14191f;}.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 #24292f;}.sidebar{scrollbar-color:#5c6773 #24292f;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#14191f;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ef57ff;}.content span.union,.content a.union{color:#98a01c;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#6380a0;}.content span.primitive,.content a.primitive{color:#32889b;}.content span.traitalias,.content a.traitalias{color:#57d399;}.content span.keyword,.content a.keyword{color:#de5249;}.content span.externcrate,.content span.mod,.content a.mod{color:#acccf9;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#99e0c9;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#cfbcf5;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#39AFD7;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#c5c5c5;}.search-results a{color:#0096cf;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help span.bottom,#help span.top{border-color:#5c6773;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:rgba(255,236,164,0.06);}:target{border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.type,.content a.type,.block a.current.type{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(15,20,25,1),rgba(15,20,25,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(15,20,25,1),rgba(15,20,25,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:##898989;} \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/all.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/all.html index 473787d6bb..b5bde753ad 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/all.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/all.html @@ -1,5 +1,6 @@ -List of all items in this crate

List of all items[] +List of all items in this crate +
logo

List of all items[] -

Structs

Enums

Traits

Macros

Functions

Typedefs

- +

Structs

Enums

Traits

Macros

Functions

Typedefs

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html index 86b743a374..05d1c7b857 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchain.html @@ -1,14 +1,16 @@ -AnyBlockchain in bdk::blockchain::any - Rust

Enum bdk::blockchain::any::AnyBlockchain[][src]

pub enum AnyBlockchain {
+AnyBlockchain in bdk::blockchain::any - Rust
+    
logo

Enum bdk::blockchain::any::AnyBlockchain[][src]

pub enum AnyBlockchain {
     Electrum(ElectrumBlockchain),
     Esplora(EsploraBlockchain),
     CompactFilters(CompactFiltersBlockchain),
 }
Expand description

Type that can contain any of the Blockchain types defined by the library

It allows switching backend at runtime

See this module’s documentation for a usage example.

-

Variants

This is supported on crate feature electrum only.

Electrum client

-

Tuple Fields of Electrum

This is supported on crate feature esplora only.

Esplora client

-

Tuple Fields of Esplora

CompactFilters(CompactFiltersBlockchain)
This is supported on crate feature compact_filters only.

Compact filters client

-

Tuple Fields of CompactFilters

Trait Implementations

Return the set of Capability supported by this backend

+

Variants

Electrum(ElectrumBlockchain)

Tuple Fields

This is supported on crate feature electrum only.

Electrum client

+

Esplora(EsploraBlockchain)

Tuple Fields

This is supported on crate feature esplora only.

Esplora client

+

CompactFilters(CompactFiltersBlockchain)

Tuple Fields

This is supported on crate feature compact_filters only.

Compact filters client

+

Trait Implementations

Return the set of Capability supported by this backend

Setup the backend and populate the internal database for the first time Read more

Populate the internal database with transactions and UTXOs Read more

Fetch a transaction from the blockchain given its txid

@@ -21,21 +23,19 @@

Performs the conversion.

Performs the conversion.

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/any/enum.AnyBlockchainConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html index bacd1a1623..5c70b784b6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/enum.AnyBlockchainConfig.html @@ -1,4 +1,6 @@ -AnyBlockchainConfig in bdk::blockchain::any - Rust

Enum bdk::blockchain::any::AnyBlockchainConfig[][src]

pub enum AnyBlockchainConfig {
+AnyBlockchainConfig in bdk::blockchain::any - Rust
+    
logo

Enum bdk::blockchain::any::AnyBlockchainConfig[][src]

pub enum AnyBlockchainConfig {
     Electrum(ElectrumBlockchainConfig),
     Esplora(EsploraBlockchainConfig),
     CompactFilters(CompactFiltersBlockchainConfig),
@@ -28,40 +30,37 @@ will find this particularly useful.

stop_gap: 20, }) );
-

Variants

This is supported on crate feature electrum only.

Electrum client

-

Tuple Fields of Electrum

This is supported on crate feature esplora only.

Esplora client

-

Tuple Fields of Esplora

This is supported on crate feature compact_filters only.

Compact filters client

-

Tuple Fields of CompactFilters

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Variants

Electrum(ElectrumBlockchainConfig)

Tuple Fields

This is supported on crate feature electrum only.

Electrum client

+

Esplora(EsploraBlockchainConfig)

Tuple Fields

This is supported on crate feature esplora only.

Esplora client

+

CompactFilters(CompactFiltersBlockchainConfig)

This is supported on crate feature compact_filters only.

Compact filters client

+

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

-

Deserialize this value from the given Serde deserializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Performs the conversion.

Performs the conversion.

Performs the conversion.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/any/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/index.html index 538f2c8270..afc3797bee 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/any/index.html @@ -1,7 +1,9 @@ -bdk::blockchain::any - Rust

Module bdk::blockchain::any[][src]

Expand description

Runtime-checked blockchain types

+bdk::blockchain::any - Rust +
logo

Module bdk::blockchain::any[][src]

Expand description

Runtime-checked blockchain types

This module provides the implementation of AnyBlockchain which allows switching the inner Blockchain type at runtime.

-

Example

+

Example

In this example both wallet_electrum and wallet_esplora have the same type of Wallet<AnyBlockchain, MemoryDatabase>. This means that they could both, for instance, be assigned to a struct member.

@@ -36,9 +38,8 @@ blockchain type supported using a single line of code:

MemoryDatabase::default(), blockchain, )?;
-

Enums

-

Type that can contain any of the Blockchain types defined by the library

-

Type that can contain any of the blockchain configurations defined by the library

-
- +

Enums

+

Type that can contain any of the Blockchain types defined by the library

+

Type that can contain any of the blockchain configurations defined by the library

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html index d1bf965657..f50de038e0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/enum.CompactFiltersError.html @@ -1,4 +1,6 @@ -CompactFiltersError in bdk::blockchain::compact_filters - Rust

Enum bdk::blockchain::compact_filters::CompactFiltersError[][src]

pub enum CompactFiltersError {
+CompactFiltersError in bdk::blockchain::compact_filters - Rust
+    
logo

Enum bdk::blockchain::compact_filters::CompactFiltersError[][src]

pub enum CompactFiltersError {
 
Show 15 variants InvalidResponse, InvalidHeaders, InvalidFilterHeader, @@ -15,22 +17,22 @@ Time(SystemTimeError), Global(Box<Error>),
}
This is supported on crate feature compact_filters only.
Expand description

An error that can occur during sync with a CompactFiltersBlockchain

-

Variants

InvalidResponse

A peer sent an invalid or unexpected response

-
InvalidHeaders

The headers returned are invalid

-
InvalidFilterHeader

The compact filter headers returned are invalid

-
InvalidFilter

The compact filter returned is invalid

-
MissingBlock

The peer is missing a block in the valid chain

-
DataCorruption

The data stored in the block filters storage are corrupted

-
NotConnected

A peer is not connected

-
Timeout

A peer took too long to reply to one of our messages

-
PeerBloomDisabled

The peer doesn’t advertise the BLOOM service flag

-
NoPeers

No peers have been specified

-
Db(Error)

Internal database error

-

Tuple Fields of Db

0: Error
Io(Error)

Internal I/O error

-

Tuple Fields of Io

0: Error
Bip158(Error)

Invalid BIP158 filter

-

Tuple Fields of Bip158

0: Error

Internal system time error

-

Tuple Fields of Time

Global(Box<Error>)

Wrapper for crate::error::Error

-

Tuple Fields of Global

0: Box<Error>

Trait Implementations

Formats the value using the given formatter. Read more

+

Variants

InvalidResponse

A peer sent an invalid or unexpected response

+

InvalidHeaders

The headers returned are invalid

+

InvalidFilterHeader

The compact filter headers returned are invalid

+

InvalidFilter

The compact filter returned is invalid

+

MissingBlock

The peer is missing a block in the valid chain

+

DataCorruption

The data stored in the block filters storage are corrupted

+

NotConnected

A peer is not connected

+

Timeout

A peer took too long to reply to one of our messages

+

PeerBloomDisabled

The peer doesn’t advertise the BLOOM service flag

+

NoPeers

No peers have been specified

+

Db(Error)

Tuple Fields

0: Error

Internal database error

+

Io(Error)

Tuple Fields

0: Error

Internal I/O error

+

Bip158(Error)

Tuple Fields

0: Error

Invalid BIP158 filter

+

Time(SystemTimeError)

Tuple Fields

Internal system time error

+

Global(Box<Error>)

Tuple Fields

0: Box<Error>

Wrapper for crate::error::Error

+

Trait Implementations

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

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

@@ -43,31 +45,20 @@

Performs the conversion.

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Converts a reference to Self into a dynamic trait object of Fail.

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the “name” of the error. Read more

-

Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

-

Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

-

Provides context for this failure. Read more

-

Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/compact_filters/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/index.html index 14bed612f4..95c22c6deb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/index.html @@ -1,4 +1,6 @@ -bdk::blockchain::compact_filters - Rust

Module bdk::blockchain::compact_filters[][src]

This is supported on crate feature compact_filters only.
Expand description

Compact Filters

+bdk::blockchain::compact_filters - Rust +
logo

Module bdk::blockchain::compact_filters[][src]

This is supported on crate feature compact_filters only.
Expand description

Compact Filters

This module contains a multithreaded implementation of an Blockchain backend that uses BIP157 (aka “Neutrino”) to populate the wallet’s database by downloading compact filters from the P2P network.

@@ -10,7 +12,7 @@ messages received by different peers. Thus, it’s recommended to use this modul connecting to a single peer at a time, optionally by opening multiple connections if it’s desirable to use multiple threads at once to sync in parallel.

This is an EXPERIMENTAL feature, API and other major changes are expected.

-

Example

+

Example

let num_threads = 4;
 
 let mempool = Arc::new(Mempool::default());
@@ -24,14 +26,13 @@ desirable to use multiple threads at once to sync in parallel.

}) .collect::<Result<_, _>>()?; let blockchain = CompactFiltersBlockchain::new(peers, "./wallet-filters", Some(500_000))?;
-

Structs

-

Data to connect to a Bitcoin P2P peer

-

Structure implementing the required blockchain traits

-

Configuration for a CompactFiltersBlockchain

-

Container for unconfirmed, but valid Bitcoin transactions

-

A Bitcoin peer

-

Enums

-

An error that can occur during sync with a CompactFiltersBlockchain

-
- +

Structs

+

Data to connect to a Bitcoin P2P peer

+

Structure implementing the required blockchain traits

+

Container for unconfirmed, but valid Bitcoin transactions

+

A Bitcoin peer

+

Enums

+

An error that can occur during sync with a CompactFiltersBlockchain

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html index 529f5ba605..8324e26bbd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.BitcoinPeerConfig.html @@ -1,4 +1,6 @@ -BitcoinPeerConfig in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::BitcoinPeerConfig[][src]

pub struct BitcoinPeerConfig {
+BitcoinPeerConfig in bdk::blockchain::compact_filters - Rust
+    
logo

Struct bdk::blockchain::compact_filters::BitcoinPeerConfig[][src]

pub struct BitcoinPeerConfig {
     pub address: String,
     pub socks5: Option<String>,
     pub socks5_credentials: Option<(String, String)>,
@@ -7,33 +9,30 @@
 
socks5: Option<String>

Optional socks5 proxy

socks5_credentials: Option<(String, String)>

Optional socks5 proxy credentials

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/compact_filters/struct.CompactFiltersBlockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html index ebd9e1bb42..b522810bdc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchain.html @@ -1,5 +1,7 @@ -CompactFiltersBlockchain in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchain[][src]

pub struct CompactFiltersBlockchain { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

Structure implementing the required blockchain traits

-

Example

+CompactFiltersBlockchain in bdk::blockchain::compact_filters - Rust +
logo

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchain[][src]

pub struct CompactFiltersBlockchain { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

Structure implementing the required blockchain traits

+

Example

See the blockchain::compact_filters module for a usage example.

Implementations

Construct a new instance given a list of peers, a path to store headers and block filters downloaded during the sync and optionally a number of blocks to ignore starting @@ -14,27 +16,25 @@ speed-up the sync process.

Broadcast a transaction

Return the current height

Estimate the fee rate required to confirm a transaction in a given target of blocks

-

Populate the internal database with transactions and UTXOs Read more

+

Populate the internal database with transactions and UTXOs Read more

Type that contains the configuration

Create a new instance given a configuration

Formats the value using the given formatter. Read more

Performs the conversion.

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html index b9abcf5a31..4806421448 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.CompactFiltersBlockchainConfig.html @@ -1,4 +1,6 @@ -CompactFiltersBlockchainConfig in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig[][src]

pub struct CompactFiltersBlockchainConfig {
+CompactFiltersBlockchainConfig in bdk::blockchain::compact_filters - Rust
+    
logo

Struct bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig[][src]

pub struct CompactFiltersBlockchainConfig {
     pub peers: Vec<BitcoinPeerConfig>,
     pub network: Network,
     pub storage_dir: String,
@@ -6,37 +8,34 @@
 }
This is supported on crate feature compact_filters only.
Expand description

Configuration for a CompactFiltersBlockchain

Fields

peers: Vec<BitcoinPeerConfig>

List of peers to try to connect to for asking headers and filters

network: Network

Network used

-
storage_dir: String

Storage dir to save partially downloaded headers and full blocks

+
storage_dir: String

Storage dir to save partially downloaded headers and full blocks. Should be a separate directory per descriptor. Consider using crate::wallet::wallet_name_from_descriptor for this.

skip_blocks: Option<usize>

Optionally skip initial skip_blocks blocks (default: 0)

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Deserialize this value from the given Serde deserializer. Read more

Performs the conversion.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/compact_filters/struct.Mempool.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html index cfa16dc28d..f180b9d621 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Mempool.html @@ -1,4 +1,6 @@ -Mempool in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::Mempool[][src]

pub struct Mempool(_);
This is supported on crate feature compact_filters only.
Expand description

Container for unconfirmed, but valid Bitcoin transactions

+Mempool in bdk::blockchain::compact_filters - Rust +
logo

Struct bdk::blockchain::compact_filters::Mempool[][src]

pub struct Mempool(_);
This is supported on crate feature compact_filters only.
Expand description

Container for unconfirmed, but valid Bitcoin transactions

It is normally shared between Peers with the use of Arc, so that transactions are not duplicated in memory.

Implementations

Create a new empty mempool

@@ -11,21 +13,19 @@ peers. To do that, b

Trait Implementations

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/compact_filters/struct.Peer.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html index c19b1edd4d..c05fa28fbe 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/compact_filters/struct.Peer.html @@ -1,4 +1,6 @@ -Peer in bdk::blockchain::compact_filters - Rust

Struct bdk::blockchain::compact_filters::Peer[][src]

pub struct Peer { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

A Bitcoin peer

+Peer in bdk::blockchain::compact_filters - Rust +
logo

Struct bdk::blockchain::compact_filters::Peer[][src]

pub struct Peer { /* fields omitted */ }
This is supported on crate feature compact_filters only.
Expand description

A Bitcoin peer

Implementations

Connect to a peer over a plaintext TCP connection

This function internally spawns a new thread that will monitor incoming messages from the peer, and optionally reply to some of them transparently, like pings

@@ -14,21 +16,19 @@ peer, and optionally reply to some of them transparently, like

Waits for a specific incoming Bitcoin message, optionally with a timeout

Trait Implementations

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/electrum/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/index.html index fdf321f533..3a748f0efe 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/index.html @@ -1,13 +1,14 @@ -bdk::blockchain::electrum - Rust

Module bdk::blockchain::electrum[][src]

This is supported on crate feature electrum only.
Expand description

Electrum

+bdk::blockchain::electrum - Rust +
logo

Module bdk::blockchain::electrum[][src]

This is supported on crate feature electrum only.
Expand description

Electrum

This module defines a Blockchain struct that wraps an [electrum_client::Client] and implements the logic required to populate the wallet’s database by querying the inner client.

-

Example

+

Example

let client = electrum_client::Client::new("ssl://electrum.blockstream.info:50002")?;
 let blockchain = ElectrumBlockchain::from(client);
-

Structs

-

Wrapper over an Electrum Client that implements the required blockchain traits

-

Configuration for an ElectrumBlockchain

-
- +

Structs

+

Wrapper over an Electrum Client that implements the required blockchain traits

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html index 50327ac0ae..132b426cbf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchain.html @@ -1,33 +1,33 @@ -ElectrumBlockchain in bdk::blockchain::electrum - Rust

Struct bdk::blockchain::electrum::ElectrumBlockchain[][src]

pub struct ElectrumBlockchain { /* fields omitted */ }
This is supported on crate feature electrum only.
Expand description

Wrapper over an Electrum Client that implements the required blockchain traits

-

Example

+ElectrumBlockchain in bdk::blockchain::electrum - Rust +
logo

Struct bdk::blockchain::electrum::ElectrumBlockchain[][src]

pub struct ElectrumBlockchain { /* fields omitted */ }
This is supported on crate feature electrum only.
Expand description

Wrapper over an Electrum Client that implements the required blockchain traits

+

Example

See the blockchain::electrum module for a usage example.

-

Trait Implementations

Return the set of Capability supported by this backend

-

Setup the backend and populate the internal database for the first time Read more

-

Fetch a transaction from the blockchain given its txid

-

Broadcast a transaction

-

Return the current height

-

Estimate the fee rate required to confirm a transaction in a given target of blocks

-

Populate the internal database with transactions and UTXOs Read more

-

Type that contains the configuration

-

Create a new instance given a configuration

+

Trait Implementations

Return the set of Capability supported by this backend

+

Setup the backend and populate the internal database for the first time Read more

+

Fetch a transaction from the blockchain given its txid

+

Broadcast a transaction

+

Return the current height

+

Estimate the fee rate required to confirm a transaction in a given target of blocks

+

Populate the internal database with transactions and UTXOs Read more

+

Type that contains the configuration

+

Create a new instance given a configuration

Performs the conversion.

Performs the conversion.

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/electrum/struct.ElectrumBlockchainConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html index 214df70de2..c6c78f2444 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/electrum/struct.ElectrumBlockchainConfig.html @@ -1,4 +1,6 @@ -ElectrumBlockchainConfig in bdk::blockchain::electrum - Rust

Struct bdk::blockchain::electrum::ElectrumBlockchainConfig[][src]

pub struct ElectrumBlockchainConfig {
+ElectrumBlockchainConfig in bdk::blockchain::electrum - Rust
+    
logo

Struct bdk::blockchain::electrum::ElectrumBlockchainConfig[][src]

pub struct ElectrumBlockchainConfig {
     pub url: String,
     pub socks5: Option<String>,
     pub retry: u8,
@@ -11,35 +13,32 @@
 
retry: u8

Request retry count

timeout: Option<u8>

Request timeout (seconds)

stop_gap: usize

Stop searching addresses for transactions after finding an unused gap of this length

-

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

-

Deserialize this value from the given Serde deserializer. Read 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

+

Deserialize this value from the given Serde deserializer. Read more

Performs the conversion.

-

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

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

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

-

Performs the conversion.

-

Performs the conversion.

+

This method tests for !=.

+

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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/enum.Capability.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html index 3f003cef14..a4345108c4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/enum.Capability.html @@ -1,39 +1,38 @@ -Capability in bdk::blockchain - Rust

Enum bdk::blockchain::Capability[][src]

pub enum Capability {
+Capability in bdk::blockchain - Rust
+    
logo

Enum bdk::blockchain::Capability[][src]

pub enum Capability {
     FullHistory,
     GetAnyTx,
     AccurateFees,
 }
Expand description

Capabilities that can be supported by a Blockchain backend

-

Variants

FullHistory

Can recover the full history of a wallet and not only the set of currently spendable UTXOs

-
GetAnyTx

Can fetch any historical transaction given its txid

-
AccurateFees

Can compute accurate fees for the transactions found during sync

-

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

-

Feeds this value into the given Hasher. Read more

-

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

-

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

Variants

FullHistory

Can recover the full history of a wallet and not only the set of currently spendable UTXOs

+

GetAnyTx

Can fetch any historical transaction given its txid

+

AccurateFees

Can compute accurate fees for the transactions found during sync

+

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

+

Feeds this value into the given Hasher. Read more

+

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

+

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

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

-

Performs the conversion.

-

Performs the conversion.

+

This method tests for !=.

+

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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/esplora/enum.EsploraError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html index 6b4fabb600..439765b356 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/enum.EsploraError.html @@ -1,4 +1,6 @@ -EsploraError in bdk::blockchain::esplora - Rust

Enum bdk::blockchain::esplora::EsploraError[][src]

pub enum EsploraError {
+EsploraError in bdk::blockchain::esplora - Rust
+    
logo

Enum bdk::blockchain::esplora::EsploraError[][src]

pub enum EsploraError {
     Ureq(Error),
     UreqTransport(Transport),
     HttpResponse(u16),
@@ -11,56 +13,45 @@
     HeaderHeightNotFound(u32),
     HeaderHashNotFound(BlockHash),
 }
This is supported on crate feature esplora only.
Expand description

Errors that can happen during a sync with EsploraBlockchain

-

Variants

Ureq(Error)

Error during ureq HTTP request

-

Tuple Fields of Ureq

0: Error
UreqTransport(Transport)

Transport error during the ureq HTTP call

-

Tuple Fields of UreqTransport

0: Transport
HttpResponse(u16)

HTTP response error

-

Tuple Fields of HttpResponse

0: u16
Io(Error)

IO error during ureq response read

-

Tuple Fields of Io

0: Error
NoHeader

No header found in ureq response

-
Parsing(ParseIntError)

Invalid number returned

-

Tuple Fields of Parsing

BitcoinEncoding(Error)

Invalid Bitcoin data returned

-

Tuple Fields of BitcoinEncoding

0: Error
Hex(Error)

Invalid Hex data returned

-

Tuple Fields of Hex

0: Error
TransactionNotFound(Txid)

Transaction not found

-

Tuple Fields of TransactionNotFound

0: Txid
HeaderHeightNotFound(u32)

Header height not found

-

Tuple Fields of HeaderHeightNotFound

0: u32
HeaderHashNotFound(BlockHash)

Header hash not found

-

Tuple Fields of HeaderHashNotFound

0: BlockHash

Trait Implementations

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

+

Variants

Ureq(Error)

Tuple Fields

0: Error

Error during ureq HTTP request

+

UreqTransport(Transport)

Tuple Fields

0: Transport

Transport error during the ureq HTTP call

+

HttpResponse(u16)

Tuple Fields

0: u16

HTTP response error

+

Io(Error)

Tuple Fields

0: Error

IO error during ureq response read

+

NoHeader

No header found in ureq response

+

Parsing(ParseIntError)

Tuple Fields

Invalid number returned

+

BitcoinEncoding(Error)

Tuple Fields

0: Error

Invalid Bitcoin data returned

+

Hex(Error)

Tuple Fields

0: Error

Invalid Hex data returned

+

TransactionNotFound(Txid)

Tuple Fields

0: Txid

Transaction not found

+

HeaderHeightNotFound(u32)

Tuple Fields

0: u32

Header height not found

+

HeaderHashNotFound(BlockHash)

Tuple Fields

0: BlockHash

Header hash not found

+

Trait Implementations

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

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. 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

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Converts a reference to Self into a dynamic trait object of Fail.

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the “name” of the error. Read more

-

Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

-

Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

-

Provides context for this failure. Read more

-

Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/esplora/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/index.html index 0bbf5f0304..706d8a5983 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/index.html @@ -1,19 +1,19 @@ -bdk::blockchain::esplora - Rust

Module bdk::blockchain::esplora[][src]

This is supported on crate feature esplora only.
Expand description

Esplora

+bdk::blockchain::esplora - Rust +
logo

Module bdk::blockchain::esplora[][src]

This is supported on crate feature esplora only.
Expand description

Esplora

This module defines a EsploraBlockchain struct that can query an Esplora backend populate the wallet’s database by:

-

Example

+

Example

let blockchain = EsploraBlockchain::new("https://blockstream.info/testnet/api", 20);

Esplora blockchain can use either ureq or reqwest for the HTTP client depending on your needs (blocking or async respectively).

Please note, to configure the Esplora HTTP client correctly use one of: Blocking: –features=‘esplora,ureq’ Async: –features=‘async-interface,esplora,reqwest’ –no-default-features

-

Structs

-

Structure that implements the logic to sync with Esplora

-

Configuration for an EsploraBlockchain

-

Data type used when fetching transaction history from Esplora.

-

Enums

-

Errors that can happen during a sync with EsploraBlockchain

-
- +

Structs

+

Structure that implements the logic to sync with Esplora

+

Enums

+

Errors that can happen during a sync with EsploraBlockchain

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/sidebar-items.js index bf88a1a159..d4d17db97b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["EsploraError","Errors that can happen during a sync with [`EsploraBlockchain`]"]],"struct":[["EsploraBlockchain","Structure that implements the logic to sync with Esplora"],["EsploraBlockchainConfig","Configuration for an [`EsploraBlockchain`]"],["EsploraGetHistory","Data type used when fetching transaction history from Esplora."]]}); \ No newline at end of file +initSidebarItems({"enum":[["EsploraError","Errors that can happen during a sync with [`EsploraBlockchain`]"]],"struct":[["EsploraBlockchain","Structure that implements the logic to sync with Esplora"],["EsploraBlockchainConfig","Configuration for an [`EsploraBlockchain`]"]]}); \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html index d275ec2a49..406a7022d3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchain.html @@ -1,35 +1,36 @@ -EsploraBlockchain in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
This is supported on crate feature esplora only.
Expand description

Structure that implements the logic to sync with Esplora

-

Example

+EsploraBlockchain in bdk::blockchain::esplora - Rust +
logo

Struct bdk::blockchain::esplora::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
This is supported on crate feature esplora only.
Expand description

Structure that implements the logic to sync with Esplora

+

Example

See the blockchain::esplora module for a usage example.

-

Implementations

Create a new instance of the client from a base URL and the stop_gap.

-

Set the inner ureq agent.

-

Trait Implementations

Return the set of Capability supported by this backend

-

Setup the backend and populate the internal database for the first time Read more

-

Fetch a transaction from the blockchain given its txid

-

Broadcast a transaction

-

Return the current height

-

Estimate the fee rate required to confirm a transaction in a given target of blocks

-

Populate the internal database with transactions and UTXOs Read more

-

Type that contains the configuration

-

Create a new instance given a configuration

+

Implementations

Create a new instance of the client from a base URL and the stop_gap.

+

Set the inner ureq agent.

+

Set the number of parallel requests the client can make.

+

Trait Implementations

Return the set of Capability supported by this backend

+

Setup the backend and populate the internal database for the first time Read more

+

Fetch a transaction from the blockchain given its txid

+

Broadcast a transaction

+

Return the current height

+

Estimate the fee rate required to confirm a transaction in a given target of blocks

+

Populate the internal database with transactions and UTXOs Read more

+

Type that contains the configuration

+

Create a new instance given a configuration

Formats the value using the given formatter. Read more

Performs the conversion.

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/esplora/struct.EsploraBlockchainConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html index d8dc87b5e7..c45ee26f3f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html @@ -1,11 +1,14 @@ -EsploraBlockchainConfig in bdk::blockchain::esplora - Rust

Struct bdk::blockchain::esplora::EsploraBlockchainConfig[][src]

pub struct EsploraBlockchainConfig {
+EsploraBlockchainConfig in bdk::blockchain::esplora - Rust
+    
logo

Struct bdk::blockchain::esplora::EsploraBlockchainConfig[][src]

pub struct EsploraBlockchainConfig {
     pub base_url: String,
     pub proxy: Option<String>,
-    pub timeout_read: u64,
-    pub timeout_write: u64,
+    pub concurrency: Option<u8>,
     pub stop_gap: usize,
+    pub timeout: Option<u64>,
 }
This is supported on crate feature esplora only.
Expand description

Configuration for an EsploraBlockchain

-

Fields

base_url: String

Base URL of the esplora service eg. https://blockstream.info/api/

+

Fields

base_url: String

Base URL of the esplora service

+

eg. https://blockstream.info/api/

proxy: Option<String>

Optional URL of the proxy to use to make requests to the Esplora server

The string should be formatted as: <protocol>://<user>:<password>@host:<port>.

Note that the format of this value and the supported protocols change slightly between the @@ -13,38 +16,36 @@ sync version of esplora (using ureq) and the async version (using < details check with the documentation of the two crates. Both of them are compiled with the socks feature enabled.

The proxy is ignored when targeting wasm32.

-
timeout_read: u64

Socket read timeout.

-
timeout_write: u64

Socket write timeout.

+
concurrency: Option<u8>

Number of parallel requests sent to the esplora service (default: 4)

stop_gap: usize

Stop searching addresses for transactions after finding an unused gap of this length.

-

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

-

Deserialize this value from the given Serde deserializer. Read more

+
timeout: Option<u64>

Socket timeout.

+

Implementations

create a config with default values given the base url and stop gap

+

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

+

Deserialize this value from the given Serde deserializer. Read more

Performs the conversion.

-

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

This method tests for self and other values to be equal, and is used by ==. Read more

-

This method tests for !=.

-

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

-

Performs the conversion.

-

Performs the conversion.

+

This method tests for !=.

+

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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/esplora/ureq/struct.EsploraBlockchainConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/ureq/struct.EsploraBlockchainConfig.html deleted file mode 100644 index 40575d9a80..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/ureq/struct.EsploraBlockchainConfig.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../bdk/blockchain/esplora/struct.EsploraBlockchainConfig.html...

- - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.log_progress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.log_progress.html index 582d5ced7b..f324cb1557 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.log_progress.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.log_progress.html @@ -1,4 +1,5 @@ -log_progress in bdk::blockchain - Rust

Function bdk::blockchain::log_progress[][src]

pub fn log_progress() -> LogProgress
Expand description

Create a new instance of LogProgress

-
- +log_progress in bdk::blockchain - Rust +
logo

Function bdk::blockchain::log_progress[][src]

pub fn log_progress() -> LogProgress
Expand description

Create a new instance of LogProgress

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.noop_progress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.noop_progress.html index e182f4305a..c850414e14 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.noop_progress.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.noop_progress.html @@ -1,4 +1,5 @@ -noop_progress in bdk::blockchain - Rust

Function bdk::blockchain::noop_progress[][src]

pub fn noop_progress() -> NoopProgress
Expand description

Create a new instance of NoopProgress

-
- +noop_progress in bdk::blockchain - Rust +
logo

Function bdk::blockchain::noop_progress[][src]

pub fn noop_progress() -> NoopProgress
Expand description

Create a new instance of NoopProgress

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.progress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.progress.html index 17ce1479b7..e69010cbf3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.progress.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/fn.progress.html @@ -1,4 +1,5 @@ -progress in bdk::blockchain - Rust

Function bdk::blockchain::progress[][src]

pub fn progress() -> (Sender<ProgressData>, Receiver<ProgressData>)
Expand description

Shortcut to create a channel (pair of Sender and Receiver) that can transport ProgressData

-
- +progress in bdk::blockchain - Rust +
logo

Function bdk::blockchain::progress[][src]

pub fn progress() -> (Sender<ProgressData>, Receiver<ProgressData>)
Expand description

Shortcut to create a channel (pair of Sender and Receiver) that can transport ProgressData

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/index.html index c7deb7cdde..d6be5da6d6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/index.html @@ -1,31 +1,32 @@ -bdk::blockchain - Rust

Module bdk::blockchain[][src]

Expand description

Blockchain backends

+bdk::blockchain - Rust +
logo

Module bdk::blockchain[][src]

Expand description

Blockchain backends

This module provides the implementation of a few commonly-used backends like Electrum, Esplora and Compact Filters/Neutrino, along with a generalized trait Blockchain that can be implemented to build customized backends.

-

Re-exports

-
pub use any::AnyBlockchain;
pub use any::AnyBlockchainConfig;
pub use self::electrum::ElectrumBlockchain;
pub use self::electrum::ElectrumBlockchainConfig;
pub use self::compact_filters::CompactFiltersBlockchain;

Modules

-

Runtime-checked blockchain types

-
compact_filterscompact_filters

Compact Filters

-
electrumelectrum

Electrum

-
esploraesplora

Esplora

-

Structs

-

Structure that implements the logic to sync with Esplora

-

Type that implements Progress and logs at level INFO every update received

-

Type that implements Progress and drops every update received

-

Enums

-

Capabilities that can be supported by a Blockchain backend

-

Traits

-

Trait that defines the actions that must be supported by a blockchain backend

-

Trait for Blockchain types that can be created given a configuration

-

Trait for types that can receive and process progress updates during Blockchain::sync and +

Re-exports

+
pub use any::AnyBlockchain;
pub use any::AnyBlockchainConfig;
pub use self::electrum::ElectrumBlockchain;
pub use self::electrum::ElectrumBlockchainConfig;
pub use self::compact_filters::CompactFiltersBlockchain;

Modules

+

Runtime-checked blockchain types

+
compact_filterscompact_filters

Compact Filters

+
electrumelectrum

Electrum

+
esploraesplora

Esplora

+

Structs

+

Structure that implements the logic to sync with Esplora

+

Type that implements Progress and logs at level INFO every update received

+

Type that implements Progress and drops every update received

+

Enums

+

Capabilities that can be supported by a Blockchain backend

+

Traits

+

Trait that defines the actions that must be supported by a blockchain backend

+

Trait for Blockchain types that can be created given a configuration

+

Trait for types that can receive and process progress updates during Blockchain::sync and Blockchain::setup

-

Functions

-

Create a new instance of LogProgress

-

Create a new instance of NoopProgress

-

Shortcut to create a channel (pair of Sender and Receiver) that can transport ProgressData

-

Type Definitions

-

Data sent with a progress update over a channel

-
- +

Functions

+

Create a new instance of LogProgress

+

Create a new instance of NoopProgress

+

Shortcut to create a channel (pair of Sender and Receiver) that can transport ProgressData

+

Type Definitions

+

Data sent with a progress update over a channel

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html index c7a19a2bed..a5b5e8c235 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.EsploraBlockchain.html @@ -1,35 +1,36 @@ -EsploraBlockchain in bdk::blockchain - Rust

Struct bdk::blockchain::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
Expand description

Structure that implements the logic to sync with Esplora

-

Example

+EsploraBlockchain in bdk::blockchain - Rust +
logo

Struct bdk::blockchain::EsploraBlockchain[][src]

pub struct EsploraBlockchain { /* fields omitted */ }
Expand description

Structure that implements the logic to sync with Esplora

+

Example

See the blockchain::esplora module for a usage example.

-

Implementations

This is supported on crate feature esplora only.

Create a new instance of the client from a base URL and the stop_gap.

-
This is supported on crate feature esplora only.

Set the inner ureq agent.

-

Trait Implementations

Return the set of Capability supported by this backend

-

Setup the backend and populate the internal database for the first time Read more

-

Fetch a transaction from the blockchain given its txid

-

Broadcast a transaction

-

Return the current height

-

Estimate the fee rate required to confirm a transaction in a given target of blocks

-

Populate the internal database with transactions and UTXOs Read more

-

Type that contains the configuration

-

Create a new instance given a configuration

+

Implementations

This is supported on crate feature esplora only.

Create a new instance of the client from a base URL and the stop_gap.

+
This is supported on crate feature esplora only.

Set the inner ureq agent.

+
This is supported on crate feature esplora only.

Set the number of parallel requests the client can make.

+

Trait Implementations

Return the set of Capability supported by this backend

+

Setup the backend and populate the internal database for the first time Read more

+

Fetch a transaction from the blockchain given its txid

+

Broadcast a transaction

+

Return the current height

+

Estimate the fee rate required to confirm a transaction in a given target of blocks

+

Populate the internal database with transactions and UTXOs Read more

+

Type that contains the configuration

+

Create a new instance given a configuration

Formats the value using the given formatter. Read more

Performs the conversion.

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/blockchain/struct.LogProgress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html index d09f52c3c4..e29089efd6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.LogProgress.html @@ -1,27 +1,26 @@ -LogProgress in bdk::blockchain - Rust

Struct bdk::blockchain::LogProgress[][src]

pub struct LogProgress;
Expand description

Type that implements Progress and logs at level INFO every update received

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Send a new progress update 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

-

Performs the conversion.

-

Performs the conversion.

+LogProgress in bdk::blockchain - Rust +
logo

Struct bdk::blockchain::LogProgress[][src]

pub struct LogProgress;
Expand description

Type that implements Progress and logs at level INFO every update received

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Send a new progress update 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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/struct.NoopProgress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html index 6b2ecaf8d1..5ac828a287 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/struct.NoopProgress.html @@ -1,27 +1,26 @@ -NoopProgress in bdk::blockchain - Rust

Struct bdk::blockchain::NoopProgress[][src]

pub struct NoopProgress;
Expand description

Type that implements Progress and drops every update received

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Send a new progress update 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

-

Performs the conversion.

-

Performs the conversion.

+NoopProgress in bdk::blockchain - Rust +
logo

Struct bdk::blockchain::NoopProgress[][src]

pub struct NoopProgress;
Expand description

Type that implements Progress and drops every update received

+

Trait Implementations

Returns a copy of the value. Read more

+

Performs copy-assignment from source. Read more

+

Send a new progress update 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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/blockchain/trait.Blockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Blockchain.html index ac0001fa21..677d61a9d8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Blockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Blockchain.html @@ -1,4 +1,6 @@ -Blockchain in bdk::blockchain - Rust

Trait bdk::blockchain::Blockchain[][src]

pub trait Blockchain {
+Blockchain in bdk::blockchain - Rust
+    
logo

Trait bdk::blockchain::Blockchain[][src]

pub trait Blockchain {
     fn get_capabilities(&self) -> HashSet<Capability>;
 
fn setup<D: BatchDatabase, P: 'static + Progress>(
        &self,
        database: &mut D,
        progress_update: P
    ) -> Result<(), Error>;
fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>; @@ -8,19 +10,19 @@ fn sync<D: BatchDatabase, P: 'static + Progress>(
        &self,
        database: &mut D,
        progress_update: P
    ) -> Result<(), Error> { ... } }
Expand description

Trait that defines the actions that must be supported by a blockchain backend

-

Required methods

Return the set of Capability supported by this backend

-

Setup the backend and populate the internal database for the first time

+

Required methods

Return the set of Capability supported by this backend

+

Setup the backend and populate the internal database for the first time

This method is the equivalent of Blockchain::sync, but it’s guaranteed to only be called once, at the first Wallet::sync.

The rationale behind the distinction between sync and setup is that some custom backends might need to perform specific actions only the first time they are synced.

For types that do not have that distinction, only this method can be implemented, since Blockchain::sync defaults to calling this internally if not overridden.

-

Fetch a transaction from the blockchain given its txid

-

Broadcast a transaction

-

Return the current height

-

Estimate the fee rate required to confirm a transaction in a given target of blocks

-

Provided methods

Populate the internal database with transactions and UTXOs

+

Fetch a transaction from the blockchain given its txid

+

Broadcast a transaction

+

Return the current height

+

Estimate the fee rate required to confirm a transaction in a given target of blocks

+

Provided methods

Populate the internal database with transactions and UTXOs

If not overridden, it defaults to calling Blockchain::setup internally.

This method should implement the logic required to iterate over the list of the wallet’s script_pubkeys using Database::iter_script_pubkeys and look for relevant transactions @@ -30,6 +32,5 @@ in the blockchain to populate the database with BatchOperations::del_utxo.

The progress_update object can be used to give the caller updates about the progress by using Progress::update.

-

Implementations on Foreign Types

Implementors

- +

Implementations on Foreign Types

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.ConfigurableBlockchain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.ConfigurableBlockchain.html index a3e8655ff0..6949ca672a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.ConfigurableBlockchain.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.ConfigurableBlockchain.html @@ -1,9 +1,10 @@ -ConfigurableBlockchain in bdk::blockchain - Rust

Trait bdk::blockchain::ConfigurableBlockchain[][src]

pub trait ConfigurableBlockchain: Blockchain + Sized {
+ConfigurableBlockchain in bdk::blockchain - Rust
+    
logo

Trait bdk::blockchain::ConfigurableBlockchain[][src]

pub trait ConfigurableBlockchain: Blockchain + Sized {
     type Config: Debug;
     fn from_config(config: &Self::Config) -> Result<Self, Error>;
 }
Expand description

Trait for Blockchain types that can be created given a configuration

-

Associated Types

Type that contains the configuration

-

Required methods

Create a new instance given a configuration

-

Implementors

- +

Associated Types

Type that contains the configuration

+

Required methods

Create a new instance given a configuration

+

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Progress.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Progress.html index 7e670cad1a..50a4fa1053 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Progress.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/trait.Progress.html @@ -1,10 +1,11 @@ -Progress in bdk::blockchain - Rust

Trait bdk::blockchain::Progress[][src]

pub trait Progress: Send {
+Progress in bdk::blockchain - Rust
+    
logo

Trait bdk::blockchain::Progress[][src]

pub trait Progress: Send {
     fn update(
        &self,
        progress: f32,
        message: Option<String>
    ) -> Result<(), Error>; }
Expand description

Trait for types that can receive and process progress updates during Blockchain::sync and Blockchain::setup

-

Required methods

Send a new progress update

+

Required methods

Send a new progress update

The progress value should be in the range 0.0 - 100.0, and the message value is an optional text message that can be displayed to the user.

-

Implementations on Foreign Types

Implementors

- +

Implementations on Foreign Types

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/type.ProgressData.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/type.ProgressData.html index b00b9f8183..8f66005aa1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/type.ProgressData.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/type.ProgressData.html @@ -1,4 +1,5 @@ -ProgressData in bdk::blockchain - Rust

Type Definition bdk::blockchain::ProgressData[][src]

pub type ProgressData = (f32, Option<String>);
Expand description

Data sent with a progress update over a channel

-
- +ProgressData in bdk::blockchain - Rust +
logo

Type Definition bdk::blockchain::ProgressData[][src]

pub type ProgressData = (f32, Option<String>);
Expand description

Data sent with a progress update over a channel

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html index b55b849074..3247168e58 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyBatch.html @@ -1,42 +1,44 @@ -AnyBatch in bdk::database::any - Rust

Enum bdk::database::any::AnyBatch[][src]

pub enum AnyBatch {
+AnyBatch in bdk::database::any - Rust
+    
logo

Enum bdk::database::any::AnyBatch[][src]

pub enum AnyBatch {
     Memory(<MemoryDatabase as BatchDatabase>::Batch),
     Sled(<Tree as BatchDatabase>::Batch),
     Sqlite(<SqliteDatabase as BatchDatabase>::Batch),
 }
Expand description

Type that contains any of the BatchDatabase::Batch types defined by the library

-

Variants

In-memory ephemeral database

-

Tuple Fields of Memory

Sled(<Tree as BatchDatabase>::Batch)
This is supported on crate feature key-value-db only.

Simple key-value embedded database based on [sled]

-

Tuple Fields of Sled

0: <Tree as BatchDatabase>::Batch
This is supported on crate feature sqlite only.

Sqlite embedded database using [rusqlite]

-

Tuple Fields of Sqlite

Trait Implementations

Store a script_pubkey along with its keychain and child number.

-

Store a LocalUtxo

-

Store a raw transaction

-

Store the metadata of a transaction

-

Store the last derivation index for a given keychain.

-

Delete a script_pubkey given the keychain and its child number.

-

Delete the data related to a specific script_pubkey, meaning the keychain and the child +

Variants

Memory(<MemoryDatabase as BatchDatabase>::Batch)

Tuple Fields

In-memory ephemeral database

+

Sled(<Tree as BatchDatabase>::Batch)

Tuple Fields

0: <Tree as BatchDatabase>::Batch
This is supported on crate feature key-value-db only.

Simple key-value embedded database based on [sled]

+

Sqlite(<SqliteDatabase as BatchDatabase>::Batch)

Tuple Fields

This is supported on crate feature sqlite only.

Sqlite embedded database using [rusqlite]

+

Trait Implementations

Store a script_pubkey along with its keychain and child number.

+

Store a LocalUtxo

+

Store a raw transaction

+

Store the metadata of a transaction

+

Store the last derivation index for a given keychain.

+

Store the sync time

+

Delete a script_pubkey given the keychain and its child number.

+

Delete the data related to a specific script_pubkey, meaning the keychain and the child number. Read more

-

Delete a LocalUtxo given its [OutPoint]

-

Delete a raw transaction given its [Txid]

-

Delete the metadata of a transaction and optionally the raw transaction itself

-

Delete the last derivation index for a keychain.

+

Delete a LocalUtxo given its [OutPoint]

+

Delete a raw transaction given its [Txid]

+

Delete the metadata of a transaction and optionally the raw transaction itself

+

Delete the last derivation index for a keychain.

+

Reset the sync time to None Read more

Performs the conversion.

Performs the conversion.

Performs the conversion.

-

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

-

Performs the conversion.

-

Performs the conversion.

+

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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/any/enum.AnyDatabase.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html index d868ceb875..32c9b59ffd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabase.html @@ -1,63 +1,66 @@ -AnyDatabase in bdk::database::any - Rust

Enum bdk::database::any::AnyDatabase[][src]

pub enum AnyDatabase {
+AnyDatabase in bdk::database::any - Rust
+    
logo

Enum bdk::database::any::AnyDatabase[][src]

pub enum AnyDatabase {
     Memory(MemoryDatabase),
     Sled(Tree),
     Sqlite(SqliteDatabase),
 }
Expand description

Type that can contain any of the Database types defined by the library

It allows switching database type at runtime.

See this module’s documentation for a usage example.

-

Variants

In-memory ephemeral database

-

Tuple Fields of Memory

Sled(Tree)
This is supported on crate feature key-value-db only.

Simple key-value embedded database based on [sled]

-

Tuple Fields of Sled

0: Tree
This is supported on crate feature sqlite only.

Sqlite embedded database using [rusqlite]

-

Tuple Fields of Sqlite

Trait Implementations

Container for the operations

-

Create a new batch container

-

Consume and apply a batch of operations

-

Store a script_pubkey along with its keychain and child number.

+

Variants

Memory(MemoryDatabase)

Tuple Fields

In-memory ephemeral database

+

Sled(Tree)

Tuple Fields

0: Tree
This is supported on crate feature key-value-db only.

Simple key-value embedded database based on [sled]

+

Sqlite(SqliteDatabase)

Tuple Fields

This is supported on crate feature sqlite only.

Sqlite embedded database using [rusqlite]

+

Trait Implementations

Container for the operations

+

Create a new batch container

+

Consume and apply a batch of operations

+

Store a script_pubkey along with its keychain and child number.

Store a LocalUtxo

Store a raw transaction

Store the metadata of a transaction

Store the last derivation index for a given keychain.

-

Delete a script_pubkey given the keychain and its child number.

-

Delete the data related to a specific script_pubkey, meaning the keychain and the child +

Store the sync time

+

Delete a script_pubkey given the keychain and its child number.

+

Delete the data related to a specific script_pubkey, meaning the keychain and the child number. Read more

-

Delete a LocalUtxo given its [OutPoint]

-

Delete a raw transaction given its [Txid]

-

Delete the metadata of a transaction and optionally the raw transaction itself

-

Delete the last derivation index for a keychain.

-

Type that contains the configuration

-

Create a new instance given a configuration

-

Read and checks the descriptor checksum for a given keychain. Read more

-

Return the list of script_pubkeys

-

Return the list of LocalUtxos

-

Return the list of raw transactions

-

Return the list of transactions metadata

-

Fetch a script_pubkey given the child number of a keychain.

-

Fetch the keychain and child number of a given script_pubkey

-

Fetch a LocalUtxo given its [OutPoint]

-

Fetch a raw transaction given its [Txid]

-

Fetch the transaction metadata and optionally also the raw transaction

-

Return the last defivation index for a keychain.

-

Increment the last derivation index for a keychain and return it Read more

-

Force changes to be written to disk

+

Delete a LocalUtxo given its [OutPoint]

+

Delete a raw transaction given its [Txid]

+

Delete the metadata of a transaction and optionally the raw transaction itself

+

Delete the last derivation index for a keychain.

+

Reset the sync time to None Read more

+

Type that contains the configuration

+

Create a new instance given a configuration

+

Read and checks the descriptor checksum for a given keychain. Read more

+

Return the list of script_pubkeys

+

Return the list of LocalUtxos

+

Return the list of raw transactions

+

Return the list of transactions metadata

+

Fetch a script_pubkey given the child number of a keychain.

+

Fetch the keychain and child number of a given script_pubkey

+

Fetch a LocalUtxo given its [OutPoint]

+

Fetch a raw transaction given its [Txid]

+

Fetch the transaction metadata and optionally also the raw transaction

+

Return the last derivation index for a keychain.

+

Return the sync time, if present

+

Increment the last derivation index for a keychain and return it Read more

+

Force changes to be written to disk

Formats the value using the given formatter. Read more

Performs the conversion.

Performs the conversion.

Performs the conversion.

-

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

-

Performs the conversion.

-

Performs the conversion.

+

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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/any/enum.AnyDatabaseConfig.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html index d00058c87f..880c502de4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/enum.AnyDatabaseConfig.html @@ -1,4 +1,6 @@ -AnyDatabaseConfig in bdk::database::any - Rust

Enum bdk::database::any::AnyDatabaseConfig[][src]

pub enum AnyDatabaseConfig {
+AnyDatabaseConfig in bdk::database::any - Rust
+    
logo

Enum bdk::database::any::AnyDatabaseConfig[][src]

pub enum AnyDatabaseConfig {
     Memory(()),
     Sled(SledDbConfiguration),
     Sqlite(SqliteDbConfiguration),
@@ -6,31 +8,29 @@
 

This allows storing a single configuration that can be loaded into an AnyDatabase instance. Wallets that plan to offer users the ability to switch blockchain backend at runtime will find this particularly useful.

-

Variants

Memory(())

Memory database has no config

-

Tuple Fields of Memory

0: ()
This is supported on crate feature key-value-db only.

Simple key-value embedded database based on [sled]

-

Tuple Fields of Sled

This is supported on crate feature sqlite only.

Sqlite embedded database using [rusqlite]

-

Tuple Fields of Sqlite

Trait Implementations

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Serialize this value into the given Serde serializer. Read more

+

Variants

Memory(())

Tuple Fields

0: ()

Memory database has no config

+

Sled(SledDbConfiguration)

Tuple Fields

This is supported on crate feature key-value-db only.

Simple key-value embedded database based on [sled]

+

Sqlite(SqliteDbConfiguration)

Tuple Fields

This is supported on crate feature sqlite only.

Sqlite embedded database using [rusqlite]

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

+

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/any/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/index.html index 32a137b083..53cc099585 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/index.html @@ -1,7 +1,9 @@ -bdk::database::any - Rust

Module bdk::database::any[][src]

Expand description

Runtime-checked database types

+bdk::database::any - Rust +
logo

Module bdk::database::any[][src]

Expand description

Runtime-checked database types

This module provides the implementation of AnyDatabase which allows switching the inner Database type at runtime.

-

Example

+

Example

In this example, wallet_memory and wallet_sled have the same type of Wallet<(), AnyDatabase>.

let memory = MemoryDatabase::default();
@@ -15,13 +17,12 @@ database supported using a single line of code:

let config = serde_json::from_str("...")?;
 let database = AnyDatabase::from_config(&config)?;
 let wallet = Wallet::new_offline("...", None, Network::Testnet, database)?;
-

Structs

-

Configuration type for a [sled::Tree] database

-

Configuration type for a sqlite::SqliteDatabase database

-

Enums

-

Type that contains any of the BatchDatabase::Batch types defined by the library

-

Type that can contain any of the Database types defined by the library

-

Type that can contain any of the database configurations defined by the library

-
- +

Structs

+

Configuration type for a [sled::Tree] database

+

Configuration type for a sqlite::SqliteDatabase database

+

Enums

+

Type that contains any of the BatchDatabase::Batch types defined by the library

+

Type that can contain any of the Database types defined by the library

+

Type that can contain any of the database configurations defined by the library

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html index b6e90414ab..0e7da32dbd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SledDbConfiguration.html @@ -1,29 +1,29 @@ -SledDbConfiguration in bdk::database::any - Rust

Struct bdk::database::any::SledDbConfiguration[][src]

pub struct SledDbConfiguration {
+SledDbConfiguration in bdk::database::any - Rust
+    
logo

Struct bdk::database::any::SledDbConfiguration[][src]

pub struct SledDbConfiguration {
     pub path: String,
     pub tree_name: String,
 }
Expand description

Configuration type for a [sled::Tree] database

Fields

path: String

Main directory of the db

tree_name: String

Name of the database tree, a separated namespace for the data

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Performs the conversion.

-

Serialize this value into the given Serde serializer. Read more

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Performs the conversion.

+

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/any/struct.SqliteDbConfiguration.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html index 9afc907488..6d43c96f9d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/any/struct.SqliteDbConfiguration.html @@ -1,27 +1,27 @@ -SqliteDbConfiguration in bdk::database::any - Rust

Struct bdk::database::any::SqliteDbConfiguration[][src]

pub struct SqliteDbConfiguration {
+SqliteDbConfiguration in bdk::database::any - Rust
+    
logo

Struct bdk::database::any::SqliteDbConfiguration[][src]

pub struct SqliteDbConfiguration {
     pub path: String,
 }
Expand description

Configuration type for a sqlite::SqliteDatabase database

Fields

path: String

Main directory of the db

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Performs the conversion.

-

Serialize this value into the given Serde serializer. Read more

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Performs the conversion.

+

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/index.html index a09050fc73..1648404dd9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/index.html @@ -1,4 +1,6 @@ -bdk::database - Rust

Module bdk::database[][src]

Expand description

Database types

+bdk::database - Rust +
logo

Module bdk::database[][src]

Expand description

Database types

This module provides the implementation of some defaults database types, along with traits that can be implemented externally to let Wallets use customized databases.

It’s important to note that the databases defined here only contains “blockchain-related” data. @@ -7,17 +9,17 @@ keys.

The currently recommended database is [sled], which is a pretty simple key-value embedded database written in Rust. If the key-value-db feature is enabled (which by default is), this library automatically implements all the required traits for [sled::Tree].

-

Re-exports

-
pub use any::AnyDatabase;
pub use any::AnyDatabaseConfig;
pub use memory::MemoryDatabase;

Modules

-

Runtime-checked database types

-

In-memory ephemeral database

-

Structs

-

Sqlite database stored on filesystem

-

Traits

-

Trait for a database that supports batch operations

-

Trait for operations that can be batched

-

Trait for Database types that can be created given a configuration

-

Trait for reading data from a database

-
- +

Re-exports

+
pub use any::AnyDatabase;
pub use any::AnyDatabaseConfig;
pub use memory::MemoryDatabase;

Modules

+

Runtime-checked database types

+

In-memory ephemeral database

+

Structs

+

Sqlite database stored on filesystem

+

Blockchain state at the time of syncing

+

Traits

+

Trait for a database that supports batch operations

+

Trait for operations that can be batched

+

Trait for Database types that can be created given a configuration

+

Trait for reading data from a database

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/index.html index 9a202f2ef4..68e86fae1c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/index.html @@ -1,8 +1,9 @@ -bdk::database::memory - Rust

Module bdk::database::memory[][src]

Expand description

In-memory ephemeral database

+bdk::database::memory - Rust +
logo

Module bdk::database::memory[][src]

Expand description

In-memory ephemeral database

This module defines an in-memory database type called MemoryDatabase that is based on a BTreeMap.

-

Structs

-

In-memory ephemeral database

-
- +

Structs

+

In-memory ephemeral database

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html index afb930e59e..e6afccab41 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/memory/struct.MemoryDatabase.html @@ -1,60 +1,63 @@ -MemoryDatabase in bdk::database::memory - Rust

Struct bdk::database::memory::MemoryDatabase[][src]

pub struct MemoryDatabase { /* fields omitted */ }
Expand description

In-memory ephemeral database

+MemoryDatabase in bdk::database::memory - Rust +
logo

Struct bdk::database::memory::MemoryDatabase[][src]

pub struct MemoryDatabase { /* fields omitted */ }
Expand description

In-memory ephemeral database

This database can be used as a temporary storage for wallets that are not kept permanently on a device, or on platforms that don’t provide a filesystem, like wasm32.

Once it’s dropped its content will be lost.

If you are looking for a permanent storage solution, you can try with the default key-value -database called [sled]. See the database module documentation for more defailts.

-

Implementations

Create a new empty database

-

Trait Implementations

Container for the operations

-

Create a new batch container

-

Consume and apply a batch of operations

-

Store a script_pubkey along with its keychain and child number.

-

Store a LocalUtxo

-

Store a raw transaction

-

Store the metadata of a transaction

-

Store the last derivation index for a given keychain.

-

Delete a script_pubkey given the keychain and its child number.

-

Delete the data related to a specific script_pubkey, meaning the keychain and the child +database called [sled]. See the database module documentation for more details.

+

Implementations

Create a new empty database

+

Trait Implementations

Container for the operations

+

Create a new batch container

+

Consume and apply a batch of operations

+

Store a script_pubkey along with its keychain and child number.

+

Store a LocalUtxo

+

Store a raw transaction

+

Store the metadata of a transaction

+

Store the last derivation index for a given keychain.

+

Store the sync time

+

Delete a script_pubkey given the keychain and its child number.

+

Delete the data related to a specific script_pubkey, meaning the keychain and the child number. Read more

-

Delete a LocalUtxo given its [OutPoint]

-

Delete a raw transaction given its [Txid]

-

Delete the metadata of a transaction and optionally the raw transaction itself

-

Delete the last derivation index for a keychain.

-

Type that contains the configuration

-

Create a new instance given a configuration

-

Read and checks the descriptor checksum for a given keychain. Read more

-

Return the list of script_pubkeys

-

Return the list of LocalUtxos

-

Return the list of raw transactions

-

Return the list of transactions metadata

-

Fetch a script_pubkey given the child number of a keychain.

-

Fetch the keychain and child number of a given script_pubkey

-

Fetch a LocalUtxo given its [OutPoint]

-

Fetch a raw transaction given its [Txid]

-

Fetch the transaction metadata and optionally also the raw transaction

-

Return the last defivation index for a keychain.

-

Increment the last derivation index for a keychain and return it Read more

-

Force changes to be written to disk

-

Formats the value using the given formatter. Read more

-

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

+

Delete a LocalUtxo given its [OutPoint]

+

Delete a raw transaction given its [Txid]

+

Delete the metadata of a transaction and optionally the raw transaction itself

+

Delete the last derivation index for a keychain.

+

Reset the sync time to None Read more

+

Type that contains the configuration

+

Create a new instance given a configuration

+

Read and checks the descriptor checksum for a given keychain. Read more

+

Return the list of script_pubkeys

+

Return the list of LocalUtxos

+

Return the list of raw transactions

+

Return the list of transactions metadata

+

Fetch a script_pubkey given the child number of a keychain.

+

Fetch the keychain and child number of a given script_pubkey

+

Fetch a LocalUtxo given its [OutPoint]

+

Fetch a raw transaction given its [Txid]

+

Fetch the transaction metadata and optionally also the raw transaction

+

Return the last derivation index for a keychain.

+

Return the sync time, if present

+

Increment the last derivation index for a keychain and return it Read more

+

Force changes to be written to disk

+

Formats the value using the given formatter. Read more

+

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

Performs the conversion.

Performs the conversion.

-

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

-

Performs the conversion.

-

Performs the conversion.

+

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

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/sidebar-items.js index 3856fe121b..22babbc454 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"mod":[["any","Runtime-checked database types"],["memory","In-memory ephemeral database"]],"struct":[["SqliteDatabase","Sqlite database stored on filesystem"]],"trait":[["BatchDatabase","Trait for a database that supports batch operations"],["BatchOperations","Trait for operations that can be batched"],["ConfigurableDatabase","Trait for [`Database`] types that can be created given a configuration"],["Database","Trait for reading data from a database"]]}); \ No newline at end of file +initSidebarItems({"mod":[["any","Runtime-checked database types"],["memory","In-memory ephemeral database"]],"struct":[["SqliteDatabase","Sqlite database stored on filesystem"],["SyncTime","Blockchain state at the time of syncing"]],"trait":[["BatchDatabase","Trait for a database that supports batch operations"],["BatchOperations","Trait for operations that can be batched"],["ConfigurableDatabase","Trait for [`Database`] types that can be created given a configuration"],["Database","Trait for reading data from a database"]]}); \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html index fc14591c39..d82302136c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SqliteDatabase.html @@ -1,4 +1,6 @@ -SqliteDatabase in bdk::database - Rust

Struct bdk::database::SqliteDatabase[][src]

pub struct SqliteDatabase {
+SqliteDatabase in bdk::database - Rust
+    
logo

Struct bdk::database::SqliteDatabase[][src]

pub struct SqliteDatabase {
     pub path: String,
     pub connection: Connection,
 }
Expand description

Sqlite database stored on filesystem

@@ -6,57 +8,58 @@ crate::database

Fields

path: String

Path on the local filesystem to store the sqlite file

connection: Connection

A rusqlite connection object to the sqlite database

-

Implementations

Instantiate a new SqliteDatabase instance by creating a connection +

Implementations

Instantiate a new SqliteDatabase instance by creating a connection to the database stored at path

-

Trait Implementations

Container for the operations

-

Create a new batch container

-

Consume and apply a batch of operations

-

Store a script_pubkey along with its keychain and child number.

-

Store a LocalUtxo

-

Store a raw transaction

-

Store the metadata of a transaction

-

Store the last derivation index for a given keychain.

-

Delete a script_pubkey given the keychain and its child number.

-

Delete the data related to a specific script_pubkey, meaning the keychain and the child +

Trait Implementations

Container for the operations

+

Create a new batch container

+

Consume and apply a batch of operations

+

Store a script_pubkey along with its keychain and child number.

+

Store a LocalUtxo

+

Store a raw transaction

+

Store the metadata of a transaction

+

Store the last derivation index for a given keychain.

+

Store the sync time

+

Delete a script_pubkey given the keychain and its child number.

+

Delete the data related to a specific script_pubkey, meaning the keychain and the child number. Read more

-

Delete a LocalUtxo given its [OutPoint]

-

Delete a raw transaction given its [Txid]

-

Delete the metadata of a transaction and optionally the raw transaction itself

-

Delete the last derivation index for a keychain.

-

Type that contains the configuration

-

Create a new instance given a configuration

-

Read and checks the descriptor checksum for a given keychain. Read more

-

Return the list of script_pubkeys

-

Return the list of LocalUtxos

-

Return the list of raw transactions

-

Return the list of transactions metadata

-

Fetch a script_pubkey given the child number of a keychain.

-

Fetch the keychain and child number of a given script_pubkey

-

Fetch a LocalUtxo given its [OutPoint]

-

Fetch a raw transaction given its [Txid]

-

Fetch the transaction metadata and optionally also the raw transaction

-

Return the last defivation index for a keychain.

-

Increment the last derivation index for a keychain and return it Read more

-

Force changes to be written to disk

-

Formats the value using the given formatter. Read more

+

Delete a LocalUtxo given its [OutPoint]

+

Delete a raw transaction given its [Txid]

+

Delete the metadata of a transaction and optionally the raw transaction itself

+

Delete the last derivation index for a keychain.

+

Reset the sync time to None Read more

+

Type that contains the configuration

+

Create a new instance given a configuration

+

Read and checks the descriptor checksum for a given keychain. Read more

+

Return the list of script_pubkeys

+

Return the list of LocalUtxos

+

Return the list of raw transactions

+

Return the list of transactions metadata

+

Fetch a script_pubkey given the child number of a keychain.

+

Fetch the keychain and child number of a given script_pubkey

+

Fetch a LocalUtxo given its [OutPoint]

+

Fetch a raw transaction given its [Txid]

+

Fetch the transaction metadata and optionally also the raw transaction

+

Return the last derivation index for a keychain.

+

Return the sync time, if present

+

Increment the last derivation index for a keychain and return it Read more

+

Force changes to be written to disk

+

Formats the value using the given formatter. Read more

Performs the conversion.

Performs the conversion.

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/database/struct.SyncTime.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SyncTime.html new file mode 100644 index 0000000000..82578863bd --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/struct.SyncTime.html @@ -0,0 +1,32 @@ +SyncTime in bdk::database - Rust +
logo

Struct bdk::database::SyncTime[][src]

pub struct SyncTime {
+    pub block_time: BlockTime,
+}
Expand description

Blockchain state at the time of syncing

+

Contains only the block time and height at the moment

+

Fields

block_time: BlockTime

Block timestamp and height at the time of sync

+

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

+

Deserialize this value from the given Serde deserializer. 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

+

Performs the conversion.

+

Performs the conversion.

+

The alignment of pointer.

+

The type for initializers.

+

Initializes a with the given initializer. Read more

+

Dereferences the given pointer. Read more

+

Mutably dereferences the given pointer. Read more

+

Drops the object pointed to by the given pointer. Read more

+

The resulting type after obtaining ownership.

+

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

+
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/database/trait.BatchDatabase.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchDatabase.html index acbea968b7..fb0edd2dad 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchDatabase.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchDatabase.html @@ -1,12 +1,13 @@ -BatchDatabase in bdk::database - Rust

Trait bdk::database::BatchDatabase[][src]

pub trait BatchDatabase: Database {
+BatchDatabase in bdk::database - Rust
+    
logo

Trait bdk::database::BatchDatabase[][src]

pub trait BatchDatabase: Database {
     type Batch: BatchOperations;
     fn begin_batch(&self) -> Self::Batch;
 
fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error>; }
Expand description

Trait for a database that supports batch operations

This trait defines the methods to start and apply a batch of operations.

-

Associated Types

Container for the operations

-

Required methods

Create a new batch container

-

Consume and apply a batch of operations

-

Implementations on Foreign Types

Implementors

- +

Associated Types

Container for the operations

+

Required methods

Create a new batch container

+

Consume and apply a batch of operations

+

Implementations on Foreign Types

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchOperations.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchOperations.html index cc5faecac2..dfaf3d4469 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchOperations.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.BatchOperations.html @@ -1,30 +1,36 @@ -BatchOperations in bdk::database - Rust

Trait bdk::database::BatchOperations[][src]

pub trait BatchOperations {
-    fn set_script_pubkey(
        &mut self,
        script: &Script,
        keychain: KeychainKind,
        child: u32
    ) -> Result<(), Error>; +BatchOperations in bdk::database - Rust +
logo

Trait bdk::database::BatchOperations[][src]

pub trait BatchOperations {
+
Show 13 methods fn set_script_pubkey(
        &mut self,
        script: &Script,
        keychain: KeychainKind,
        child: u32
    ) -> Result<(), Error>;
fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error>;
fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error>;
fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error>;
fn set_last_index(
        &mut self,
        keychain: KeychainKind,
        value: u32
    ) -> Result<(), Error>; +
fn set_sync_time(&mut self, sync_time: SyncTime) -> Result<(), Error>;
fn del_script_pubkey_from_path(
        &mut self,
        keychain: KeychainKind,
        child: u32
    ) -> Result<Option<Script>, Error>;
fn del_path_from_script_pubkey(
        &mut self,
        script: &Script
    ) -> Result<Option<(KeychainKind, u32)>, Error>;
fn del_utxo(
        &mut self,
        outpoint: &OutPoint
    ) -> Result<Option<LocalUtxo>, Error>;
fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error>;
fn del_tx(
        &mut self,
        txid: &Txid,
        include_raw: bool
    ) -> Result<Option<TransactionDetails>, Error>;
fn del_last_index(
        &mut self,
        keychain: KeychainKind
    ) -> Result<Option<u32>, Error>; -}
Expand description

Trait for operations that can be batched

+
fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error>; +
}
Expand description

Trait for operations that can be batched

This trait defines the list of operations that must be implemented on the Database type and the BatchDatabase::Batch type.

-

Required methods

Store a script_pubkey along with its keychain and child number.

-

Store a LocalUtxo

-

Store a raw transaction

-

Store the metadata of a transaction

-

Store the last derivation index for a given keychain.

-

Delete a script_pubkey given the keychain and its child number.

-

Delete the data related to a specific script_pubkey, meaning the keychain and the child +

Required methods

Store a script_pubkey along with its keychain and child number.

+

Store a LocalUtxo

+

Store a raw transaction

+

Store the metadata of a transaction

+

Store the last derivation index for a given keychain.

+

Store the sync time

+

Delete a script_pubkey given the keychain and its child number.

+

Delete the data related to a specific script_pubkey, meaning the keychain and the child number.

-

Delete a LocalUtxo given its [OutPoint]

-

Delete a raw transaction given its [Txid]

-

Delete the metadata of a transaction and optionally the raw transaction itself

-

Delete the last derivation index for a keychain.

-

Implementations on Foreign Types

Implementors

- +

Delete a LocalUtxo given its [OutPoint]

+

Delete a raw transaction given its [Txid]

+

Delete the metadata of a transaction and optionally the raw transaction itself

+

Delete the last derivation index for a keychain.

+

Reset the sync time to None

+

Returns the removed value

+

Implementations on Foreign Types

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.ConfigurableDatabase.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.ConfigurableDatabase.html index 230a6c5ae1..9cd3723111 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.ConfigurableDatabase.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.ConfigurableDatabase.html @@ -1,9 +1,10 @@ -ConfigurableDatabase in bdk::database - Rust

Trait bdk::database::ConfigurableDatabase[][src]

pub trait ConfigurableDatabase: Database + Sized {
+ConfigurableDatabase in bdk::database - Rust
+    
logo

Trait bdk::database::ConfigurableDatabase[][src]

pub trait ConfigurableDatabase: Database + Sized {
     type Config: Debug;
     fn from_config(config: &Self::Config) -> Result<Self, Error>;
 }
Expand description

Trait for Database types that can be created given a configuration

-

Associated Types

Type that contains the configuration

-

Required methods

Create a new instance given a configuration

-

Implementations on Foreign Types

Implementors

- +

Associated Types

Type that contains the configuration

+

Required methods

Create a new instance given a configuration

+

Implementations on Foreign Types

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.Database.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.Database.html index e58fa2d43c..0643e50bc4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.Database.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/database/trait.Database.html @@ -1,5 +1,7 @@ -Database in bdk::database - Rust

Trait bdk::database::Database[][src]

pub trait Database: BatchOperations {
-
Show 13 methods fn check_descriptor_checksum<B: AsRef<[u8]>>(
        &mut self,
        keychain: KeychainKind,
        bytes: B
    ) -> Result<(), Error>; +Database in bdk::database - Rust +
logo

Trait bdk::database::Database[][src]

pub trait Database: BatchOperations {
+
Show 14 methods fn check_descriptor_checksum<B: AsRef<[u8]>>(
        &mut self,
        keychain: KeychainKind,
        bytes: B
    ) -> Result<(), Error>;
fn iter_script_pubkeys(
        &self,
        keychain: Option<KeychainKind>
    ) -> Result<Vec<Script>, Error>;
fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error>;
fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error>; @@ -10,27 +12,28 @@
fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>;
fn get_tx(
        &self,
        txid: &Txid,
        include_raw: bool
    ) -> Result<Option<TransactionDetails>, Error>;
fn get_last_index(
        &self,
        keychain: KeychainKind
    ) -> Result<Option<u32>, Error>; +
fn get_sync_time(&self) -> Result<Option<SyncTime>, Error>;
fn increment_last_index(
        &mut self,
        keychain: KeychainKind
    ) -> Result<u32, Error>;
fn flush(&mut self) -> Result<(), Error>;
}
Expand description

Trait for reading data from a database

This traits defines the operations that can be used to read data out of a database

-

Required methods

Read and checks the descriptor checksum for a given keychain.

+

Required methods

Read and checks the descriptor checksum for a given keychain.

Should return Error::ChecksumMismatch if the checksum doesn’t match. If there’s no checksum in the database, simply store it for the next time.

-

Return the list of script_pubkeys

-

Return the list of LocalUtxos

-

Return the list of raw transactions

-

Return the list of transactions metadata

-

Fetch a script_pubkey given the child number of a keychain.

-

Fetch the keychain and child number of a given script_pubkey

-

Fetch a LocalUtxo given its [OutPoint]

-

Fetch a raw transaction given its [Txid]

-

Fetch the transaction metadata and optionally also the raw transaction

-

Return the last defivation index for a keychain.

-

Increment the last derivation index for a keychain and return it

+

Return the list of script_pubkeys

+

Return the list of LocalUtxos

+

Return the list of raw transactions

+

Return the list of transactions metadata

+

Fetch a script_pubkey given the child number of a keychain.

+

Fetch the keychain and child number of a given script_pubkey

+

Fetch a LocalUtxo given its [OutPoint]

+

Fetch a raw transaction given its [Txid]

+

Fetch the transaction metadata and optionally also the raw transaction

+

Return the last derivation index for a keychain.

+

Return the sync time, if present

+

Increment the last derivation index for a keychain and return it

It should insert and return 0 if not present in the database

-

Force changes to be written to disk

-

Implementations on Foreign Types

Implementors

- +

Force changes to be written to disk

+

Implementations on Foreign Types

Implementors

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/fn.get_checksum.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/fn.get_checksum.html index 55ce0b83b6..53ce870102 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/fn.get_checksum.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/fn.get_checksum.html @@ -1,4 +1,5 @@ -get_checksum in bdk::descriptor::checksum - Rust

Function bdk::descriptor::checksum::get_checksum[][src]

pub fn get_checksum(desc: &str) -> Result<String, DescriptorError>
Expand description

Compute the checksum of a descriptor

-
- +get_checksum in bdk::descriptor::checksum - Rust +
logo

Function bdk::descriptor::checksum::get_checksum[][src]

pub fn get_checksum(desc: &str) -> Result<String, DescriptorError>
Expand description

Compute the checksum of a descriptor

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/index.html index 019adf3d57..b6dcece558 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/checksum/index.html @@ -1,8 +1,9 @@ -bdk::descriptor::checksum - Rust

Module bdk::descriptor::checksum[][src]

Expand description

Descriptor checksum

+bdk::descriptor::checksum - Rust +
logo

Module bdk::descriptor::checksum[][src]

Expand description

Descriptor checksum

This module contains a re-implementation of the function used by Bitcoin Core to calculate the checksum of a descriptor

-

Functions

-

Compute the checksum of a descriptor

-
- +

Functions

+

Compute the checksum of a descriptor

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html index 7bdf70a2ad..106c5dbaab 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html @@ -1,16 +1,18 @@ -Descriptor in bdk::descriptor - Rust

Enum bdk::descriptor::Descriptor[]

pub enum Descriptor<Pk> where
    Pk: MiniscriptKey, 
{ +Descriptor in bdk::descriptor - Rust +
logo

Enum bdk::descriptor::Descriptor[]

pub enum Descriptor<Pk> where
    Pk: MiniscriptKey, 
{ Bare(Bare<Pk>), Pkh(Pkh<Pk>), Wpkh(Wpkh<Pk>), Sh(Sh<Pk>), Wsh(Wsh<Pk>), }
Expand description

Script descriptor

-

Variants

Bare(Bare<Pk>)

A raw scriptpubkey (including pay-to-pubkey) under Legacy context

-

Tuple Fields of Bare

0: Bare<Pk>
Pkh(Pkh<Pk>)

Pay-to-PubKey-Hash

-

Tuple Fields of Pkh

0: Pkh<Pk>
Wpkh(Wpkh<Pk>)

Pay-to-Witness-PubKey-Hash

-

Tuple Fields of Wpkh

0: Wpkh<Pk>
Sh(Sh<Pk>)

Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)

-

Tuple Fields of Sh

0: Sh<Pk>
Wsh(Wsh<Pk>)

Pay-to-Witness-ScriptHash with Segwitv0 context

-

Tuple Fields of Wsh

0: Wsh<Pk>

Implementations

Create a new pk descriptor

+

Variants

Bare(Bare<Pk>)

Tuple Fields

0: Bare<Pk>

A raw scriptpubkey (including pay-to-pubkey) under Legacy context

+

Pkh(Pkh<Pk>)

Tuple Fields

0: Pkh<Pk>

Pay-to-PubKey-Hash

+

Wpkh(Wpkh<Pk>)

Tuple Fields

0: Wpkh<Pk>

Pay-to-Witness-PubKey-Hash

+

Sh(Sh<Pk>)

Tuple Fields

0: Sh<Pk>

Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)

+

Wsh(Wsh<Pk>)

Tuple Fields

0: Wsh<Pk>

Pay-to-Witness-ScriptHash with Segwitv0 context

+

Implementations

Create a new pk descriptor

Create a new PkH descriptor

Create a new Wpkh descriptor Will return Err if uncompressed key is used

@@ -45,8 +47,8 @@ Errors when miniscript exceeds resource limits under p2sh context

a descriptor that only contains public keys and a map to lookup the secret key given a public key.

Serialize a descriptor to string with its secret keys

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

+

Performs copy-assignment from source. Read more

+

Formats the value using the given formatter. Read more

Whether the descriptor is safe Checks whether all the spend paths in the descriptor are possible on the bitcoin network under the current standardness and consensus rules @@ -81,8 +83,8 @@ sighash when evaluating a CHECKSIG & co. OP code.

Attempts to produce a satisfying witness and scriptSig to spend an output controlled by the given descriptor; add the data to a given TxIn output. Read more

-

Deserialize this value from the given Serde deserializer. Read more

-

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

Extract the spending policy

Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more

@@ -92,62 +94,59 @@ the predicate returned true for any key Read more<

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

Parse an expression tree into a descriptor

Feeds this value into the given Hasher. Read more

-

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

+

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

Convert the object into an abstract policy

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

+

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 by ==. Read more

This method tests for !=.

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

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

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

-

Serialize this value into the given Serde serializer. Read more

-

Convert a descriptor using abstract keys to one using specific keys +

Serialize this value into the given Serde serializer. Read more

+

Convert a descriptor using abstract keys to one using specific keys This will panic if translatefpk returns an uncompressed key when converting to a Segwit descriptor. To prevent this panic, ensure translatefpk returns an error in this case instead.

The associated output type. This must be Self

Calls translate_pk with conversion functions that cannot fail

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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

-

Converts the given value to a String. Read more

-

Translate a struct from one generic to another where the +

🔬 This is a nightly-only experimental API. (toowned_clone_into)

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

+

Converts the given value to a String. Read more

+

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

-

Translate a struct from one generic to another where the +

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

-

Translate a struct from one generic to another where the +

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

Translate a struct from one generic to another where the translation for Pk is provided by translatefpk 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.

-
- +

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/descriptor/enum.Legacy.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html index 839a91fcf1..8ae265e0dc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Legacy.html @@ -1,27 +1,29 @@ -Legacy in bdk::descriptor - Rust

Enum bdk::descriptor::Legacy[]

pub enum Legacy {}
Expand description

Legacy ScriptContext +Legacy in bdk::descriptor - Rust +

logo

Enum bdk::descriptor::Legacy[]

pub enum Legacy {}
Expand description

Legacy ScriptContext To be used as P2SH scripts For creation of Bare scriptpubkeys, construct the Miniscript under Bare ScriptContext

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

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

+

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

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

+

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 by ==. Read more

-

This method tests for !=.

+

This method tests for !=.

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

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

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

-

Depending on ScriptContext, fragments can be malleable. For Example, +

Depending on ScriptContext, fragments can be malleable. For Example, under Legacy context, PkH is malleable because it is possible to estimate the cost of satisfaction because of compressed keys This is currently only used in compiler code for removing malleable @@ -29,10 +31,10 @@ compilations. This does NOT recursively check if the children of the fragment are valid or not. Since the compilation proceeds in a leaf to root fashion, a recursive check is unnecessary. Read more

-

Check whether the given satisfaction is valid under the ScriptContext +

Check whether the given satisfaction is valid under the ScriptContext For example, segwit satisfactions may fail if the witness len is more 3600 or number of stack elements are more than 100. Read more

-

Depending on script Context, some of the Terminals might not +

Depending on script Context, some of the Terminals might not be valid under the current consensus rules. Or some of the script resource limits may have been exceeded. These miniscripts would never be accepted by the Bitcoin network and hence @@ -42,17 +44,17 @@ uncompressed public keys are non-standard and thus invalid. In LegacyP2SH context, scripts above 520 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments. Read more

-

Consensus rules at the Miniscript satisfaction time. +

Consensus rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path(Legacy/Segwitv0) may require more than 201 opcodes. Read more

-

Policy rules at the Miniscript satisfaction time. +

Policy rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path in Legacy context scriptSig more than 1650 bytes Read more

-

Depending on script context, the size of a satifaction witness may slightly differ.

-

Depending on script Context, some of the script resource limits +

Depending on script context, the size of a satifaction witness may slightly differ.

+

Depending on script Context, some of the script resource limits may have been exceeded under the current bitcoin core policy rules These miniscripts would never be accepted by the Bitcoin network and hence it is safe to discard them. (unless explicitly disabled by non-standard flag) @@ -60,36 +62,33 @@ For example, in Segwit Context with MiniscriptKey as bitcoin::PublicKey scripts over 3600 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments. Read more

-

Check the consensus + policy(if not disabled) rules that are not based +

Check the consensus + policy(if not disabled) rules that are not based satisfaction Read more

-

Check the consensus + policy(if not disabled) rules including the +

Check the consensus + policy(if not disabled) rules including the ones for satisfaction Read more

-

Check whether the top-level is type B

-

Other top level checks that are context specific

-

Check top level consensus rules.

+

Check whether the top-level is type B

+

Other top level checks that are context specific

+

Check top level consensus rules.

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

-

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns whether the script context is Legacy

Returns whether the script context is Segwitv0

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/enum.Segwitv0.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html index 11e3d518c9..2123d28f6c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Segwitv0.html @@ -1,24 +1,26 @@ -Segwitv0 in bdk::descriptor - Rust

Enum bdk::descriptor::Segwitv0[]

pub enum Segwitv0 {}
Expand description

Segwitv0 ScriptContext

+Segwitv0 in bdk::descriptor - Rust +
logo

Enum bdk::descriptor::Segwitv0[]

pub enum Segwitv0 {}
Expand description

Segwitv0 ScriptContext

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

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

+

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

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

+

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 by ==. Read more

-

This method tests for !=.

+

This method tests for !=.

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

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

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

-

Depending on ScriptContext, fragments can be malleable. For Example, +

Depending on ScriptContext, fragments can be malleable. For Example, under Legacy context, PkH is malleable because it is possible to estimate the cost of satisfaction because of compressed keys This is currently only used in compiler code for removing malleable @@ -26,10 +28,10 @@ compilations. This does NOT recursively check if the children of the fragment are valid or not. Since the compilation proceeds in a leaf to root fashion, a recursive check is unnecessary. Read more

-

Check whether the given satisfaction is valid under the ScriptContext +

Check whether the given satisfaction is valid under the ScriptContext For example, segwit satisfactions may fail if the witness len is more 3600 or number of stack elements are more than 100. Read more

-

Depending on script Context, some of the Terminals might not +

Depending on script Context, some of the Terminals might not be valid under the current consensus rules. Or some of the script resource limits may have been exceeded. These miniscripts would never be accepted by the Bitcoin network and hence @@ -39,11 +41,11 @@ uncompressed public keys are non-standard and thus invalid. In LegacyP2SH context, scripts above 520 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments. Read more

-

Consensus rules at the Miniscript satisfaction time. +

Consensus rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path(Legacy/Segwitv0) may require more than 201 opcodes. Read more

-

Depending on script Context, some of the script resource limits +

Depending on script Context, some of the script resource limits may have been exceeded under the current bitcoin core policy rules These miniscripts would never be accepted by the Bitcoin network and hence it is safe to discard them. (unless explicitly disabled by non-standard flag) @@ -51,42 +53,39 @@ For example, in Segwit Context with MiniscriptKey as bitcoin::PublicKey scripts over 3600 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments. Read more

-

Policy rules at the Miniscript satisfaction time. +

Policy rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path in Legacy context scriptSig more than 1650 bytes Read more

-

Depending on script context, the size of a satifaction witness may slightly differ.

-

Check the consensus + policy(if not disabled) rules that are not based +

Depending on script context, the size of a satifaction witness may slightly differ.

+

Check the consensus + policy(if not disabled) rules that are not based satisfaction Read more

-

Check the consensus + policy(if not disabled) rules including the +

Check the consensus + policy(if not disabled) rules including the ones for satisfaction Read more

-

Check whether the top-level is type B

-

Other top level checks that are context specific

-

Check top level consensus rules.

+

Check whether the top-level is type B

+

Other top level checks that are context specific

+

Check top level consensus rules.

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

-

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Returns whether the script context is Legacy

Returns whether the script context is Segwitv0

-

Performs the conversion.

-

Performs the conversion.

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/error/enum.Error.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html index ec4d949d3a..0e628f1d0f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html @@ -1,4 +1,6 @@ -Error in bdk::descriptor::error - Rust

Enum bdk::descriptor::error::Error[][src]

pub enum Error {
+Error in bdk::descriptor::error - Rust
+    
logo

Enum bdk::descriptor::error::Error[][src]

pub enum Error {
     InvalidHdKeyPath,
     InvalidDescriptorChecksum,
     HardenedDerivationXpub,
@@ -12,19 +14,19 @@
     Miniscript(Error),
     Hex(Error),
 }
Expand description

Errors related to the parsing and usage of descriptors

-

Variants

InvalidHdKeyPath

Invalid HD Key path, such as having a wildcard but a length != 1

-
InvalidDescriptorChecksum

The provided descriptor doesn’t match its checksum

-
HardenedDerivationXpub

The descriptor contains hardened derivation steps on public extended keys

-
DuplicatedKeys

The descriptor contains multiple keys with the same BIP32 fingerprint

-

Error thrown while working with keys

-

Tuple Fields of Key

Policy(PolicyError)

Error while extracting and manipulating policies

-

Tuple Fields of Policy

InvalidDescriptorCharacter(char)

Invalid character found in the descriptor checksum

-

Tuple Fields of InvalidDescriptorCharacter

0: char
Bip32(Error)

BIP32 error

-

Tuple Fields of Bip32

0: Error
Base58(Error)

Error during base58 decoding

-

Tuple Fields of Base58

0: Error
Pk(Error)

Key-related error

-

Tuple Fields of Pk

0: Error
Miniscript(Error)

Miniscript error

-

Tuple Fields of Miniscript

0: Error
Hex(Error)

Hex decoding error

-

Tuple Fields of Hex

0: Error

Trait Implementations

Formats the value using the given formatter. Read more

+

Variants

InvalidHdKeyPath

Invalid HD Key path, such as having a wildcard but a length != 1

+

InvalidDescriptorChecksum

The provided descriptor doesn’t match its checksum

+

HardenedDerivationXpub

The descriptor contains hardened derivation steps on public extended keys

+

DuplicatedKeys

The descriptor contains multiple keys with the same BIP32 fingerprint

+

Key(KeyError)

Tuple Fields

Error thrown while working with keys

+

Policy(PolicyError)

Tuple Fields

Error while extracting and manipulating policies

+

InvalidDescriptorCharacter(char)

Tuple Fields

0: char

Invalid character found in the descriptor checksum

+

Bip32(Error)

Tuple Fields

0: Error

BIP32 error

+

Base58(Error)

Tuple Fields

0: Error

Error during base58 decoding

+

Pk(Error)

Tuple Fields

0: Error

Key-related error

+

Miniscript(Error)

Tuple Fields

0: Error

Miniscript error

+

Hex(Error)

Tuple Fields

0: Error

Hex decoding error

+

Trait Implementations

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

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

@@ -39,31 +41,20 @@

Performs the conversion.

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Converts a reference to Self into a dynamic trait object of Fail.

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the “name” of the error. Read more

-

Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

-

Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

-

Provides context for this failure. Read more

-

Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/descriptor/error/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/error/index.html index 932150123c..8b06a6198f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/error/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/error/index.html @@ -1,6 +1,7 @@ -bdk::descriptor::error - Rust

Module bdk::descriptor::error[][src]

Expand description

Descriptor errors

-

Enums

-

Errors related to the parsing and usage of descriptors

-
- +bdk::descriptor::error - Rust +
logo

Module bdk::descriptor::error[][src]

Expand description

Descriptor errors

+

Enums

+

Errors related to the parsing and usage of descriptors

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/index.html index 4c2d3b96f0..8de8347b46 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/index.html @@ -1,35 +1,36 @@ -bdk::descriptor - Rust

Module bdk::descriptor[][src]

Expand description

Descriptors

+bdk::descriptor - Rust +
logo

Module bdk::descriptor[][src]

Expand description

Descriptors

This module contains generic utilities to work with descriptors, plus some re-exported types from [miniscript].

-

Re-exports

-
pub use self::checksum::get_checksum;
pub use self::error::Error as DescriptorError;
pub use self::policy::Policy;

Modules

-

Descriptor checksum

-

Descriptor errors

-

Descriptor policy

-

Descriptor templates

-

Structs

-

Extended DescriptorPublicKey that has been derived

-

Top-level script AST type

-

Enums

-

Script descriptor

-

Legacy ScriptContext +

Re-exports

+
pub use self::checksum::get_checksum;
pub use self::error::Error as DescriptorError;
pub use self::policy::Policy;

Modules

+

Descriptor checksum

+

Descriptor errors

+

Descriptor policy

+

Descriptor templates

+

Structs

+

Extended DescriptorPublicKey that has been derived

+

Top-level script AST type

+

Enums

+

Script descriptor

+

Legacy ScriptContext To be used as P2SH scripts For creation of Bare scriptpubkeys, construct the Miniscript under Bare ScriptContext

-

Segwitv0 ScriptContext

-

Traits

-

Trait implemented on Descriptors to add a method to extract the spending policy

-

Trait for types which can be converted into an ExtendedDescriptor and a KeyMap usable by a wallet in a specific [Network]

-

The ScriptContext for Miniscript. Additional type information associated with +

Segwitv0 ScriptContext

+

Traits

+

Trait implemented on Descriptors to add a method to extract the spending policy

+

Trait for types which can be converted into an ExtendedDescriptor and a KeyMap usable by a wallet in a specific [Network]

+

The ScriptContext for Miniscript. Additional type information associated with miniscript that is used for carrying out checks that dependent on the context under which the script is used. For example, disallowing uncompressed keys in Segwit context

-

Type Definitions

-

Alias for a Descriptor that contains extended derived keys

-

Alias for a Descriptor that can contain extended keys using DescriptorPublicKey

-

Alias for the type of maps that represent derivation paths in a psbt::Input or +

Type Definitions

+

Alias for a Descriptor that contains extended derived keys

+

Alias for a Descriptor that can contain extended keys using DescriptorPublicKey

+

Alias for the type of maps that represent derivation paths in a psbt::Input or psbt::Output

-

Alias type for a map of public key to secret key

-
- +

Alias type for a map of public key to secret key

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html index fd9eddbd4f..5e92d09071 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.BuildSatisfaction.html @@ -1,4 +1,6 @@ -BuildSatisfaction in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::BuildSatisfaction[][src]

pub enum BuildSatisfaction<'a> {
+BuildSatisfaction in bdk::descriptor::policy - Rust
+    
logo

Enum bdk::descriptor::policy::BuildSatisfaction[][src]

pub enum BuildSatisfaction<'a> {
     None,
     Psbt(&'a Psbt),
     PsbtTimelocks {
@@ -7,36 +9,33 @@
         input_max_height: u32,
     },
 }
Expand description

Options to build the satisfaction field in the policy

-

Variants

None

Don’t generate satisfaction field

-
Psbt(&'a Psbt)

Analyze the given PSBT to check for existing signatures

-

Tuple Fields of Psbt

0: &'a Psbt
PsbtTimelocks

Like Psbt variant and also check for expired timelocks

-

Fields of PsbtTimelocks

psbt: &'a Psbt

Given PSBT

-
current_height: u32

Current blockchain height

-
input_max_height: u32

The highest confirmation height between the inputs +

Variants

None

Don’t generate satisfaction field

+

Psbt(&'a Psbt)

Tuple Fields

0: &'a Psbt

Analyze the given PSBT to check for existing signatures

+

PsbtTimelocks

Fields

psbt: &'a Psbt

Given PSBT

+
current_height: u32

Current blockchain height

+
input_max_height: u32

The highest confirmation height between the inputs CSV should consider different inputs, but we consider the worst condition for the tx as whole

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Like Psbt variant and also check for expired timelocks

+

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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/policy/enum.PolicyError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html index 0412f4a82f..5a2060943a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.PolicyError.html @@ -1,4 +1,6 @@ -PolicyError in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::PolicyError[][src]

pub enum PolicyError {
+PolicyError in bdk::descriptor::policy - Rust
+    
logo

Enum bdk::descriptor::policy::PolicyError[][src]

pub enum PolicyError {
     NotEnoughItemsSelected(String),
     IndexOutOfRange(usize),
     AddOnLeaf,
@@ -6,12 +8,12 @@
     MixedTimelockUnits,
     IncompatibleConditions,
 }
Expand description

Errors that can happen while extracting and manipulating policies

-

Variants

NotEnoughItemsSelected(String)

Not enough items are selected to satisfy a SatisfiableItem::Thresh or a SatisfiableItem::Multisig

-

Tuple Fields of NotEnoughItemsSelected

0: String
IndexOutOfRange(usize)

Index out of range for an item to satisfy a SatisfiableItem::Thresh or a SatisfiableItem::Multisig

-

Tuple Fields of IndexOutOfRange

0: usize
AddOnLeaf

Can not add to an item that is Satisfaction::None or Satisfaction::Complete

-
AddOnPartialComplete

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

-
MixedTimelockUnits

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

-
IncompatibleConditions

Incompatible conditions (not currently used)

+

Variants

NotEnoughItemsSelected(String)

Tuple Fields

0: String

Not enough items are selected to satisfy a SatisfiableItem::Thresh or a SatisfiableItem::Multisig

+

IndexOutOfRange(usize)

Tuple Fields

0: usize

Index out of range for an item to satisfy a SatisfiableItem::Thresh or a SatisfiableItem::Multisig

+

AddOnLeaf

Can not add to an item that is Satisfaction::None or Satisfaction::Complete

+

AddOnPartialComplete

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

+

MixedTimelockUnits

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

+

IncompatibleConditions

Incompatible conditions (not currently used)

Trait Implementations

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

@@ -24,31 +26,20 @@ by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Converts a reference to Self into a dynamic trait object of Fail.

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Returns the “name” of the error. Read more

-

Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

-

Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

-

Provides context for this failure. Read more

-

Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

-

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.

-
- +

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/descriptor/policy/enum.Satisfaction.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html index a58bf0bb83..7f080c5f59 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.Satisfaction.html @@ -1,4 +1,6 @@ -Satisfaction in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::Satisfaction[][src]

pub enum Satisfaction {
+Satisfaction in bdk::descriptor::policy - Rust
+    
logo

Enum bdk::descriptor::policy::Satisfaction[][src]

pub enum Satisfaction {
     Partial {
         n: usize,
         m: usize,
@@ -18,47 +20,44 @@
     },
     None,
 }
Expand description

Represent if and how much a policy item is satisfied by the wallet’s descriptor

-

Variants

Partial

Only a partial satisfaction of some kind of threshold policy

-

Fields of Partial

n: usize

Total number of items

-
m: usize

Threshold

-
items: Vec<usize>

The items that can be satisfied by the descriptor or are satisfied in the PSBT

-
sorted: Option<bool>

Whether the items are sorted in lexicographic order (used by sortedmulti)

-
conditions: ConditionMap

Extra conditions that also need to be satisfied

-
PartialComplete

Can reach the threshold of some kind of threshold policy

-

Fields of PartialComplete

n: usize

Total number of items

-
m: usize

Threshold

-
items: Vec<usize>

The items that can be satisfied by the descriptor

-
sorted: Option<bool>

Whether the items are sorted in lexicographic order (used by sortedmulti)

-
conditions: FoldedConditionMap

Extra conditions that also need to be satisfied

-
Complete

Can satisfy the policy item

-

Fields of Complete

condition: Condition

Extra conditions that also need to be satisfied

-
None

Cannot satisfy or contribute to the policy item

+

Variants

Partial

Fields

n: usize

Total number of items

+
m: usize

Threshold

+
items: Vec<usize>

The items that can be satisfied by the descriptor or are satisfied in the PSBT

+
sorted: Option<bool>

Whether the items are sorted in lexicographic order (used by sortedmulti)

+
conditions: ConditionMap

Extra conditions that also need to be satisfied

+

Only a partial satisfaction of some kind of threshold policy

+

PartialComplete

Fields

n: usize

Total number of items

+
m: usize

Threshold

+
items: Vec<usize>

The items that can be satisfied by the descriptor

+
sorted: Option<bool>

Whether the items are sorted in lexicographic order (used by sortedmulti)

+
conditions: FoldedConditionMap

Extra conditions that also need to be satisfied

+

Can reach the threshold of some kind of threshold policy

+

Complete

Fields

condition: Condition

Extra conditions that also need to be satisfied

+

Can satisfy the policy item

+

None

Cannot satisfy or contribute to the policy item

Implementations

Returns whether the Satisfaction is a leaf item

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Performs the conversion.

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/policy/enum.SatisfiableItem.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html index 10e4daecb0..ab09eaa096 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/enum.SatisfiableItem.html @@ -1,4 +1,6 @@ -SatisfiableItem in bdk::descriptor::policy - Rust

Enum bdk::descriptor::policy::SatisfiableItem[][src]

pub enum SatisfiableItem {
+SatisfiableItem in bdk::descriptor::policy - Rust
+    
logo

Enum bdk::descriptor::policy::SatisfiableItem[][src]

pub enum SatisfiableItem {
     Signature(PkOrF),
     SignatureKey(PkOrF),
     Sha256Preimage {
@@ -28,53 +30,50 @@
         threshold: usize,
     },
 }
Expand description

An item that needs to be satisfied

-

Variants

Signature(PkOrF)

Signature for a raw public key

-

Tuple Fields of Signature

0: PkOrF
SignatureKey(PkOrF)

Signature for an extended key fingerprint

-

Tuple Fields of SignatureKey

0: PkOrF
Sha256Preimage

SHA256 preimage hash

-

Fields of Sha256Preimage

hash: Hash

The digest value

-
Hash256Preimage

Double SHA256 preimage hash

-

Fields of Hash256Preimage

hash: Hash

The digest value

-
Ripemd160Preimage

RIPEMD160 preimage hash

-

Fields of Ripemd160Preimage

hash: Hash

The digest value

-
Hash160Preimage

SHA256 then RIPEMD160 preimage hash

-

Fields of Hash160Preimage

hash: Hash

The digest value

-
AbsoluteTimelock

Absolute timeclock timestamp

-

Fields of AbsoluteTimelock

value: u32

The timestamp value

-
RelativeTimelock

Relative timelock locktime

-

Fields of RelativeTimelock

value: u32

The locktime value

-
Multisig

Multi-signature public keys with threshold count

-

Fields of Multisig

keys: Vec<PkOrF>

The raw public key or extended key fingerprint

-
threshold: usize

The required threshold count

-
Thresh

Threshold items with threshold count

-

Fields of Thresh

items: Vec<Policy>

The policy items

-
threshold: usize

The required threshold count

-

Implementations

Returns whether the SatisfiableItem is a leaf item

+

Variants

Signature(PkOrF)

Tuple Fields

0: PkOrF

Signature for a raw public key

+

SignatureKey(PkOrF)

Tuple Fields

0: PkOrF

Signature for an extended key fingerprint

+

Sha256Preimage

Fields

hash: Hash

The digest value

+

SHA256 preimage hash

+

Hash256Preimage

Fields

hash: Hash

The digest value

+

Double SHA256 preimage hash

+

Ripemd160Preimage

Fields

hash: Hash

The digest value

+

RIPEMD160 preimage hash

+

Hash160Preimage

Fields

hash: Hash

The digest value

+

SHA256 then RIPEMD160 preimage hash

+

AbsoluteTimelock

Fields

value: u32

The timestamp value

+

Absolute timeclock timestamp

+

RelativeTimelock

Fields

value: u32

The locktime value

+

Relative timelock locktime

+

Multisig

Fields

keys: Vec<PkOrF>

The raw public key or extended key fingerprint

+
threshold: usize

The required threshold count

+

Multi-signature public keys with threshold count

+

Thresh

Fields

items: Vec<Policy>

The policy items

+
threshold: usize

The required threshold count

+

Threshold items with threshold count

+

Implementations

Returns whether the SatisfiableItem is a leaf item

Returns a unique id for the SatisfiableItem

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Performs the conversion.

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/policy/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/index.html index c9fc4315a8..c0151c7375 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/index.html @@ -1,8 +1,10 @@ -bdk::descriptor::policy - Rust

Module bdk::descriptor::policy[][src]

Expand description

Descriptor policy

+bdk::descriptor::policy - Rust +
logo

Module bdk::descriptor::policy[][src]

Expand description

Descriptor policy

This module implements the logic to extract and represent the spending policies of a descriptor in a more human-readable format.

This is an EXPERIMENTAL feature, API and other major changes are expected.

-

Example

+

Example

use bdk::descriptor::policy::BuildSatisfaction;
 let secp = Secp256k1::new();
 let desc = "wsh(and_v(v:pk(cV3oCth6zxZ1UVsHLnGothsWNsaoxRhC6aeNi5VbSdFpwUkgkEci),or_d(pk(cVMTy7uebJgvFaSBwcgvwk8qn8xSLc97dKow4MBetjrrahZoimm2),older(12960))))";
@@ -13,18 +15,17 @@ in a more human-readable format.

let signers = Arc::new(key_map.into()); let policy = extended_desc.extract_policy(&signers, BuildSatisfaction::None, &secp)?; println!("policy: {}", serde_json::to_string(&policy)?);
-

Structs

-

An extra condition that must be satisfied but that is out of control of the user

-

Raw public key or extended key fingerprint

-

Descriptor spending policy

-

Enums

-

Options to build the satisfaction field in the policy

-

Errors that can happen while extracting and manipulating policies

-

Represent if and how much a policy item is satisfied by the wallet’s descriptor

-

An item that needs to be satisfied

-

Type Definitions

-

Type for a map of sets of Condition items keyed by each set’s index

-

Type for a map of folded sets of Condition items keyed by a vector of the combined set’s indexes

-
- +

Structs

+

An extra condition that must be satisfied but that is out of control of the user

+

Raw public key or extended key fingerprint

+

Descriptor spending policy

+

Enums

+

Options to build the satisfaction field in the policy

+

Errors that can happen while extracting and manipulating policies

+

Represent if and how much a policy item is satisfied by the wallet’s descriptor

+

An item that needs to be satisfied

+

Type Definitions

+

Type for a map of sets of Condition items keyed by each set’s index

+

Type for a map of folded sets of Condition items keyed by a vector of the combined set’s indexes

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html index accab7d501..37bc581313 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Condition.html @@ -1,4 +1,6 @@ -Condition in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::Condition[][src]

pub struct Condition {
+Condition in bdk::descriptor::policy - Rust
+    
logo

Struct bdk::descriptor::policy::Condition[][src]

pub struct Condition {
     pub csv: Option<u32>,
     pub timelock: Option<u32>,
 }
Expand description

An extra condition that must be satisfied but that is out of control of the user

@@ -6,46 +8,43 @@
timelock: Option<u32>

Optional timelock condition

Implementations

Returns true if there are no extra conditions to verify

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. 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

Feeds this value into the given Hasher. Read more

-

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

+

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

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

+

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 by ==. Read more

This method tests for !=.

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

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

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

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/policy/struct.PkOrF.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html index aecf0a08a7..7ff6c34de5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.PkOrF.html @@ -1,29 +1,28 @@ -PkOrF in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::PkOrF[][src]

pub struct PkOrF { /* fields omitted */ }
Expand description

Raw public key or extended key fingerprint

+PkOrF in bdk::descriptor::policy - Rust +
logo

Struct bdk::descriptor::policy::PkOrF[][src]

pub struct PkOrF { /* fields omitted */ }
Expand description

Raw public key or extended key fingerprint

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. 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

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/policy/struct.Policy.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html index cf4cd6599e..daf449f72d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/struct.Policy.html @@ -1,4 +1,6 @@ -Policy in bdk::descriptor::policy - Rust

Struct bdk::descriptor::policy::Policy[][src]

pub struct Policy {
+Policy in bdk::descriptor::policy - Rust
+    
logo

Struct bdk::descriptor::policy::Policy[][src]

pub struct Policy {
     pub id: String,
     pub item: SatisfiableItem,
     pub satisfaction: Satisfaction,
@@ -16,30 +18,27 @@ on that.

Return the conditions that are set by the spending policy for a given path in the policy tree

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Performs the conversion.

-

Serialize this value into the given Serde serializer. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/policy/type.ConditionMap.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.ConditionMap.html index c222634d0b..58deb2e994 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.ConditionMap.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.ConditionMap.html @@ -1,4 +1,5 @@ -ConditionMap in bdk::descriptor::policy - Rust

Type Definition bdk::descriptor::policy::ConditionMap[][src]

pub type ConditionMap = BTreeMap<usize, HashSet<Condition>>;
Expand description

Type for a map of sets of Condition items keyed by each set’s index

-
- +ConditionMap in bdk::descriptor::policy - Rust +
logo

Type Definition bdk::descriptor::policy::ConditionMap[][src]

pub type ConditionMap = BTreeMap<usize, HashSet<Condition>>;
Expand description

Type for a map of sets of Condition items keyed by each set’s index

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.FoldedConditionMap.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.FoldedConditionMap.html index a878b45589..dfb82a6147 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.FoldedConditionMap.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/policy/type.FoldedConditionMap.html @@ -1,4 +1,5 @@ -FoldedConditionMap in bdk::descriptor::policy - Rust

Type Definition bdk::descriptor::policy::FoldedConditionMap[][src]

pub type FoldedConditionMap = BTreeMap<Vec<usize>, HashSet<Condition>>;
Expand description

Type for a map of folded sets of Condition items keyed by a vector of the combined set’s indexes

-
- +FoldedConditionMap in bdk::descriptor::policy - Rust +
logo

Type Definition bdk::descriptor::policy::FoldedConditionMap[][src]

pub type FoldedConditionMap = BTreeMap<Vec<usize>, HashSet<Condition>>;
Expand description

Type for a map of folded sets of Condition items keyed by a vector of the combined set’s indexes

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html index 9cdf7671f9..6b47ffa75a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.DerivedDescriptorKey.html @@ -1,8 +1,10 @@ -DerivedDescriptorKey in bdk::descriptor - Rust

Struct bdk::descriptor::DerivedDescriptorKey[][src]

pub struct DerivedDescriptorKey<'s>(_, _);
Expand description

Extended DescriptorPublicKey that has been derived

+DerivedDescriptorKey in bdk::descriptor - Rust +
logo

Struct bdk::descriptor::DerivedDescriptorKey[][src]

pub struct DerivedDescriptorKey<'s>(_, _);
Expand description

Extended DescriptorPublicKey that has been derived

Derived keys are guaranteed to never contain wildcards of any kind

Implementations

Construct a new derived key

Panics if the key is wildcard

-

Methods from Deref<Target = DescriptorPublicKey>

The fingerprint of the master key associated with this key

+

Methods from Deref<Target = DescriptorPublicKey>

The fingerprint of the master key associated with this key

Full path, from the master key

For wildcard keys this will return the path up to the wildcard, so you can get full paths by appending one additional derivation step, according @@ -16,13 +18,13 @@ to avoid hardened derivation steps, start from a DescriptorSecretKeyas_public, or call TranslatePk2::translate_pk2 with some function which has access to secret key data.

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

+

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

The resulting type after dereferencing.

Dereferences the value.

Formats the value using the given formatter. Read more

Feeds this value into the given Hasher. Read more

-

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

+

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

The associated Hash type with the publicKey

Converts an object to PublicHash

Check if the publicKey is uncompressed. The default @@ -30,42 +32,39 @@ implementation returns false Read more

Computes the size of a public key when serialized in a script, including the length bytes Read more

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

+

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 by ==. Read more

-

This method tests for !=.

+

This method tests for !=.

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

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

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

Converts an object to a public key

Converts a hashed version of the public key to a hash160 hash. 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

-

Performs the conversion.

-

Performs the conversion.

+

Immutably borrows from an owned value. Read more

+

Mutably borrows from an owned value. Read more

+

Performs the conversion.

+

Performs the conversion.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

-

Should always be Self

The resulting type after obtaining ownership.

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

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

-

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.

-
- +
🔬 This is a nightly-only experimental API. (toowned_clone_into)

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/descriptor/struct.Miniscript.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html index 3bf9c9b0ac..890f5ec82f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/struct.Miniscript.html @@ -1,4 +1,6 @@ -Miniscript in bdk::descriptor - Rust

Struct bdk::descriptor::Miniscript[]

pub struct Miniscript<Pk, Ctx> where
    Ctx: ScriptContext,
    Pk: MiniscriptKey, 
{ +Miniscript in bdk::descriptor - Rust +
logo

Struct bdk::descriptor::Miniscript[]

pub struct Miniscript<Pk, Ctx> where
    Pk: MiniscriptKey,
    Ctx: ScriptContext
{ pub node: Terminal<Pk, Ctx>, pub ty: Type, pub ext: ExtData, @@ -7,7 +9,7 @@

Fields

node: Terminal<Pk, Ctx>

A node in the Abstract Syntax Tree(

ty: Type

The correctness and malleability type information for the AST node

ext: ExtData

Additional information helpful for extra analysis.

-

Implementations

Whether all spend paths of miniscript require a signature

+

Implementations

Whether all spend paths of miniscript require a signature

Whether the miniscript is malleable

Whether the miniscript can exceed the resource limits(Opcodes, Stack limit etc)

Whether the miniscript contains a combination of timelocks

@@ -20,7 +22,7 @@ Signing logic may not find satisfaction even if one exists.

Use this function to check whether the guarantees of library hold. Most functions of the library like would still work, but results cannot be relied upon

-

Iterator-related extensions for Miniscript

+

Iterator-related extensions for Miniscript

Creates a new [Iter] iterator that will iterate over all Miniscript items within AST by traversing its branches. For the specific algorithm please see [Iter::next] function.

@@ -65,10 +67,10 @@ returns it cloned copy.

Returns Option::Some with hash of n’th public key or hash from the current miniscript item, if any. Otherwise returns Option::None.

NB: The function analyzes only single miniscript item and not any of its descendants in AST.

-

Add type information(Type and Extdata) to Miniscript based on +

Add type information(Type and Extdata) to Miniscript based on AstElem fragment. Dependent on display and clone because of Error Display code of type_check.

-

Extracts the AstElem representing the root of the miniscript

+

Extracts the AstElem representing the root of the miniscript

Get a reference to the inner AstElem representing the root of miniscript

Attempt to parse an insane(scripts don’t clear sanity checks) script into a Miniscript representation. @@ -81,14 +83,14 @@ accept sane scripts.

This function will fail parsing for scripts that do not clear the Miniscript::sanity_check checks. Use Miniscript::parse_insane to parse such scripts.

-

Encode as a Bitcoin script

+

Encode as a Bitcoin script

Size, in bytes of the script-pubkey. If this Miniscript is used outside of segwit (e.g. in a bare or P2SH descriptor), this quantity should be multiplied by 4 to compute the weight.

In general, it is not recommended to use this function directly, but to instead call the corresponding function on a Descriptor, which will handle the segwit/non-segwit technicalities for you.

-

Maximum number of witness elements used to satisfy the Miniscript +

Maximum number of witness elements used to satisfy the Miniscript fragment, including the witness script itself. Used to estimate the weight of the VarInt that specifies this number in a serialized transaction.

@@ -104,18 +106,18 @@ will handle the segwit/non-segwit technicalities for you.

All signatures are assumed to be 73 bytes in size, including the length prefix (segwit) or push opcode (pre-segwit) and sighash postfix.

-

Attempt to parse an insane(scripts don’t clear sanity checks) +

Attempt to parse an insane(scripts don’t clear sanity checks) from string into a Miniscript representation. Use this to parse scripts with repeated pubkeys, timelock mixing, malleable scripts without sig or scripts that can exceed resource limits. Some of the analysis guarantees of miniscript are lost when dealing with insane scripts. In general, in a multi-party setting users should only accept sane scripts.

-

Attempt to produce non-malleable satisfying witness for the +

Attempt to produce non-malleable satisfying witness for the witness script represented by the parse tree

-

Attempt to produce a malleable satisfying witness for the +

Attempt to produce a malleable satisfying witness for the witness script represented by the parse tree

-

Lifting corresponds conversion of miniscript into Policy +

Lifting corresponds conversion of miniscript into Policy [policy.semantic.Policy] for human readable or machine analysis. However, naively lifting miniscripts can result in incorrect interpretations that don’t correspond underlying semantics when @@ -125,91 +127,88 @@ This can occur if the miniscript contains a

  • Timelock combination
  • Contains a spend that exceeds resource limits
  • -

    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

    -

    Deserialize this value from the given Serde deserializer. Read more

    -

    Formats the value using the given formatter. Read 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

    +

    Deserialize this value from the given Serde deserializer. Read more

    +

    Formats the value using the given formatter. Read more

    Extract the spending policy

    -

    Run a predicate on every key in the descriptor, returning whether +

    Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more

    Run a predicate on every key in the descriptor, returning whether the predicate returned true for any key Read more

    -

    Parse a Miniscript from string and perform sanity checks +

    Parse a Miniscript from string and perform sanity checks See Miniscript::from_str_insane to parse scripts from string that do not clear the Miniscript::sanity_check checks.

    The associated error which can be returned from parsing.

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

    -

    Parse an expression tree into a Miniscript. As a general rule, this +

    Parse an expression tree into a Miniscript. As a general rule, this should not be called directly; rather go through the descriptor API.

    -

    Feeds this value into the given Hasher. Read more

    -

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

    -

    Convert the object into an abstract policy

    -

    Ord of Miniscript must depend only on node and not the type information. +

    Feeds this value into the given Hasher. Read more

    +

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

    +

    Convert the object into an abstract policy

    +

    Ord of Miniscript must depend only on node and not the type information. The type information and extra_properties can be deterministically determined by the ast.

    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

    -

    PartialEq of Miniscript must depend only on node and not the type information. +

    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

    +

    PartialEq of Miniscript must depend only on node and not the type information. The type information and extra_properties can be deterministically determined by the ast.

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    PartialOrd of Miniscript must depend only on node and not the type information. +

    This method tests for !=.

    +

    PartialOrd of Miniscript must depend only on node and not the type information. The type information and extra_properties can be deterministically determined by the ast.

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

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

    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

    -

    Serialize this value into the given Serde serializer. Read more

    -

    This will panic if translatefpk returns an uncompressed key when +

    Serialize this value into the given Serde serializer. Read more

    +

    This will panic if translatefpk returns an uncompressed key when converting to a Segwit descriptor. To prevent this panic, ensure translatefpk returns an error in this case instead.

    The associated output type. This must be Self

    Calls translate_pk with conversion functions that cannot fail

    -

    Eq of Miniscript must depend only on node and not the type information. +

    Eq of Miniscript must depend only on node and not the type information. The type information and extra_properties can be deterministically determined by the ast.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

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

    -

    Converts the given value to a String. Read more

    -

    Translate a struct from one generic to another where the +

    🔬 This is a nightly-only experimental API. (toowned_clone_into)

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

    +

    Converts the given value to a String. Read more

    +

    Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

    Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

    -

    Translate a struct from one generic to another where the +

    Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

    Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

    -

    Translate a struct from one generic to another where the +

    Translate a struct from one generic to another where the translation for Pk is provided by translatefpk Read more

    Translate a struct from one generic to another where the translation for Pk is provided by translatefpk 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.

    -
    - +

    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/descriptor/template/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/index.html index 2edd73980f..5857da9d84 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/index.html @@ -1,20 +1,21 @@ -bdk::descriptor::template - Rust

    Module bdk::descriptor::template[][src]

    Expand description

    Descriptor templates

    +bdk::descriptor::template - Rust +
    logo

    Module bdk::descriptor::template[][src]

    Expand description

    Descriptor templates

    This module contains the definition of various common script templates that are ready to be used. See the documentation of each template for an example.

    -

    Structs

    -

    BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)

    -

    BIP44 public template. Expands to pkh(key/{0,1}/*)

    -

    BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))

    -

    BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))

    -

    BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)

    -

    BIP84 public template. Expands to wpkh(key/{0,1}/*)

    -

    P2PKH template. Expands to a descriptor pkh(key)

    -

    P2WPKH template. Expands to a descriptor wpkh(key)

    -

    P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))

    -

    Traits

    -

    Trait for descriptor templates that can be built into a full descriptor

    -

    Type Definitions

    -

    Type alias for the return type of DescriptorTemplate, descriptor! and others

    -
    - +

    Structs

    +

    BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)

    +

    BIP44 public template. Expands to pkh(key/{0,1}/*)

    +

    BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))

    +

    BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))

    +

    BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)

    +

    BIP84 public template. Expands to wpkh(key/{0,1}/*)

    +

    P2PKH template. Expands to a descriptor pkh(key)

    +

    P2WPKH template. Expands to a descriptor wpkh(key)

    +

    P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))

    +

    Traits

    +

    Trait for descriptor templates that can be built into a full descriptor

    +

    Type Definitions

    +

    Type alias for the return type of DescriptorTemplate, descriptor! and others

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html index 5f7c8bbff0..357a0855b5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44.html @@ -1,7 +1,9 @@ -Bip44 in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::Bip44[][src]

    pub struct Bip44<K: DerivableKey<Legacy>>(pub K, pub KeychainKind);
    Expand description

    BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)

    +Bip44 in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::Bip44[][src]

    pub struct Bip44<K: DerivableKey<Legacy>>(pub K, pub KeychainKind);
    Expand description

    BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)

    Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

    See Bip44Public for a template that can work with a xpub/tpub.

    -

    Example

    +

    Example

    use bdk::template::Bip44;
     
     let key = bitcoin::util::bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
    @@ -16,10 +18,10 @@
     assert_eq!(wallet.public_descriptor(KeychainKind::External)?.unwrap().to_string(), "pkh([c55b303f/44'/0'/0']tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU/0/*)#xgaaevjx");

    Tuple Fields

    0: K1: KeychainKind

    Trait Implementations

    Build the complete descriptor

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -27,11 +29,9 @@

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.Bip44Public.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html index 28874d293e..164b4700b3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip44Public.html @@ -1,9 +1,11 @@ -Bip44Public in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::Bip44Public[][src]

    pub struct Bip44Public<K: DerivableKey<Legacy>>(pub K, pub Fingerprint, pub KeychainKind);
    Expand description

    BIP44 public template. Expands to pkh(key/{0,1}/*)

    +Bip44Public in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::Bip44Public[][src]

    pub struct Bip44Public<K: DerivableKey<Legacy>>(pub K, pub Fingerprint, pub KeychainKind);
    Expand description

    BIP44 public template. Expands to pkh(key/{0,1}/*)

    This assumes that the key used has already been derived with m/44'/0'/0'.

    This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

    See Bip44 for a template that does the full derivation, but requires private data for the key.

    -

    Example

    +

    Example

    use bdk::template::Bip44Public;
     
     let key = bitcoin::util::bip32::ExtendedPubKey::from_str("tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU")?;
    @@ -19,10 +21,10 @@ for the key.

    assert_eq!(wallet.public_descriptor(KeychainKind::External)?.unwrap().to_string(), "pkh([c55b303f/44'/0'/0']tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU/0/*)#xgaaevjx");

    Tuple Fields

    0: K1: Fingerprint2: KeychainKind

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -30,11 +32,9 @@ for the key.

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.Bip49.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html index bdf6d79374..7d78956806 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49.html @@ -1,7 +1,9 @@ -Bip49 in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::Bip49[][src]

    pub struct Bip49<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
    Expand description

    BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))

    +Bip49 in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::Bip49[][src]

    pub struct Bip49<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
    Expand description

    BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))

    Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

    See Bip49Public for a template that can work with a xpub/tpub.

    -

    Example

    +

    Example

    use bdk::template::Bip49;
     
     let key = bitcoin::util::bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
    @@ -16,10 +18,10 @@
     assert_eq!(wallet.public_descriptor(KeychainKind::External)?.unwrap().to_string(), "sh(wpkh([c55b303f/49\'/0\'/0\']tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L/0/*))#gsmdv4xr");

    Tuple Fields

    0: K1: KeychainKind

    Trait Implementations

    Build the complete descriptor

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -27,11 +29,9 @@

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.Bip49Public.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html index 990701de24..66c1d86a73 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip49Public.html @@ -1,9 +1,11 @@ -Bip49Public in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::Bip49Public[][src]

    pub struct Bip49Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
    Expand description

    BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))

    +Bip49Public in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::Bip49Public[][src]

    pub struct Bip49Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
    Expand description

    BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))

    This assumes that the key used has already been derived with m/49'/0'/0'.

    This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

    See Bip49 for a template that does the full derivation, but requires private data for the key.

    -

    Example

    +

    Example

    use bdk::template::Bip49Public;
     
     let key = bitcoin::util::bip32::ExtendedPubKey::from_str("tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L")?;
    @@ -19,10 +21,10 @@ for the key.

    assert_eq!(wallet.public_descriptor(KeychainKind::External)?.unwrap().to_string(), "sh(wpkh([c55b303f/49\'/0\'/0\']tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L/0/*))#gsmdv4xr");

    Tuple Fields

    0: K1: Fingerprint2: KeychainKind

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -30,11 +32,9 @@ for the key.

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.Bip84.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html index 340052e2f1..fad395c457 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84.html @@ -1,7 +1,9 @@ -Bip84 in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::Bip84[][src]

    pub struct Bip84<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
    Expand description

    BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)

    +Bip84 in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::Bip84[][src]

    pub struct Bip84<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
    Expand description

    BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)

    Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

    See Bip84Public for a template that can work with a xpub/tpub.

    -

    Example

    +

    Example

    use bdk::template::Bip84;
     
     let key = bitcoin::util::bip32::ExtendedPrivKey::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
    @@ -16,10 +18,10 @@
     assert_eq!(wallet.public_descriptor(KeychainKind::External)?.unwrap().to_string(), "wpkh([c55b303f/84\'/0\'/0\']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#nkk5dtkg");

    Tuple Fields

    0: K1: KeychainKind

    Trait Implementations

    Build the complete descriptor

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -27,11 +29,9 @@

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.Bip84Public.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html index d946de1a23..279d572998 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.Bip84Public.html @@ -1,9 +1,11 @@ -Bip84Public in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::Bip84Public[][src]

    pub struct Bip84Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
    Expand description

    BIP84 public template. Expands to wpkh(key/{0,1}/*)

    +Bip84Public in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::Bip84Public[][src]

    pub struct Bip84Public<K: DerivableKey<Segwitv0>>(pub K, pub Fingerprint, pub KeychainKind);
    Expand description

    BIP84 public template. Expands to wpkh(key/{0,1}/*)

    This assumes that the key used has already been derived with m/84'/0'/0'.

    This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

    See Bip84 for a template that does the full derivation, but requires private data for the key.

    -

    Example

    +

    Example

    use bdk::template::Bip84Public;
     
     let key = bitcoin::util::bip32::ExtendedPubKey::from_str("tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q")?;
    @@ -19,10 +21,10 @@ for the key.

    assert_eq!(wallet.public_descriptor(KeychainKind::External)?.unwrap().to_string(), "wpkh([c55b303f/84\'/0\'/0\']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#nkk5dtkg");

    Tuple Fields

    0: K1: Fingerprint2: KeychainKind

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -30,11 +32,9 @@ for the key.

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.P2Pkh.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html index 9f00d81a24..f19dc8dee7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Pkh.html @@ -1,5 +1,7 @@ -P2Pkh in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::P2Pkh[][src]

    pub struct P2Pkh<K: IntoDescriptorKey<Legacy>>(pub K);
    Expand description

    P2PKH template. Expands to a descriptor pkh(key)

    -

    Example

    +P2Pkh in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::P2Pkh[][src]

    pub struct P2Pkh<K: IntoDescriptorKey<Legacy>>(pub K);
    Expand description

    P2PKH template. Expands to a descriptor pkh(key)

    +

    Example

    use bdk::template::P2Pkh;
     
     let key =
    @@ -17,10 +19,10 @@
     );

    Tuple Fields

    0: K

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -28,11 +30,9 @@

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.P2Wpkh.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html index cdb5cf12c8..c8a22d9bc1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh.html @@ -1,5 +1,7 @@ -P2Wpkh in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::P2Wpkh[][src]

    pub struct P2Wpkh<K: IntoDescriptorKey<Segwitv0>>(pub K);
    Expand description

    P2WPKH template. Expands to a descriptor wpkh(key)

    -

    Example

    +P2Wpkh in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::P2Wpkh[][src]

    pub struct P2Wpkh<K: IntoDescriptorKey<Segwitv0>>(pub K);
    Expand description

    P2WPKH template. Expands to a descriptor wpkh(key)

    +

    Example

    use bdk::template::P2Wpkh;
     
     let key =
    @@ -17,10 +19,10 @@
     );

    Tuple Fields

    0: K

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -28,11 +30,9 @@

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/struct.P2Wpkh_P2Sh.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html index 3caa912c30..30d8e76650 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/struct.P2Wpkh_P2Sh.html @@ -1,5 +1,7 @@ -P2Wpkh_P2Sh in bdk::descriptor::template - Rust

    Struct bdk::descriptor::template::P2Wpkh_P2Sh[][src]

    pub struct P2Wpkh_P2Sh<K: IntoDescriptorKey<Segwitv0>>(pub K);
    Expand description

    P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))

    -

    Example

    +P2Wpkh_P2Sh in bdk::descriptor::template - Rust +
    logo

    Struct bdk::descriptor::template::P2Wpkh_P2Sh[][src]

    pub struct P2Wpkh_P2Sh<K: IntoDescriptorKey<Segwitv0>>(pub K);
    Expand description

    P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))

    +

    Example

    use bdk::template::P2Wpkh_P2Sh;
     
     let key =
    @@ -17,10 +19,10 @@
     );

    Tuple Fields

    0: K

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    Convert to wallet descriptor

    The alignment of pointer.

    The type for initializers.

    @@ -28,11 +30,9 @@

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/descriptor/template/trait.DescriptorTemplate.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html index 4fcbe7b52c..33cf2111ff 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/trait.DescriptorTemplate.html @@ -1,9 +1,11 @@ -DescriptorTemplate in bdk::descriptor::template - Rust

    Trait bdk::descriptor::template::DescriptorTemplate[][src]

    pub trait DescriptorTemplate {
    +DescriptorTemplate in bdk::descriptor::template - Rust
    +    
    logo

    Trait bdk::descriptor::template::DescriptorTemplate[][src]

    pub trait DescriptorTemplate {
         fn build(self) -> Result<DescriptorTemplateOut, DescriptorError>;
     }
    Expand description

    Trait for descriptor templates that can be built into a full descriptor

    Since IntoWalletDescriptor is implemented for any DescriptorTemplate, they can also be passed directly to the Wallet constructor.

    -

    Example

    +

    Example

    Required methods

    Build the complete descriptor

    -

    Implementors

    - +

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/type.DescriptorTemplateOut.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/type.DescriptorTemplateOut.html index d5a999d18b..b17926494f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/type.DescriptorTemplateOut.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/template/type.DescriptorTemplateOut.html @@ -1,5 +1,6 @@ -DescriptorTemplateOut in bdk::descriptor::template - Rust

    Type Definition bdk::descriptor::template::DescriptorTemplateOut[][src]

    pub type DescriptorTemplateOut = (ExtendedDescriptor, KeyMap, ValidNetworks);
    Expand description

    Type alias for the return type of DescriptorTemplate, descriptor! and others

    +DescriptorTemplateOut in bdk::descriptor::template - Rust +
    logo

    Type Definition bdk::descriptor::template::DescriptorTemplateOut[][src]

    pub type DescriptorTemplateOut = (ExtendedDescriptor, KeyMap, ValidNetworks);
    Expand description

    Type alias for the return type of DescriptorTemplate, descriptor! and others

    Trait Implementations

    Convert to wallet descriptor

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ExtractPolicy.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ExtractPolicy.html index 6e9c6f1081..c1e46a1d7c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ExtractPolicy.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ExtractPolicy.html @@ -1,7 +1,8 @@ -ExtractPolicy in bdk::descriptor - Rust

    Trait bdk::descriptor::ExtractPolicy[][src]

    pub trait ExtractPolicy {
    +ExtractPolicy in bdk::descriptor - Rust
    +    
    logo

    Trait bdk::descriptor::ExtractPolicy[][src]

    pub trait ExtractPolicy {
         fn extract_policy(
            &self,
            signers: &SignersContainer,
            psbt: BuildSatisfaction<'_>,
            secp: &Secp256k1<All>
        ) -> Result<Option<Policy>, DescriptorError>; }
    Expand description

    Trait implemented on Descriptors to add a method to extract the spending policy

    Required methods

    Extract the spending policy

    -

    Implementors

    - +

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.IntoWalletDescriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.IntoWalletDescriptor.html index 29b6762f60..9491509121 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.IntoWalletDescriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.IntoWalletDescriptor.html @@ -1,9 +1,10 @@ -IntoWalletDescriptor in bdk::descriptor - Rust

    Trait bdk::descriptor::IntoWalletDescriptor[][src]

    pub trait IntoWalletDescriptor {
    +IntoWalletDescriptor in bdk::descriptor - Rust
    +    
    logo

    Trait bdk::descriptor::IntoWalletDescriptor[][src]

    pub trait IntoWalletDescriptor {
         fn into_wallet_descriptor(
            self,
            secp: &Secp256k1<All>,
            network: Network
        ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError>; }
    Expand description

    Trait for types which can be converted into an ExtendedDescriptor and a KeyMap usable by a wallet in a specific [Network]

    Required methods

    Convert to wallet descriptor

    Implementations on Foreign Types

    Implementors

    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ScriptContext.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ScriptContext.html index 92abbd0176..1fb648d077 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ScriptContext.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/trait.ScriptContext.html @@ -1,32 +1,34 @@ -ScriptContext in bdk::descriptor - Rust

    Trait bdk::descriptor::ScriptContext[]

    pub trait ScriptContext: Debug + Clone + Ord + PartialOrd<Self> + Eq + PartialEq<Self> + Hash + Sealed {
    -    fn check_terminal_non_malleable<Pk, Ctx>(
            _frag: &Terminal<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    ; -
    fn max_satisfaction_size<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Option<usize>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    ; +ScriptContext in bdk::descriptor - Rust +
    logo

    Trait bdk::descriptor::ScriptContext[]

    pub trait ScriptContext: Debug + Clone + Ord + PartialOrd<Self> + Eq + PartialEq<Self> + Hash + Sealed {
    +    fn check_terminal_non_malleable<Pk, Ctx>(
            _frag: &Terminal<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    ; +
    fn max_satisfaction_size<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Option<usize>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    ; - fn check_witness<Pk, Ctx>(
            _witness: &[Vec<u8, Global>]
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , + fn check_witness<Pk, Ctx>(
            _witness: &[Vec<u8, Global>]
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_global_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_global_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_global_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_global_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_local_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_local_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_local_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_local_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_global_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_global_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_local_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_local_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn top_level_type_check<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn top_level_type_check<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn other_top_level_checks<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn other_top_level_checks<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn top_level_checks<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Result<(), Error>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn top_level_checks<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Result<(), Error>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } }
    Expand description

    The ScriptContext for Miniscript. Additional type information associated with miniscript that is used for carrying out checks that dependent on the context under which the script is used. For example, disallowing uncompressed keys in Segwit context

    -

    Required methods

    Depending on ScriptContext, fragments can be malleable. For Example, +

    Required methods

    Depending on ScriptContext, fragments can be malleable. For Example, under Legacy context, PkH is malleable because it is possible to estimate the cost of satisfaction because of compressed keys This is currently only used in compiler code for removing malleable @@ -34,11 +36,11 @@ compilations. This does NOT recursively check if the children of the fragment are valid or not. Since the compilation proceeds in a leaf to root fashion, a recursive check is unnecessary.

    -

    Depending on script context, the size of a satifaction witness may slightly differ.

    -

    Provided methods

    Check whether the given satisfaction is valid under the ScriptContext +

    Depending on script context, the size of a satifaction witness may slightly differ.

    +

    Provided methods

    Check whether the given satisfaction is valid under the ScriptContext For example, segwit satisfactions may fail if the witness len is more 3600 or number of stack elements are more than 100.

    -

    Depending on script Context, some of the Terminals might not +

    Depending on script Context, some of the Terminals might not be valid under the current consensus rules. Or some of the script resource limits may have been exceeded. These miniscripts would never be accepted by the Bitcoin network and hence @@ -48,7 +50,7 @@ uncompressed public keys are non-standard and thus invalid. In LegacyP2SH context, scripts above 520 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments.

    -

    Depending on script Context, some of the script resource limits +

    Depending on script Context, some of the script resource limits may have been exceeded under the current bitcoin core policy rules These miniscripts would never be accepted by the Bitcoin network and hence it is safe to discard them. (unless explicitly disabled by non-standard flag) @@ -56,22 +58,21 @@ For example, in Segwit Context with MiniscriptKey as bitcoin::PublicKey scripts over 3600 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments.

    -

    Consensus rules at the Miniscript satisfaction time. +

    Consensus rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path(Legacy/Segwitv0) may require more than 201 opcodes.

    -

    Policy rules at the Miniscript satisfaction time. +

    Policy rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path in Legacy context scriptSig more than 1650 bytes

    -

    Check the consensus + policy(if not disabled) rules that are not based +

    Check the consensus + policy(if not disabled) rules that are not based satisfaction

    -

    Check the consensus + policy(if not disabled) rules including the +

    Check the consensus + policy(if not disabled) rules including the ones for satisfaction

    -

    Check whether the top-level is type B

    -

    Other top level checks that are context specific

    -

    Check top level consensus rules.

    -

    Implementations on Foreign Types

    Implementors

    - +

    Check whether the top-level is type B

    +

    Other top level checks that are context specific

    +

    Check top level consensus rules.

    +

    Implementations on Foreign Types

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.DerivedDescriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.DerivedDescriptor.html index 97508febab..b4f2fd3a7a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.DerivedDescriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.DerivedDescriptor.html @@ -1,4 +1,5 @@ -DerivedDescriptor in bdk::descriptor - Rust

    Type Definition bdk::descriptor::DerivedDescriptor[][src]

    pub type DerivedDescriptor<'s> = Descriptor<DerivedDescriptorKey<'s>>;
    Expand description

    Alias for a Descriptor that contains extended derived keys

    -
    - +DerivedDescriptor in bdk::descriptor - Rust +
    logo

    Type Definition bdk::descriptor::DerivedDescriptor[][src]

    pub type DerivedDescriptor<'s> = Descriptor<DerivedDescriptorKey<'s>>;
    Expand description

    Alias for a Descriptor that contains extended derived keys

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.ExtendedDescriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.ExtendedDescriptor.html index 207f54a03e..e031402170 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.ExtendedDescriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.ExtendedDescriptor.html @@ -1,5 +1,6 @@ -ExtendedDescriptor in bdk::descriptor - Rust

    Type Definition bdk::descriptor::ExtendedDescriptor[][src]

    pub type ExtendedDescriptor = Descriptor<DescriptorPublicKey>;
    Expand description

    Alias for a Descriptor that can contain extended keys using DescriptorPublicKey

    +ExtendedDescriptor in bdk::descriptor - Rust +
    logo

    Type Definition bdk::descriptor::ExtendedDescriptor[][src]

    pub type ExtendedDescriptor = Descriptor<DescriptorPublicKey>;
    Expand description

    Alias for a Descriptor that can contain extended keys using DescriptorPublicKey

    Trait Implementations

    Convert to wallet descriptor

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.HdKeyPaths.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.HdKeyPaths.html index 0f31e1f774..05cf163420 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.HdKeyPaths.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.HdKeyPaths.html @@ -1,5 +1,6 @@ -HdKeyPaths in bdk::descriptor - Rust

    Type Definition bdk::descriptor::HdKeyPaths[][src]

    pub type HdKeyPaths = BTreeMap<PublicKey, KeySource>;
    Expand description

    Alias for the type of maps that represent derivation paths in a psbt::Input or +HdKeyPaths in bdk::descriptor - Rust +

    logo

    Type Definition bdk::descriptor::HdKeyPaths[][src]

    pub type HdKeyPaths = BTreeMap<PublicKey, KeySource>;
    Expand description

    Alias for the type of maps that represent derivation paths in a psbt::Input or psbt::Output

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.KeyMap.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.KeyMap.html index 417fe088cf..73e7b3facc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.KeyMap.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/descriptor/type.KeyMap.html @@ -1,8 +1,9 @@ -KeyMap in bdk::descriptor - Rust

    Type Definition bdk::descriptor::KeyMap[]

    pub type KeyMap = HashMap<DescriptorPublicKey, DescriptorSecretKey, RandomState>;
    Expand description

    Alias type for a map of public key to secret key

    +KeyMap in bdk::descriptor - Rust +
    logo

    Type Definition bdk::descriptor::KeyMap[]

    Expand description

    Alias type for a map of public key to secret key

    This map is returned whenever a descriptor that contains secrets is parsed using Descriptor::parse_descriptor, since the descriptor will always only contain public keys. This map allows looking up the corresponding secret key given a public key from the descriptor.

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Error.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Error.html index a383630561..1ce7e50b97 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Error.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Error.html @@ -1,4 +1,6 @@ -Error in bdk - Rust

    Enum bdk::Error[][src]

    pub enum Error {
    +Error in bdk - Rust
    +    
    logo

    Enum bdk::Error[][src]

    pub enum Error {
     
    Show 41 variants InvalidU32Bytes(Vec<u8>), Generic(String), ScriptDoesntHaveAddressForm, @@ -41,7 +43,7 @@ Miniscript(Error), Bip32(Error), Secp256k1(Error), - Json(Error), + Json(Error), Hex(Error), Psbt(Error), PsbtParse(PsbtParseError), @@ -51,58 +53,58 @@ Sled(Error), Rusqlite(Error),
    }
    Expand description

    Errors that can be thrown by the Wallet

    -

    Variants

    InvalidU32Bytes(Vec<u8>)

    Wrong number of bytes found when trying to convert to u32

    -

    Tuple Fields of InvalidU32Bytes

    0: Vec<u8>
    Generic(String)

    Generic error

    -

    Tuple Fields of Generic

    0: String
    ScriptDoesntHaveAddressForm

    This error is thrown when trying to convert Bare and Public key script to address

    -
    NoRecipients

    Cannot build a tx without recipients

    -
    NoUtxosSelected

    manually_selected_only option is selected but no utxo has been passed

    -
    OutputBelowDustLimit(usize)

    Output created is under the dust limit, 546 satoshis

    -

    Tuple Fields of OutputBelowDustLimit

    0: usize
    InsufficientFunds

    Wallet’s UTXO set is not enough to cover recipient’s requested plus fee

    -

    Fields of InsufficientFunds

    needed: u64

    Sats needed for some transaction

    -
    available: u64

    Sats available for spending

    -
    BnBTotalTriesExceeded

    Branch and bound coin selection possible attempts with sufficiently big UTXO set could grow +

    Variants

    InvalidU32Bytes(Vec<u8>)

    Tuple Fields

    0: Vec<u8>

    Wrong number of bytes found when trying to convert to u32

    +

    Generic(String)

    Tuple Fields

    0: String

    Generic error

    +

    ScriptDoesntHaveAddressForm

    This error is thrown when trying to convert Bare and Public key script to address

    +

    NoRecipients

    Cannot build a tx without recipients

    +

    NoUtxosSelected

    manually_selected_only option is selected but no utxo has been passed

    +

    OutputBelowDustLimit(usize)

    Tuple Fields

    0: usize

    Output created is under the dust limit, 546 satoshis

    +

    InsufficientFunds

    Fields

    needed: u64

    Sats needed for some transaction

    +
    available: u64

    Sats available for spending

    +

    Wallet’s UTXO set is not enough to cover recipient’s requested plus fee

    +

    BnBTotalTriesExceeded

    Branch and bound coin selection possible attempts with sufficiently big UTXO set could grow exponentially, thus a limit is set, and when hit, this error is thrown

    -
    BnBNoExactMatch

    Branch and bound coin selection tries to avoid needing a change by finding the right inputs for +

    BnBNoExactMatch

    Branch and bound coin selection tries to avoid needing a change by finding the right inputs for the desired outputs plus fee, if there is not such combination this error is thrown

    -
    UnknownUtxo

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

    -
    TransactionNotFound

    Thrown when a tx is not found in the internal database

    -
    TransactionConfirmed

    Happens when trying to bump a transaction that is already confirmed

    -
    IrreplaceableTransaction

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

    -
    FeeRateTooLow

    When bumping a tx the fee rate requested is lower than required

    -

    Fields of FeeRateTooLow

    required: FeeRate

    Required fee rate (satoshi/vbyte)

    -
    FeeTooLow

    When bumping a tx the absolute fee requested is lower than replaced tx absolute fee

    -

    Fields of FeeTooLow

    required: u64

    Required fee absolute value (satoshi)

    -
    FeeRateUnavailable

    Node doesn’t have data to estimate a fee rate

    -
    MissingKeyOrigin(String)

    In order to use the TxBuilder::add_global_xpubs option every extended +

    UnknownUtxo

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

    +

    TransactionNotFound

    Thrown when a tx is not found in the internal database

    +

    TransactionConfirmed

    Happens when trying to bump a transaction that is already confirmed

    +

    IrreplaceableTransaction

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

    +

    FeeRateTooLow

    Fields

    required: FeeRate

    Required fee rate (satoshi/vbyte)

    +

    When bumping a tx the fee rate requested is lower than required

    +

    FeeTooLow

    Fields

    required: u64

    Required fee absolute value (satoshi)

    +

    When bumping a tx the absolute fee requested is lower than replaced tx absolute fee

    +

    FeeRateUnavailable

    Node doesn’t have data to estimate a fee rate

    +

    MissingKeyOrigin(String)

    Tuple Fields

    0: String

    In order to use the TxBuilder::add_global_xpubs option every extended key in the descriptor must either be a master key itself (having depth = 0) or have an explicit origin provided

    -

    Tuple Fields of MissingKeyOrigin

    0: String

    Error while working with keys

    -

    Tuple Fields of Key

    ChecksumMismatch

    Descriptor checksum mismatch

    -
    SpendingPolicyRequired(KeychainKind)

    Spending policy is not compatible with this KeychainKind

    -

    Tuple Fields of SpendingPolicyRequired

    InvalidPolicyPathError(PolicyError)

    Error while extracting and manipulating policies

    -

    Tuple Fields of InvalidPolicyPathError

    Signer(SignerError)

    Signing error

    -

    Tuple Fields of Signer

    InvalidNetwork

    Invalid network

    -

    Fields of InvalidNetwork

    requested: Network

    requested network, for example what is given as bdk-cli option

    -
    found: Network

    found network, for example the network of the bitcoin node

    -
    InvalidProgressValue(f32)

    Progress value must be between 0.0 (included) and 100.0 (included)

    -

    Tuple Fields of InvalidProgressValue

    0: f32
    ProgressUpdateError

    Progress update error (maybe the channel has been closed)

    -
    InvalidOutpoint(OutPoint)

    Requested outpoint doesn’t exist in the tx (vout greater than available outputs)

    -

    Tuple Fields of InvalidOutpoint

    0: OutPoint
    Descriptor(Error)

    Error related to the parsing and usage of descriptors

    -

    Tuple Fields of Descriptor

    0: Error
    AddressValidator(AddressValidatorError)

    Error that can be returned to fail the validation of an address

    -

    Tuple Fields of AddressValidator

    Encode(Error)

    Encoding error

    -

    Tuple Fields of Encode

    0: Error
    Miniscript(Error)

    Miniscript error

    -

    Tuple Fields of Miniscript

    0: Error
    Bip32(Error)

    BIP32 error

    -

    Tuple Fields of Bip32

    0: Error
    Secp256k1(Error)

    An ECDSA error

    -

    Tuple Fields of Secp256k1

    0: Error
    Json(Error)

    Error serializing or deserializing JSON data

    -

    Tuple Fields of Json

    0: Error
    Hex(Error)

    Hex decoding error

    -

    Tuple Fields of Hex

    0: Error
    Psbt(Error)

    Partially signed bitcoin transaction error

    -

    Tuple Fields of Psbt

    0: Error
    PsbtParse(PsbtParseError)

    Partially signed bitcoin transaction parseerror

    -

    Tuple Fields of PsbtParse

    0: PsbtParseError
    Electrum(Error)

    Electrum client error

    -

    Tuple Fields of Electrum

    0: Error
    Esplora(Box<EsploraError>)

    Esplora client error

    -

    Tuple Fields of Esplora

    CompactFilters(CompactFiltersError)

    Compact filters client error)

    -

    Tuple Fields of CompactFilters

    Sled(Error)

    Sled database error

    -

    Tuple Fields of Sled

    0: Error
    Rusqlite(Error)

    Rusqlite client error

    -

    Tuple Fields of Rusqlite

    0: Error

    Trait Implementations

    Formats the value using the given formatter. Read more

    +

    Key(KeyError)

    Tuple Fields

    Error while working with keys

    +

    ChecksumMismatch

    Descriptor checksum mismatch

    +

    SpendingPolicyRequired(KeychainKind)

    Tuple Fields

    Spending policy is not compatible with this KeychainKind

    +

    InvalidPolicyPathError(PolicyError)

    Tuple Fields

    Error while extracting and manipulating policies

    +

    Signer(SignerError)

    Tuple Fields

    Signing error

    +

    InvalidNetwork

    Fields

    requested: Network

    requested network, for example what is given as bdk-cli option

    +
    found: Network

    found network, for example the network of the bitcoin node

    +

    Invalid network

    +

    InvalidProgressValue(f32)

    Tuple Fields

    0: f32

    Progress value must be between 0.0 (included) and 100.0 (included)

    +

    ProgressUpdateError

    Progress update error (maybe the channel has been closed)

    +

    InvalidOutpoint(OutPoint)

    Tuple Fields

    0: OutPoint

    Requested outpoint doesn’t exist in the tx (vout greater than available outputs)

    +

    Descriptor(Error)

    Tuple Fields

    0: Error

    Error related to the parsing and usage of descriptors

    +

    AddressValidator(AddressValidatorError)

    Tuple Fields

    Error that can be returned to fail the validation of an address

    +

    Encode(Error)

    Tuple Fields

    0: Error

    Encoding error

    +

    Miniscript(Error)

    Tuple Fields

    0: Error

    Miniscript error

    +

    Bip32(Error)

    Tuple Fields

    0: Error

    BIP32 error

    +

    Secp256k1(Error)

    Tuple Fields

    0: Error

    An ECDSA error

    +

    Json(Error)

    Tuple Fields

    0: Error

    Error serializing or deserializing JSON data

    +

    Hex(Error)

    Tuple Fields

    0: Error

    Hex decoding error

    +

    Psbt(Error)

    Tuple Fields

    0: Error

    Partially signed bitcoin transaction error

    +

    PsbtParse(PsbtParseError)

    Tuple Fields

    0: PsbtParseError

    Partially signed bitcoin transaction parse error

    +

    Electrum(Error)

    Tuple Fields

    0: Error

    Electrum client error

    +

    Esplora(Box<EsploraError>)

    Tuple Fields

    Esplora client error

    +

    CompactFilters(CompactFiltersError)

    Tuple Fields

    Compact filters client error)

    +

    Sled(Error)

    Tuple Fields

    0: Error

    Sled database error

    +

    Rusqlite(Error)

    Tuple Fields

    0: Error

    Rusqlite client error

    +

    Trait Implementations

    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

    🔬 This is a nightly-only experimental API. (backtrace)

    Returns a stack backtrace, if available, of where this error occurred. Read more

    @@ -117,7 +119,7 @@ explicit origin provided

    Performs the conversion.

    Performs the conversion.

    Performs the conversion.

    -

    Performs the conversion.

    +

    Performs the conversion.

    Performs the conversion.

    Performs the conversion.

    Performs the conversion.

    @@ -128,31 +130,20 @@ explicit origin provided

    Performs the conversion.

    Performs the conversion.

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Converts a reference to Self into a dynamic trait object of Fail.

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the “name” of the error. Read more

    -

    Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

    -

    Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

    -

    Provides context for this failure. Read more

    -

    Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/enum.KeychainKind.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html index b7202193d0..26df0cf2f9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.KeychainKind.html @@ -1,47 +1,46 @@ -KeychainKind in bdk - Rust

    Enum bdk::KeychainKind[][src]

    pub enum KeychainKind {
    +KeychainKind in bdk - Rust
    +    
    logo

    Enum bdk::KeychainKind[][src]

    pub enum KeychainKind {
         External,
         Internal,
     }
    Expand description

    Types of keychains

    -

    Variants

    External

    External

    -
    Internal

    Internal, usually used for change outputs

    +

    Variants

    External

    External

    +

    Internal

    Internal, usually used for change outputs

    Implementations

    Return KeychainKind as a byte

    -

    Trait Implementations

    Performs the conversion.

    +

    Trait Implementations

    Performs the conversion.

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. Read more

    Formats the value using the given formatter. Read more

    -

    Deserialize this value from the given Serde deserializer. Read more

    +

    Deserialize this value from the given Serde deserializer. Read more

    Feeds this value into the given Hasher. Read more

    -

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

    +

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

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    Serialize this value into the given Serde serializer. Read more

    +

    This method tests for !=.

    +

    Serialize this value into the given Serde serializer. Read more

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    Calculate the base32 serialized length

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Error type if conversion fails

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Error type if conversion fails

    Check if all values are in range and return array-like struct of u5 values

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    Encode as base32 and write it to the supplied writer Implementations shouldn’t allocate. Read more

    Convert Self to base32 vector

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/enum.Utxo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html index 02d5db3d00..62926be37e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/enum.Utxo.html @@ -1,42 +1,41 @@ -Utxo in bdk - Rust

    Enum bdk::Utxo[][src]

    pub enum Utxo {
    +Utxo in bdk - Rust
    +    
    logo

    Enum bdk::Utxo[][src]

    pub enum Utxo {
         Local(LocalUtxo),
         Foreign {
             outpoint: OutPoint,
             psbt_input: Box<Input>,
         },
     }
    Expand description

    An unspent transaction output (UTXO).

    -

    Variants

    Local(LocalUtxo)

    A UTXO owned by the local wallet.

    -

    Tuple Fields of Local

    Foreign

    A UTXO owned by another wallet.

    -

    Fields of Foreign

    outpoint: OutPoint

    The location of the output.

    -
    psbt_input: Box<Input>

    The information about the input we require to add it to a PSBT.

    -

    Implementations

    Get the location of the UTXO

    +

    Variants

    Local(LocalUtxo)

    Tuple Fields

    A UTXO owned by the local wallet.

    +

    Foreign

    Fields

    outpoint: OutPoint

    The location of the output.

    +
    psbt_input: Box<Input>

    The information about the input we require to add it to a PSBT.

    +

    A UTXO owned by another wallet.

    +

    Implementations

    Get the location of the UTXO

    Get the TxOut of the UTXO

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. 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 !=.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/fn.version.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/fn.version.html index 32eb32ae0c..07212d79e7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/fn.version.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/fn.version.html @@ -1,4 +1,5 @@ -version in bdk - Rust

    Function bdk::version[][src]

    pub fn version() -> &'static str
    Expand description

    Get the version of BDK at runtime

    -
    - +version in bdk - Rust +
    logo

    Function bdk::version[][src]

    pub fn version() -> &'static str
    Expand description

    Get the version of BDK at runtime

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/index.html index f8225ea782..1f4be90dd3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/index.html @@ -1,5 +1,7 @@ -bdk - Rust

    Crate bdk[][src]

    Expand description

    A modern, lightweight, descriptor-based wallet library written in Rust.

    -

    About

    +bdk - Rust +
    logo

    Crate bdk[][src]

    Expand description

    A modern, lightweight, descriptor-based wallet library written in Rust.

    +

    About

    The BDK library aims to be the core building block for Bitcoin wallets of any kind.

    • It uses Miniscript to support descriptors with generalized conditions. This exact same library can be used to build @@ -8,7 +10,7 @@ single-sig wallets, multisigs, timelocked contracts and more.
    • It is built to be cross-platform: the core logic works on desktop, mobile, and even WebAssembly.
    • It is very easy to extend: developers can implement customized logic for blockchain backends, databases, signers, coin selection, and more, without having to fork and modify this library.
    -

    A Tour of BDK

    +

    A Tour of BDK

    BDK consists of a number of modules that provide a range of functionality essential for implementing descriptor based Bitcoin wallet applications in Rust. In this section, we will take a brief tour of BDK, summarizing the major APIs and @@ -17,13 +19,13 @@ their uses.

    The default features include a simple key-value database (sled) to cache blockchain data and an electrum blockchain client to interact with the bitcoin P2P network.

    -
    bdk = "0.11.0"

    Sync the balance of a descriptor

    Example

    +
    bdk = "0.14.0"

    Sync the balance of a descriptor

    Example

    use bdk::Wallet;
     use bdk::database::MemoryDatabase;
     use bdk::blockchain::{noop_progress, ElectrumBlockchain};
     use bdk::electrum_client::Client;
     
    -fn main() -> Result<(), bdk::Error> {
    +fn main() -> Result<(), bdk::Error> {
         let client = Client::new("ssl://electrum.blockstream.info:60002")?;
         let wallet = Wallet::new(
             "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)",
    @@ -39,12 +41,12 @@ interact with the bitcoin P2P network.

    Ok(()) }
    -

    Generate a few addresses

    Example

    +

    Generate a few addresses

    Example

    use bdk::{Wallet};
     use bdk::database::MemoryDatabase;
     use bdk::wallet::AddressIndex::New;
     
    -fn main() -> Result<(), bdk::Error> {
    +fn main() -> Result<(), bdk::Error> {
     let wallet = Wallet::new_offline(
             "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)",
             Some("wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"),
    @@ -58,7 +60,7 @@ interact with the bitcoin P2P network.

    Ok(()) }
    -

    Create a transaction

    Example

    +

    Create a transaction

    Example

    use bdk::{FeeRate, Wallet};
     use bdk::database::MemoryDatabase;
     use bdk::blockchain::{noop_progress, ElectrumBlockchain};
    @@ -67,7 +69,7 @@ interact with the bitcoin P2P network.

    use bitcoin::consensus::serialize; use bdk::wallet::AddressIndex::New; -fn main() -> Result<(), bdk::Error> { +fn main() -> Result<(), bdk::Error> { let client = Client::new("ssl://electrum.blockstream.info:60002")?; let wallet = Wallet::new( "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)", @@ -95,7 +97,7 @@ interact with the bitcoin P2P network.

    Ok(()) }
    -

    Sign a transaction

    Example

    +

    Sign a transaction

    Example

    use std::str::FromStr;
     
     use bitcoin::util::psbt::PartiallySignedTransaction as Psbt;
    @@ -103,7 +105,7 @@ interact with the bitcoin P2P network.

    use bdk::{Wallet, SignOptions}; use bdk::database::MemoryDatabase; -fn main() -> Result<(), bdk::Error> { +fn main() -> Result<(), bdk::Error> { let wallet = Wallet::new_offline( "wpkh([c258d2e4/84h/1h/0h]tprv8griRPhA7342zfRyB6CqeKF8CJDXYu5pgnj1cjL1u2ngKcJha5jjTRimG82ABzJQ4MQe71CV54xfn25BbhCNfEGGJZnxvCDQCd6JkbvxW6h/0/*)", Some("wpkh([c258d2e4/84h/1h/0h]tprv8griRPhA7342zfRyB6CqeKF8CJDXYu5pgnj1cjL1u2ngKcJha5jjTRimG82ABzJQ4MQe71CV54xfn25BbhCNfEGGJZnxvCDQCd6JkbvxW6h/1/*)"), @@ -114,11 +116,11 @@ interact with the bitcoin P2P network.

    let psbt = "..."; let mut psbt = Psbt::from_str(psbt)?; - let finalized = wallet.sign(&mut psbt, SignOptions::default())?; + let finalized = wallet.sign(&mut psbt, SignOptions::default())?; Ok(()) }
    -

    Feature flags

    +

    Feature flags

    BDK uses a set of feature flags to reduce the amount of compiled code by allowing projects to only enable the features they need. By default, BDK enables two internal features, key-value-db and electrum.

    @@ -131,7 +133,7 @@ Below is a list of the available feature flags and the additional functionality
  • async-interface: async functions in bdk traits
  • keys-bip39: BIP-39 mnemonic codes for generating deterministic keys
  • -

    Internal features

    +

    Internal features

    These features do not expose any new API, but influence internal implementation aspects of BDK.

      @@ -140,30 +142,31 @@ BDK.

    • esplora: esplora client protocol for interacting with blockstream electrs servers
    • key-value-db: key value database based on sled for caching blockchain data
    -

    Re-exports

    -
    pub extern crate bitcoin;
    pub extern crate electrum_client;
    pub extern crate miniscript;
    pub extern crate rusqlite;
    pub extern crate sled;
    pub use descriptor::template;
    pub use descriptor::HdKeyPaths;
    pub use wallet::address_validator;
    pub use wallet::signer;
    pub use wallet::signer::SignOptions;
    pub use wallet::tx_builder::TxBuilder;
    pub use wallet::Wallet;

    Modules

    -

    Blockchain backends

    -

    Database types

    -

    Descriptors

    -

    Key formats

    -

    Wallet

    -

    Macros

    -

    Macro to write full descriptors with code

    -

    Macro to write descriptor fragments with code

    -

    Structs

    -

    Block height and timestamp of the block containing the confirmed transaction

    -

    Fee rate

    -

    An unspent output owned by a Wallet.

    -

    A wallet transaction

    -

    A Utxo with its satisfaction_weight.

    -

    Enums

    -

    Errors that can be thrown by the Wallet

    -

    Types of keychains

    -

    An unspent transaction output (UTXO).

    -

    Traits

    -

    Trait implemented by types that can be used to measure weight units.

    -

    Functions

    -

    Get the version of BDK at runtime

    -
    - +

    Re-exports

    +
    pub extern crate bitcoin;
    pub extern crate electrum_client;
    pub extern crate miniscript;
    pub extern crate rusqlite;
    pub extern crate sled;
    pub use descriptor::template;
    pub use descriptor::HdKeyPaths;
    pub use wallet::address_validator;
    pub use wallet::signer;
    pub use wallet::signer::SignOptions;
    pub use wallet::tx_builder::TxBuilder;
    pub use wallet::Wallet;

    Modules

    +

    Blockchain backends

    +

    Database types

    +

    Descriptors

    +

    Key formats

    +

    Wallet

    +

    Macros

    +

    Macro to write full descriptors with code

    +

    Macro to write descriptor fragments with code

    +

    Structs

    +

    Block height and timestamp of a block

    +

    Fee rate

    +

    An unspent output owned by a Wallet.

    +

    A wallet transaction

    +

    A Utxo with its satisfaction_weight.

    +

    Enums

    +

    Errors that can be thrown by the Wallet

    +

    Types of keychains

    +

    An unspent transaction output (UTXO).

    +

    Traits

    +

    Trait implemented by types that can be used to measure weight units.

    +

    Functions

    +

    Get the version of BDK at runtime

    +

    Type Definitions

    +

    DEPRECATED: Confirmation time of a transaction

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html index 64cd628ef5..4b30304896 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.Language.html @@ -1,49 +1,52 @@ -Language in bdk::keys::bip39 - Rust

    Enum bdk::keys::bip39::Language[]

    pub enum Language {
    +Language in bdk::keys::bip39 - Rust
    +    
    logo

    Enum bdk::keys::bip39::Language[]

    pub enum Language {
         English,
    -    ChineseSimplified,
    -    ChineseTraditional,
    -    French,
    -    Italian,
    -    Japanese,
    -    Korean,
    -    Spanish,
    -}
    This is supported on crate feature keys-bip39 only.
    Expand description

    The language determines which words will be used in a mnemonic phrase, but also indirectly -determines the binary value of each word when a Mnemonic is turned into a Seed.

    -

    These are not of much use right now, and may even be removed from the crate, as there is no -official language specified by the standard except English.

    -

    Variants

    English
    ChineseSimplified
    ChineseTraditional
    French
    Italian
    Japanese
    Korean
    Spanish

    Implementations

    Construct a word list from its language code. Returns None -if the language code is not valid or not supported.

    -

    Get the word list for this language

    -

    Get a [WordMap][WordMap] that allows word -> index lookups in the word list

    -

    The index of an individual word in the word list is used as the binary value of that word -when the phrase is turned into a [Seed][Seed].

    +}
    This is supported on crate feature keys-bip39 only.
    Expand description

    Language to be used for the mnemonic phrase.

    +

    The English language is always available, other languages are enabled using +the compilation features.

    +

    Variants

    English

    The English language.

    +

    Implementations

    The list of supported languages. +Language support is managed by compile features.

    +

    Get words from the word list that start with the given prefix.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    +

    Formats the value using the given formatter. Read more

    +

    Feeds this value into the given Hasher. Read more

    +

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

    +

    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 by ==. Read more

    -

    This method tests for !=.

    -

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    This method tests for !=.

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/bip39/enum.MnemonicType.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html deleted file mode 100644 index f7c6746c0e..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.MnemonicType.html +++ /dev/null @@ -1,111 +0,0 @@ -MnemonicType in bdk::keys::bip39 - Rust

    Enum bdk::keys::bip39::MnemonicType[]

    pub enum MnemonicType {
    -    Words12,
    -    Words15,
    -    Words18,
    -    Words21,
    -    Words24,
    -}
    This is supported on crate feature keys-bip39 only.
    Expand description

    Determines the number of words that will be present in a Mnemonic phrase

    -

    Also directly affects the amount of entropy that will be used to create a Mnemonic, -and therefore the cryptographic strength of the HD wallet keys/addresses that can be derived from -it using the Seed.

    -

    For example, a 12 word mnemonic phrase is essentially a friendly representation of a 128-bit key, -while a 24 word mnemonic phrase is essentially a 256-bit key.

    -

    If you know you want a specific phrase length, you can use the enum variant directly, for example -MnemonicType::Words12.

    -

    You can also get a MnemonicType that corresponds to one of the standard BIP39 key sizes by -passing arbitrary usize values:

    - -
    use bip39::{MnemonicType};
    -
    -let mnemonic_type = MnemonicType::for_key_size(128).unwrap();
    -

    Variants

    Words12
    Words15
    Words18
    Words21
    Words24

    Implementations

    Get a MnemonicType for a mnemonic phrase with a specific number of words

    -

    Specifying a word count not provided for by the BIP39 standard will return an Error -of kind ErrorKind::InvalidWordLength.

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let mnemonic_type = MnemonicType::for_word_count(12).unwrap();
    -

    Get a MnemonicType for a mnemonic phrase representing the given key size as bits

    -

    Specifying a key size not provided for by the BIP39 standard will return an Error -of kind ErrorKind::InvalidKeysize.

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let mnemonic_type = MnemonicType::for_key_size(128).unwrap();
    -

    Get a MnemonicType for an existing mnemonic phrase

    -

    This can be used when you need information about a mnemonic phrase based on the number of -words, for example you can get the entropy value using MnemonicType::entropy_bits.

    -

    Specifying a phrase that does not match one of the standard BIP39 phrase lengths will return -an Error of kind ErrorKind::InvalidWordLength. The phrase will not be validated in any -other way.

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let test_mnemonic = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -
    -let mnemonic_type = MnemonicType::for_phrase(test_mnemonic).unwrap();
    -
    -let entropy_bits = mnemonic_type.entropy_bits();
    -

    Return the number of entropy+checksum bits

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let test_mnemonic = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -
    -let mnemonic_type = MnemonicType::for_phrase(test_mnemonic).unwrap();
    -
    -let total_bits = mnemonic_type.total_bits();
    -

    Return the number of entropy bits

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let test_mnemonic = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -
    -let mnemonic_type = MnemonicType::for_phrase(test_mnemonic).unwrap();
    -
    -let entropy_bits = mnemonic_type.entropy_bits();
    -

    Return the number of checksum bits

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let test_mnemonic = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -
    -let mnemonic_type = MnemonicType::for_phrase(test_mnemonic).unwrap();
    -
    -let checksum_bits = mnemonic_type.checksum_bits();
    -

    Return the number of words

    -

    Example

    -
    use bip39::{MnemonicType};
    -
    -let mnemonic_type = MnemonicType::Words12;
    -
    -let word_count = mnemonic_type.word_count();
    -

    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

    -

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    -

    The alignment of pointer.

    -

    The type for initializers.

    -

    Initializes a with the given initializer. Read more

    -

    Dereferences the given pointer. Read more

    -

    Mutably dereferences the given pointer. Read more

    -

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    The resulting type after obtaining ownership.

    -

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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/blockchain/esplora/struct.EsploraGetHistory.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.WordCount.html similarity index 50% rename from docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraGetHistory.html rename to docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.WordCount.html index 02fa3f15f5..b95b2c5b27 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/blockchain/esplora/struct.EsploraGetHistory.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/enum.WordCount.html @@ -1,21 +1,31 @@ -EsploraGetHistory in bdk::blockchain::esplora - Rust

    Struct bdk::blockchain::esplora::EsploraGetHistory[][src]

    pub struct EsploraGetHistory { /* fields omitted */ }
    This is supported on crate feature esplora only.
    Expand description

    Data type used when fetching transaction history from Esplora.

    -

    Trait Implementations

    Deserialize this value from the given Serde deserializer. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +WordCount in bdk::keys::bip39 - Rust +
    logo

    Enum bdk::keys::bip39::WordCount[][src]

    pub enum WordCount {
    +    Words12,
    +    Words15,
    +    Words18,
    +    Words21,
    +    Words24,
    +}
    This is supported on crate feature keys-bip39 only.
    Expand description

    Type describing entropy length (aka word count) in the mnemonic

    +

    Variants

    Words12

    12 words mnemonic (128 bits entropy)

    +

    Words15

    15 words mnemonic (160 bits entropy)

    +

    Words18

    18 words mnemonic (192 bits entropy)

    +

    Words21

    21 words mnemonic (224 bits entropy)

    +

    Words24

    24 words mnemonic (256 bits entropy)

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/bip39/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/index.html index 01e929c430..4af34a95c6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/index.html @@ -1,13 +1,12 @@ -bdk::keys::bip39 - Rust

    Module bdk::keys::bip39[][src]

    This is supported on crate feature keys-bip39 only.
    Expand description

    BIP-0039

    -

    Structs

    -

    The primary type in this crate, most tasks require creating or using one.

    -

    The secret value used to derive HD wallet addresses from a Mnemonic phrase.

    -

    Enums

    -

    The language determines which words will be used in a mnemonic phrase, but also indirectly -determines the binary value of each word when a Mnemonic is turned into a Seed.

    -

    Determines the number of words that will be present in a Mnemonic phrase

    -

    Type Definitions

    -

    Type for a BIP39 mnemonic with an optional passphrase

    -
    - +bdk::keys::bip39 - Rust +
    logo

    Module bdk::keys::bip39[][src]

    This is supported on crate feature keys-bip39 only.
    Expand description

    BIP-0039

    +

    Structs

    +

    A mnemonic code.

    +

    Enums

    +

    Language to be used for the mnemonic phrase.

    +

    Type describing entropy length (aka word count) in the mnemonic

    +

    Type Definitions

    +

    Type for a BIP39 mnemonic with an optional passphrase

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/sidebar-items.js index 4c0779de63..10e71d1882 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["Language","The language determines which words will be used in a mnemonic phrase, but also indirectly determines the binary value of each word when a `Mnemonic` is turned into a `Seed`."],["MnemonicType","Determines the number of words that will be present in a `Mnemonic` phrase"]],"struct":[["Mnemonic","The primary type in this crate, most tasks require creating or using one."],["Seed","The secret value used to derive HD wallet addresses from a `Mnemonic` phrase."]],"type":[["MnemonicWithPassphrase","Type for a BIP39 mnemonic with an optional passphrase"]]}); \ No newline at end of file +initSidebarItems({"enum":[["Language","Language to be used for the mnemonic phrase."],["WordCount","Type describing entropy length (aka word count) in the mnemonic"]],"struct":[["Mnemonic","A mnemonic code."]],"type":[["MnemonicWithPassphrase","Type for a BIP39 mnemonic with an optional passphrase"]]}); \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html index c7b3c9a84c..34285bb25d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Mnemonic.html @@ -1,104 +1,97 @@ -Mnemonic in bdk::keys::bip39 - Rust

    Struct bdk::keys::bip39::Mnemonic[]

    pub struct Mnemonic { /* fields omitted */ }
    This is supported on crate feature keys-bip39 only.
    Expand description

    The primary type in this crate, most tasks require creating or using one.

    -

    To create a new Mnemonic from a randomly generated key, call Mnemonic::new().

    -

    To get a Mnemonic instance for an existing mnemonic phrase, including -those generated by other software or hardware wallets, use Mnemonic::from_phrase().

    -

    You can get the HD wallet Seed from a Mnemonic by calling Seed::new(). -From there you can either get the raw byte value with Seed::as_bytes(), or the hex -representation using Rust formatting: format!("{:X}", seed).

    -

    You can also get the original entropy value back from a Mnemonic with Mnemonic::entropy(), -but beware that the entropy value is not the same thing as an HD wallet seed, and should -never be used that way.

    -

    Implementations

    Generates a new Mnemonic

    -

    Use Mnemonic::phrase() to get an str slice of the generated phrase.

    -

    Example

    -
    use bip39::{Mnemonic, MnemonicType, Language};
    +Mnemonic in bdk::keys::bip39 - Rust
    +    
    logo

    Struct bdk::keys::bip39::Mnemonic[]

    pub struct Mnemonic { /* fields omitted */ }
    This is supported on crate feature keys-bip39 only.
    Expand description

    A mnemonic code.

    +

    The core::str::FromStr implementation will try to determine the language of the +mnemonic from all the supported languages. (Languages have to be explicitly enabled using +the Cargo features.)

    +

    Supported number of words are 12, 18 and 24.

    +

    Implementations

    Create a new Mnemonic in the specified language from the given entropy. +Entropy must be a multiple of 32 bits (4 bytes) and 128-256 bits in length.

    +

    Create a new English Mnemonic from the given entropy. +Entropy must be a multiple of 32 bits (4 bytes) and 128-256 bits in length.

    +

    Generate a new Mnemonic in the given language +with the given randomness source. +For the different supported word counts, see documentation on Mnemonic.

    +

    Example:

    -let mnemonic = Mnemonic::new(MnemonicType::Words12, Language::English); -let phrase = mnemonic.phrase(); +
    extern crate rand;
    +extern crate bip39;
     
    -println!("phrase: {}", phrase);
    +use bip39::{Mnemonic, Language};
     
    -assert_eq!(phrase.split(" ").count(), 12);
    -

    Create a Mnemonic from pre-generated entropy

    -

    Example

    -
    use bip39::{Mnemonic, MnemonicType, Language};
    -
    -let entropy = &[0x33, 0xE4, 0x6B, 0xB1, 0x3A, 0x74, 0x6E, 0xA4, 0x1C, 0xDD, 0xE4, 0x5C, 0x90, 0x84, 0x6A, 0x79];
    -let mnemonic = Mnemonic::from_entropy(entropy, Language::English).unwrap();
    -
    -assert_eq!("crop cash unable insane eight faith inflict route frame loud box vibrant", mnemonic.phrase());
    -assert_eq!("33E46BB13A746EA41CDDE45C90846A79", format!("{:X}", mnemonic));
    -

    Create a Mnemonic from an existing mnemonic phrase

    -

    The phrase supplied will be checked for word length and validated according to the checksum -specified in BIP0039

    -

    Example

    -
    use bip39::{Mnemonic, Language};
    -
    -let phrase = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -let mnemonic = Mnemonic::from_phrase(phrase, Language::English).unwrap();
    -
    -assert_eq!(phrase, mnemonic.phrase());
    -

    Validate a mnemonic phrase

    -

    The phrase supplied will be checked for word length and validated according to the checksum -specified in BIP0039.

    -

    Example

    -
    use bip39::{Mnemonic, Language};
    -
    -let test_mnemonic = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -
    -assert!(Mnemonic::validate(test_mnemonic, Language::English).is_ok());
    -

    Get the mnemonic phrase as a string reference.

    -

    Consume the Mnemonic and return the phrase as a String.

    -

    This operation doesn’t perform any allocations.

    -

    Get the original entropy value of the mnemonic phrase as a slice.

    -

    Example

    -
    use bip39::{Mnemonic, Language};
    -
    -let phrase = "park remain person kitchen mule spell knee armed position rail grid ankle";
    -
    -let mnemonic = Mnemonic::from_phrase(phrase, Language::English).unwrap();
    -
    -let entropy: &[u8] = mnemonic.entropy();
    -

    Note: You shouldn’t use the generated entropy as secrets, for that generate a new -Seed from the Mnemonic.

    -

    Get the Language

    -

    Trait Implementations

    Performs the conversion.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +let mut rng = rand::thread_rng(); +let m = Mnemonic::generate_in_with(&mut rng, Language::English, 24).unwrap();
    +

    Get the language of the Mnemonic.

    +

    Get an iterator over the words.

    +

    Determine the language of the mnemonic.

    +

    NOTE: This method only guarantees that the returned language is the +correct language on the assumption that the mnemonic is valid. +It does not itself validate the mnemonic.

    +

    Some word lists don’t guarantee that their words don’t occur in other +word lists. In the extremely unlikely case that a word list can be +interpreted in multiple languages, an [Error::AmbiguousLanguages] is +returned, containing the possible languages.

    +

    Parse a mnemonic in normalized UTF8 in the given language.

    +

    Parse a mnemonic in normalized UTF8.

    +

    Parse a mnemonic in the given language.

    +

    Parse a mnemonic and detect the language from the enabled languages.

    +

    Get the number of words in the mnemonic.

    +

    Convert to seed bytes with a passphrase in normalized UTF8.

    +

    Convert to seed bytes.

    +

    Convert the mnemonic back to the entropy used to generate it. +The return value is a byte array and the size. +Use Mnemonic::to_entropy (needs std) to get a Vec.

    +

    Convert the mnemonic back to the entropy used to generate 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

    -

    Consume self and turn it into an ExtendedKey Read more

    -

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as +

    Consume self and turn it into an ExtendedKey Read more

    +

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

    -

    Formats the value using the given formatter. Read more

    -

    Type specifying the amount of entropy required e.g. [u8;32]

    -

    Extra options required by the generate_with_entropy

    -

    Returned error in case of failure

    -

    Generate a key given the extra options and the entropy

    -

    Generate a key given the options with a random entropy

    -

    Formats the value using the given formatter.

    -

    Formats the value using the given formatter.

    -

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Deserialize this value from the given Serde deserializer. Read more

    +

    Formats the value using the given formatter. Read more

    +

    The associated error which can be returned from parsing.

    +

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

    +

    Type specifying the amount of entropy required e.g. [u8;32]

    +

    Extra options required by the generate_with_entropy

    +

    Returned error in case of failure

    +

    Generate a key given the extra options and the entropy

    +

    Generate a key given the options with a random entropy

    +

    Feeds this value into the given Hasher. Read more

    +

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

    +

    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 +by ==. Read more

    +

    This method tests for !=.

    +

    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

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    Outputs the hash in hexadecimal form

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/bip39/struct.Seed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html deleted file mode 100644 index 383c9685a5..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/struct.Seed.html +++ /dev/null @@ -1,48 +0,0 @@ -Seed in bdk::keys::bip39 - Rust

    Struct bdk::keys::bip39::Seed[]

    pub struct Seed { /* fields omitted */ }
    This is supported on crate feature keys-bip39 only.
    Expand description

    The secret value used to derive HD wallet addresses from a Mnemonic phrase.

    -

    Because it is not possible to create a Mnemonic instance that is invalid, it is -therefore impossible to have a Seed instance that is invalid. This guarantees that only -a valid, intact mnemonic phrase can be used to derive HD wallet addresses.

    -

    To get the raw byte value use Seed::as_bytes(). These can be used to derive -HD wallet addresses using another crate (deriving HD wallet addresses is outside the scope of this -crate and the BIP39 standard).

    -

    Implementations

    Generates the seed from the Mnemonic and the password.

    -

    Get the seed value as a byte slice

    -

    Trait Implementations

    Performs the conversion.

    -

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    -

    Formats the value using the given formatter. Read more

    -

    Consume self and turn it into an ExtendedKey Read more

    -

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

    -

    Formats the value using the given formatter.

    -

    Formats the value using the given formatter.

    -

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Calculate the base32 serialized length

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Error type if conversion fails

    -

    Check if all values are in range and return array-like struct of u5 values

    -

    Performs the conversion.

    -

    Performs the conversion.

    -

    The alignment of pointer.

    -

    The type for initializers.

    -

    Initializes a with the given initializer. Read more

    -

    Dereferences the given pointer. Read more

    -

    Mutably dereferences the given pointer. Read more

    -

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    Encode as base32 and write it to the supplied writer -Implementations shouldn’t allocate. Read more

    -

    Convert Self to base32 vector

    -

    Outputs the hash in hexadecimal form

    -

    The resulting type after obtaining ownership.

    -

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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/keys/bip39/type.MnemonicWithPassphrase.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/type.MnemonicWithPassphrase.html index 1b98adebbf..dae1b7bae2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/type.MnemonicWithPassphrase.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/bip39/type.MnemonicWithPassphrase.html @@ -1,7 +1,8 @@ -MnemonicWithPassphrase in bdk::keys::bip39 - Rust

    Type Definition bdk::keys::bip39::MnemonicWithPassphrase[][src]

    pub type MnemonicWithPassphrase = (Mnemonic, Option<String>);
    This is supported on crate feature keys-bip39 only.
    Expand description

    Type for a BIP39 mnemonic with an optional passphrase

    -

    Trait Implementations

    Consume self and turn it into an ExtendedKey Read more

    -

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as +MnemonicWithPassphrase in bdk::keys::bip39 - Rust +

    logo

    Type Definition bdk::keys::bip39::MnemonicWithPassphrase[][src]

    pub type MnemonicWithPassphrase = (Mnemonic, Option<String>);
    This is supported on crate feature keys-bip39 only.
    Expand description

    Type for a BIP39 mnemonic with an optional passphrase

    +

    Trait Implementations

    Consume self and turn it into an ExtendedKey Read more

    +

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

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html index 8a5149114e..315ada672e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorKey.html @@ -1,28 +1,28 @@ -DescriptorKey in bdk::keys - Rust

    Enum bdk::keys::DescriptorKey[][src]

    pub enum DescriptorKey<Ctx: ScriptContext> {
    +DescriptorKey in bdk::keys - Rust
    +    
    logo

    Enum bdk::keys::DescriptorKey[][src]

    pub enum DescriptorKey<Ctx: ScriptContext> {
         // some variants omitted
     }
    Expand description

    Container for public or secret keys

    Implementations

    Create an instance given a public key and a set of valid networks

    Create an instance given a secret key and a set of valid networks

    Override the computed set of valid networks

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

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

    -

    Turn the key into a DescriptorKey within the requested ScriptContext

    +

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

    +

    Turn the key into a DescriptorKey within the requested ScriptContext

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/enum.DescriptorPublicKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html index 4253281299..8669d08639 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorPublicKey.html @@ -1,11 +1,13 @@ -DescriptorPublicKey in bdk::keys - Rust

    Enum bdk::keys::DescriptorPublicKey[]

    pub enum DescriptorPublicKey {
    +DescriptorPublicKey in bdk::keys - Rust
    +    
    logo

    Enum bdk::keys::DescriptorPublicKey[]

    pub enum DescriptorPublicKey {
         SinglePub(DescriptorSinglePub),
         XPub(DescriptorXKey<ExtendedPubKey>),
     }
    Expand description

    The MiniscriptKey corresponding to Descriptors. This can either be Single public key or a Xpub

    -

    Variants

    Single Public Key

    -

    Tuple Fields of SinglePub

    XPub(DescriptorXKey<ExtendedPubKey>)

    Xpub

    -

    Tuple Fields of XPub

    0: DescriptorXKey<ExtendedPubKey>

    Implementations

    The fingerprint of the master key associated with this key

    +

    Variants

    SinglePub(DescriptorSinglePub)

    Tuple Fields

    Single Public Key

    +

    XPub(DescriptorXKey<ExtendedPubKey>)

    Tuple Fields

    0: DescriptorXKey<ExtendedPubKey>

    Xpub

    +

    Implementations

    The fingerprint of the master key associated with this key

    Full path, from the master key

    For wildcard keys this will return the path up to the wildcard, so you can get full paths by appending one additional derivation step, according @@ -21,14 +23,14 @@ to avoid hardened derivation steps, start from a DescriptorSecretKeyas_public, or call TranslatePk2::translate_pk2 with some function which has access to secret key data.

    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

    +

    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 associated error which can be returned from parsing.

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

    Feeds this value into the given Hasher. Read more

    -

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

    -

    Turn the key into a DescriptorKey within the requested ScriptContext

    +

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

    +

    Turn the key into a DescriptorKey within the requested ScriptContext

    The associated Hash type with the publicKey

    Check if the publicKey is uncompressed. The default implementation returns false Read more

    @@ -36,40 +38,37 @@ implementation returns false Read more

    Computes the size of a public key when serialized in a script, including the length bytes Read more

    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

    +

    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 by ==. Read more

    This method tests for !=.

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

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/enum.DescriptorSecretKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html index 9359492fb1..2251b19115 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.DescriptorSecretKey.html @@ -1,37 +1,37 @@ -DescriptorSecretKey in bdk::keys - Rust

    Enum bdk::keys::DescriptorSecretKey[]

    pub enum DescriptorSecretKey {
    +DescriptorSecretKey in bdk::keys - Rust
    +    
    logo

    Enum bdk::keys::DescriptorSecretKey[]

    pub enum DescriptorSecretKey {
         SinglePriv(DescriptorSinglePriv),
         XPrv(DescriptorXKey<ExtendedPrivKey>),
     }
    Expand description

    A Secret Key that can be either a single key or an Xprv

    -

    Variants

    Single Secret Key

    -

    Tuple Fields of SinglePriv

    XPrv(DescriptorXKey<ExtendedPrivKey>)

    Xprv

    -

    Tuple Fields of XPrv

    0: DescriptorXKey<ExtendedPrivKey>

    Implementations

    Return the public version of this key, by applying either +

    Variants

    SinglePriv(DescriptorSinglePriv)

    Tuple Fields

    Single Secret Key

    +

    XPrv(DescriptorXKey<ExtendedPrivKey>)

    Tuple Fields

    0: DescriptorXKey<ExtendedPrivKey>

    Xprv

    +

    Implementations

    Return the public version of this key, by applying either DescriptorSinglePriv::as_public or [DescriptorXKey<bip32::ExtendedPrivKey>::as_public] depending on the type of key.

    If the key is an “XPrv”, the hardened derivation steps will be applied before converting it to a public key. See the documentation of [DescriptorXKey<bip32::ExtendedPrivKey>::as_public] for more details.

    -

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

    Formats the value using the given formatter. Read more

    +

    Trait Implementations

    Formats the value using the given formatter. Read more

    +

    Formats the value using the given formatter. Read more

    The associated error which can be returned from parsing.

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

    -

    Turn the key into a DescriptorKey within the requested ScriptContext

    +

    Turn the key into a DescriptorKey within the requested ScriptContext

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/enum.ExtendedKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html index 495b49355f..d804a9858c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.ExtendedKey.html @@ -1,39 +1,39 @@ -ExtendedKey in bdk::keys - Rust

    Enum bdk::keys::ExtendedKey[][src]

    pub enum ExtendedKey<Ctx: ScriptContext = Legacy> {
    +ExtendedKey in bdk::keys - Rust
    +    
    logo

    Enum bdk::keys::ExtendedKey[][src]

    pub enum ExtendedKey<Ctx: ScriptContext = Legacy> {
         Private((ExtendedPrivKey, PhantomData<Ctx>)),
         Public((ExtendedPubKey, PhantomData<Ctx>)),
     }
    Expand description

    Enum for extended keys that can be either xprv or xpub

    An instance of ExtendedKey can be constructed from an ExtendedPrivKey or an ExtendedPubKey by using the From trait.

    Defaults to the Legacy context.

    -

    Variants

    Private((ExtendedPrivKey, PhantomData<Ctx>))

    A private extended key, aka an xprv

    -

    Tuple Fields of Private

    0: (ExtendedPrivKey, PhantomData<Ctx>)
    Public((ExtendedPubKey, PhantomData<Ctx>))

    A public extended key, aka an xpub

    -

    Tuple Fields of Public

    0: (ExtendedPubKey, PhantomData<Ctx>)

    Implementations

    Return whether or not the key contains the private data

    -

    Transform the ExtendedKey into an ExtendedPrivKey for the +

    Variants

    Private((ExtendedPrivKey, PhantomData<Ctx>))

    Tuple Fields

    0: (ExtendedPrivKey, PhantomData<Ctx>)

    A private extended key, aka an xprv

    +

    Public((ExtendedPubKey, PhantomData<Ctx>))

    Tuple Fields

    0: (ExtendedPubKey, PhantomData<Ctx>)

    A public extended key, aka an xpub

    +

    Implementations

    Return whether or not the key contains the private data

    +

    Transform the ExtendedKey into an ExtendedPrivKey for the given [Network], if the key contains the private data

    -

    Transform the ExtendedKey into an ExtendedPubKey for the +

    Transform the ExtendedKey into an ExtendedPubKey for the given [Network]

    -

    Trait Implementations

    Identity conversion

    -

    Consume self and turn it into an ExtendedKey Read more

    -

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as +

    Trait Implementations

    Identity conversion

    +

    Consume self and turn it into an ExtendedKey Read more

    +

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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Performs the conversion.

    +

    Performs the conversion.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/enum.KeyError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html index e06474c06f..604f3d2719 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.KeyError.html @@ -1,4 +1,6 @@ -KeyError in bdk::keys - Rust

    Enum bdk::keys::KeyError[][src]

    pub enum KeyError {
    +KeyError in bdk::keys - Rust
    +    
    logo

    Enum bdk::keys::KeyError[][src]

    pub enum KeyError {
         InvalidScriptContext,
         InvalidNetwork,
         InvalidChecksum,
    @@ -6,48 +8,37 @@
         Bip32(Error),
         Miniscript(Error),
     }
    Expand description

    Errors thrown while working with keys

    -

    Variants

    InvalidScriptContext

    The key cannot exist in the given script context

    -
    InvalidNetwork

    The key is not valid for the given network

    -
    InvalidChecksum

    The key has an invalid checksum

    -
    Message(String)

    Custom error message

    -

    Tuple Fields of Message

    0: String
    Bip32(Error)

    BIP32 error

    -

    Tuple Fields of Bip32

    0: Error
    Miniscript(Error)

    Miniscript error

    -

    Tuple Fields of Miniscript

    0: Error

    Trait Implementations

    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

    +

    Variants

    InvalidScriptContext

    The key cannot exist in the given script context

    +

    InvalidNetwork

    The key is not valid for the given network

    +

    InvalidChecksum

    The key has an invalid checksum

    +

    Message(String)

    Tuple Fields

    0: String

    Custom error message

    +

    Bip32(Error)

    Tuple Fields

    0: Error

    BIP32 error

    +

    Miniscript(Error)

    Tuple Fields

    0: Error

    Miniscript error

    +

    Trait Implementations

    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

    🔬 This is a nightly-only experimental API. (backtrace)

    Returns a stack backtrace, if available, of where this error occurred. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Performs the conversion.

    +

    Performs the conversion.

    Performs the conversion.

    Performs the conversion.

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Converts a reference to Self into a dynamic trait object of Fail.

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the “name” of the error. Read more

    -

    Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

    -

    Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

    -

    Provides context for this failure. Read more

    -

    Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/enum.ScriptContextEnum.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html index 1a209b5c87..62fcd7b83e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/enum.ScriptContextEnum.html @@ -1,37 +1,36 @@ -ScriptContextEnum in bdk::keys - Rust

    Enum bdk::keys::ScriptContextEnum[][src]

    pub enum ScriptContextEnum {
    +ScriptContextEnum in bdk::keys - Rust
    +    
    logo

    Enum bdk::keys::ScriptContextEnum[][src]

    pub enum ScriptContextEnum {
         Legacy,
         Segwitv0,
     }
    Expand description

    Enum representation of the known valid ScriptContexts

    -

    Variants

    Legacy

    Legacy scripts

    -
    Segwitv0

    Segwitv0 scripts

    +

    Variants

    Legacy

    Legacy scripts

    +

    Segwitv0

    Segwitv0 scripts

    Implementations

    Returns whether the script context is ScriptContextEnum::Legacy

    Returns whether the script context is ScriptContextEnum::Segwitv0

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. 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 !=.

    +

    This method tests for !=.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/fn.any_network.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.any_network.html index 3fdb567cb4..018497e614 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.any_network.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.any_network.html @@ -1,4 +1,5 @@ -any_network in bdk::keys - Rust

    Function bdk::keys::any_network[][src]

    pub fn any_network() -> ValidNetworks
    Expand description

    Create a set containing mainnet, testnet and regtest

    -
    - +any_network in bdk::keys - Rust +
    logo

    Function bdk::keys::any_network[][src]

    pub fn any_network() -> ValidNetworks
    Expand description

    Create a set containing mainnet, testnet and regtest

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.mainnet_network.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.mainnet_network.html index 5753bd5e40..11b412a984 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.mainnet_network.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.mainnet_network.html @@ -1,4 +1,5 @@ -mainnet_network in bdk::keys - Rust

    Function bdk::keys::mainnet_network[][src]

    pub fn mainnet_network() -> ValidNetworks
    Expand description

    Create a set only containing mainnet

    -
    - +mainnet_network in bdk::keys - Rust +
    logo

    Function bdk::keys::mainnet_network[][src]

    pub fn mainnet_network() -> ValidNetworks
    Expand description

    Create a set only containing mainnet

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.merge_networks.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.merge_networks.html index 9b15a7abda..bbec6619de 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.merge_networks.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.merge_networks.html @@ -1,4 +1,5 @@ -merge_networks in bdk::keys - Rust

    Function bdk::keys::merge_networks[][src]

    pub fn merge_networks(a: &ValidNetworks, b: &ValidNetworks) -> ValidNetworks
    Expand description

    Compute the intersection of two sets

    -
    - +merge_networks in bdk::keys - Rust +
    logo

    Function bdk::keys::merge_networks[][src]

    pub fn merge_networks(a: &ValidNetworks, b: &ValidNetworks) -> ValidNetworks
    Expand description

    Compute the intersection of two sets

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.test_networks.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.test_networks.html index efa8335377..f9004c163e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.test_networks.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/fn.test_networks.html @@ -1,4 +1,5 @@ -test_networks in bdk::keys - Rust

    Function bdk::keys::test_networks[][src]

    pub fn test_networks() -> ValidNetworks
    Expand description

    Create a set containing testnet and regtest

    -
    - +test_networks in bdk::keys - Rust +
    logo

    Function bdk::keys::test_networks[][src]

    pub fn test_networks() -> ValidNetworks
    Expand description

    Create a set containing testnet and regtest

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/index.html index 45a9223788..482753c1cf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/index.html @@ -1,38 +1,39 @@ -bdk::keys - Rust

    Module bdk::keys[][src]

    Expand description

    Key formats

    -

    Modules

    -
    bip39keys-bip39

    BIP-0039

    -

    Structs

    -

    A Single Descriptor Secret Key with optional origin information

    -

    A Single Descriptor Key with optional origin information

    -

    Output of a GeneratableKey key generation

    -

    Options for generating a [PrivateKey]

    -

    Contents of a “sortedmulti” descriptor

    -

    Enums

    -

    Container for public or secret keys

    -

    The MiniscriptKey corresponding to Descriptors. This can +bdk::keys - Rust +

    logo

    Module bdk::keys[][src]

    Expand description

    Key formats

    +

    Modules

    +
    bip39keys-bip39

    BIP-0039

    +

    Structs

    +

    A Single Descriptor Secret Key with optional origin information

    +

    A Single Descriptor Key with optional origin information

    +

    Output of a GeneratableKey key generation

    +

    Options for generating a [PrivateKey]

    +

    Contents of a “sortedmulti” descriptor

    +

    Enums

    +

    Container for public or secret keys

    +

    The MiniscriptKey corresponding to Descriptors. This can either be Single public key or a Xpub

    -

    A Secret Key that can be either a single key or an Xprv

    -

    Enum for extended keys that can be either xprv or xpub

    -

    Errors thrown while working with keys

    -

    Enum representation of the known valid ScriptContexts

    -

    Traits

    -

    Trait for keys that can be derived.

    -

    Trait that adds extra useful methods to ScriptContexts

    -

    Trait that allows generating a key with the default options

    -

    Trait for keys that can be generated

    -

    Trait for objects that can be turned into a public or secret DescriptorKey

    -

    The ScriptContext for Miniscript. Additional type information associated with +

    A Secret Key that can be either a single key or an Xprv

    +

    Enum for extended keys that can be either xprv or xpub

    +

    Errors thrown while working with keys

    +

    Enum representation of the known valid ScriptContexts

    +

    Traits

    +

    Trait for keys that can be derived.

    +

    Trait that adds extra useful methods to ScriptContexts

    +

    Trait that allows generating a key with the default options

    +

    Trait for keys that can be generated

    +

    Trait for objects that can be turned into a public or secret DescriptorKey

    +

    The ScriptContext for Miniscript. Additional type information associated with miniscript that is used for carrying out checks that dependent on the context under which the script is used. For example, disallowing uncompressed keys in Segwit context

    -

    Functions

    -

    Create a set containing mainnet, testnet and regtest

    -

    Create a set only containing mainnet

    -

    Compute the intersection of two sets

    -

    Create a set containing testnet and regtest

    -

    Type Definitions

    -

    Alias type for a map of public key to secret key

    -

    Set of valid networks for a key

    -
    - +

    Functions

    +

    Create a set containing mainnet, testnet and regtest

    +

    Create a set only containing mainnet

    +

    Compute the intersection of two sets

    +

    Create a set containing testnet and regtest

    +

    Type Definitions

    +

    Alias type for a map of public key to secret key

    +

    Set of valid networks for a key

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html index cafc8126d2..b2ce7dba59 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePriv.html @@ -1,4 +1,6 @@ -DescriptorSinglePriv in bdk::keys - Rust

    Struct bdk::keys::DescriptorSinglePriv[]

    pub struct DescriptorSinglePriv {
    +DescriptorSinglePriv in bdk::keys - Rust
    +    
    logo

    Struct bdk::keys::DescriptorSinglePriv[]

    pub struct DescriptorSinglePriv {
         pub origin: Option<(Fingerprint, DerivationPath)>,
         pub key: PrivateKey,
     }
    Expand description

    A Single Descriptor Secret Key with optional origin information

    @@ -6,21 +8,19 @@
    key: PrivateKey

    The key

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/struct.DescriptorSinglePub.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html index c568502a7d..40ca11156f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.DescriptorSinglePub.html @@ -1,48 +1,47 @@ -DescriptorSinglePub in bdk::keys - Rust

    Struct bdk::keys::DescriptorSinglePub[]

    pub struct DescriptorSinglePub {
    +DescriptorSinglePub in bdk::keys - Rust
    +    
    logo

    Struct bdk::keys::DescriptorSinglePub[]

    pub struct DescriptorSinglePub {
         pub origin: Option<(Fingerprint, DerivationPath)>,
         pub key: PublicKey,
     }
    Expand description

    A Single Descriptor Key with optional origin information

    Fields

    origin: Option<(Fingerprint, DerivationPath)>

    Origin information

    key: PublicKey

    The key

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. Read more

    Formats the value using the given formatter. Read more

    Feeds this value into the given Hasher. Read more

    -

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

    +

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

    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

    +

    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 by ==. Read more

    This method tests for !=.

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

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/struct.GeneratedKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html index 8f36f2d9a5..96ce148b75 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.GeneratedKey.html @@ -1,27 +1,27 @@ -GeneratedKey in bdk::keys - Rust

    Struct bdk::keys::GeneratedKey[][src]

    pub struct GeneratedKey<K, Ctx: ScriptContext> { /* fields omitted */ }
    Expand description

    Output of a GeneratableKey key generation

    -

    Implementations

    Consumes self and returns the key

    -

    Trait Implementations

    The resulting type after dereferencing.

    -

    Dereferences the value.

    -

    Consume self and turn it into an ExtendedKey Read more

    -

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as +GeneratedKey in bdk::keys - Rust +

    logo

    Struct bdk::keys::GeneratedKey[][src]

    pub struct GeneratedKey<K, Ctx: ScriptContext> { /* fields omitted */ }
    Expand description

    Output of a GeneratableKey key generation

    +

    Implementations

    Consumes self and returns the key

    +

    Trait Implementations

    The resulting type after dereferencing.

    +

    Dereferences the value.

    +

    Consume self and turn it into an ExtendedKey Read more

    +

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

    -

    Turn the key into a DescriptorKey within the requested ScriptContext

    +

    Turn the key into a DescriptorKey within the requested ScriptContext

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/keys/struct.PrivateKeyGenerateOptions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html index 672f14fa46..051910e1fe 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.PrivateKeyGenerateOptions.html @@ -1,32 +1,31 @@ -PrivateKeyGenerateOptions in bdk::keys - Rust

    Struct bdk::keys::PrivateKeyGenerateOptions[][src]

    pub struct PrivateKeyGenerateOptions {
    +PrivateKeyGenerateOptions in bdk::keys - Rust
    +    
    logo

    Struct bdk::keys::PrivateKeyGenerateOptions[][src]

    pub struct PrivateKeyGenerateOptions {
         pub compressed: bool,
     }
    Expand description

    Options for generating a [PrivateKey]

    Defaults to creating compressed keys, which save on-chain bytes and fees

    Fields

    compressed: bool

    Whether the generated key should be “compressed” or not

    -

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/struct.SortedMultiVec.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html index 3b6320d80b..2144d5aa2a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/struct.SortedMultiVec.html @@ -1,18 +1,20 @@ -SortedMultiVec in bdk::keys - Rust

    Struct bdk::keys::SortedMultiVec[]

    pub struct SortedMultiVec<Pk, Ctx> where
        Ctx: ScriptContext,
        Pk: MiniscriptKey, 
    { +SortedMultiVec in bdk::keys - Rust +
    logo

    Struct bdk::keys::SortedMultiVec[]

    pub struct SortedMultiVec<Pk, Ctx> where
        Pk: MiniscriptKey,
        Ctx: ScriptContext
    { pub k: usize, pub pks: Vec<Pk, Global>, // some fields omitted }
    Expand description

    Contents of a “sortedmulti” descriptor

    Fields

    k: usize

    signatures required

    pks: Vec<Pk, Global>

    public keys inside sorted Multi

    -

    Implementations

    Create a new instance of SortedMultiVec given a list of keys and the threshold

    +

    Implementations

    Create a new instance of SortedMultiVec given a list of keys and the threshold

    Internally checks all the applicable size limits and pubkey types limitations according to the current Ctx.

    Parse an expression tree into a SortedMultiVec

    -

    This will panic if translatefpk returns an uncompressed key when +

    This will panic if translatefpk returns an uncompressed key when converting to a Segwit descriptor. To prevent this panic, ensure translatefpk returns an error in this case instead.

    -

    utility function to sanity a sorted multi vec

    -

    Create Terminal::Multi containing sorted pubkeys

    +

    utility function to sanity a sorted multi vec

    +

    Create Terminal::Multi containing sorted pubkeys

    Encode as a Bitcoin script

    Attempt to produce a satisfying witness for the witness script represented by the parse tree

    @@ -36,52 +38,49 @@ will handle the segwit/non-segwit technicalities for you.

    All signatures are assumed to be 73 bytes in size, including the length prefix (segwit) or push opcode (pre-segwit) and sighash postfix.

    -

    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

    -

    Run a predicate on every key in the descriptor, returning whether +

    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

    +

    Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more

    Run a predicate on every key in the descriptor, returning whether the predicate returned true for any key Read more

    -

    Feeds this value into the given Hasher. Read more

    -

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

    -

    Convert the object into an abstract policy

    -

    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 +

    Feeds this value into the given Hasher. Read more

    +

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

    +

    Convert the object into an abstract policy

    +

    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 by ==. Read more

    This method tests for !=.

    -

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

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/keys/trait.DerivableKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html index cff040115c..9dd37e9768 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.DerivableKey.html @@ -1,16 +1,18 @@ -DerivableKey in bdk::keys - Rust

    Trait bdk::keys::DerivableKey[][src]

    pub trait DerivableKey<Ctx: ScriptContext = Legacy>: Sized {
    +DerivableKey in bdk::keys - Rust
    +    
    logo

    Trait bdk::keys::DerivableKey[][src]

    pub trait DerivableKey<Ctx: ScriptContext = Legacy>: Sized {
         fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>;
     
         fn into_descriptor_key(
            self,
            origin: Option<KeySource>,
            derivation_path: DerivationPath
        ) -> Result<DescriptorKey<Ctx>, KeyError> { ... } }
    Expand description

    Trait for keys that can be derived.

    -

    When extra metadata are provided, a DerivableKey can be transofrmed into a +

    When extra metadata are provided, a DerivableKey can be transformed into a DescriptorKey: the trait IntoDescriptorKey is automatically implemented for (DerivableKey, DerivationPath) and (DerivableKey, KeySource, DerivationPath) tuples.

    For key types that don’t encode any indication about the path to use (like bip39), it’s generally recommended to implemented this trait instead of IntoDescriptorKey. The same rules regarding script context and valid networks apply.

    -

    Examples

    +

    Examples

    Key types that can be directly converted into an ExtendedPrivKey or an ExtendedPubKey can implement only the required into_extended_key() method.

    @@ -25,7 +27,7 @@ an ExtendedPubKey can impleme } impl<Ctx: ScriptContext> DerivableKey<Ctx> for MyCustomKeyType { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { let xprv = bip32::ExtendedPrivKey { network: self.network, depth: 0, @@ -54,7 +56,7 @@ steps to override the set of valid networks, otherwise only the network specifie } impl<Ctx: ScriptContext> DerivableKey<Ctx> for MyCustomKeyType { - fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { + fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> { let xprv = bip32::ExtendedPrivKey { network: bitcoin::Network::Bitcoin, // pick an arbitrary network here depth: 0, @@ -71,7 +73,7 @@ steps to override the set of valid networks, otherwise only the network specifie self, source: Option<bip32::KeySource>, derivation_path: bip32::DerivationPath, - ) -> Result<DescriptorKey<Ctx>, KeyError> { + ) -> Result<DescriptorKey<Ctx>, KeyError> { let descriptor_key = self .into_extended_key()? .into_descriptor_key(source, derivation_path)?; @@ -80,7 +82,7 @@ steps to override the set of valid networks, otherwise only the network specifie Ok(descriptor_key.override_valid_networks(any_network())) } }
    -

    Required methods

    Consume self and turn it into an ExtendedKey

    +

    Required methods

    Consume self and turn it into an ExtendedKey

    This can be used to get direct access to xprvs and xpubs for types that implement this trait, like Mnemonic when the keys-bip39 feature is enabled.

    @@ -89,15 +91,14 @@ like Mnemonic when the use bdk::keys::bip39::{Mnemonic, Language}; let xkey: ExtendedKey = - Mnemonic::from_phrase( + Mnemonic::parse_in( + Language::English, "jelly crash boy whisper mouse ecology tuna soccer memory million news short", - Language::English )? .into_extended_key()?; let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
    -

    Provided methods

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as +

    Provided methods

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

    -

    Implementations on Foreign Types

    Implementors

    Identity conversion

    -
    - +

    Implementations on Foreign Types

    Implementors

    Identity conversion

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ExtScriptContext.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ExtScriptContext.html index 80e9abffa1..1a52350713 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ExtScriptContext.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ExtScriptContext.html @@ -1,4 +1,6 @@ -ExtScriptContext in bdk::keys - Rust

    Trait bdk::keys::ExtScriptContext[][src]

    pub trait ExtScriptContext: ScriptContext {
    +ExtScriptContext in bdk::keys - Rust
    +    
    logo

    Trait bdk::keys::ExtScriptContext[][src]

    pub trait ExtScriptContext: ScriptContext {
         fn as_enum() -> ScriptContextEnum;
     
         fn is_legacy() -> bool { ... }
    @@ -7,6 +9,5 @@
     

    Required methods

    Provided methods

    Returns whether the script context is Legacy

    Returns whether the script context is Segwitv0

    -

    Implementors

    - +

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableDefaultOptions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableDefaultOptions.html index 4e6cf622b1..bfd9417516 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableDefaultOptions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableDefaultOptions.html @@ -1,12 +1,13 @@ -GeneratableDefaultOptions in bdk::keys - Rust

    Trait bdk::keys::GeneratableDefaultOptions[][src]

    pub trait GeneratableDefaultOptions<Ctx>: GeneratableKey<Ctx> where
        Ctx: ScriptContext,
        <Self as GeneratableKey<Ctx>>::Options: Default
    { +GeneratableDefaultOptions in bdk::keys - Rust +
    logo

    Trait bdk::keys::GeneratableDefaultOptions[][src]

    pub trait GeneratableDefaultOptions<Ctx>: GeneratableKey<Ctx> where
        Ctx: ScriptContext,
        <Self as GeneratableKey<Ctx>>::Options: Default
    { fn generate_with_entropy_default(
            entropy: Self::Entropy
        ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> { ... }
    fn generate_default() -> Result<GeneratedKey<Self, Ctx>, Self::Error> { ... } }
    Expand description

    Trait that allows generating a key with the default options

    This trait is automatically implemented if the GeneratableKey::Options implements Default.

    -

    Provided methods

    Generate a key with the default options and a given entropy

    -

    Generate a key with the default options and a random entropy

    -

    Implementors

    Automatic implementation of GeneratableDefaultOptions for GeneratableKeys where +

    Provided methods

    Generate a key with the default options and a given entropy

    +

    Generate a key with the default options and a random entropy

    +

    Implementors

    Automatic implementation of GeneratableDefaultOptions for GeneratableKeys where Options implements Default

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableKey.html index 49dc544363..d1bdeac7e8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.GeneratableKey.html @@ -1,4 +1,6 @@ -GeneratableKey in bdk::keys - Rust

    Trait bdk::keys::GeneratableKey[][src]

    pub trait GeneratableKey<Ctx: ScriptContext>: Sized {
    +GeneratableKey in bdk::keys - Rust
    +    
    logo

    Trait bdk::keys::GeneratableKey[][src]

    pub trait GeneratableKey<Ctx: ScriptContext>: Sized {
         type Entropy: AsMut<[u8]> + Default;
         type Options;
         type Error: Debug;
    @@ -11,11 +13,10 @@
     implements it, the returned GeneratedKey will also implement it. The same is true for
     IntoDescriptorKey: the generated keys can be directly used in descriptors if Self is also
     IntoDescriptorKey.

    -

    Associated Types

    Type specifying the amount of entropy required e.g. [u8;32]

    -

    Extra options required by the generate_with_entropy

    -

    Returned error in case of failure

    -

    Required methods

    Generate a key given the extra options and the entropy

    -

    Provided methods

    Generate a key given the options with a random entropy

    -

    Implementations on Foreign Types

    Implementors

    - +

    Associated Types

    Type specifying the amount of entropy required e.g. [u8;32]

    +

    Extra options required by the generate_with_entropy

    +

    Returned error in case of failure

    +

    Required methods

    Generate a key given the extra options and the entropy

    +

    Provided methods

    Generate a key given the options with a random entropy

    +

    Implementations on Foreign Types

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html index 5287a61afd..f0b886c1d3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.IntoDescriptorKey.html @@ -1,4 +1,6 @@ -IntoDescriptorKey in bdk::keys - Rust

    Trait bdk::keys::IntoDescriptorKey[][src]

    pub trait IntoDescriptorKey<Ctx: ScriptContext>: Sized {
    +IntoDescriptorKey in bdk::keys - Rust
    +    
    logo

    Trait bdk::keys::IntoDescriptorKey[][src]

    pub trait IntoDescriptorKey<Ctx: ScriptContext>: Sized {
         fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>;
     }
    Expand description

    Trait for objects that can be turned into a public or secret DescriptorKey

    The generic type Ctx is used to define the context in which the key is valid: some key @@ -13,7 +15,7 @@ checking.

    Keys also have control over the networks they support: constructing the return object with DescriptorKey::from_public or DescriptorKey::from_secret allows to specify a set of ValidNetworks.

    -

    Examples

    +

    Examples

    Key type valid in any context:

    use bdk::bitcoin::PublicKey;
    @@ -25,7 +27,7 @@ checking.

    } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for MyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { self.pubkey.into_descriptor_key() } }
    @@ -43,7 +45,7 @@ checking.

    } impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for MyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { Ok(DescriptorKey::from_public( DescriptorPublicKey::SinglePub(DescriptorSinglePub { origin: None, @@ -65,8 +67,8 @@ checking.

    } impl<Ctx: ScriptContext + 'static> IntoDescriptorKey<Ctx> for MyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { - if Ctx::is_legacy() == self.is_legacy { + fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> { + if Ctx::is_legacy() == self.is_legacy { self.pubkey.into_descriptor_key() } else { Err(KeyError::InvalidScriptContext) @@ -89,7 +91,7 @@ makes the compiler (correctly) fail.

    } impl IntoDescriptorKey<bdk::miniscript::Segwitv0> for MySegwitOnlyKeyType { - fn into_descriptor_key(self) -> Result<DescriptorKey<bdk::miniscript::Segwitv0>, KeyError> { + fn into_descriptor_key(self) -> Result<DescriptorKey<bdk::miniscript::Segwitv0>, KeyError> { self.pubkey.into_descriptor_key() } } @@ -101,7 +103,6 @@ makes the compiler (correctly) fail.

    // ^^^^^ changing this to `wpkh` would make it compile

    Required methods

    Turn the key into a DescriptorKey within the requested ScriptContext

    -

    Implementations on Foreign Types

    Implementors

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

    -
    - +

    Implementations on Foreign Types

    Implementors

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

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ScriptContext.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ScriptContext.html index b7710b728e..444cc79fb6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ScriptContext.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/trait.ScriptContext.html @@ -1,32 +1,34 @@ -ScriptContext in bdk::keys - Rust

    Trait bdk::keys::ScriptContext[]

    pub trait ScriptContext: Debug + Clone + Ord + PartialOrd<Self> + Eq + PartialEq<Self> + Hash + Sealed {
    -    fn check_terminal_non_malleable<Pk, Ctx>(
            _frag: &Terminal<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    ; -
    fn max_satisfaction_size<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Option<usize>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    ; +ScriptContext in bdk::keys - Rust +
    logo

    Trait bdk::keys::ScriptContext[]

    pub trait ScriptContext: Debug + Clone + Ord + PartialOrd<Self> + Eq + PartialEq<Self> + Hash + Sealed {
    +    fn check_terminal_non_malleable<Pk, Ctx>(
            _frag: &Terminal<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    ; +
    fn max_satisfaction_size<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Option<usize>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    ; - fn check_witness<Pk, Ctx>(
            _witness: &[Vec<u8, Global>]
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , + fn check_witness<Pk, Ctx>(
            _witness: &[Vec<u8, Global>]
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_global_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_global_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_global_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_global_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_local_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_local_consensus_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_local_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_local_policy_validity<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_global_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_global_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn check_local_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn check_local_validity<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), ScriptContextError>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn top_level_type_check<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn top_level_type_check<Pk, Ctx>(
            ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn other_top_level_checks<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn other_top_level_checks<Pk, Ctx>(
            _ms: &Miniscript<Pk, Ctx>
        ) -> Result<(), Error>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } -
    fn top_level_checks<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Result<(), Error>
        where
            Ctx: ScriptContext,
            Pk: MiniscriptKey
    , +
    fn top_level_checks<Pk, Ctx>(ms: &Miniscript<Pk, Ctx>) -> Result<(), Error>
        where
            Pk: MiniscriptKey,
            Ctx: ScriptContext
    , { ... } }
    Expand description

    The ScriptContext for Miniscript. Additional type information associated with miniscript that is used for carrying out checks that dependent on the context under which the script is used. For example, disallowing uncompressed keys in Segwit context

    -

    Required methods

    Depending on ScriptContext, fragments can be malleable. For Example, +

    Required methods

    Depending on ScriptContext, fragments can be malleable. For Example, under Legacy context, PkH is malleable because it is possible to estimate the cost of satisfaction because of compressed keys This is currently only used in compiler code for removing malleable @@ -34,11 +36,11 @@ compilations. This does NOT recursively check if the children of the fragment are valid or not. Since the compilation proceeds in a leaf to root fashion, a recursive check is unnecessary.

    -

    Depending on script context, the size of a satifaction witness may slightly differ.

    -

    Provided methods

    Check whether the given satisfaction is valid under the ScriptContext +

    Depending on script context, the size of a satifaction witness may slightly differ.

    +

    Provided methods

    Check whether the given satisfaction is valid under the ScriptContext For example, segwit satisfactions may fail if the witness len is more 3600 or number of stack elements are more than 100.

    -

    Depending on script Context, some of the Terminals might not +

    Depending on script Context, some of the Terminals might not be valid under the current consensus rules. Or some of the script resource limits may have been exceeded. These miniscripts would never be accepted by the Bitcoin network and hence @@ -48,7 +50,7 @@ uncompressed public keys are non-standard and thus invalid. In LegacyP2SH context, scripts above 520 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments.

    -

    Depending on script Context, some of the script resource limits +

    Depending on script Context, some of the script resource limits may have been exceeded under the current bitcoin core policy rules These miniscripts would never be accepted by the Bitcoin network and hence it is safe to discard them. (unless explicitly disabled by non-standard flag) @@ -56,22 +58,21 @@ For example, in Segwit Context with MiniscriptKey as bitcoin::PublicKey scripts over 3600 bytes are invalid. Post Tapscript upgrade, this would have to consider other nodes. This does NOT recursively check the miniscript fragments.

    -

    Consensus rules at the Miniscript satisfaction time. +

    Consensus rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path(Legacy/Segwitv0) may require more than 201 opcodes.

    -

    Policy rules at the Miniscript satisfaction time. +

    Policy rules at the Miniscript satisfaction time. It is possible that some paths of miniscript may exceed resource limits and our current satisfier and lifting analysis would not work correctly. For example, satisfaction path in Legacy context scriptSig more than 1650 bytes

    -

    Check the consensus + policy(if not disabled) rules that are not based +

    Check the consensus + policy(if not disabled) rules that are not based satisfaction

    -

    Check the consensus + policy(if not disabled) rules including the +

    Check the consensus + policy(if not disabled) rules including the ones for satisfaction

    -

    Check whether the top-level is type B

    -

    Other top level checks that are context specific

    -

    Check top level consensus rules.

    -

    Implementations on Foreign Types

    Implementors

    - +

    Check whether the top-level is type B

    +

    Other top level checks that are context specific

    +

    Check top level consensus rules.

    +

    Implementations on Foreign Types

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.KeyMap.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.KeyMap.html index 29c7f03dff..f69cb4ee7f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.KeyMap.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.KeyMap.html @@ -1,8 +1,9 @@ -KeyMap in bdk::keys - Rust

    Type Definition bdk::keys::KeyMap[]

    pub type KeyMap = HashMap<DescriptorPublicKey, DescriptorSecretKey, RandomState>;
    Expand description

    Alias type for a map of public key to secret key

    +KeyMap in bdk::keys - Rust +
    logo

    Type Definition bdk::keys::KeyMap[]

    Expand description

    Alias type for a map of public key to secret key

    This map is returned whenever a descriptor that contains secrets is parsed using Descriptor::parse_descriptor, since the descriptor will always only contain public keys. This map allows looking up the corresponding secret key given a public key from the descriptor.

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.ValidNetworks.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.ValidNetworks.html index 9265ef2898..b895d9a6e5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.ValidNetworks.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/keys/type.ValidNetworks.html @@ -1,4 +1,5 @@ -ValidNetworks in bdk::keys - Rust

    Type Definition bdk::keys::ValidNetworks[][src]

    pub type ValidNetworks = HashSet<Network>;
    Expand description

    Set of valid networks for a key

    -
    - +ValidNetworks in bdk::keys - Rust +
    logo

    Type Definition bdk::keys::ValidNetworks[][src]

    pub type ValidNetworks = HashSet<Network>;
    Expand description

    Set of valid networks for a key

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html index c5d8ac8e4a..f153fa3814 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.descriptor.html @@ -1,14 +1,16 @@ -descriptor in bdk - Rust

    Macro bdk::descriptor[][src]

    macro_rules! descriptor {
    -    (bare($($minisc : tt) *)) => { ... };
    -    (sh(wsh($($minisc : tt) *))) => { ... };
    -    (shwsh($($minisc : tt) *)) => { ... };
    -    (pk($key : expr)) => { ... };
    -    (pkh($key : expr)) => { ... };
    -    (wpkh($key : expr)) => { ... };
    -    (sh(wpkh($key : expr))) => { ... };
    -    (shwpkh($key : expr)) => { ... };
    -    (sh($($minisc : tt) *)) => { ... };
    -    (wsh($($minisc : tt) *)) => { ... };
    +descriptor in bdk - Rust
    +    
    logo

    Macro bdk::descriptor[][src]

    macro_rules! descriptor {
    +    (bare($($minisc : tt) *)) => { ... };
    +    (sh(wsh($($minisc : tt) *))) => { ... };
    +    (shwsh($($minisc : tt) *)) => { ... };
    +    (pk($key : expr)) => { ... };
    +    (pkh($key : expr)) => { ... };
    +    (wpkh($key : expr)) => { ... };
    +    (sh(wpkh($key : expr))) => { ... };
    +    (shwpkh($key : expr)) => { ... };
    +    (sh($($minisc : tt) *)) => { ... };
    +    (wsh($($minisc : tt) *)) => { ... };
     }
    Expand description

    Macro to write full descriptors with code

    This macro expands to a Result of @@ -20,7 +22,7 @@ broken up to s:d:v:older(144).

    IntoDescriptorKey. This means that keys can also be written inline as strings, but in that case they must be wrapped in quotes, which is another difference compared to the standard descriptor syntax.

    -

    Example

    +

    Example

    Signature plus timelock descriptor:

    let (my_descriptor, my_keys_map, networks) = bdk::descriptor!(sh(wsh(and_v(v:pk("cVt4o7BGAig1UXywgGSmARhxMdzP5qvQsxKkSsc1XEkw3tDTQFpy"),older(50)))))?;
    @@ -74,6 +76,5 @@ syntax is more suitable for a fixed number of items known at compile time, while bitcoin::PrivateKey::from_wif("cVt4o7BGAig1UXywgGSmARhxMdzP5qvQsxKkSsc1XEkw3tDTQFpy")?; let (descriptor, key_map, networks) = bdk::descriptor!(wpkh(my_key))?;
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html index 9f748be2b1..59ada2f3ab 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/macro.fragment.html @@ -1,35 +1,36 @@ -fragment in bdk - Rust

    Macro bdk::fragment[][src]

    macro_rules! fragment {
    -    ($modif : tt : $($tail : tt) *) => { ... };
    -    (true) => { ... };
    -    (false) => { ... };
    -    (pk_k($key : expr)) => { ... };
    -    (pk($key : expr)) => { ... };
    -    (pk_h($key : expr)) => { ... };
    -    (after($value : expr)) => { ... };
    -    (older($value : expr)) => { ... };
    -    (sha256($hash : expr)) => { ... };
    -    (hash256($hash : expr)) => { ... };
    -    (ripemd160($hash : expr)) => { ... };
    -    (hash160($hash : expr)) => { ... };
    -    (and_v($($inner : tt) *)) => { ... };
    -    (and_b($($inner : tt) *)) => { ... };
    -    (and_or($($inner : tt) *)) => { ... };
    -    (andor($($inner : tt) *)) => { ... };
    -    (or_b($($inner : tt) *)) => { ... };
    -    (or_d($($inner : tt) *)) => { ... };
    -    (or_c($($inner : tt) *)) => { ... };
    -    (or_i($($inner : tt) *)) => { ... };
    -    (thresh_vec($thresh : expr, $items : expr)) => { ... };
    -    (thresh($thresh : expr, $($inner : tt) *)) => { ... };
    -    (multi_vec($thresh : expr, $keys : expr)) => { ... };
    -    (multi($thresh : expr $(, $key : expr) +)) => { ... };
    -    (sortedmulti($($inner : tt) *)) => { ... };
    -    (sortedmulti_vec($($inner : tt) *)) => { ... };
    +fragment in bdk - Rust
    +    
    logo

    Macro bdk::fragment[][src]

    macro_rules! fragment {
    +    ($modif : tt : $($tail : tt) *) => { ... };
    +    (true) => { ... };
    +    (false) => { ... };
    +    (pk_k($key : expr)) => { ... };
    +    (pk($key : expr)) => { ... };
    +    (pk_h($key : expr)) => { ... };
    +    (after($value : expr)) => { ... };
    +    (older($value : expr)) => { ... };
    +    (sha256($hash : expr)) => { ... };
    +    (hash256($hash : expr)) => { ... };
    +    (ripemd160($hash : expr)) => { ... };
    +    (hash160($hash : expr)) => { ... };
    +    (and_v($($inner : tt) *)) => { ... };
    +    (and_b($($inner : tt) *)) => { ... };
    +    (and_or($($inner : tt) *)) => { ... };
    +    (andor($($inner : tt) *)) => { ... };
    +    (or_b($($inner : tt) *)) => { ... };
    +    (or_d($($inner : tt) *)) => { ... };
    +    (or_c($($inner : tt) *)) => { ... };
    +    (or_i($($inner : tt) *)) => { ... };
    +    (thresh_vec($thresh : expr, $items : expr)) => { ... };
    +    (thresh($thresh : expr, $($inner : tt) *)) => { ... };
    +    (multi_vec($thresh : expr, $keys : expr)) => { ... };
    +    (multi($thresh : expr $(, $key : expr) +)) => { ... };
    +    (sortedmulti($($inner : tt) *)) => { ... };
    +    (sortedmulti_vec($($inner : tt) *)) => { ... };
     }
    Expand description

    Macro to write descriptor fragments with code

    This macro will be expanded to an object of type Result<(Miniscript<DescriptorPublicKey, _>, KeyMap, ValidNetworks), DescriptorError>. It allows writing fragments of larger descriptors that can be pieced together using fragment!(thresh_vec(m, ...)).

    The syntax to write macro fragment is the same as documented for the descriptor macro.

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/sidebar-items.js index 5670daf604..6b216d6b77 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["Error","Errors that can be thrown by the `Wallet`"],["KeychainKind","Types of keychains"],["Utxo","An unspent transaction output (UTXO)."]],"externcrate":[["bitcoin",""],["electrum_client",""],["miniscript",""],["rusqlite",""],["sled",""]],"fn":[["version","Get the version of BDK at runtime"]],"macro":[["descriptor","Macro to write full descriptors with code"],["fragment","Macro to write descriptor fragments with code"]],"mod":[["blockchain","Blockchain backends"],["database","Database types"],["descriptor","Descriptors"],["keys","Key formats"],["wallet","Wallet"]],"struct":[["ConfirmationTime","Block height and timestamp of the block containing the confirmed transaction"],["FeeRate","Fee rate"],["LocalUtxo","An unspent output owned by a `Wallet`."],["TransactionDetails","A wallet transaction"],["WeightedUtxo","A [`Utxo`] with its `satisfaction_weight`."]],"trait":[["Vbytes","Trait implemented by types that can be used to measure weight units."]]}); \ No newline at end of file +initSidebarItems({"enum":[["Error","Errors that can be thrown by the `Wallet`"],["KeychainKind","Types of keychains"],["Utxo","An unspent transaction output (UTXO)."]],"externcrate":[["bitcoin",""],["electrum_client",""],["miniscript",""],["rusqlite",""],["sled",""]],"fn":[["version","Get the version of BDK at runtime"]],"macro":[["descriptor","Macro to write full descriptors with code"],["fragment","Macro to write descriptor fragments with code"]],"mod":[["blockchain","Blockchain backends"],["database","Database types"],["descriptor","Descriptors"],["keys","Key formats"],["wallet","Wallet"]],"struct":[["BlockTime","Block height and timestamp of a block"],["FeeRate","Fee rate"],["LocalUtxo","An unspent output owned by a `Wallet`."],["TransactionDetails","A wallet transaction"],["WeightedUtxo","A [`Utxo`] with its `satisfaction_weight`."]],"trait":[["Vbytes","Trait implemented by types that can be used to measure weight units."]],"type":[["ConfirmationTime","DEPRECATED: Confirmation time of a transaction"]]}); \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.BlockTime.html similarity index 51% rename from docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html rename to docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.BlockTime.html index 492d39ca1a..44ff521e17 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.ConfirmationTime.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.BlockTime.html @@ -1,39 +1,38 @@ -ConfirmationTime in bdk - Rust

    Struct bdk::ConfirmationTime[][src]

    pub struct ConfirmationTime {
    +BlockTime in bdk - Rust
    +    
    logo

    Struct bdk::BlockTime[][src]

    pub struct BlockTime {
         pub height: u32,
         pub timestamp: u64,
    -}
    Expand description

    Block height and timestamp of the block containing the confirmed transaction

    +}
    Expand description

    Block height and timestamp of a block

    Fields

    height: u32

    confirmation block height

    timestamp: u64

    confirmation block timestamp

    -

    Implementations

    Returns Some ConfirmationTime if both height and timestamp are Some

    -

    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

    -

    Deserialize this value from the given Serde deserializer. Read more

    -

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

    Implementations

    Returns Some BlockTime if both height and timestamp are Some

    +

    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

    +

    Deserialize this value from the given Serde deserializer. Read more

    +

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    -

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    This method tests for !=.

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/struct.FeeRate.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html index 2edd5a044f..467699deb2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.FeeRate.html @@ -1,4 +1,6 @@ -FeeRate in bdk - Rust

    Struct bdk::FeeRate[][src]

    pub struct FeeRate(_);
    Expand description

    Fee rate

    +FeeRate in bdk - Rust +
    logo

    Struct bdk::FeeRate[][src]

    pub struct FeeRate(_);
    Expand description

    Fee rate

    Implementations

    Create a new instance of FeeRate given a float fee rate in btc/kvbytes

    Create a new instance of FeeRate given a float fee rate in satoshi/vbyte

    Create a new FeeRate with the default min relay fee value

    @@ -8,41 +10,38 @@

    Calculate absolute fee in Satoshis using size in weight units.

    Calculate absolute fee in Satoshis using size in virtual bytes.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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 !=.

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

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

    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

    The resulting type after applying the - operator.

    Performs the - operation. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/struct.LocalUtxo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html index 2ec1e93e00..8de8244541 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html @@ -1,4 +1,6 @@ -LocalUtxo in bdk - Rust

    Struct bdk::LocalUtxo[][src]

    pub struct LocalUtxo {
    +LocalUtxo in bdk - Rust
    +    
    logo

    Struct bdk::LocalUtxo[][src]

    pub struct LocalUtxo {
         pub outpoint: OutPoint,
         pub txout: TxOut,
         pub keychain: KeychainKind,
    @@ -7,35 +9,32 @@
     
    txout: TxOut

    Transaction output

    keychain: KeychainKind

    Type of keychain

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. Read more

    Formats the value using the given formatter. Read more

    -

    Deserialize this value from the given Serde deserializer. Read more

    +

    Deserialize this value from the given Serde deserializer. Read more

    Feeds this value into the given Hasher. Read more

    -

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

    +

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

    This method tests for self and other values to be equal, and is used by ==. Read more

    This method tests for !=.

    -

    Serialize this value into the given Serde serializer. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/struct.TransactionDetails.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html index c15c400d81..8050e1b025 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.TransactionDetails.html @@ -1,10 +1,12 @@ -TransactionDetails in bdk - Rust

    Struct bdk::TransactionDetails[][src]

    pub struct TransactionDetails {
    +TransactionDetails in bdk - Rust
    +    
    logo

    Struct bdk::TransactionDetails[][src]

    pub struct TransactionDetails {
         pub transaction: Option<Transaction>,
         pub txid: Txid,
         pub received: u64,
         pub sent: u64,
         pub fee: Option<u64>,
    -    pub confirmation_time: Option<ConfirmationTime>,
    +    pub confirmation_time: Option<BlockTime>,
         pub verified: bool,
     }
    Expand description

    A wallet transaction

    Fields

    transaction: Option<Transaction>

    Optional transaction

    @@ -15,42 +17,39 @@ The availability of the fee depends on the backend. It’s never None with an Electrum Server backend, but it could be None with a Bitcoin RPC node without txindex that receive funds while offline.

    -
    confirmation_time: Option<ConfirmationTime>

    If the transaction is confirmed, contains height and timestamp of the block containing the +

    confirmation_time: Option<BlockTime>

    If the transaction is confirmed, contains height and timestamp of the block containing the transaction, unconfirmed transaction contains None.

    verified: bool

    Whether the tx has been verified against the consensus rules

    Confirmed txs are considered “verified” by default, while unconfirmed txs are checked to ensure an unstrusted Blockchain backend can’t trick the wallet into using an invalid tx as an RBF template.

    -

    The check is only perfomed when the verify feature is enabled.

    +

    The check is only performed when the verify feature is enabled.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    +

    Deserialize this value from the given Serde deserializer. Read more

    This method tests for self and other values to be equal, and is used by ==. Read more

    This method tests for !=.

    -

    Serialize this value into the given Serde serializer. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/struct.WeightedUtxo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html index 219f9a145b..93ed352118 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/struct.WeightedUtxo.html @@ -1,4 +1,6 @@ -WeightedUtxo in bdk - Rust

    Struct bdk::WeightedUtxo[][src]

    pub struct WeightedUtxo {
    +WeightedUtxo in bdk - Rust
    +    
    logo

    Struct bdk::WeightedUtxo[][src]

    pub struct WeightedUtxo {
         pub satisfaction_weight: usize,
         pub utxo: Utxo,
     }
    Expand description

    A Utxo with its satisfaction_weight.

    @@ -6,31 +8,28 @@ properly maintain the feerate when adding this input to a transaction during coin selection.

    utxo: Utxo

    The UTXO

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. 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 !=.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/trait.Vbytes.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/trait.Vbytes.html index 3248bdd2a4..d279bc88a3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/trait.Vbytes.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/trait.Vbytes.html @@ -1,7 +1,8 @@ -Vbytes in bdk - Rust

    Trait bdk::Vbytes[][src]

    pub trait Vbytes {
    +Vbytes in bdk - Rust
    +    
    logo

    Trait bdk::Vbytes[][src]

    pub trait Vbytes {
         fn vbytes(self) -> usize;
     }
    Expand description

    Trait implemented by types that can be used to measure weight units.

    Required methods

    Convert weight units to virtual bytes.

    -

    Implementations on Foreign Types

    Implementors

    - +

    Implementations on Foreign Types

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/type.ConfirmationTime.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/type.ConfirmationTime.html new file mode 100644 index 0000000000..ae03f8713d --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/type.ConfirmationTime.html @@ -0,0 +1,7 @@ +ConfirmationTime in bdk - Rust +
    logo

    Type Definition bdk::ConfirmationTime[][src]

    pub type ConfirmationTime = BlockTime;
    👎 Deprecated:

    This structure has been renamed to BlockTime

    +
    Expand description

    DEPRECATED: Confirmation time of a transaction

    +

    The structure has been renamed to BlockTime

    +
    + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.BlockTime.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.BlockTime.html new file mode 100644 index 0000000000..1aeb0d712d --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.BlockTime.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

    Redirecting to ../../bdk/struct.BlockTime.html...

    + + + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.ConfirmationTime.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.ConfirmationTime.html deleted file mode 100644 index 31758b8f04..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/struct.ConfirmationTime.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

    Redirecting to ../../bdk/struct.ConfirmationTime.html...

    - - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/type.ConfirmationTime.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/type.ConfirmationTime.html new file mode 100644 index 0000000000..52ce4499bb --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/types/type.ConfirmationTime.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

    Redirecting to ../../bdk/type.ConfirmationTime.html...

    + + + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html index 91c9903c60..1d8221e31a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/enum.AddressValidatorError.html @@ -1,17 +1,19 @@ -AddressValidatorError in bdk::wallet::address_validator - Rust

    Enum bdk::wallet::address_validator::AddressValidatorError[][src]

    pub enum AddressValidatorError {
    +AddressValidatorError in bdk::wallet::address_validator - Rust
    +    
    logo

    Enum bdk::wallet::address_validator::AddressValidatorError[][src]

    pub enum AddressValidatorError {
         UserRejected,
         ConnectionError,
         TimeoutError,
         InvalidScript,
         Message(String),
     }
    Expand description

    Errors that can be returned to fail the validation of an address

    -

    Variants

    UserRejected

    User rejected the address

    -
    ConnectionError

    Network connection error

    -
    TimeoutError

    Network request timeout error

    -
    InvalidScript

    Invalid script

    -
    Message(String)

    A custom error message

    -

    Tuple Fields of Message

    0: String

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Variants

    UserRejected

    User rejected the address

    +

    ConnectionError

    Network connection error

    +

    TimeoutError

    Network request timeout error

    +

    InvalidScript

    Invalid script

    +

    Message(String)

    Tuple Fields

    0: String

    A custom error message

    +

    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

    @@ -23,35 +25,23 @@ by ==. Read more

    This method tests for !=.

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Converts a reference to Self into a dynamic trait object of Fail.

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the “name” of the error. Read more

    -

    Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

    -

    Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

    -

    Provides context for this failure. Read more

    -

    Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/address_validator/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html index f4f4da08f3..709e99130e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/index.html @@ -1,4 +1,6 @@ -bdk::wallet::address_validator - Rust

    Module bdk::wallet::address_validator[][src]

    Expand description

    Address validation callbacks

    +bdk::wallet::address_validator - Rust +
    logo

    Module bdk::wallet::address_validator[][src]

    Expand description

    Address validation callbacks

    The typical usage of those callbacks is for displaying the newly-generated address on a hardware wallet, so that the user can cross-check its correctness.

    More generally speaking though, these callbacks can also be used to “do something” every time @@ -9,7 +11,7 @@ whenever a new address is generated (either explicitly by the user with Wallet::get_address or internally to create a change address) all the attached validators will be polled, in sequence. All of them must complete successfully to continue.

    -

    Example

    +

    Example

    #[derive(Debug)]
     struct PrintAddressAndContinue;
     
    @@ -19,7 +21,7 @@ successfully to continue.

    keychain: KeychainKind, hd_keypaths: &HdKeyPaths, script: &Script - ) -> Result<(), AddressValidatorError> { + ) -> Result<(), AddressValidatorError> { let address = Address::from_script(script, Network::Testnet) .as_ref() .map(Address::to_string) @@ -37,10 +39,9 @@ successfully to continue.

    let address = wallet.get_address(New)?; println!("Address: {}", address);
    -

    Enums

    -

    Errors that can be returned to fail the validation of an address

    -

    Traits

    -

    Trait to build address validators

    -
    - +

    Enums

    +

    Errors that can be returned to fail the validation of an address

    +

    Traits

    +

    Trait to build address validators

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/trait.AddressValidator.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/trait.AddressValidator.html index 6938b2051d..11d1a55491 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/trait.AddressValidator.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/address_validator/trait.AddressValidator.html @@ -1,4 +1,6 @@ -AddressValidator in bdk::wallet::address_validator - Rust

    Trait bdk::wallet::address_validator::AddressValidator[][src]

    pub trait AddressValidator: Send + Sync + Debug {
    +AddressValidator in bdk::wallet::address_validator - Rust
    +    
    logo

    Trait bdk::wallet::address_validator::AddressValidator[][src]

    pub trait AddressValidator: Send + Sync + Debug {
         fn validate(
            &self,
            keychain: KeychainKind,
            hd_keypaths: &HdKeyPaths,
            script: &Script
        ) -> Result<(), AddressValidatorError>; }
    Expand description

    Trait to build address validators

    All the address validators attached to a wallet with Wallet::add_address_validator will be polled @@ -6,6 +8,5 @@ every time an address (external or internal) is generated by the wallet. Errors validator will be propagated up to the original caller that triggered the address generation.

    For a usage example see this module’s documentation.

    Required methods

    Validate or inspect an address

    -

    Implementors

    - +

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html index 03cda120cd..3a178857e7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/index.html @@ -1,10 +1,12 @@ -bdk::wallet::coin_selection - Rust

    Module bdk::wallet::coin_selection[][src]

    Expand description

    Coin selection

    +bdk::wallet::coin_selection - Rust +
    logo

    Module bdk::wallet::coin_selection[][src]

    Expand description

    Coin selection

    This module provides the trait CoinSelectionAlgorithm that can be implemented to define custom coin selection algorithms.

    You can specify a custom coin selection algorithm through the coin_selection method on TxBuilder. DefaultCoinSelectionAlgorithm aliases the coin selection algorithm that will be used if it is not explicitly set.

    -

    Example

    +

    Example

    #[derive(Debug)]
     struct AlwaysSpendEverything;
     
    @@ -17,14 +19,14 @@ be used if it is not explicitly set.

    fee_rate: FeeRate, amount_needed: u64, fee_amount: u64, - ) -> Result<CoinSelectionResult, bdk::Error> { + ) -> Result<CoinSelectionResult, bdk::Error> { let mut selected_amount = 0; let mut additional_weight = 0; let all_utxos_selected = required_utxos .into_iter() .chain(optional_utxos) .scan( - (&mut selected_amount, &mut additional_weight), + (&mut selected_amount, &mut additional_weight), |(selected_amount, additional_weight), weighted_utxo| { **selected_amount += weighted_utxo.utxo.txout().value; **additional_weight += TXIN_BASE_WEIGHT + weighted_utxo.satisfaction_weight; @@ -59,15 +61,14 @@ be used if it is not explicitly set.

    // inspect, sign, broadcast, ...
    -

    Structs

    -

    Branch and bound coin selection

    -

    Result of a successful coin selection

    -

    Simple and dumb coin selection

    -

    Traits

    -

    Trait for generalized coin selection algorithms

    -

    Type Definitions

    -

    Default coin selection algorithm used by TxBuilder if not +

    Structs

    +

    Branch and bound coin selection

    +

    Result of a successful coin selection

    +

    Simple and dumb coin selection

    +

    Traits

    +

    Trait for generalized coin selection algorithms

    +

    Type Definitions

    +

    Default coin selection algorithm used by TxBuilder if not overridden

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html index da3d47f8fc..58979cc015 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.BranchAndBoundCoinSelection.html @@ -1,25 +1,25 @@ -BranchAndBoundCoinSelection in bdk::wallet::coin_selection - Rust

    Struct bdk::wallet::coin_selection::BranchAndBoundCoinSelection[][src]

    pub struct BranchAndBoundCoinSelection { /* fields omitted */ }
    Expand description

    Branch and bound coin selection

    +BranchAndBoundCoinSelection in bdk::wallet::coin_selection - Rust +
    logo

    Struct bdk::wallet::coin_selection::BranchAndBoundCoinSelection[][src]

    pub struct BranchAndBoundCoinSelection { /* fields omitted */ }
    Expand description

    Branch and bound coin selection

    Code adapted from Bitcoin Core’s implementation and from Mark Erhardt Master’s Thesis: http://murch.one/wp-content/uploads/2016/11/erhardt2016coinselection.pdf

    Implementations

    Create new instance with target size for change output

    Trait Implementations

    Perform the coin selection 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/wallet/coin_selection/struct.CoinSelectionResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html index 2fc68a28c6..6cb79f5c7a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.CoinSelectionResult.html @@ -1,4 +1,6 @@ -CoinSelectionResult in bdk::wallet::coin_selection - Rust

    Struct bdk::wallet::coin_selection::CoinSelectionResult[][src]

    pub struct CoinSelectionResult {
    +CoinSelectionResult in bdk::wallet::coin_selection - Rust
    +    
    logo

    Struct bdk::wallet::coin_selection::CoinSelectionResult[][src]

    pub struct CoinSelectionResult {
         pub selected: Vec<Utxo>,
         pub fee_amount: u64,
     }
    Expand description

    Result of a successful coin selection

    @@ -8,21 +10,19 @@

    The total value of the inputs selected from the local wallet.

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/wallet/coin_selection/struct.LargestFirstCoinSelection.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html index 2967b66122..4a46fa255b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/struct.LargestFirstCoinSelection.html @@ -1,31 +1,30 @@ -LargestFirstCoinSelection in bdk::wallet::coin_selection - Rust

    Struct bdk::wallet::coin_selection::LargestFirstCoinSelection[][src]

    pub struct LargestFirstCoinSelection;
    Expand description

    Simple and dumb coin selection

    +LargestFirstCoinSelection in bdk::wallet::coin_selection - Rust +
    logo

    Struct bdk::wallet::coin_selection::LargestFirstCoinSelection[][src]

    pub struct LargestFirstCoinSelection;
    Expand description

    Simple and dumb coin selection

    This coin selection algorithm sorts the available UTXOs by value and then picks them starting from the largest ones until the required amount is reached.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Performs copy-assignment from source. Read more

    Perform the coin selection 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/coin_selection/trait.CoinSelectionAlgorithm.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/trait.CoinSelectionAlgorithm.html index 1aadde9c06..2dd742a2b3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/trait.CoinSelectionAlgorithm.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/trait.CoinSelectionAlgorithm.html @@ -1,4 +1,6 @@ -CoinSelectionAlgorithm in bdk::wallet::coin_selection - Rust

    Trait bdk::wallet::coin_selection::CoinSelectionAlgorithm[][src]

    pub trait CoinSelectionAlgorithm<D: Database>: Debug {
    +CoinSelectionAlgorithm in bdk::wallet::coin_selection - Rust
    +    
    logo

    Trait bdk::wallet::coin_selection::CoinSelectionAlgorithm[][src]

    pub trait CoinSelectionAlgorithm<D: Database>: Debug {
         fn coin_select(
            &self,
            database: &D,
            required_utxos: Vec<WeightedUtxo>,
            optional_utxos: Vec<WeightedUtxo>,
            fee_rate: FeeRate,
            amount_needed: u64,
            fee_amount: u64
        ) -> Result<CoinSelectionResult, Error>; }
    Expand description

    Trait for generalized coin selection algorithms

    This trait can be implemented to make the Wallet use a customized coin @@ -17,6 +19,5 @@ weight cost

  • fee_amount: the amount of fees in satoshi already accumulated from adding outputs and the transaction’s header
  • -

    Implementors

    - +

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/type.DefaultCoinSelectionAlgorithm.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/type.DefaultCoinSelectionAlgorithm.html index 2a7cee4c38..3f99dd3cdd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/type.DefaultCoinSelectionAlgorithm.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/coin_selection/type.DefaultCoinSelectionAlgorithm.html @@ -1,5 +1,6 @@ -DefaultCoinSelectionAlgorithm in bdk::wallet::coin_selection - Rust

    Type Definition bdk::wallet::coin_selection::DefaultCoinSelectionAlgorithm[][src]

    pub type DefaultCoinSelectionAlgorithm = BranchAndBoundCoinSelection;
    Expand description

    Default coin selection algorithm used by TxBuilder if not +DefaultCoinSelectionAlgorithm in bdk::wallet::coin_selection - Rust +

    logo

    Type Definition bdk::wallet::coin_selection::DefaultCoinSelectionAlgorithm[][src]

    pub type DefaultCoinSelectionAlgorithm = BranchAndBoundCoinSelection;
    Expand description

    Default coin selection algorithm used by TxBuilder if not overridden

    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html index d20d05b94a..2386363714 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/enum.AddressIndex.html @@ -1,45 +1,45 @@ -AddressIndex in bdk::wallet - Rust

    Enum bdk::wallet::AddressIndex[][src]

    pub enum AddressIndex {
    +AddressIndex in bdk::wallet - Rust
    +    
    logo

    Enum bdk::wallet::AddressIndex[][src]

    pub enum AddressIndex {
         New,
         LastUnused,
         Peek(u32),
         Reset(u32),
     }
    Expand description

    The address index selection strategy to use to derived an address from the wallet’s external descriptor. See Wallet::get_address. If you’re unsure which one to use use WalletIndex::New.

    -

    Variants

    New

    Return a new address after incrementing the current descriptor index.

    -
    LastUnused

    Return the address for the current descriptor index if it has not been used in a received +

    Variants

    New

    Return a new address after incrementing the current descriptor index.

    +

    LastUnused

    Return the address for the current descriptor index if it has not been used in a received transaction. Otherwise return a new address as with AddressIndex::New.

    Use with caution, if the wallet has not yet detected an address has been used it could return an already used address. This function is primarily meant for situations where the caller is untrusted; for example when deriving donation addresses on-demand for a public web page.

    -
    Peek(u32)

    Return the address for a specific descriptor index. Does not change the current descriptor +

    Peek(u32)

    Tuple Fields

    0: u32

    Return the address for a specific descriptor index. Does not change the current descriptor index used by AddressIndex::New and AddressIndex::LastUsed.

    Use with caution, if an index is given that is less than the current descriptor index then the returned address may have already been used.

    -

    Tuple Fields of Peek

    0: u32
    Reset(u32)

    Return the address for a specific descriptor index and reset the current descriptor index +

    Reset(u32)

    Tuple Fields

    0: u32

    Return the address for a specific descriptor index and reset the current descriptor index used by AddressIndex::New and AddressIndex::LastUsed to this value.

    Use with caution, if an index is given that is less than the current descriptor index then the returned address and subsequent addresses returned by calls to AddressIndex::New and AddressIndex::LastUsed may have already been used. Also if the index is reset to a value earlier than the crate::blockchain::Blockchain stop_gap (default is 20) then a larger stop_gap should be used to monitor for all possibly used addresses.

    -

    Tuple Fields of Reset

    0: u32

    Trait Implementations

    Formats the value using the given formatter. Read more

    +

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/wallet/export/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/index.html index f5d42285ff..027f7f5fe1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/index.html @@ -1,6 +1,8 @@ -bdk::wallet::export - Rust

    Module bdk::wallet::export[][src]

    Expand description

    Wallet export

    +bdk::wallet::export - Rust +
    logo

    Module bdk::wallet::export[][src]

    Expand description

    Wallet export

    This modules implements the wallet export format used by FullyNoded.

    -

    Examples

    Import from JSON

    +

    Examples

    Import from JSON

    let import = r#"{
         "descriptor": "wpkh([c258d2e4\/84h\/1h\/0h]tpubDD3ynpHgJQW8VvWRzQ5WFDCrs4jqVFGHB3vLC3r49XHJSqP8bHKdK4AriuUKLccK68zfzowx7YhmDN8SiSkgCDENUFx9qVw65YyqM78vyVe\/0\/*)",
         "blockheight":1782088,
    @@ -14,7 +16,7 @@
         Network::Testnet,
         MemoryDatabase::default(),
     )?;
    -

    Export a Wallet

    +

    Export a Wallet

    let wallet = Wallet::new_offline(
         "wpkh([c258d2e4/84h/1h/0h]tpubDD3ynpHgJQW8VvWRzQ5WFDCrs4jqVFGHB3vLC3r49XHJSqP8bHKdK4AriuUKLccK68zfzowx7YhmDN8SiSkgCDENUFx9qVw65YyqM78vyVe/0/*)",
         Some("wpkh([c258d2e4/84h/1h/0h]tpubDD3ynpHgJQW8VvWRzQ5WFDCrs4jqVFGHB3vLC3r49XHJSqP8bHKdK4AriuUKLccK68zfzowx7YhmDN8SiSkgCDENUFx9qVw65YyqM78vyVe/1/*)"),
    @@ -26,8 +28,7 @@
         .map_err(bdk::Error::Generic)?;
     
     println!("Exported: {}", export.to_string());
    -

    Structs

    -

    Structure that contains the export of a wallet

    -
    - +

    Structs

    +

    Structure that contains the export of a wallet

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html index 6ff227a440..da1356ead7 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/export/struct.WalletExport.html @@ -1,4 +1,6 @@ -WalletExport in bdk::wallet::export - Rust

    Struct bdk::wallet::export::WalletExport[][src]

    pub struct WalletExport {
    +WalletExport in bdk::wallet::export - Rust
    +    
    logo

    Struct bdk::wallet::export::WalletExport[][src]

    pub struct WalletExport {
         pub blockheight: u32,
         pub label: String,
         // some fields omitted
    @@ -17,27 +19,25 @@ returned will be 0.

    Return the external descriptor

    Return the internal descriptor, if present

    Trait Implementations

    Formats the value using the given formatter. Read more

    -

    Deserialize this value from the given Serde deserializer. Read more

    -

    The associated error which can be returned from parsing.

    +

    Deserialize this value from the given Serde deserializer. Read more

    +

    The associated error which can be returned from parsing.

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

    -

    Serialize this value into the given Serde serializer. Read more

    +

    Serialize this value into the given Serde serializer. Read more

    Converts the given value to a String. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/wallet/fn.get_funded_wallet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/fn.get_funded_wallet.html index e93825a76c..e4e1917b9e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/fn.get_funded_wallet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/fn.get_funded_wallet.html @@ -1,4 +1,5 @@ -get_funded_wallet in bdk::wallet - Rust

    Function bdk::wallet::get_funded_wallet[][src]

    pub fn get_funded_wallet(
        descriptor: &str
    ) -> (Wallet<(), MemoryDatabase>, (String, Option<String>), Txid)
    Expand description

    Return a fake wallet that appears to be funded for testing.

    -
    - +get_funded_wallet in bdk::wallet - Rust +
    logo

    Function bdk::wallet::get_funded_wallet[][src]

    pub fn get_funded_wallet(
        descriptor: &str
    ) -> (Wallet<(), MemoryDatabase>, (String, Option<String>), Txid)
    Expand description

    Return a fake wallet that appears to be funded for testing.

    +
    \ No newline at end of file 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 new file mode 100644 index 0000000000..4bca670398 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/fn.wallet_name_from_descriptor.html @@ -0,0 +1,5 @@ +wallet_name_from_descriptor in bdk::wallet - Rust +
    logo

    Function bdk::wallet::wallet_name_from_descriptor[][src]

    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

    +
    + \ 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 0d5803ce8c..f321c35c13 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,23 +1,25 @@ -bdk::wallet - Rust

    Module bdk::wallet[][src]

    Expand description

    Wallet

    +bdk::wallet - Rust +
    logo

    Module bdk::wallet[][src]

    Expand description

    Wallet

    This module defines the Wallet structure.

    -

    Modules

    -

    Address validation callbacks

    -

    Coin selection

    -

    Wallet export

    -

    Generalized signers

    -

    Cross-platform time

    -

    Transaction builder

    -

    Structs

    -

    A derived address and the index it was found at +

    Modules

    +

    Address validation callbacks

    +

    Coin selection

    +

    Wallet export

    +

    Generalized signers

    +

    Cross-platform time

    +

    Transaction builder

    +

    Structs

    +

    A derived address and the index it was found at For convenience this automatically derefs to Address

    -

    A Bitcoin wallet

    -

    Enums

    -

    The address index selection strategy to use to derived an address from the wallet’s external +

    A Bitcoin wallet

    +

    Enums

    +

    The address index selection strategy to use to derived an address from the wallet’s external descriptor. See Wallet::get_address. If you’re unsure which one to use use WalletIndex::New.

    -

    Traits

    -

    Trait to check if a value is below the dust limit

    -

    Functions

    -

    Return a fake wallet that appears to be funded for testing.

    -
    - +

    Traits

    +

    Trait to check if a value is below the dust limit

    +

    Functions

    +

    Return a fake wallet that appears to be funded for testing.

    +

    Deterministically generate a unique name given the descriptors defining the wallet

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/sidebar-items.js index 20bdf7e32f..75382201e9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["AddressIndex","The address index selection strategy to use to derived an address from the wallet’s external descriptor. See [`Wallet::get_address`]. If you’re unsure which one to use use `WalletIndex::New`."]],"fn":[["get_funded_wallet","Return a fake wallet that appears to be funded for testing."]],"mod":[["address_validator","Address validation callbacks"],["coin_selection","Coin selection"],["export","Wallet export"],["signer","Generalized signers"],["time","Cross-platform time"],["tx_builder","Transaction builder"]],"struct":[["AddressInfo","A derived address and the index it was found at For convenience this automatically derefs to `Address`"],["Wallet","A Bitcoin wallet"]],"trait":[["IsDust","Trait to check if a value is below the dust limit"]]}); \ No newline at end of file +initSidebarItems({"enum":[["AddressIndex","The address index selection strategy to use to derived an address from the wallet’s external descriptor. See [`Wallet::get_address`]. If you’re unsure which one to use use `WalletIndex::New`."]],"fn":[["get_funded_wallet","Return a fake wallet that appears to be funded for testing."],["wallet_name_from_descriptor","Deterministically generate a unique name given the descriptors defining the wallet"]],"mod":[["address_validator","Address validation callbacks"],["coin_selection","Coin selection"],["export","Wallet export"],["signer","Generalized signers"],["time","Cross-platform time"],["tx_builder","Transaction builder"]],"struct":[["AddressInfo","A derived address and the index it was found at For convenience this automatically derefs to `Address`"],["Wallet","A Bitcoin wallet"]],"trait":[["IsDust","Trait to check if a value is below the dust limit"]]}); \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html index 3d4cceccd5..316a5c242d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerError.html @@ -1,4 +1,6 @@ -SignerError in bdk::wallet::signer - Rust

    Enum bdk::wallet::signer::SignerError[][src]

    pub enum SignerError {
    +SignerError in bdk::wallet::signer - Rust
    +    
    logo

    Enum bdk::wallet::signer::SignerError[][src]

    pub enum SignerError {
         MissingKey,
         InvalidKey,
         UserCanceled,
    @@ -10,21 +12,21 @@
         MissingHdKeypath,
         NonStandardSighash,
     }
    Expand description

    Signing error

    -

    Variants

    MissingKey

    The private key is missing for the required public key

    -
    InvalidKey

    The private key in use has the right fingerprint but derives differently than expected

    -
    UserCanceled

    The user canceled the operation

    -
    InputIndexOutOfRange

    Input index is out of range

    -
    MissingNonWitnessUtxo

    The non_witness_utxo field of the transaction is required to sign this input

    -
    InvalidNonWitnessUtxo

    The non_witness_utxo specified is invalid

    -
    MissingWitnessUtxo

    The witness_utxo field of the transaction is required to sign this input

    -
    MissingWitnessScript

    The witness_script field of the transaction is requied to sign this input

    -
    MissingHdKeypath

    The fingerprint and derivation path are missing from the psbt input

    -
    NonStandardSighash

    The psbt contains a non-SIGHASH_ALL sighash in one of its input and the user hasn’t +

    Variants

    MissingKey

    The private key is missing for the required public key

    +

    InvalidKey

    The private key in use has the right fingerprint but derives differently than expected

    +

    UserCanceled

    The user canceled the operation

    +

    InputIndexOutOfRange

    Input index is out of range

    +

    MissingNonWitnessUtxo

    The non_witness_utxo field of the transaction is required to sign this input

    +

    InvalidNonWitnessUtxo

    The non_witness_utxo specified is invalid

    +

    MissingWitnessUtxo

    The witness_utxo field of the transaction is required to sign this input

    +

    MissingWitnessScript

    The witness_script field of the transaction is required to sign this input

    +

    MissingHdKeypath

    The fingerprint and derivation path are missing from the psbt input

    +

    NonStandardSighash

    The psbt contains a non-SIGHASH_ALL sighash in one of its input and the user hasn’t explicitly allowed them

    To enable signing transactions with non-standard sighashes set SignOptions::allow_all_sighashes to true.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    @@ -34,37 +36,25 @@ explicitly allowed them

    Performs the conversion.

    This method tests for self and other values to be equal, and is used by ==. Read more

    -

    This method tests for !=.

    +

    This method tests for !=.

    Auto Trait Implementations

    Blanket Implementations

    Gets the TypeId of self. Read more

    -

    Converts a reference to Self into a dynamic trait object of Fail.

    -

    Immutably borrows from an owned value. Read more

    -

    Mutably borrows from an owned value. Read more

    -

    Returns the “name” of the error. Read more

    -

    Returns a reference to the underlying cause of this failure, if it -is an error that wraps other errors. Read more

    -

    Returns a reference to the Backtrace carried by this failure, if it -carries one. Read more

    -

    Provides context for this failure. Read more

    -

    Wraps this failure in a compatibility wrapper that implements -std::error::Error. Read more

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/signer/enum.SignerId.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html index 291dc0fd42..528841e5c5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/enum.SignerId.html @@ -1,53 +1,52 @@ -SignerId in bdk::wallet::signer - Rust

    Enum bdk::wallet::signer::SignerId[][src]

    pub enum SignerId {
    +SignerId in bdk::wallet::signer - Rust
    +    
    logo

    Enum bdk::wallet::signer::SignerId[][src]

    pub enum SignerId {
         PkHash(Hash),
         Fingerprint(Fingerprint),
         Dummy(u64),
     }
    Expand description

    Identifier of a signer in the SignersContainers. Used as a key to find the right signer among multiple of them

    -

    Variants

    PkHash(Hash)

    Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA public key

    -

    Tuple Fields of PkHash

    0: Hash
    Fingerprint(Fingerprint)

    The fingerprint of a BIP32 extended key

    -

    Tuple Fields of Fingerprint

    0: Fingerprint
    Dummy(u64)

    Dummy identifier

    -

    Tuple Fields of Dummy

    0: u64

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. Read more

    +

    Variants

    PkHash(Hash)

    Tuple Fields

    0: Hash

    Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA public key

    +

    Fingerprint(Fingerprint)

    Tuple Fields

    0: Fingerprint

    The fingerprint of a BIP32 extended key

    +

    Dummy(u64)

    Tuple Fields

    0: u64

    Dummy identifier

    +

    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

    Performs the conversion.

    Performs the conversion.

    Feeds this value into the given Hasher. Read more

    -

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

    +

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

    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

    +

    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 by ==. Read more

    This method tests for !=.

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

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/signer/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html index 7554ca0ff6..5a18e11d66 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/index.html @@ -1,4 +1,6 @@ -bdk::wallet::signer - Rust

    Module bdk::wallet::signer[][src]

    Expand description

    Structs

    -

    Options for a software signer

    -

    Defines the order in which signers are called

    -

    Container for multiple signers

    -

    Enums

    -

    Signing error

    -

    Identifier of a signer in the SignersContainers. Used as a key to find the right signer among +

    Structs

    +

    Options for a software signer

    +

    Defines the order in which signers are called

    +

    Container for multiple signers

    +

    Enums

    +

    Signing error

    +

    Identifier of a signer in the SignersContainers. Used as a key to find the right signer among multiple of them

    -

    Traits

    -

    Trait for signers

    -
    - +

    Traits

    +

    Trait for signers

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html index e981dcc3d4..f6b5f56a4f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignOptions.html @@ -1,4 +1,6 @@ -SignOptions in bdk::wallet::signer - Rust

    Struct bdk::wallet::signer::SignOptions[][src]

    pub struct SignOptions {
    +SignOptions in bdk::wallet::signer - Rust
    +    
    logo

    Struct bdk::wallet::signer::SignOptions[][src]

    pub struct SignOptions {
         pub trust_witness_utxo: bool,
         pub assume_height: Option<u32>,
         pub allow_all_sighashes: bool,
    @@ -22,29 +24,26 @@ wallet use timelocks in the future to spend a coin.

    what its value is

    Defaults to false which will only allow signing using SIGHASH_ALL.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/signer/struct.SignerOrdering.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html index 05b7104659..999977db87 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignerOrdering.html @@ -1,45 +1,44 @@ -SignerOrdering in bdk::wallet::signer - Rust

    Struct bdk::wallet::signer::SignerOrdering[][src]

    pub struct SignerOrdering(pub usize);
    Expand description

    Defines the order in which signers are called

    +SignerOrdering in bdk::wallet::signer - Rust +
    logo

    Struct bdk::wallet::signer::SignerOrdering[][src]

    pub struct SignerOrdering(pub usize);
    Expand description

    Defines the order in which signers are called

    The default value is 100. Signers with an ordering above that will be called later, and they will thus see the partial signatures added to the transaction once they get to sign themselves.

    Tuple Fields

    0: usize

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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 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

    +

    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 by ==. Read more

    This method tests for !=.

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

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/signer/struct.SignersContainer.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html index 3f8eae4d00..c4c74fe366 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/struct.SignersContainer.html @@ -1,4 +1,6 @@ -SignersContainer in bdk::wallet::signer - Rust

    Struct bdk::wallet::signer::SignersContainer[][src]

    pub struct SignersContainer(_);
    Expand description

    Container for multiple signers

    +SignersContainer in bdk::wallet::signer - Rust +
    logo

    Struct bdk::wallet::signer::SignersContainer[][src]

    pub struct SignersContainer(_);
    Expand description

    Container for multiple signers

    Implementations

    Create a map of public keys to secret keys

    Default constructor

    Adds an external signer to the container for the specified id. Optionally returns the @@ -8,30 +10,27 @@ signer that was previously in the container, if any

    Returns the list of signers in the container, sorted by lowest to highest ordering

    Finds the signer with lowest ordering for a given id in the container.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    Performs the conversion.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/signer/trait.Signer.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/trait.Signer.html index 0ebe55a44a..df9c794f7e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/trait.Signer.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/signer/trait.Signer.html @@ -1,4 +1,6 @@ -Signer in bdk::wallet::signer - Rust

    Trait bdk::wallet::signer::Signer[][src]

    pub trait Signer: Debug + Send + Sync {
    +Signer in bdk::wallet::signer - Rust
    +    
    logo

    Trait bdk::wallet::signer::Signer[][src]

    pub trait Signer: Debug + Send + Sync {
         fn sign(
            &self,
            psbt: &mut PartiallySignedTransaction,
            input_index: Option<usize>,
            secp: &Secp256k1<All>
        ) -> Result<(), SignerError>;
    fn sign_whole_tx(&self) -> bool;
    fn id(&self, secp: &Secp256k1<All>) -> SignerId; @@ -20,6 +22,5 @@ compare two signers.

    This is used internally to reconstruct the original descriptor that may contain secrets. External signers that are meant to keep key isolated should just return None here (which is the default for this method, if not overridden).

    -

    Implementations on Foreign Types

    Implementors

    - +

    Implementations on Foreign Types

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html index bdc923b2c3..f62c413967 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.AddressInfo.html @@ -1,11 +1,13 @@ -AddressInfo in bdk::wallet - Rust

    Struct bdk::wallet::AddressInfo[][src]

    pub struct AddressInfo {
    +AddressInfo in bdk::wallet - Rust
    +    
    logo

    Struct bdk::wallet::AddressInfo[][src]

    pub struct AddressInfo {
         pub index: u32,
         pub address: Address,
     }
    Expand description

    A derived address and the index it was found at For convenience this automatically derefs to Address

    Fields

    index: u32

    Child index of this address

    address: Address

    Address

    -

    Methods from Deref<Target = Address>

    Get the address type of the address. +

    Methods from Deref<Target = Address>

    Get the address type of the address. None if unknown or non-standard.

    Check whether or not the address is following Bitcoin standardness rules.

    @@ -25,22 +27,20 @@ alphanumeric mode, which is 45% more compact than the normal byte mode.”

    by ==. Read more

    This method tests for !=.

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/wallet/struct.Wallet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html index 927f2e3cab..4eb73de5c2 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html @@ -1,4 +1,6 @@ -Wallet in bdk::wallet - Rust

    Struct bdk::wallet::Wallet[][src]

    pub struct Wallet<B, D> { /* fields omitted */ }
    Expand description

    A Bitcoin wallet

    +Wallet in bdk::wallet - Rust +
    logo

    Struct bdk::wallet::Wallet[][src]

    pub struct Wallet<B, D> { /* fields omitted */ }
    Expand description

    A Bitcoin wallet

    A wallet takes descriptors, a database and a blockchain and implements the basic functions that a Bitcoin wallets needs to operate, like generating addresses, returning the balance, @@ -8,30 +10,35 @@ implements

    Implementations

    Create a new “offline” wallet

    Get the Bitcoin network the wallet is using.

    -

    Return a derived address using the external descriptor, see AddressIndex for +

    Return a derived address using the external descriptor, see AddressIndex for available address index selection strategies. If none of the keys in the descriptor are derivable (ie. does not end with /*) then the same address will always be returned for any AddressIndex.

    Return whether or not a script is part of this wallet (either internal or external)

    Return the list of unspent outputs of this wallet

    -

    Note that this methods only operate on the internal database, which first needs to be +

    Note that this method only operates on the internal database, which first needs to be Wallet::sync manually.

    Returns the UTXO owned by this wallet corresponding to outpoint if it exists in the wallet’s database.

    -

    Return the list of transactions made and received by the wallet

    +

    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.

    +

    Note that this method only operates on the internal database, which first needs to be +Wallet::sync manually.

    +

    Return the list of transactions made and received by the wallet

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

    Note that this methods only operate on the internal database, which first needs to be Wallet::sync manually.

    -

    Return the balance, meaning the sum of this wallet’s unspent outputs’ values

    +

    Return the balance, meaning the sum of this wallet’s unspent outputs’ values

    Note that this methods only operate on the internal database, which first needs to be Wallet::sync manually.

    -

    Add an external signer

    +

    Add an external signer

    See the signer module for an example.

    -

    Add an address validator

    +

    Add an address validator

    See the address_validator module for an example.

    -

    Start building a transaction.

    +

    Start building a transaction.

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

    -

    Example

    +
    Example
    let (psbt, details) = {
        let mut builder =  wallet.build_tx();
        builder
    @@ -40,11 +47,11 @@ wallet’s database.

    }; // sign and broadcast ...
    -

    Bump the fee of a transaction previously created with this wallet.

    +

    Bump the fee of a transaction previously created with this wallet.

    Returns an error if the transaction is already confirmed or doesn’t explicitly signal -repalce by fee (RBF). If the transaction can be fee bumped then it returns a TxBuilder +replace by fee (RBF). If the transaction can be fee bumped then it returns a TxBuilder pre-populated with the inputs and outputs of the original transaction.

    -

    Example

    +
    Example
    let (mut psbt, _) = {
         let mut builder = wallet.build_tx();
         builder
    @@ -52,7 +59,7 @@ pre-populated with the inputs and outputs of the original transaction.

    .enable_rbf(); builder.finish()? }; -let _ = wallet.sign(&mut psbt, SignOptions::default())?; +let _ = wallet.sign(&mut psbt, SignOptions::default())?; let tx = psbt.extract_tx(); // broadcast tx but it's taking too long to confirm so we want to bump the fee let (mut psbt, _) = { @@ -62,53 +69,52 @@ pre-populated with the inputs and outputs of the original transaction.

    builder.finish()? }; -let _ = wallet.sign(&mut psbt, SignOptions::default())?; +let _ = wallet.sign(&mut psbt, SignOptions::default())?; let fee_bumped_tx = psbt.extract_tx(); // broadcast fee_bumped_tx to replace original
    -

    Sign a transaction with all the wallet’s signers, in the order specified by every signer’s +

    Sign a transaction with all the wallet’s signers, in the order specified by every signer’s SignerOrdering

    The SignOptions can be used to tweak the behavior of the software signers, and the way the transaction is finalized at the end. Note that it can’t be guaranteed that every signers will follow the options, but the “software signers” (WIF keys and xprv) defined in this library will.

    -

    Example

    +
    Example
    let (mut psbt, _) = {
         let mut builder = wallet.build_tx();
         builder.add_recipient(to_address.script_pubkey(), 50_000);
         builder.finish()?
     };
    -let  finalized = wallet.sign(&mut psbt, SignOptions::default())?;
    +let  finalized = wallet.sign(&mut psbt, SignOptions::default())?;
     assert!(finalized, "we should have signed all the inputs");
    -

    Return the spending policies for the wallet’s descriptor

    -

    Return the “public” version of the wallet’s descriptor, meaning a new descriptor that has +

    Return the spending policies for the wallet’s descriptor

    +

    Return the “public” version of the wallet’s descriptor, meaning a new descriptor that has the same structure but with every secret key removed

    This can be used to build a watch-only version of a wallet

    -

    Try to finalize a PSBT

    +

    Try to finalize a PSBT

    The SignOptions can be used to tweak the behavior of the finalizer.

    -

    Return the secp256k1 context used for all signing operations

    -

    Returns the descriptor used to create adddresses for a particular keychain.

    -

    get the corresponding PSBT Input for a LocalUtxo

    -

    Create a new “online” wallet

    -

    Sync the internal database with the blockchain

    -

    Return a reference to the internal blockchain client

    -

    Broadcast a transaction to the network

    +

    Return the secp256k1 context used for all signing operations

    +

    Returns the descriptor used to create addresses for a particular keychain.

    +

    get the corresponding PSBT Input for a LocalUtxo

    +

    Return an immutable reference to the internal database

    +

    Create a new “online” wallet

    +

    Sync the internal database with the blockchain

    +

    Return a reference to the internal blockchain client

    +

    Broadcast a transaction to the network

    Trait Implementations

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    -

    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.

    -
    - +

    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/wallet/time/fn.get_timestamp.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/fn.get_timestamp.html index b08cbaaa2a..e0ac4bc84a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/fn.get_timestamp.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/fn.get_timestamp.html @@ -1,4 +1,5 @@ -get_timestamp in bdk::wallet::time - Rust

    Function bdk::wallet::time::get_timestamp[][src]

    pub fn get_timestamp() -> u64
    Expand description

    Return the current timestamp in seconds

    -
    - +get_timestamp in bdk::wallet::time - Rust +
    logo

    Function bdk::wallet::time::get_timestamp[][src]

    pub fn get_timestamp() -> u64
    Expand description

    Return the current timestamp in seconds

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/index.html index 8b626f260e..ff34781cfd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/time/index.html @@ -1,10 +1,11 @@ -bdk::wallet::time - Rust

    Module bdk::wallet::time[][src]

    Expand description

    Cross-platform time

    +bdk::wallet::time - Rust +
    logo

    Module bdk::wallet::time[][src]

    Expand description

    Cross-platform time

    This module provides a function to get the current timestamp that works on all the platforms supported by the library.

    It can be useful to compare it with the timestamps found in TransactionDetails.

    -

    Functions

    -

    Return the current timestamp in seconds

    -
    - +

    Functions

    +

    Return the current timestamp in seconds

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/trait.IsDust.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/trait.IsDust.html index 368609d8ab..8cea92eb12 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/trait.IsDust.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/trait.IsDust.html @@ -1,7 +1,8 @@ -IsDust in bdk::wallet - Rust

    Trait bdk::wallet::IsDust[][src]

    pub trait IsDust {
    +IsDust in bdk::wallet - Rust
    +    
    logo

    Trait bdk::wallet::IsDust[][src]

    pub trait IsDust {
         fn is_dust(&self) -> bool;
     }
    Expand description

    Trait to check if a value is below the dust limit

    Required methods

    Check whether or not a value is below dust limit

    -

    Implementations on Foreign Types

    Implementors

    - +

    Implementations on Foreign Types

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html index ee7b4f8ee2..6fcfc5aeb1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.ChangeSpendPolicy.html @@ -1,51 +1,50 @@ -ChangeSpendPolicy in bdk::wallet::tx_builder - Rust

    Enum bdk::wallet::tx_builder::ChangeSpendPolicy[][src]

    pub enum ChangeSpendPolicy {
    +ChangeSpendPolicy in bdk::wallet::tx_builder - Rust
    +    
    logo

    Enum bdk::wallet::tx_builder::ChangeSpendPolicy[][src]

    pub enum ChangeSpendPolicy {
         ChangeAllowed,
         OnlyChange,
         ChangeForbidden,
     }
    Expand description

    Policy regarding the use of change outputs when creating a transaction

    -

    Variants

    ChangeAllowed

    Use both change and non-change outputs (default)

    -
    OnlyChange

    Only use change outputs (see TxBuilder::only_spend_change)

    -
    ChangeForbidden

    Only use non-change outputs (see TxBuilder::do_not_spend_change)

    -

    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

    -

    Feeds this value into the given Hasher. Read more

    -

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

    -

    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 +

    Variants

    ChangeAllowed

    Use both change and non-change outputs (default)

    +

    OnlyChange

    Only use change outputs (see TxBuilder::only_spend_change)

    +

    ChangeForbidden

    Only use non-change outputs (see TxBuilder::do_not_spend_change)

    +

    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

    +

    Feeds this value into the given Hasher. Read more

    +

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

    +

    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 by ==. Read more

    -

    This method tests for !=.

    -

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

    This method tests for !=.

    +

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/tx_builder/enum.TxOrdering.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html index dbc248f800..4f17e1d8bc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/enum.TxOrdering.html @@ -1,52 +1,51 @@ -TxOrdering in bdk::wallet::tx_builder - Rust

    Enum bdk::wallet::tx_builder::TxOrdering[][src]

    pub enum TxOrdering {
    +TxOrdering in bdk::wallet::tx_builder - Rust
    +    
    logo

    Enum bdk::wallet::tx_builder::TxOrdering[][src]

    pub enum TxOrdering {
         Shuffle,
         Untouched,
         Bip69Lexicographic,
     }
    Expand description

    Ordering of the transaction’s inputs and outputs

    -

    Variants

    Shuffle

    Randomized (default)

    -
    Untouched

    Unchanged

    -
    Bip69Lexicographic

    BIP69 / Lexicographic

    -

    Implementations

    Sort transaction inputs and outputs by TxOrdering variant

    -

    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

    -

    Feeds this value into the given Hasher. Read more

    -

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

    -

    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 +

    Variants

    Shuffle

    Randomized (default)

    +

    Untouched

    Unchanged

    +

    Bip69Lexicographic

    BIP69 / Lexicographic

    +

    Implementations

    Sort transaction inputs and outputs by TxOrdering variant

    +

    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

    +

    Feeds this value into the given Hasher. Read more

    +

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

    +

    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 by ==. Read more

    -

    This method tests for !=.

    -

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

    This method tests for !=.

    +

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

    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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    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

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/tx_builder/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/index.html index abe616a8c4..292bd80211 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/index.html @@ -1,5 +1,7 @@ -bdk::wallet::tx_builder - Rust

    Module bdk::wallet::tx_builder[][src]

    Expand description

    Transaction builder

    -

    Example

    +bdk::wallet::tx_builder - Rust +
    logo

    Module bdk::wallet::tx_builder[][src]

    Expand description

    Transaction builder

    +

    Example

    // create a TxBuilder from a wallet
     let mut tx_builder = wallet.build_tx();
     
    @@ -13,16 +15,15 @@
         // Turn on RBF signaling
         .enable_rbf();
     let (psbt, tx_details) = tx_builder.finish()?;
    -

    Structs

    -

    Marker type to indicate the TxBuilder is being used to bump the fee of an existing transaction.

    -

    Marker type to indicate the TxBuilder is being used to create a new transaction (as opposed +

    Structs

    +

    Marker type to indicate the TxBuilder is being used to bump the fee of an existing transaction.

    +

    Marker type to indicate the TxBuilder is being used to create a new transaction (as opposed to bumping the fee of an existing one).

    -

    A transaction builder

    -

    Enums

    -

    Policy regarding the use of change outputs when creating a transaction

    -

    Ordering of the transaction’s inputs and outputs

    -

    Traits

    -

    Context in which the TxBuilder is valid

    -
    - +

    A transaction builder

    +

    Enums

    +

    Policy regarding the use of change outputs when creating a transaction

    +

    Ordering of the transaction’s inputs and outputs

    +

    Traits

    +

    Context in which the TxBuilder is valid

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html index 82a9195942..53aa7245b8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.BumpFee.html @@ -1,28 +1,27 @@ -BumpFee in bdk::wallet::tx_builder - Rust

    Struct bdk::wallet::tx_builder::BumpFee[][src]

    pub struct BumpFee;
    Expand description

    Marker type to indicate the TxBuilder is being used to bump the fee of an existing transaction.

    +BumpFee in bdk::wallet::tx_builder - Rust +
    logo

    Struct bdk::wallet::tx_builder::BumpFee[][src]

    pub struct BumpFee;
    Expand description

    Marker type to indicate the TxBuilder is being used to bump the fee of an existing transaction.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/tx_builder/struct.CreateTx.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html index bc3c167a86..de4ea483c4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.CreateTx.html @@ -1,29 +1,28 @@ -CreateTx in bdk::wallet::tx_builder - Rust

    Struct bdk::wallet::tx_builder::CreateTx[][src]

    pub struct CreateTx;
    Expand description

    Marker type to indicate the TxBuilder is being used to create a new transaction (as opposed +CreateTx in bdk::wallet::tx_builder - Rust +

    logo

    Struct bdk::wallet::tx_builder::CreateTx[][src]

    pub struct CreateTx;
    Expand description

    Marker type to indicate the TxBuilder is being used to create a new transaction (as opposed to bumping the fee of an existing one).

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/tx_builder/struct.TxBuilder.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html index 2cad412b0e..efe4cd4030 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html @@ -1,4 +1,6 @@ -TxBuilder in bdk::wallet::tx_builder - Rust

    Struct bdk::wallet::tx_builder::TxBuilder[][src]

    pub struct TxBuilder<'a, B, D, Cs, Ctx> { /* fields omitted */ }
    Expand description

    A transaction builder

    +TxBuilder in bdk::wallet::tx_builder - Rust +
    logo

    Struct bdk::wallet::tx_builder::TxBuilder[][src]

    pub struct TxBuilder<'a, B, D, Cs, Ctx> { /* fields omitted */ }
    Expand description

    A transaction builder

    A TxBuilder is created by calling build_tx or build_fee_bump on a wallet. After assigning it, you set options on it until finally calling finish to consume the builder and generate the transaction.

    @@ -39,7 +41,7 @@ This means it is usually best to call Policy::id) and the value is the list of the indexes of the items that are intended to be satisfied from the policy node (see SatisfiableItem::Thresh::items).

    -

    Example

    +
    Example

    An example of when the policy path is needed is the following descriptor: wsh(thresh(2,pk(A),sj:and_v(v:pk(B),n:older(6)),snj:and_v(v:pk(C),after(630000)))), derived from the miniscript policy thresh(2,pk(A),and(pk(B),older(6)),and(pk(C),after(630000))). @@ -92,7 +94,7 @@ the “utxos” and the “unspendable” list, it will be spent.

  • psbt_input: To know the value.
  • satisfaction_weight: To know how much weight/vbytes the input will add to the transaction for fee calculation.
  • -

    There are several security concerns about adding foregin UTXOs that application +

    There are several security concerns about adding foreign UTXOs that application developers should consider. First, how do you know the value of the input is correct? If a non_witness_utxo is provided in the psbt_input then this method implicitly verifies the value by checking it against the transaction. If only a witness_utxo is provided then this @@ -108,7 +110,7 @@ of course check the real input weight matches the expected weight prior to broad psbt_input provide a miniscript descriptor for the input so you can check it against the script_pubkey and then ask it for the max_satisfaction_weight.

    This is an EXPERIMENTAL feature, API and other major changes are expected.

    -

    Errors

    +
    Errors

    This method returns errors in the following circumstances:

    1. The psbt_input does not contain a witness_utxo or non_witness_utxo.
    2. @@ -165,9 +167,10 @@ BitBox and ColdCard are known to require this.

      and the given nsequence is lower than the CSV value.

      If the nsequence is higher than 0xFFFFFFFD an error will be thrown, since it would not be a valid nSequence to signal RBF.

      -

    Replace the recipients already added with a new list

    +

    Replace the recipients already added with a new list

    Add a recipient to the internal list

    -

    Sets the address to drain excess coins to.

    +

    Add data as an output, using OP_RETURN

    +

    Sets the address to drain excess coins to.

    Usually, when there are excess coins they are sent to a change address generated by the wallet. This option replaces the usual change address with an arbitrary script_pubkey of your choosing. Just as with a change output, if the drain output is not needed (the excess @@ -176,7 +179,7 @@ difference is that it is valid to use drain_to without setting any with add_recipient (but it is perfectly fine to add recipients as well).

    When bumping the fees of a transaction made with this option, you probably want to use allow_shrinking to allow this output to be reduced to pay for the extra fees.

    -

    Example

    +
    Example

    drain_to is very useful for draining all the coins in a wallet with drain_wallet to a single address.

    @@ -190,7 +193,7 @@ single address.

    .fee_rate(FeeRate::from_sat_per_vb(5.0)) .enable_rbf(); let (psbt, tx_details) = tx_builder.finish()?;
    -

    Explicitly tells the wallet that it is allowed to reduce the fee of the output matching this +

    Explicitly tells the wallet that it is allowed to reduce the fee of the output matching this script_pubkey in order to bump the transaction fee. Without specifying this the wallet will attempt to find a change output to shrink instead.

    Note that the output may shrink to below the dust limit and therefore be removed. If it is @@ -199,28 +202,25 @@ originally.

    Returns an Err if script_pubkey can’t be found among the recipients of the transaction we are bumping.

    Trait Implementations

    Returns a copy of the value. Read more

    -

    Performs copy-assignment from source. 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

    -

    Performs the conversion.

    -

    Performs the conversion.

    +

    Immutably borrows from an owned value. Read more

    +

    Mutably borrows from an owned value. Read more

    +

    Performs the conversion.

    +

    Performs the conversion.

    The alignment of pointer.

    The type for initializers.

    Initializes a with the given initializer. Read more

    Dereferences the given pointer. Read more

    Mutably dereferences the given pointer. Read more

    Drops the object pointed to by the given pointer. Read more

    -

    Should always be Self

    The resulting type after obtaining ownership.

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

    -
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    recently added

    -

    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.

    -
    - +
    🔬 This is a nightly-only experimental API. (toowned_clone_into)

    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/wallet/tx_builder/trait.TxBuilderContext.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/trait.TxBuilderContext.html index 15e506e385..b84a230107 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/trait.TxBuilderContext.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/trait.TxBuilderContext.html @@ -1,4 +1,5 @@ -TxBuilderContext in bdk::wallet::tx_builder - Rust

    Trait bdk::wallet::tx_builder::TxBuilderContext[][src]

    pub trait TxBuilderContext: Debug + Default + Clone { }
    Expand description

    Context in which the TxBuilder is valid

    -

    Implementors

    - +TxBuilderContext in bdk::wallet::tx_builder - Rust +
    logo

    Trait bdk::wallet::tx_builder::TxBuilderContext[][src]

    pub trait TxBuilderContext: Debug + Default + Clone { }
    Expand description

    Context in which the TxBuilder is valid

    +

    Implementors

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/dark.css b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/dark.css index 56782e49a2..b97fa52f48 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/dark.css +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/dark.css @@ -1 +1 @@ -body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) transparent;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-mod:focus{background-color:#803a1b;}a.result-externcrate:focus{background-color:#396bac;}a.result-enum:focus{background-color:#5b4e68;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#38902c;}a.result-foreigntype:focus{background-color:#b200d6;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#0063cc;}a.result-primitive:focus{background-color:#00708a;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b397da;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}body.source .example-wrap pre.rust a{background:#333;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#D2991D;}a.test-arrow{color:#dedede;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}.search-input:disabled{background-color:#c5c4c4;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background-color:#494a3d;}:target{border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;} \ No newline at end of file +body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) #5a5a5a;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#565656;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-mod:focus{background-color:#803a1b;}a.result-externcrate:focus{background-color:#396bac;}a.result-enum:focus{background-color:#5b4e68;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#38902c;}a.result-foreigntype:focus{background-color:#b200d6;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#0063cc;}a.result-primitive:focus{background-color:#00708a;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b397da;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#D2991D;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#ddd;}.search-results a{color:#ddd;}a.test-arrow{color:#dedede;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background-color:#494a3d;}:target{border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(53,53,53,1),rgba(53,53,53,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(53,53,53,1),rgba(53,53,53,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:##898989;} \ 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 fc88bc958d..ac41cfd89a 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Clone for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Clone for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Clone for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Clone for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Clone for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Clone for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl Clone for NoopProgress","synthetic":false,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Clone for LogProgress","synthetic":false,"types":["bdk::blockchain::LogProgress"]},{"text":"impl<'s> Clone for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Clone for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Clone for SatisfiableItem","synthetic":false,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Clone for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Clone for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Clone for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl<'a> Clone for BuildSatisfaction<'a>","synthetic":false,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl Clone for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl Clone for PrivateKeyGenerateOptions","synthetic":false,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Clone for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Clone for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl Clone for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Clone for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Clone for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl Clone for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Clone for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Clone for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Clone for LargestFirstCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Clone for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Clone for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Clone for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Clone for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Clone for SignOptions","synthetic":false,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Clone for CreateTx","synthetic":false,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Clone for BumpFee","synthetic":false,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, Cs: Clone, Ctx, B, D> Clone for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":false,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Clone for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Clone for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; +implementors["bdk"] = [{"text":"impl Clone for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Clone for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Clone for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl Clone for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Clone for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Clone for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl Clone for NoopProgress","synthetic":false,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Clone for LogProgress","synthetic":false,"types":["bdk::blockchain::LogProgress"]},{"text":"impl Clone for SyncTime","synthetic":false,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> Clone for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Clone for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Clone for SatisfiableItem","synthetic":false,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Clone for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Clone for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Clone for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl<'a> Clone for BuildSatisfaction<'a>","synthetic":false,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl Clone for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl Clone for PrivateKeyGenerateOptions","synthetic":false,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Clone for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Clone for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl Clone for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Clone for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Clone for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl Clone for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Clone for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl Clone for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Clone for LargestFirstCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Clone for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Clone for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Clone for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Clone for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Clone for SignOptions","synthetic":false,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Clone for CreateTx","synthetic":false,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Clone for BumpFee","synthetic":false,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, Cs: Clone, Ctx, B, D> Clone for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":false,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Clone for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Clone for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; 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.Eq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/cmp/trait.Eq.js index f7925a3bf8..e71bd0b280 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Eq for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl<'s> Eq for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Eq for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Eq for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl Eq for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl Eq for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Eq for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Eq for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Eq for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Eq for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Eq for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Eq for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Eq for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Eq for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Eq for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; +implementors["bdk"] = [{"text":"impl Eq for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl<'s> Eq for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Eq for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Eq for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl Eq for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl Eq for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Eq for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Eq for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Eq for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl Eq for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Eq for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Eq for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Eq for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Eq for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Eq for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; 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 d505fe207f..653d499bd3 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl PartialEq<AnyBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl PartialEq<ElectrumBlockchainConfig> for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl PartialEq<EsploraBlockchainConfig> for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl PartialEq<BitcoinPeerConfig> for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl PartialEq<CompactFiltersBlockchainConfig> for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl PartialEq<Capability> for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl<'s> PartialEq<DerivedDescriptorKey<'s>> for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl PartialEq<Condition> for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl PartialEq<PolicyError> for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl PartialEq<ScriptContextEnum> for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl PartialEq<KeychainKind> for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl PartialEq<FeeRate> for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl PartialEq<LocalUtxo> for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl PartialEq<WeightedUtxo> for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl PartialEq<Utxo> for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl PartialEq<TransactionDetails> for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl PartialEq<ConfirmationTime> for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl PartialEq<AddressValidatorError> for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl PartialEq<SignerId> for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl PartialEq<SignerError> for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl PartialEq<SignerOrdering> for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl PartialEq<TxOrdering> for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl PartialEq<ChangeSpendPolicy> for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl PartialEq<AddressInfo> for AddressInfo","synthetic":false,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl PartialEq<AnyBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl PartialEq<ElectrumBlockchainConfig> for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl PartialEq<EsploraBlockchainConfig> for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl PartialEq<BitcoinPeerConfig> for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl PartialEq<CompactFiltersBlockchainConfig> for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl PartialEq<Capability> for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl<'s> PartialEq<DerivedDescriptorKey<'s>> for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl PartialEq<Condition> for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl PartialEq<PolicyError> for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl PartialEq<ScriptContextEnum> for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl PartialEq<KeychainKind> for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl PartialEq<FeeRate> for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl PartialEq<LocalUtxo> for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl PartialEq<WeightedUtxo> for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl PartialEq<Utxo> for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl PartialEq<TransactionDetails> for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl PartialEq<BlockTime> for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl PartialEq<AddressValidatorError> for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl PartialEq<SignerId> for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl PartialEq<SignerError> for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl PartialEq<SignerOrdering> for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl PartialEq<TxOrdering> for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl PartialEq<ChangeSpendPolicy> for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl PartialEq<AddressInfo> for AddressInfo","synthetic":false,"types":["bdk::wallet::AddressInfo"]}]; 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.From.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js index ee9e5bfa5c..ee58911780 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<AddressValidatorError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<PolicyError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<SignerError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<KeyError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<PsbtParseError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<CompactFiltersError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<EsploraError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<ElectrumBlockchain> for AnyBlockchain","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl From<EsploraBlockchain> for AnyBlockchain","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl From<CompactFiltersBlockchain> for AnyBlockchain","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl From<ElectrumBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl From<EsploraBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl From<CompactFiltersBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl From<Client> for ElectrumBlockchain","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Transport> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<ParseIntError> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<SystemTimeError> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<MemoryDatabase> for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl From<Tree> for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl From<SqliteDatabase> for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl From<<MemoryDatabase as BatchDatabase>::Batch> for AnyBatch","synthetic":false,"types":["bdk::database::any::AnyBatch"]},{"text":"impl From<<Tree as BatchDatabase>::Batch> for AnyBatch","synthetic":false,"types":["bdk::database::any::AnyBatch"]},{"text":"impl From<<SqliteDatabase as BatchDatabase>::Batch> for AnyBatch","synthetic":false,"types":["bdk::database::any::AnyBatch"]},{"text":"impl From<()> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl From<SledDbConfiguration> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl From<SqliteDbConfiguration> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl From<KeyError> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<PolicyError> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<bool> for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl From<SatisfiableItem> for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl<Ctx: ScriptContext> From<ExtendedPubKey> for ExtendedKey<Ctx>","synthetic":false,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<Ctx: ScriptContext> From<ExtendedPrivKey> for ExtendedKey<Ctx>","synthetic":false,"types":["bdk::keys::ExtendedKey"]},{"text":"impl From<Error> for KeyError","synthetic":false,"types":["bdk::keys::KeyError"]},{"text":"impl From<Error> for KeyError","synthetic":false,"types":["bdk::keys::KeyError"]},{"text":"impl From<Hash> for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl From<Fingerprint> for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl From<HashMap<DescriptorPublicKey, DescriptorSecretKey, RandomState>> for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]}]; +implementors["bdk"] = [{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<AddressValidatorError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<PolicyError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<SignerError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<KeyError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<PsbtParseError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<CompactFiltersError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<EsploraError> for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl From<ElectrumBlockchain> for AnyBlockchain","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl From<EsploraBlockchain> for AnyBlockchain","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl From<CompactFiltersBlockchain> for AnyBlockchain","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl From<ElectrumBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl From<EsploraBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl From<CompactFiltersBlockchainConfig> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl From<Client> for ElectrumBlockchain","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Transport> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<ParseIntError> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<SystemTimeError> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<Error> for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl From<MemoryDatabase> for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl From<Tree> for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl From<SqliteDatabase> for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl From<<MemoryDatabase as BatchDatabase>::Batch> for AnyBatch","synthetic":false,"types":["bdk::database::any::AnyBatch"]},{"text":"impl From<<Tree as BatchDatabase>::Batch> for AnyBatch","synthetic":false,"types":["bdk::database::any::AnyBatch"]},{"text":"impl From<<SqliteDatabase as BatchDatabase>::Batch> for AnyBatch","synthetic":false,"types":["bdk::database::any::AnyBatch"]},{"text":"impl From<()> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl From<SledDbConfiguration> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl From<SqliteDbConfiguration> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl From<KeyError> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<PolicyError> for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl From<bool> for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl From<SatisfiableItem> for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl<Ctx: ScriptContext> From<ExtendedPubKey> for ExtendedKey<Ctx>","synthetic":false,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<Ctx: ScriptContext> From<ExtendedPrivKey> for ExtendedKey<Ctx>","synthetic":false,"types":["bdk::keys::ExtendedKey"]},{"text":"impl From<Error> for KeyError","synthetic":false,"types":["bdk::keys::KeyError"]},{"text":"impl From<Error> for KeyError","synthetic":false,"types":["bdk::keys::KeyError"]},{"text":"impl From<Hash> for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl From<Fingerprint> for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl From<HashMap<DescriptorPublicKey, DescriptorSecretKey, RandomState>> for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]}]; 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 f8973ba8b2..6c7914178f 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Default for Mempool","synthetic":false,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Default for MemoryDatabase","synthetic":false,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Default for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Default for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Default for PrivateKeyGenerateOptions","synthetic":false,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Default for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl Default for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Default for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Default for LargestFirstCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Default for BranchAndBoundCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Default for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Default for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Default for SignOptions","synthetic":false,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Default for CreateTx","synthetic":false,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Default for BumpFee","synthetic":false,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl Default for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Default for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; +implementors["bdk"] = [{"text":"impl Default for Mempool","synthetic":false,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Default for MemoryDatabase","synthetic":false,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Default for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Default for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Default for PrivateKeyGenerateOptions","synthetic":false,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Default for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl Default for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Default for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl Default for LargestFirstCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Default for BranchAndBoundCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Default for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Default for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Default for SignOptions","synthetic":false,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Default for CreateTx","synthetic":false,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Default for BumpFee","synthetic":false,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl Default for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Default for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; 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/fmt/trait.Debug.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/fmt/trait.Debug.js index f8b8e915aa..d3b7ea02df 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Debug for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl Debug for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Debug for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Debug for EsploraBlockchain","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Debug for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Debug for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Debug for Mempool","synthetic":false,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Debug for Peer","synthetic":false,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Debug for CompactFiltersBlockchain","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Debug for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Debug for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Debug for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Debug for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl Debug for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl Debug for SledDbConfiguration","synthetic":false,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Debug for SqliteDbConfiguration","synthetic":false,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Debug for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Debug for SqliteDatabase","synthetic":false,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Debug for MemoryDatabase","synthetic":false,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> Debug for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Debug for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl Debug for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Debug for SatisfiableItem","synthetic":false,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Debug for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Debug for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Debug for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Debug for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Debug for BuildSatisfaction<'a>","synthetic":false,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<Ctx: Debug + ScriptContext> Debug for DescriptorKey<Ctx>","synthetic":false,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Debug for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl Debug for PrivateKeyGenerateOptions","synthetic":false,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Debug for KeyError","synthetic":false,"types":["bdk::keys::KeyError"]},{"text":"impl Debug for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Debug for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl Debug for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Debug for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Debug for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl Debug for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Debug for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Debug for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Debug for CoinSelectionResult","synthetic":false,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Debug for LargestFirstCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Debug for BranchAndBoundCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Debug for WalletExport","synthetic":false,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Debug for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Debug for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Debug for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Debug for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Debug for SignOptions","synthetic":false,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Debug for CreateTx","synthetic":false,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Debug for BumpFee","synthetic":false,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B: Debug, D: Debug, Cs: Debug, Ctx: Debug> Debug for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":false,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Debug for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Debug for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B: Debug, D: Debug> Debug for Wallet<B, D>","synthetic":false,"types":["bdk::wallet::Wallet"]},{"text":"impl Debug for AddressIndex","synthetic":false,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Debug for AddressInfo","synthetic":false,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl Debug for Error","synthetic":false,"types":["bdk::error::Error"]},{"text":"impl Debug for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Debug for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Debug for EsploraBlockchain","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Debug for EsploraError","synthetic":false,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Debug for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl Debug for Mempool","synthetic":false,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Debug for Peer","synthetic":false,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Debug for CompactFiltersBlockchain","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Debug for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Debug for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Debug for CompactFiltersError","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Debug for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl Debug for AnyDatabase","synthetic":false,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl Debug for SledDbConfiguration","synthetic":false,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Debug for SqliteDbConfiguration","synthetic":false,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Debug for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Debug for SqliteDatabase","synthetic":false,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Debug for MemoryDatabase","synthetic":false,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Debug for SyncTime","synthetic":false,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> Debug for DerivedDescriptorKey<'s>","synthetic":false,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Debug for Error","synthetic":false,"types":["bdk::descriptor::error::Error"]},{"text":"impl Debug for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Debug for SatisfiableItem","synthetic":false,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Debug for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Debug for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Debug for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Debug for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Debug for BuildSatisfaction<'a>","synthetic":false,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<Ctx: Debug + ScriptContext> Debug for DescriptorKey<Ctx>","synthetic":false,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Debug for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl Debug for PrivateKeyGenerateOptions","synthetic":false,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Debug for KeyError","synthetic":false,"types":["bdk::keys::KeyError"]},{"text":"impl Debug for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Debug for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl Debug for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Debug for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Debug for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl Debug for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Debug for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl Debug for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Debug for CoinSelectionResult","synthetic":false,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Debug for LargestFirstCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Debug for BranchAndBoundCoinSelection","synthetic":false,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Debug for WalletExport","synthetic":false,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Debug for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Debug for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Debug for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Debug for SignersContainer","synthetic":false,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Debug for SignOptions","synthetic":false,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Debug for CreateTx","synthetic":false,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Debug for BumpFee","synthetic":false,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B: Debug, D: Debug, Cs: Debug, Ctx: Debug> Debug for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":false,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Debug for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Debug for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B: Debug, D: Debug> Debug for Wallet<B, D>","synthetic":false,"types":["bdk::wallet::Wallet"]},{"text":"impl Debug for AddressIndex","synthetic":false,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Debug for AddressInfo","synthetic":false,"types":["bdk::wallet::AddressInfo"]}]; 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 469a139430..6d4d4cfb98 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Freeze for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl !Freeze for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Freeze for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl !Freeze for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Freeze for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Freeze for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Freeze for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Freeze for EsploraGetHistory","synthetic":true,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl Freeze for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl !Freeze for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Freeze for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Freeze for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Freeze for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Freeze for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Freeze for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Freeze for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Freeze for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Freeze for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !Freeze for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !Freeze for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Freeze for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Freeze for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Freeze for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !Freeze for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Freeze for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> Freeze for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Freeze for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Freeze for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Freeze for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Freeze for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Freeze for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Freeze for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Freeze for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Freeze for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Freeze for P2Pkh<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Freeze for P2Wpkh_P2Sh<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Freeze for P2Wpkh<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Freeze for Bip44<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Freeze for Bip44Public<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Freeze for Bip49<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Freeze for Bip49Public<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Freeze for Bip84<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Freeze for Bip84Public<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl<Ctx> Freeze for DescriptorKey<Ctx>","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Freeze for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Freeze for ExtendedKey<Ctx>","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Freeze for GeneratedKey<K, Ctx> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Freeze for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Freeze for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Freeze for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Freeze for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Freeze for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Freeze for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Freeze for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Freeze for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Freeze for ConfirmationTime","synthetic":true,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Freeze for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Freeze for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Freeze for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Freeze for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Freeze for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Freeze for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Freeze for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Freeze for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Freeze for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Freeze for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Freeze for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Freeze for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> Freeze for TxBuilder<'a, B, D, Cs, Ctx> where
        Cs: Freeze, 
    ","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Freeze for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Freeze for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !Freeze for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Freeze for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Freeze for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl Freeze for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl !Freeze for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Freeze for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl !Freeze for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Freeze for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Freeze for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Freeze for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Freeze for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl !Freeze for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Freeze for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Freeze for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Freeze for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Freeze for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Freeze for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Freeze for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Freeze for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Freeze for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !Freeze for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !Freeze for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Freeze for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Freeze for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Freeze for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !Freeze for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Freeze for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Freeze for SyncTime","synthetic":true,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> Freeze for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Freeze for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Freeze for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Freeze for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Freeze for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Freeze for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Freeze for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Freeze for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Freeze for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Freeze for P2Pkh<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Freeze for P2Wpkh_P2Sh<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Freeze for P2Wpkh<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Freeze for Bip44<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Freeze for Bip44Public<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Freeze for Bip49<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Freeze for Bip49Public<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Freeze for Bip84<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Freeze for Bip84Public<K> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl Freeze for WordCount","synthetic":true,"types":["bdk::keys::bip39::WordCount"]},{"text":"impl<Ctx> Freeze for DescriptorKey<Ctx>","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Freeze for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Freeze for ExtendedKey<Ctx>","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Freeze for GeneratedKey<K, Ctx> where
        K: Freeze, 
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Freeze for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Freeze for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Freeze for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Freeze for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Freeze for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Freeze for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Freeze for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Freeze for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Freeze for BlockTime","synthetic":true,"types":["bdk::types::BlockTime"]},{"text":"impl Freeze for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Freeze for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Freeze for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Freeze for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Freeze for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Freeze for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Freeze for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Freeze for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Freeze for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Freeze for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Freeze for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Freeze for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> Freeze for TxBuilder<'a, B, D, Cs, Ctx> where
        Cs: Freeze, 
    ","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Freeze for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Freeze for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !Freeze for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Freeze for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Freeze for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; 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.Send.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js index 8af424700c..e4d80a88fb 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Send for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl Send for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Send for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Send for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Send for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Send for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Send for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Send for EsploraGetHistory","synthetic":true,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl Send for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Send for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Send for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Send for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Send for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Send for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Send for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Send for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Send for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Send for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !Send for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !Send for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Send for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Send for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Send for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Send for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl !Send for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> Send for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Send for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Send for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Send for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Send for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Send for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Send for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Send for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Send for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Send for P2Pkh<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Send for P2Wpkh_P2Sh<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Send for P2Wpkh<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Send for Bip44<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Send for Bip44Public<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Send for Bip49<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Send for Bip49Public<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Send for Bip84<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Send for Bip84Public<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl<Ctx> Send for DescriptorKey<Ctx> where
        Ctx: Send
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Send for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Send for ExtendedKey<Ctx> where
        Ctx: Send
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Send for GeneratedKey<K, Ctx> where
        Ctx: Send,
        K: Send
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Send for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Send for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Send for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Send for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Send for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Send for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Send for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Send for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Send for ConfirmationTime","synthetic":true,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Send for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Send for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Send for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Send for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Send for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Send for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Send for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Send for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Send for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Send for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Send for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Send for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !Send for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Send for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Send for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> Send for Wallet<B, D> where
        B: Send,
        D: Send
    ","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Send for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Send for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl Send for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl Send for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Send for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Send for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Send for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Send for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Send for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Send for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl Send for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Send for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Send for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Send for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Send for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Send for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Send for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Send for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Send for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl Send for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl Send for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Send for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Send for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Send for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Send for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Send for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Send for SyncTime","synthetic":true,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> Send for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Send for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Send for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Send for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Send for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Send for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Send for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Send for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Send for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Send for P2Pkh<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Send for P2Wpkh_P2Sh<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Send for P2Wpkh<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Send for Bip44<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Send for Bip44Public<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Send for Bip49<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Send for Bip49Public<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Send for Bip84<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Send for Bip84Public<K> where
        K: Send
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl Send for WordCount","synthetic":true,"types":["bdk::keys::bip39::WordCount"]},{"text":"impl<Ctx> Send for DescriptorKey<Ctx> where
        Ctx: Send
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Send for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Send for ExtendedKey<Ctx> where
        Ctx: Send
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Send for GeneratedKey<K, Ctx> where
        Ctx: Send,
        K: Send
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Send for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Send for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Send for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Send for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Send for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Send for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Send for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Send for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Send for BlockTime","synthetic":true,"types":["bdk::types::BlockTime"]},{"text":"impl Send for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Send for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Send for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Send for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Send for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Send for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Send for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Send for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Send for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Send for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Send for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Send for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !Send for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Send for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Send for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> Send for Wallet<B, D> where
        B: Send,
        D: Send
    ","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Send for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Send for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; 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.StructuralEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.StructuralEq.js index f0a5dbaf05..4d6d4c9098 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl StructuralEq for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl StructuralEq for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl StructuralEq for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl StructuralEq for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl StructuralEq for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl StructuralEq for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl StructuralEq for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl StructuralEq for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl StructuralEq for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl StructuralEq for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl StructuralEq for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl StructuralEq for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl StructuralEq for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl StructuralEq for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; +implementors["bdk"] = [{"text":"impl StructuralEq for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl StructuralEq for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl StructuralEq for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl StructuralEq for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl StructuralEq for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl StructuralEq for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl StructuralEq for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl StructuralEq for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl StructuralEq for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl StructuralEq for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl StructuralEq for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl StructuralEq for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl StructuralEq for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl StructuralEq for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]}]; 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 faa39c8c1e..1054145a0f 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl StructuralPartialEq for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl StructuralPartialEq for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl StructuralPartialEq for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl StructuralPartialEq for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl StructuralPartialEq for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl StructuralPartialEq for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl StructuralPartialEq for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl StructuralPartialEq for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl StructuralPartialEq for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl StructuralPartialEq for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl StructuralPartialEq for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl StructuralPartialEq for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl StructuralPartialEq for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl StructuralPartialEq for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl StructuralPartialEq for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl StructuralPartialEq for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl StructuralPartialEq for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl StructuralPartialEq for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl StructuralPartialEq for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl StructuralPartialEq for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl StructuralPartialEq for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl StructuralPartialEq for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl StructuralPartialEq for AddressInfo","synthetic":false,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl StructuralPartialEq for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl StructuralPartialEq for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl StructuralPartialEq for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl StructuralPartialEq for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl StructuralPartialEq for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl StructuralPartialEq for Capability","synthetic":false,"types":["bdk::blockchain::Capability"]},{"text":"impl StructuralPartialEq for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl StructuralPartialEq for PolicyError","synthetic":false,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl StructuralPartialEq for ScriptContextEnum","synthetic":false,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl StructuralPartialEq for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl StructuralPartialEq for FeeRate","synthetic":false,"types":["bdk::types::FeeRate"]},{"text":"impl StructuralPartialEq for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl StructuralPartialEq for WeightedUtxo","synthetic":false,"types":["bdk::types::WeightedUtxo"]},{"text":"impl StructuralPartialEq for Utxo","synthetic":false,"types":["bdk::types::Utxo"]},{"text":"impl StructuralPartialEq for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl StructuralPartialEq for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl StructuralPartialEq for AddressValidatorError","synthetic":false,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl StructuralPartialEq for SignerId","synthetic":false,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl StructuralPartialEq for SignerError","synthetic":false,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl StructuralPartialEq for SignerOrdering","synthetic":false,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl StructuralPartialEq for TxOrdering","synthetic":false,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl StructuralPartialEq for ChangeSpendPolicy","synthetic":false,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl StructuralPartialEq for AddressInfo","synthetic":false,"types":["bdk::wallet::AddressInfo"]}]; 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.Sync.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js index 2d66194d8d..9826f90a6e 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Sync for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl Sync for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Sync for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Sync for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Sync for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Sync for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Sync for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Sync for EsploraGetHistory","synthetic":true,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl Sync for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Sync for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Sync for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Sync for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Sync for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Sync for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Sync for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Sync for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Sync for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Sync for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !Sync for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !Sync for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Sync for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Sync for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Sync for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !Sync for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl !Sync for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> Sync for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Sync for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Sync for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Sync for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Sync for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Sync for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Sync for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Sync for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Sync for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Sync for P2Pkh<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Sync for P2Wpkh_P2Sh<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Sync for P2Wpkh<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Sync for Bip44<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Sync for Bip44Public<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Sync for Bip49<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Sync for Bip49Public<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Sync for Bip84<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Sync for Bip84Public<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl<Ctx> Sync for DescriptorKey<Ctx> where
        Ctx: Sync
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Sync for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Sync for ExtendedKey<Ctx> where
        Ctx: Sync
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Sync for GeneratedKey<K, Ctx> where
        Ctx: Sync,
        K: Sync
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Sync for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Sync for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Sync for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Sync for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Sync for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Sync for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Sync for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Sync for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Sync for ConfirmationTime","synthetic":true,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Sync for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Sync for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Sync for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Sync for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Sync for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Sync for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Sync for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Sync for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Sync for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Sync for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Sync for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Sync for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !Sync for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Sync for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Sync for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !Sync for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Sync for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Sync for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl Sync for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl Sync for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Sync for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Sync for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Sync for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Sync for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Sync for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Sync for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl Sync for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Sync for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Sync for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Sync for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Sync for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Sync for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Sync for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Sync for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Sync for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !Sync for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !Sync for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Sync for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Sync for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Sync for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !Sync for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Sync for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Sync for SyncTime","synthetic":true,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> Sync for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Sync for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Sync for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Sync for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Sync for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Sync for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Sync for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Sync for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Sync for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Sync for P2Pkh<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Sync for P2Wpkh_P2Sh<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Sync for P2Wpkh<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Sync for Bip44<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Sync for Bip44Public<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Sync for Bip49<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Sync for Bip49Public<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Sync for Bip84<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Sync for Bip84Public<K> where
        K: Sync
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl Sync for WordCount","synthetic":true,"types":["bdk::keys::bip39::WordCount"]},{"text":"impl<Ctx> Sync for DescriptorKey<Ctx> where
        Ctx: Sync
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Sync for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Sync for ExtendedKey<Ctx> where
        Ctx: Sync
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Sync for GeneratedKey<K, Ctx> where
        Ctx: Sync,
        K: Sync
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Sync for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Sync for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Sync for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Sync for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Sync for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Sync for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Sync for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Sync for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Sync for BlockTime","synthetic":true,"types":["bdk::types::BlockTime"]},{"text":"impl Sync for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Sync for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Sync for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Sync for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Sync for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Sync for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Sync for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Sync for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Sync for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Sync for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Sync for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Sync for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !Sync for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Sync for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Sync for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !Sync for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Sync for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Sync for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; 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.Unpin.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js index 834a73d904..5ff37cf49d 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Unpin for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl Unpin for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Unpin for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Unpin for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Unpin for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Unpin for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Unpin for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Unpin for EsploraGetHistory","synthetic":true,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl Unpin for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Unpin for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Unpin for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Unpin for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Unpin for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Unpin for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Unpin for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Unpin for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Unpin for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Unpin for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl Unpin for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl Unpin for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Unpin for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Unpin for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Unpin for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Unpin for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Unpin for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> Unpin for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Unpin for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Unpin for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Unpin for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Unpin for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Unpin for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Unpin for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Unpin for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Unpin for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Unpin for P2Pkh<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Unpin for P2Wpkh_P2Sh<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Unpin for P2Wpkh<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Unpin for Bip44<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Unpin for Bip44Public<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Unpin for Bip49<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Unpin for Bip49Public<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Unpin for Bip84<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Unpin for Bip84Public<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl<Ctx> Unpin for DescriptorKey<Ctx> where
        Ctx: Unpin
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Unpin for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Unpin for ExtendedKey<Ctx> where
        Ctx: Unpin
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Unpin for GeneratedKey<K, Ctx> where
        Ctx: Unpin,
        K: Unpin
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Unpin for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Unpin for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Unpin for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Unpin for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Unpin for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Unpin for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Unpin for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Unpin for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Unpin for ConfirmationTime","synthetic":true,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Unpin for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Unpin for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Unpin for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Unpin for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Unpin for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Unpin for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Unpin for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Unpin for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Unpin for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Unpin for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Unpin for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Unpin for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> Unpin for TxBuilder<'a, B, D, Cs, Ctx> where
        Cs: Unpin,
        Ctx: Unpin
    ","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Unpin for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Unpin for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> Unpin for Wallet<B, D> where
        B: Unpin,
        D: Unpin
    ","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Unpin for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Unpin for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl Unpin for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl Unpin for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl Unpin for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Unpin for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl Unpin for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Unpin for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl Unpin for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl Unpin for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl Unpin for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl Unpin for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl Unpin for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl Unpin for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Unpin for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Unpin for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl Unpin for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl Unpin for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl Unpin for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl Unpin for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl Unpin for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl Unpin for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Unpin for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Unpin for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Unpin for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl Unpin for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl Unpin for SyncTime","synthetic":true,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> Unpin for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl Unpin for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl Unpin for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Unpin for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Unpin for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Unpin for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Unpin for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Unpin for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> Unpin for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> Unpin for P2Pkh<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> Unpin for P2Wpkh_P2Sh<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> Unpin for P2Wpkh<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> Unpin for Bip44<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> Unpin for Bip44Public<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> Unpin for Bip49<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> Unpin for Bip49Public<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> Unpin for Bip84<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> Unpin for Bip84Public<K> where
        K: Unpin
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl Unpin for WordCount","synthetic":true,"types":["bdk::keys::bip39::WordCount"]},{"text":"impl<Ctx> Unpin for DescriptorKey<Ctx> where
        Ctx: Unpin
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl Unpin for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> Unpin for ExtendedKey<Ctx> where
        Ctx: Unpin
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> Unpin for GeneratedKey<K, Ctx> where
        Ctx: Unpin,
        K: Unpin
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl Unpin for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl Unpin for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl Unpin for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl Unpin for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl Unpin for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl Unpin for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl Unpin for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl Unpin for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl Unpin for BlockTime","synthetic":true,"types":["bdk::types::BlockTime"]},{"text":"impl Unpin for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl Unpin for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl Unpin for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl Unpin for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl Unpin for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl Unpin for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl Unpin for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl Unpin for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl Unpin for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl Unpin for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl Unpin for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl Unpin for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> Unpin for TxBuilder<'a, B, D, Cs, Ctx> where
        Cs: Unpin,
        Ctx: Unpin
    ","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl Unpin for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl Unpin for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> Unpin for Wallet<B, D> where
        B: Unpin,
        D: Unpin
    ","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl Unpin for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl Unpin for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; 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/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 43f5c13951..aba091cb3e 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl !RefUnwindSafe for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl !RefUnwindSafe for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl RefUnwindSafe for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl RefUnwindSafe for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl RefUnwindSafe for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl !RefUnwindSafe for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl RefUnwindSafe for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl RefUnwindSafe for EsploraGetHistory","synthetic":true,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl !RefUnwindSafe for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl RefUnwindSafe for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl !RefUnwindSafe for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl !RefUnwindSafe for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl RefUnwindSafe for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl RefUnwindSafe for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl !RefUnwindSafe for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl RefUnwindSafe for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl RefUnwindSafe for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl RefUnwindSafe for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !RefUnwindSafe for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !RefUnwindSafe for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl RefUnwindSafe for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl RefUnwindSafe for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl RefUnwindSafe for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !RefUnwindSafe for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl !RefUnwindSafe for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> RefUnwindSafe for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl RefUnwindSafe for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl RefUnwindSafe for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl RefUnwindSafe for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl RefUnwindSafe for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl RefUnwindSafe for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl RefUnwindSafe for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl RefUnwindSafe for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> RefUnwindSafe for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> RefUnwindSafe for P2Pkh<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> RefUnwindSafe for P2Wpkh_P2Sh<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> RefUnwindSafe for P2Wpkh<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> RefUnwindSafe for Bip44<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> RefUnwindSafe for Bip44Public<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> RefUnwindSafe for Bip49<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> RefUnwindSafe for Bip49Public<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> RefUnwindSafe for Bip84<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> RefUnwindSafe for Bip84Public<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl<Ctx> RefUnwindSafe for DescriptorKey<Ctx> where
        Ctx: RefUnwindSafe
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl RefUnwindSafe for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx> where
        Ctx: RefUnwindSafe
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> RefUnwindSafe for GeneratedKey<K, Ctx> where
        Ctx: RefUnwindSafe,
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl RefUnwindSafe for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl RefUnwindSafe for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl RefUnwindSafe for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl RefUnwindSafe for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl RefUnwindSafe for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl RefUnwindSafe for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl RefUnwindSafe for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl RefUnwindSafe for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl RefUnwindSafe for ConfirmationTime","synthetic":true,"types":["bdk::types::ConfirmationTime"]},{"text":"impl RefUnwindSafe for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl RefUnwindSafe for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl RefUnwindSafe for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl RefUnwindSafe for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl RefUnwindSafe for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl RefUnwindSafe for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl RefUnwindSafe for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl RefUnwindSafe for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl !RefUnwindSafe for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl RefUnwindSafe for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl RefUnwindSafe for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl RefUnwindSafe for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !RefUnwindSafe for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl RefUnwindSafe for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl RefUnwindSafe for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !RefUnwindSafe for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl RefUnwindSafe for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl RefUnwindSafe for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl !RefUnwindSafe for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl !RefUnwindSafe for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl RefUnwindSafe for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl RefUnwindSafe for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl RefUnwindSafe for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl !RefUnwindSafe for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl !RefUnwindSafe for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl RefUnwindSafe for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl RefUnwindSafe for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl !RefUnwindSafe for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl !RefUnwindSafe for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl RefUnwindSafe for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl RefUnwindSafe for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl !RefUnwindSafe for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl RefUnwindSafe for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl RefUnwindSafe for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl RefUnwindSafe for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !RefUnwindSafe for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !RefUnwindSafe for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl RefUnwindSafe for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl RefUnwindSafe for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl RefUnwindSafe for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !RefUnwindSafe for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl !RefUnwindSafe for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl RefUnwindSafe for SyncTime","synthetic":true,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> RefUnwindSafe for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl RefUnwindSafe for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl RefUnwindSafe for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl RefUnwindSafe for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl RefUnwindSafe for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl RefUnwindSafe for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl RefUnwindSafe for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl RefUnwindSafe for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> RefUnwindSafe for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> RefUnwindSafe for P2Pkh<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> RefUnwindSafe for P2Wpkh_P2Sh<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> RefUnwindSafe for P2Wpkh<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> RefUnwindSafe for Bip44<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> RefUnwindSafe for Bip44Public<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> RefUnwindSafe for Bip49<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> RefUnwindSafe for Bip49Public<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> RefUnwindSafe for Bip84<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> RefUnwindSafe for Bip84Public<K> where
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl RefUnwindSafe for WordCount","synthetic":true,"types":["bdk::keys::bip39::WordCount"]},{"text":"impl<Ctx> RefUnwindSafe for DescriptorKey<Ctx> where
        Ctx: RefUnwindSafe
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl RefUnwindSafe for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx> where
        Ctx: RefUnwindSafe
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> RefUnwindSafe for GeneratedKey<K, Ctx> where
        Ctx: RefUnwindSafe,
        K: RefUnwindSafe
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl RefUnwindSafe for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl RefUnwindSafe for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl RefUnwindSafe for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl RefUnwindSafe for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl RefUnwindSafe for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl RefUnwindSafe for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl RefUnwindSafe for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl RefUnwindSafe for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl RefUnwindSafe for BlockTime","synthetic":true,"types":["bdk::types::BlockTime"]},{"text":"impl RefUnwindSafe for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl RefUnwindSafe for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl RefUnwindSafe for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl RefUnwindSafe for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl RefUnwindSafe for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl RefUnwindSafe for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl RefUnwindSafe for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl RefUnwindSafe for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl !RefUnwindSafe for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl RefUnwindSafe for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl RefUnwindSafe for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl RefUnwindSafe for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !RefUnwindSafe for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl RefUnwindSafe for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl RefUnwindSafe for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !RefUnwindSafe for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl RefUnwindSafe for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl RefUnwindSafe for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; 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/panic/unwind_safe/trait.UnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 8eff90f98d..d4f28bacf6 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,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl !UnwindSafe for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl !UnwindSafe for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl UnwindSafe for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl UnwindSafe for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl UnwindSafe for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl !UnwindSafe for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl UnwindSafe for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl UnwindSafe for EsploraGetHistory","synthetic":true,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl !UnwindSafe for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl UnwindSafe for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl !UnwindSafe for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl !UnwindSafe for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl UnwindSafe for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl UnwindSafe for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl !UnwindSafe for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl UnwindSafe for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl UnwindSafe for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl UnwindSafe for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !UnwindSafe for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !UnwindSafe for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl UnwindSafe for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl UnwindSafe for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl UnwindSafe for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !UnwindSafe for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl !UnwindSafe for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl<'s> UnwindSafe for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl UnwindSafe for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl UnwindSafe for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl UnwindSafe for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl UnwindSafe for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl UnwindSafe for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl UnwindSafe for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl UnwindSafe for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> UnwindSafe for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> UnwindSafe for P2Pkh<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> UnwindSafe for P2Wpkh_P2Sh<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> UnwindSafe for P2Wpkh<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> UnwindSafe for Bip44<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> UnwindSafe for Bip44Public<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> UnwindSafe for Bip49<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> UnwindSafe for Bip49Public<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> UnwindSafe for Bip84<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> UnwindSafe for Bip84Public<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl<Ctx> UnwindSafe for DescriptorKey<Ctx> where
        Ctx: UnwindSafe
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl UnwindSafe for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> UnwindSafe for ExtendedKey<Ctx> where
        Ctx: UnwindSafe
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> UnwindSafe for GeneratedKey<K, Ctx> where
        Ctx: UnwindSafe,
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl UnwindSafe for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl UnwindSafe for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl UnwindSafe for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl UnwindSafe for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl UnwindSafe for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl UnwindSafe for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl UnwindSafe for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl UnwindSafe for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl UnwindSafe for ConfirmationTime","synthetic":true,"types":["bdk::types::ConfirmationTime"]},{"text":"impl UnwindSafe for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl UnwindSafe for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl UnwindSafe for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl UnwindSafe for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl UnwindSafe for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl UnwindSafe for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl UnwindSafe for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl UnwindSafe for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl !UnwindSafe for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl UnwindSafe for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl UnwindSafe for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl UnwindSafe for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !UnwindSafe for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl UnwindSafe for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl UnwindSafe for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !UnwindSafe for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl UnwindSafe for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl UnwindSafe for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; +implementors["bdk"] = [{"text":"impl !UnwindSafe for Error","synthetic":true,"types":["bdk::error::Error"]},{"text":"impl !UnwindSafe for AnyBlockchain","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchain"]},{"text":"impl UnwindSafe for AnyBlockchainConfig","synthetic":true,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl UnwindSafe for ElectrumBlockchain","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchain"]},{"text":"impl UnwindSafe for ElectrumBlockchainConfig","synthetic":true,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl !UnwindSafe for EsploraBlockchain","synthetic":true,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchain"]},{"text":"impl !UnwindSafe for EsploraError","synthetic":true,"types":["bdk::blockchain::esplora::EsploraError"]},{"text":"impl UnwindSafe for EsploraBlockchainConfig","synthetic":true,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl UnwindSafe for Mempool","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Mempool"]},{"text":"impl !UnwindSafe for Peer","synthetic":true,"types":["bdk::blockchain::compact_filters::peer::Peer"]},{"text":"impl !UnwindSafe for CompactFiltersBlockchain","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchain"]},{"text":"impl UnwindSafe for BitcoinPeerConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl UnwindSafe for CompactFiltersBlockchainConfig","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl !UnwindSafe for CompactFiltersError","synthetic":true,"types":["bdk::blockchain::compact_filters::CompactFiltersError"]},{"text":"impl UnwindSafe for Capability","synthetic":true,"types":["bdk::blockchain::Capability"]},{"text":"impl UnwindSafe for NoopProgress","synthetic":true,"types":["bdk::blockchain::NoopProgress"]},{"text":"impl UnwindSafe for LogProgress","synthetic":true,"types":["bdk::blockchain::LogProgress"]},{"text":"impl !UnwindSafe for AnyDatabase","synthetic":true,"types":["bdk::database::any::AnyDatabase"]},{"text":"impl !UnwindSafe for AnyBatch","synthetic":true,"types":["bdk::database::any::AnyBatch"]},{"text":"impl UnwindSafe for SledDbConfiguration","synthetic":true,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl UnwindSafe for SqliteDbConfiguration","synthetic":true,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl UnwindSafe for AnyDatabaseConfig","synthetic":true,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl !UnwindSafe for SqliteDatabase","synthetic":true,"types":["bdk::database::sqlite::SqliteDatabase"]},{"text":"impl !UnwindSafe for MemoryDatabase","synthetic":true,"types":["bdk::database::memory::MemoryDatabase"]},{"text":"impl UnwindSafe for SyncTime","synthetic":true,"types":["bdk::database::SyncTime"]},{"text":"impl<'s> UnwindSafe for DerivedDescriptorKey<'s>","synthetic":true,"types":["bdk::descriptor::derived::DerivedDescriptorKey"]},{"text":"impl UnwindSafe for Error","synthetic":true,"types":["bdk::descriptor::error::Error"]},{"text":"impl UnwindSafe for PkOrF","synthetic":true,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl UnwindSafe for SatisfiableItem","synthetic":true,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl UnwindSafe for Satisfaction","synthetic":true,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl UnwindSafe for Policy","synthetic":true,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl UnwindSafe for Condition","synthetic":true,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl UnwindSafe for PolicyError","synthetic":true,"types":["bdk::descriptor::policy::PolicyError"]},{"text":"impl<'a> UnwindSafe for BuildSatisfaction<'a>","synthetic":true,"types":["bdk::descriptor::policy::BuildSatisfaction"]},{"text":"impl<K> UnwindSafe for P2Pkh<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Pkh"]},{"text":"impl<K> UnwindSafe for P2Wpkh_P2Sh<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh_P2Sh"]},{"text":"impl<K> UnwindSafe for P2Wpkh<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::P2Wpkh"]},{"text":"impl<K> UnwindSafe for Bip44<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44"]},{"text":"impl<K> UnwindSafe for Bip44Public<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip44Public"]},{"text":"impl<K> UnwindSafe for Bip49<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49"]},{"text":"impl<K> UnwindSafe for Bip49Public<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip49Public"]},{"text":"impl<K> UnwindSafe for Bip84<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84"]},{"text":"impl<K> UnwindSafe for Bip84Public<K> where
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::descriptor::template::Bip84Public"]},{"text":"impl UnwindSafe for WordCount","synthetic":true,"types":["bdk::keys::bip39::WordCount"]},{"text":"impl<Ctx> UnwindSafe for DescriptorKey<Ctx> where
        Ctx: UnwindSafe
    ","synthetic":true,"types":["bdk::keys::DescriptorKey"]},{"text":"impl UnwindSafe for ScriptContextEnum","synthetic":true,"types":["bdk::keys::ScriptContextEnum"]},{"text":"impl<Ctx> UnwindSafe for ExtendedKey<Ctx> where
        Ctx: UnwindSafe
    ","synthetic":true,"types":["bdk::keys::ExtendedKey"]},{"text":"impl<K, Ctx> UnwindSafe for GeneratedKey<K, Ctx> where
        Ctx: UnwindSafe,
        K: UnwindSafe
    ","synthetic":true,"types":["bdk::keys::GeneratedKey"]},{"text":"impl UnwindSafe for PrivateKeyGenerateOptions","synthetic":true,"types":["bdk::keys::PrivateKeyGenerateOptions"]},{"text":"impl UnwindSafe for KeyError","synthetic":true,"types":["bdk::keys::KeyError"]},{"text":"impl UnwindSafe for KeychainKind","synthetic":true,"types":["bdk::types::KeychainKind"]},{"text":"impl UnwindSafe for FeeRate","synthetic":true,"types":["bdk::types::FeeRate"]},{"text":"impl UnwindSafe for LocalUtxo","synthetic":true,"types":["bdk::types::LocalUtxo"]},{"text":"impl UnwindSafe for WeightedUtxo","synthetic":true,"types":["bdk::types::WeightedUtxo"]},{"text":"impl UnwindSafe for Utxo","synthetic":true,"types":["bdk::types::Utxo"]},{"text":"impl UnwindSafe for TransactionDetails","synthetic":true,"types":["bdk::types::TransactionDetails"]},{"text":"impl UnwindSafe for BlockTime","synthetic":true,"types":["bdk::types::BlockTime"]},{"text":"impl UnwindSafe for AddressValidatorError","synthetic":true,"types":["bdk::wallet::address_validator::AddressValidatorError"]},{"text":"impl UnwindSafe for CoinSelectionResult","synthetic":true,"types":["bdk::wallet::coin_selection::CoinSelectionResult"]},{"text":"impl UnwindSafe for LargestFirstCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::LargestFirstCoinSelection"]},{"text":"impl UnwindSafe for BranchAndBoundCoinSelection","synthetic":true,"types":["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]},{"text":"impl UnwindSafe for WalletExport","synthetic":true,"types":["bdk::wallet::export::WalletExport"]},{"text":"impl UnwindSafe for SignerId","synthetic":true,"types":["bdk::wallet::signer::SignerId"]},{"text":"impl UnwindSafe for SignerError","synthetic":true,"types":["bdk::wallet::signer::SignerError"]},{"text":"impl UnwindSafe for SignerOrdering","synthetic":true,"types":["bdk::wallet::signer::SignerOrdering"]},{"text":"impl !UnwindSafe for SignersContainer","synthetic":true,"types":["bdk::wallet::signer::SignersContainer"]},{"text":"impl UnwindSafe for SignOptions","synthetic":true,"types":["bdk::wallet::signer::SignOptions"]},{"text":"impl UnwindSafe for CreateTx","synthetic":true,"types":["bdk::wallet::tx_builder::CreateTx"]},{"text":"impl UnwindSafe for BumpFee","synthetic":true,"types":["bdk::wallet::tx_builder::BumpFee"]},{"text":"impl<'a, B, D, Cs, Ctx> !UnwindSafe for TxBuilder<'a, B, D, Cs, Ctx>","synthetic":true,"types":["bdk::wallet::tx_builder::TxBuilder"]},{"text":"impl UnwindSafe for TxOrdering","synthetic":true,"types":["bdk::wallet::tx_builder::TxOrdering"]},{"text":"impl UnwindSafe for ChangeSpendPolicy","synthetic":true,"types":["bdk::wallet::tx_builder::ChangeSpendPolicy"]},{"text":"impl<B, D> !UnwindSafe for Wallet<B, D>","synthetic":true,"types":["bdk::wallet::Wallet"]},{"text":"impl UnwindSafe for AddressIndex","synthetic":true,"types":["bdk::wallet::AddressIndex"]},{"text":"impl UnwindSafe for AddressInfo","synthetic":true,"types":["bdk::wallet::AddressInfo"]}]; 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/serde/de/trait.Deserialize.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/serde/de/trait.Deserialize.js index 4dddf8a258..b9adbc2a7b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/serde/de/trait.Deserialize.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/serde/de/trait.Deserialize.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl<'de> Deserialize<'de> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for EsploraGetHistory","synthetic":false,"types":["bdk::blockchain::esplora::EsploraGetHistory"]},{"text":"impl<'de> Deserialize<'de> for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl<'de> Deserialize<'de> for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for SledDbConfiguration","synthetic":false,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl<'de> Deserialize<'de> for SqliteDbConfiguration","synthetic":false,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl<'de> Deserialize<'de> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl<'de> Deserialize<'de> for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl<'de> Deserialize<'de> for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl<'de> Deserialize<'de> for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl<'de> Deserialize<'de> for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl<'de> Deserialize<'de> for WalletExport","synthetic":false,"types":["bdk::wallet::export::WalletExport"]}]; +implementors["bdk"] = [{"text":"impl<'de> Deserialize<'de> for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl<'de> Deserialize<'de> for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl<'de> Deserialize<'de> for SledDbConfiguration","synthetic":false,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl<'de> Deserialize<'de> for SqliteDbConfiguration","synthetic":false,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl<'de> Deserialize<'de> for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl<'de> Deserialize<'de> for SyncTime","synthetic":false,"types":["bdk::database::SyncTime"]},{"text":"impl<'de> Deserialize<'de> for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl<'de> Deserialize<'de> for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl<'de> Deserialize<'de> for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl<'de> Deserialize<'de> for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl<'de> Deserialize<'de> for WalletExport","synthetic":false,"types":["bdk::wallet::export::WalletExport"]}]; 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/serde/ser/trait.Serialize.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/serde/ser/trait.Serialize.js index 11272bbb51..fe77a57500 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/serde/ser/trait.Serialize.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/implementors/serde/ser/trait.Serialize.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["bdk"] = [{"text":"impl Serialize for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Serialize for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Serialize for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::ureq::EsploraBlockchainConfig"]},{"text":"impl Serialize for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Serialize for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Serialize for SledDbConfiguration","synthetic":false,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Serialize for SqliteDbConfiguration","synthetic":false,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Serialize for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Serialize for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Serialize for SatisfiableItem","synthetic":false,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Serialize for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Serialize for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Serialize for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Serialize for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Serialize for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Serialize for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Serialize for ConfirmationTime","synthetic":false,"types":["bdk::types::ConfirmationTime"]},{"text":"impl Serialize for WalletExport","synthetic":false,"types":["bdk::wallet::export::WalletExport"]}]; +implementors["bdk"] = [{"text":"impl Serialize for AnyBlockchainConfig","synthetic":false,"types":["bdk::blockchain::any::AnyBlockchainConfig"]},{"text":"impl Serialize for ElectrumBlockchainConfig","synthetic":false,"types":["bdk::blockchain::electrum::ElectrumBlockchainConfig"]},{"text":"impl Serialize for EsploraBlockchainConfig","synthetic":false,"types":["bdk::blockchain::esplora::EsploraBlockchainConfig"]},{"text":"impl Serialize for BitcoinPeerConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::BitcoinPeerConfig"]},{"text":"impl Serialize for CompactFiltersBlockchainConfig","synthetic":false,"types":["bdk::blockchain::compact_filters::CompactFiltersBlockchainConfig"]},{"text":"impl Serialize for SledDbConfiguration","synthetic":false,"types":["bdk::database::any::SledDbConfiguration"]},{"text":"impl Serialize for SqliteDbConfiguration","synthetic":false,"types":["bdk::database::any::SqliteDbConfiguration"]},{"text":"impl Serialize for AnyDatabaseConfig","synthetic":false,"types":["bdk::database::any::AnyDatabaseConfig"]},{"text":"impl Serialize for SyncTime","synthetic":false,"types":["bdk::database::SyncTime"]},{"text":"impl Serialize for PkOrF","synthetic":false,"types":["bdk::descriptor::policy::PkOrF"]},{"text":"impl Serialize for SatisfiableItem","synthetic":false,"types":["bdk::descriptor::policy::SatisfiableItem"]},{"text":"impl Serialize for Satisfaction","synthetic":false,"types":["bdk::descriptor::policy::Satisfaction"]},{"text":"impl Serialize for Policy","synthetic":false,"types":["bdk::descriptor::policy::Policy"]},{"text":"impl Serialize for Condition","synthetic":false,"types":["bdk::descriptor::policy::Condition"]},{"text":"impl Serialize for KeychainKind","synthetic":false,"types":["bdk::types::KeychainKind"]},{"text":"impl Serialize for LocalUtxo","synthetic":false,"types":["bdk::types::LocalUtxo"]},{"text":"impl Serialize for TransactionDetails","synthetic":false,"types":["bdk::types::TransactionDetails"]},{"text":"impl Serialize for BlockTime","synthetic":false,"types":["bdk::types::BlockTime"]},{"text":"impl Serialize for WalletExport","synthetic":false,"types":["bdk::wallet::export::WalletExport"]}]; 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/light.css b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/light.css index 14c65509e8..df49ab3e00 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/light.css +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/light.css @@ -1 +1 @@ - body{background-color:white;color:black;}h1,h2,h3,h4{color:black;}h1.fqn{border-bottom-color:#D5D5D5;}h2,h3,h4{border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#F5F5F5;}pre,.rustdoc.source .example-wrap{background-color:#F5F5F5;}.sidebar{background-color:#F1F1F1;}*{scrollbar-color:rgba(36,37,39,0.6) #e6e6e6;}.sidebar{scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;}.logo-container.rust-logo>img{}::-webkit-scrollbar-track{background-color:#ecebeb;}::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar::-webkit-scrollbar-track{background-color:#dcdcdc;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar .current{background-color:#fff;}.source .sidebar{background-color:#fff;}.sidebar .location{border-color:#000;background-color:#fff;color:#333;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#F5F5F5;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#f6fdb0 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#ddd;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.search-results a:hover{background-color:#ddd;}.search-results a:focus{color:#000 !important;background-color:#ccc;}.search-results a:focus span{color:#000 !important;}a.result-trait:focus{background-color:#c7b6ff;}a.result-traitalias:focus{background-color:#c7b6ff;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-enum:focus{background-color:#b4d1b9;}a.result-struct:focus{background-color:#e7b1a0;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#c6afb3;}a.result-type:focus{background-color:#ffc891;}a.result-foreigntype:focus{background-color:#f5c4ff;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#8ce488;}a.result-constant:focus,a.result-static:focus{background-color:#c3e0ff;}a.result-primitive:focus{background-color:#9aecff;}a.result-keyword:focus{background-color:#f99650;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#508157;}.content span.struct,.content a.struct,.block a.current.struct{color:#ad448e;}.content span.type,.content a.type,.block a.current.type{color:#ba5d00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#cd00e2;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#767b27;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#546e8a;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2c8093;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#4d76ae;}.content span.trait,.content a.trait,.block a.current.trait{color:#7c5af3;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#6841f1;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#9a6e31;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}nav:not(.sidebar){border-bottom-color:#e0e0e0;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#000;}body.source .example-wrap pre.rust a{background:#eee;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#3873AD;}a.test-arrow{color:#f5f5f5;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search{color:#555;background-color:white;border-color:#e0e0e0;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input{color:#555;background-color:white;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input:focus{border-color:#66afe9;}.search-input:disabled{background-color:#e6e6e6;}#crate-search+.search-input:focus{box-shadow:0 0 8px #078dd8;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;}.stab.portability>code{background:none;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#c7c7c7;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:#FDFFD3;}:target{border-right:3px solid #ffb44c;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.5);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.5);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#eee;border-color:#999;}.notable-traits-tooltiptext .notable{border-bottom-color:#DDDDDD;}#titles>button:not(.selected){background-color:#e6e6e6;border-top-color:#e6e6e6;}#titles>button:hover,#titles>button.selected{background-color:#ffffff;border-top-color:#0089ff;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#F1F1F1;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F1F1F1;border-right-color:#000;}#sidebar-filler{background-color:#F1F1F1;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(35%);}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}#all-types{background-color:#fff;}#all-types:hover{background-color:#f9f9f9;}.search-results .result-name span.alias{color:#000;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#F1F1F1;}#sidebar-toggle:hover{background-color:#E0E0E0;}#source-sidebar{background-color:#F1F1F1;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#E0E0E0;}div.files>.selected{background-color:#fff;}.setting-line>.title{border-bottom-color:#D5D5D5;} \ No newline at end of file + body{background-color:white;color:black;}h1,h2,h3,h4{color:black;}h1.fqn{border-bottom-color:#D5D5D5;}h2,h3,h4{border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#F5F5F5;}pre,.rustdoc.source .example-wrap{background-color:#F5F5F5;}.sidebar{background-color:#F1F1F1;}*{scrollbar-color:rgba(36,37,39,0.6) #e6e6e6;}.sidebar{scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;}.rust-logo>img{}::-webkit-scrollbar-track{background-color:#ecebeb;}::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar::-webkit-scrollbar-track{background-color:#dcdcdc;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar .current{background-color:#fff;}.source .sidebar{background-color:#f1f1f1;}.sidebar .location{border-color:#000;background-color:#fff;color:#333;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#F5F5F5;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#f6fdb0 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#ddd;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.search-results a:hover{background-color:#ddd;}.search-results a:focus{color:#000 !important;background-color:#ccc;}.search-results a:focus span{color:#000 !important;}a.result-trait:focus{background-color:#c7b6ff;}a.result-traitalias:focus{background-color:#c7b6ff;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-enum:focus{background-color:#b4d1b9;}a.result-struct:focus{background-color:#e7b1a0;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#c6afb3;}a.result-type:focus{background-color:#ffc891;}a.result-foreigntype:focus{background-color:#f5c4ff;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#8ce488;}a.result-constant:focus,a.result-static:focus{background-color:#c3e0ff;}a.result-primitive:focus{background-color:#9aecff;}a.result-keyword:focus{background-color:#f99650;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#508157;}.content span.struct,.content a.struct,.block a.current.struct{color:#ad448e;}.content span.type,.content a.type,.block a.current.type{color:#ba5d00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#cd00e2;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#767b27;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#546e8a;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2c8093;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#4d76ae;}.content span.trait,.content a.trait,.block a.current.trait{color:#7c5af3;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#6841f1;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#9a6e31;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}nav:not(.sidebar){border-bottom-color:#e0e0e0;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#3873AD;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#000;}.search-results a{color:initial;}a.test-arrow{color:#f5f5f5;}body.source .example-wrap pre.rust a{background:#eee;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search{color:#555;background-color:white;border-color:#e0e0e0;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input{color:#555;background-color:white;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input:focus{border-color:#66afe9;}#crate-search+.search-input:focus{box-shadow:0 0 8px #078dd8;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;}.stab.portability>code{background:none;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#c7c7c7;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:#FDFFD3;}:target{border-right:3px solid #ffb44c;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.5);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.5);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#eee;border-color:#999;}.notable-traits-tooltiptext .notable{border-bottom-color:#DDDDDD;}#titles>button:not(.selected){background-color:#e6e6e6;border-top-color:#e6e6e6;}#titles>button:hover,#titles>button.selected{background-color:#ffffff;border-top-color:#0089ff;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#F1F1F1;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F1F1F1;border-right-color:#000;}#sidebar-filler{background-color:#F1F1F1;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(35%);}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}#all-types{background-color:#fff;}#all-types:hover{background-color:#f9f9f9;}.search-results .result-name span.alias{color:#000;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#F1F1F1;}#sidebar-toggle:hover{background-color:#E0E0E0;}#source-sidebar{background-color:#F1F1F1;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#E0E0E0;}div.files>.selected{background-color:#fff;}.setting-line>.title{border-bottom-color:#D5D5D5;} \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/main.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/main.js index 8ccfe56500..57cd8d1711 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/main.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/main.js @@ -1,8 +1,8 @@ -if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position}}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1}}if(!DOMTokenList.prototype.add){DOMTokenList.prototype.add=function(className){if(className&&!hasClass(this,className)){if(this.className&&this.className.length>0){this.className+=" "+className}else{this.className=className}}}}if(!DOMTokenList.prototype.remove){DOMTokenList.prototype.remove=function(className){if(className&&this.className){this.className=(" "+this.className+" ").replace(" "+className+" "," ").trim()}}}(function(){var rustdocVars=document.getElementById("rustdoc-vars");if(rustdocVars){window.rootPath=rustdocVars.attributes["data-root-path"].value;window.currentCrate=rustdocVars.attributes["data-current-crate"].value;window.searchJS=rustdocVars.attributes["data-search-js"].value;window.searchIndexJS=rustdocVars.attributes["data-search-index-js"].value}var sidebarVars=document.getElementById("sidebar-vars");if(sidebarVars){window.sidebarCurrent={name:sidebarVars.attributes["data-name"].value,ty:sidebarVars.attributes["data-ty"].value,relpath:sidebarVars.attributes["data-relpath"].value,}}}());function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined"){return ev.key}var c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}var THEME_PICKER_ELEMENT_ID="theme-picker";var THEMES_ELEMENT_ID="theme-choices";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}(function(){var themeChoices=getThemesElement();var themePicker=getThemePickerElement();var availableThemes=["ayu","dark","light"];function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){var active=document.activeElement;var related=e.relatedTarget;if(active.id!==THEME_PICKER_ELEMENT_ID&&(!active.parentNode||active.parentNode.id!==THEMES_ELEMENT_ID)&&(!related||(related.id!==THEME_PICKER_ELEMENT_ID&&(!related.parentNode||related.parentNode.id!==THEMES_ELEMENT_ID)))){hideThemeButtonState()}}themePicker.onclick=switchThemeButtonState;themePicker.onblur=handleThemeButtonsBlur;availableThemes.forEach(function(item){var but=document.createElement("button");but.textContent=item;but.onclick=function(){switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());(function(){"use strict";window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:function(){return document.getElementById("search")},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:function(){if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},focus:function(){searchState.input.focus()},defocus:function(){searchState.input.blur()},showResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(main,"hidden");removeClass(search,"hidden");searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(search,"hidden");removeClass(main,"hidden");document.title=searchState.titleBeforeSearch;if(searchState.browserSupportsHistoryApi()){history.replaceState("",window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:function(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},putBackSearch:function(search_input){var search=searchState.outputElement();if(search_input.value!==""&&hasClass(search,"hidden")){searchState.showResults(search);if(searchState.browserSupportsHistoryApi()){var extra="?search="+encodeURIComponent(search_input.value);history.replaceState(search_input.value,"",getNakedUrl()+extra+window.location.hash)}document.title=searchState.title}},browserSupportsHistoryApi:function(){return window.history&&typeof window.history.pushState==="function"},setup:function(){var search_input=searchState.input;if(!searchState.input){return}function loadScript(url){var script=document.createElement('script');script.src=url;document.head.append(script)}var searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",function(){searchState.putBackSearch(this);search_input.origPlaceholder=searchState.input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});search_input.addEventListener("blur",function(){search_input.placeholder=searchState.input.origPlaceholder});search_input.removeAttribute('disabled');searchState.addCrateDropdown(window.ALL_CRATES);var params=searchState.getQueryStringParams();if(params.search!==undefined){var search=searchState.outputElement();search.innerHTML="

    "+searchState.loadingText+"

    ";searchState.showResults(search);loadSearch()}},addCrateDropdown:function(crates){var elem=document.getElementById("crate-search");if(!elem){return}var savedCrate=getSettingValue("saved-filter-crate");for(var i=0,len=crates.length;i0){return tmp}}return null}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];if(sidebar){addClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div)}}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(filler){filler.remove()}document.getElementsByTagName("body")[0].style.marginTop=""}var toggleAllDocsId="toggle-all-docs";var main=document.getElementById("main");var savedHash="";function handleHashes(ev){var elem;var search=searchState.outputElement();if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){searchState.hideResults(search);var hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(searchState.browserSupportsHistoryApi()){history.replaceState(hash,"",getNakedUrl()+window.location.search+"#"+hash)}elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function getHelpElement(build){if(build){buildHelperPopup()}return document.getElementById("help")}function displayHelp(display,ev,help){if(display){help=help?help:getHelpElement(true);if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur")}}else{help=help?help:getHelpElement(false);if(help&&!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur")}}}function handleEscape(ev){var help=getHelpElement(false);var search=searchState.outputElement();if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else if(search&&!hasClass(search,"hidden")){searchState.clearInputTimeout();ev.preventDefault();searchState.hideResults(search)}searchState.defocus();hideThemeButtonState()}var disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":displayHelp(false,ev);ev.preventDefault();searchState.focus();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":displayHelp(true,ev);break;case"t":case"T":displayHelp(false,ev);ev.preventDefault();var themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){var active=document.activeElement;var themes=getThemesElement();switch(getVirtualKey(ev)){case"ArrowUp":ev.preventDefault();if(active.previousElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.previousElementSibling.focus()}else{showThemeButtonState();themes.lastElementChild.focus()}break;case"ArrowDown":ev.preventDefault();if(active.nextElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.nextElementSibling.focus()}else{showThemeButtonState();themes.firstElementChild.focus()}break;case"Enter":case"Return":case"Space":if(ev.target.id===THEME_PICKER_ELEMENT_ID&&themes.style.display==="none"){ev.preventDefault();showThemeButtonState();themes.firstElementChild.focus()}break;case"Home":ev.preventDefault();themes.firstElementChild.focus();break;case"End":ev.preventDefault();themes.lastElementChild.focus();break}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);(function(){var x=document.getElementsByClassName("version-selector");if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped="",len=window.rootPath.match(/\.\.\//g).length+1;for(i=0;i .in-band > .trait").textContent;var baseIdName="impl-"+traitName+"-";var libs=Object.getOwnPropertyNames(imp);for(var i=0,llength=libs.length;i0){this.className+=" "+className}else{this.className=className}}}}if(!DOMTokenList.prototype.remove){DOMTokenList.prototype.remove=function(className){if(className&&this.className){this.className=(" "+this.className+" ").replace(" "+className+" "," ").trim()}}}function getVar(name){var el=document.getElementById("rustdoc-vars");if(el){return el.attributes["data-"+name].value}else{return null}}function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}(function(){window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");window.searchJS=resourcePath("search",".js");window.searchIndexJS=resourcePath("search-index",".js");var sidebarVars=document.getElementById("sidebar-vars");if(sidebarVars){window.sidebarCurrent={name:sidebarVars.attributes["data-name"].value,ty:sidebarVars.attributes["data-ty"].value,relpath:sidebarVars.attributes["data-relpath"].value,}}}());function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined"){return ev.key}var c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}var THEME_PICKER_ELEMENT_ID="theme-picker";var THEMES_ELEMENT_ID="theme-choices";var MAIN_ID="main-content";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}(function(){var themeChoices=getThemesElement();var themePicker=getThemePickerElement();var availableThemes=getVar("themes").split(",");function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){var active=document.activeElement;var related=e.relatedTarget;if(active.id!==THEME_PICKER_ELEMENT_ID&&(!active.parentNode||active.parentNode.id!==THEMES_ELEMENT_ID)&&(!related||(related.id!==THEME_PICKER_ELEMENT_ID&&(!related.parentNode||related.parentNode.id!==THEMES_ELEMENT_ID)))){hideThemeButtonState()}}themePicker.onclick=switchThemeButtonState;themePicker.onblur=handleThemeButtonsBlur;availableThemes.forEach(function(item){var but=document.createElement("button");but.textContent=item;but.onclick=function(){switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());(function(){"use strict";window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:function(){return document.getElementById("search")},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:function(){if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},focus:function(){searchState.input.focus()},defocus:function(){searchState.input.blur()},showResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(main,"hidden");removeClass(search,"hidden");searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(search,"hidden");removeClass(main,"hidden");document.title=searchState.titleBeforeSearch;if(searchState.browserSupportsHistoryApi()){history.replaceState("",window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:function(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},putBackSearch:function(search_input){var search=searchState.outputElement();if(search_input.value!==""&&hasClass(search,"hidden")){searchState.showResults(search);if(searchState.browserSupportsHistoryApi()){var extra="?search="+encodeURIComponent(search_input.value);history.replaceState(search_input.value,"",getNakedUrl()+extra+window.location.hash)}document.title=searchState.title}},browserSupportsHistoryApi:function(){return window.history&&typeof window.history.pushState==="function"},setup:function(){var search_input=searchState.input;if(!searchState.input){return}function loadScript(url){var script=document.createElement('script');script.src=url;document.head.append(script)}var searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",function(){searchState.putBackSearch(this);search_input.origPlaceholder=searchState.input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});search_input.addEventListener("blur",function(){search_input.placeholder=searchState.input.origPlaceholder});if(search_input.value!=''){loadSearch()}searchState.addCrateDropdown(window.ALL_CRATES);var params=searchState.getQueryStringParams();if(params.search!==undefined){var search=searchState.outputElement();search.innerHTML="

    "+searchState.loadingText+"

    ";searchState.showResults(search);loadSearch()}},addCrateDropdown:function(crates){var elem=document.getElementById("crate-search");if(!elem){return}var savedCrate=getSettingValue("saved-filter-crate");for(var i=0,len=crates.length;i0){return tmp}}return null}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];if(sidebar){addClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div)}}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(filler){filler.remove()}document.getElementsByTagName("body")[0].style.marginTop=""}var toggleAllDocsId="toggle-all-docs";var main=document.getElementById(MAIN_ID);var savedHash="";function handleHashes(ev){var elem;var search=searchState.outputElement();if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){searchState.hideResults(search);var hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(searchState.browserSupportsHistoryApi()){history.replaceState(hash,"",getNakedUrl()+window.location.search+"#"+hash)}elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function getHelpElement(build){if(build){buildHelperPopup()}return document.getElementById("help")}function displayHelp(display,ev,help){if(display){help=help?help:getHelpElement(true);if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur")}}else{help=help?help:getHelpElement(false);if(help&&!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur")}}}function handleEscape(ev){var help=getHelpElement(false);var search=searchState.outputElement();if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else if(search&&!hasClass(search,"hidden")){searchState.clearInputTimeout();ev.preventDefault();searchState.hideResults(search)}searchState.defocus();hideThemeButtonState()}var disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":displayHelp(false,ev);ev.preventDefault();searchState.focus();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":displayHelp(true,ev);break;case"t":case"T":displayHelp(false,ev);ev.preventDefault();var themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){var active=document.activeElement;var themes=getThemesElement();switch(getVirtualKey(ev)){case"ArrowUp":ev.preventDefault();if(active.previousElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.previousElementSibling.focus()}else{showThemeButtonState();themes.lastElementChild.focus()}break;case"ArrowDown":ev.preventDefault();if(active.nextElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.nextElementSibling.focus()}else{showThemeButtonState();themes.firstElementChild.focus()}break;case"Enter":case"Return":case"Space":if(ev.target.id===THEME_PICKER_ELEMENT_ID&&themes.style.display==="none"){ev.preventDefault();showThemeButtonState();themes.firstElementChild.focus()}break;case"Home":ev.preventDefault();themes.firstElementChild.focus();break;case"End":ev.preventDefault();themes.lastElementChild.focus();break}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);(function(){var x=document.getElementsByClassName("version-selector");if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped="",len=window.rootPath.match(/\.\.\//g).length+1;for(i=0;i .in-band > .trait").textContent;var baseIdName="impl-"+traitName+"-";var libs=Object.getOwnPropertyNames(imp);for(var i=0,llength=libs.length;i summary:not(.hideme)"),function(el){el.addEventListener("click",function(e){if(e.target.tagName!="SUMMARY"&&e.target.tagName!="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),function(e){e.onclick=function(){this.getElementsByClassName('notable-traits-tooltiptext')[0].classList.toggle("force-tooltip")}});var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(hasClass(sidebar,"mobile")){hideSidebar()}else{showSidebar()}}}var buildHelperPopup=function(){var popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",function(ev){if(ev.target===popup){displayHelp(false,ev)}});var book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ the rustdoc book.";var container=document.createElement("div");var shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["T","Focus the theme picker menu"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(function(x){return"
    "+x[0].split(" ").map(function(y,index){return(index&1)===0?""+y+"":" "+y+" "}).join("")+"
    "+x[1]+"
    "}).join("");var div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

    Keyboard Shortcuts

    "+shortcuts+"
    ";var infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \ restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ enum, trait, type, macro, \ and const.","Search functions by type signature (e.g., vec -> usize or \ * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \ str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"

    "+x+"

    "}).join("");var div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

    Search Tricks

    "+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);var rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";var rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc 1.57.0-nightly (05044c2e6 2021-09-26)";rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,searchState.outputElement());buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file + your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"

    "+x+"

    "}).join("");var div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

    Search Tricks

    "+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);var rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";var rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,document.querySelector("main"));buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noscript.css b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noscript.css index aea68efbc9..8ad88640ab 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noscript.css +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noscript.css @@ -1 +1 @@ - #main .attributes{margin-left:0 !important;}#copy-path{display:none;} \ No newline at end of file + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}.sub{display:none;}#theme-picker{display:none;} \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular.woff b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/noto-sans-kr-v13-korean-regular.woff deleted file mode 100644 index 01d6b6b54664c35f8180f7c245514d22751f9307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287068 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�`?UKJ9zdvkIy!R-2tL681%r8!?R#>_9 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
  • ~PAIj(7{M!3x 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�eSv=|MdGDZ2C(f;TVEiYDJ8?G0 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 diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/rust-logo.png b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/rust-logo.png deleted file mode 100644 index 74b4bd695045ebc52c21af95301adc9311ca881c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5758 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 v#bP0l+XkK|AsFv diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/rustdoc.css b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/rustdoc.css index 79235e3d63..1f77c75cbe 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/rustdoc.css +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/rustdoc.css @@ -1 +1 @@ - @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Noto Sans KR';src:url("noto-sans-kr-v13-korean-regular.woff") format("woff");font-display:swap;unicode-range:U+A960-A97F,U+AC00-D7AF,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:16px/1.4 "Source Serif 4","Noto Sans KR",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3,h4{font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,h3,h4{border-bottom:1px solid;}h3.code-header,h4.code-header{font-size:1em;font-weight:600;border:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}.impl,.method.trait-impl,.type.trait-impl,.associatedconstant.trait-impl,.associatedtype.trait-impl{padding-left:15px;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,details.undocumented>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main>ul.docblock>li>a{font-family:"Fira Sans",Arial,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.type-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;bottom:0;overflow:auto;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;height:100%;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}.top-doc .docblock h1{font-size:1.3em;}.top-doc .docblock h2{font-size:1.15em;}.top-doc .docblock h3,.top-doc .docblock h4,.top-doc .docblock h5{font-size:1em;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.docblock>*{max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;}.in-band>code,.in-band>.code-header{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant,.impl-items>.associatedtype,.content .impl-items details>summary>.type,.impl-items details>summary>.associatedconstant,.impl-items details>summary>.associatedtype{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.item-info{margin-top:0;}nav:not(.sidebar){border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:0;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:grid;column-gap:1.2rem;row-gap:0.0rem;grid-template-columns:auto 1fr;justify-items:start;}.item-left,.item-right{display:block;}.item-left{grid-column:1;}.item-right{grid-column:2;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:18px;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.5em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}.sub-variant,.sub-variant>h3{margin-top:0px !important;padding-top:1px;}#main .sub-variant>h3{font-size:15px;margin-left:25px;margin-bottom:5px;}.sub-variant>div{margin-left:20px;margin-bottom:10px;}.sub-variant>div>span{display:block;position:relative;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary,details.undocumented>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker,details.undocumented>summary::-webkit-details-marker,details.undocumented>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-23px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,.undocumented>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-2px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle,details.undocumented{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}details.undocumented>summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;content:"Show hidden undocumented items";cursor:pointer;font-size:16px;font-weight:300;opacity:.5;}details.undocumented>summary:focus::before,details.undocumented>summary:hover::before{opacity:1;}details.undocumented[open] >summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat background-position:top left;content:"Hide undocumented items";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main,#search{margin-top:45px;padding:0;}#search{margin-left:0;}.anchor{display:none !important;}.theme-picker{left:10px;top:54px;z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar.mobile>div.version{overflow:hidden;max-height:33px;}.sidebar{width:calc(100% + 30px);}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main>details.rustdoc-toggle>summary::before,#main>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main,#search{margin-top:100px;}#main>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url(toggle-minus.svg);}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url(toggle-plus.svg);} \ No newline at end of file + @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:16px/1.4 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,.top-doc h3,.top-doc h4,.sidebar .others h3{border-bottom:1px solid;}h3.code-header{font-size:1.1em;}h4.code-header{font-size:1em;}h3.code-header,h4.code-header{font-weight:600;border-bottom-style:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main-content>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}.source .width-limiter{max-width:unset;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{max-width:none;overflow:visible;margin-left:0px;}nav.sub{position:relative;font-size:16px;text-transform:uppercase;}.sub-container{display:flex;flex-direction:row;flex-wrap:nowrap;}.sub-logo-container{display:none;margin-right:20px;}.source .sub-logo-container{display:block;}.source .sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.sidebar{width:200px;overflow-y:scroll;position:sticky;min-width:200px;height:100vh;top:0;left:0;}.rustdoc.source .sidebar{width:50px;min-width:0px;max-width:300px;flex-grow:0;flex-shrink:0;flex-basis:auto;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.source .sidebar>*:not(:first-child){transition:opacity 0.5s,visibility 0.2s;opacity:0;visibility:hidden;}.source .sidebar.expanded{overflow-y:auto;}.source .sidebar.expanded>*{opacity:1;visibility:visible;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.hidden{display:none !important;}.logo-container{display:flex;margin-top:10px;margin-bottom:10px;justify-content:center;}.logo-container>img{height:100px;width:100px;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.3em;}.top-doc .docblock h3{font-size:1.15em;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.1em;}.top-doc .docblock h6{font-size:1em;}.docblock h5{font-size:1em;}.docblock h6{font-size:0.95em;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main-content{position:relative;}#main-content>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main-content>.item-info{margin-top:0;}nav:not(.sidebar){flex-grow:1;border-bottom:1px solid;padding-bottom:10px;margin-bottom:25px;}.source nav:not(.sidebar).sub{margin-left:32px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;max-width:960px;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;background-image:url("down-arrow.svg");}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-webkit-appearance:none;-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:18px;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.2em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}h3.variant{font-weight:600;font-size:1.1em;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1em;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.top-doc .docblock>.section-header:first-child{margin-left:15px;}.top-doc .docblock>.section-header:first-child:hover>a:before{left:-10px;}.docblock>.section-header:first-child{margin-top:0;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:sticky;top:0;left:0;cursor:pointer;font-weight:bold;font-size:1.2em;border-bottom:1px solid;display:flex;height:40px;justify-content:center;align-items:center;z-index:10;}#source-sidebar{width:100%;z-index:1;overflow:auto;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:-34px;top:9px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main-content>ul{padding-left:10px;}#main-content>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url("toggle-minus.svg");}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url("toggle-plus.svg");}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}.sidebar.expanded+main .width-limiter .sub-logo-container.rust-logo{display:none;}.rustdoc.source .sidebar{transition:width .5s;}.source .sidebar.expanded{width:300px;}}@media (max-width:700px){body{padding-top:0px;}main{padding-left:15px;padding-top:0px;}.rustdoc{flex-direction:column;}.rustdoc:not(.source)>.sidebar{width:100%;height:45px;min-height:40px;max-height:45px;margin:0;padding:0 15px;position:static;z-index:11;overflow-y:hidden;}.rustdoc.source>.sidebar{position:fixed;top:0;left:0;margin:0;z-index:11;width:0;}.sidebar.mobile{position:sticky !important;top:0;left:0;width:100%;margin-left:0;background-color:rgba(0,0,0,0);}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.rustdoc:not(.source) .sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;top:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);margin-left:32px;margin-bottom:10px;}.source nav:not(.sidebar).sub{margin-left:32px;}.content{margin-left:0px;}.source .content{margin-top:10px;}#search{margin-left:0;padding:0;}.anchor{display:none !important;}.theme-picker{z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main-content>details.rustdoc-toggle>summary::before,#main-content>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}.sidebar.expanded #sidebar-toggle{font-size:1.5rem;}.sidebar:not(.expanded) #sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;border:1px solid;border-left:0;}#source-sidebar{z-index:11;}#main-content>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}.source .sidebar.expanded{max-width:100vw;width:100vw;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main-content>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:anywhere;}.sub-container{flex-direction:column;}.sub-logo-container{align-self:center;}.source .sub-logo-container>img{height:35px;width:35px;}.sidebar:not(.expanded) #sidebar-toggle{top:10px;}}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js index 48240e03f9..7695cd5af8 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,4 +1,4 @@ var searchIndex = JSON.parse('{\ -"bdk":{"doc":"A modern, lightweight, descriptor-based wallet library …","t":[13,13,13,13,13,13,3,13,13,13,4,13,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,13,13,4,8,3,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,11,11,11,11,11,11,11,12,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,14,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,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,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,12,0,11,11,11,11,11,11,11,11,12,11,12,12,12,11,11,11,11,11,12,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,12,11,12,11,11,11,11,11,11,11,11,12,10,12,5,11,11,11,11,11,11,11,11,0,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,12,12,12,12,12,12,12,12,12,12,13,8,4,16,8,3,13,13,3,3,8,6,0,11,11,11,11,11,11,10,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,0,11,0,10,11,11,11,11,10,10,11,10,10,11,11,11,11,11,11,11,5,5,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,4,4,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,11,11,11,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,13,3,3,3,4,13,13,13,13,13,13,13,13,3,13,13,13,3,13,13,13,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,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,12,12,12,12,12,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,12,11,11,12,12,12,11,11,11,11,11,11,11,12,11,11,13,3,3,4,3,13,13,13,13,13,13,13,13,13,13,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,12,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,12,12,12,12,16,8,8,16,8,8,3,0,10,11,11,11,10,11,10,11,12,10,11,10,11,10,11,10,11,10,11,10,11,11,11,11,10,11,11,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,11,11,10,11,10,11,10,11,10,11,0,11,12,10,11,10,11,10,11,10,11,10,11,11,11,11,11,4,4,4,13,13,13,13,13,13,3,13,13,13,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,11,11,11,11,11,11,11,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,12,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,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,13,6,3,4,6,8,6,8,6,4,3,13,8,4,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,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,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,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,10,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,11,11,11,11,11,11,11,11,11,0,11,11,11,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,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,5,13,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,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,4,13,3,6,6,13,13,13,13,13,13,13,13,13,13,13,3,3,4,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,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,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,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,8,6,3,3,3,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,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,3,3,16,16,8,4,8,8,3,8,13,13,13,4,6,13,13,13,16,13,3,13,8,4,13,13,13,3,6,13,13,5,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,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,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,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,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,11,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,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,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,4,3,4,6,3,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,3,8,13,13,13,13,3,11,11,12,0,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,5,11,11,12,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,0,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,12,12,8,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,12,3,8,3,6,3,11,11,11,11,11,11,11,11,10,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,3,3,13,11,12,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,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,10,10,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,12,12,12,5,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AddressValidator","Bip32","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","CompactFilters","ConfirmationTime","Descriptor","Electrum","Encode","Error","Esplora","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","Hex","InsufficientFunds","Internal","InvalidNetwork","InvalidOutpoint","InvalidPolicyPathError","InvalidProgressValue","InvalidU32Bytes","IrreplaceableTransaction","Json","Key","KeychainKind","Local","LocalUtxo","Miniscript","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","ProgressUpdateError","Psbt","PsbtParse","Rusqlite","ScriptDoesntHaveAddressForm","Secp256k1","Signer","Sled","SpendingPolicyRequired","TransactionConfirmed","TransactionDetails","TransactionNotFound","UnknownUtxo","Utxo","Vbytes","WeightedUtxo","as_byte","as_fail","as_ref","as_sat_vb","base32_len","blockchain","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","confirmation_time","database","default","default","default","default_min_relay_fee","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor","descriptor","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","fee","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_vb","from_vb","from_wu","get_hash","get_hash","hash","hash","height","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into_descriptor_key","into_extended_key","into_wallet_descriptor","into_wallet_descriptor","keychain","keys","ne","ne","ne","ne","ne","ne","new","outpoint","outpoint","partial_cmp","received","satisfaction_weight","sent","serialize","serialize","serialize","serialize","sub","timestamp","to_owned","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_from","try_into","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","type_id","utxo","vbytes","verified","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","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","available","found","needed","requested","required","required","0","outpoint","psbt_input","AccurateFees","Blockchain","Capability","Config","ConfigurableBlockchain","EsploraBlockchain","FullHistory","GetAnyTx","LogProgress","NoopProgress","Progress","ProgressData","any","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone","clone_into","clone_into","clone_into","compact_filters","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","electrum","eq","esplora","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_hash","get_height","get_tx","hash","init","init","init","into","into","into","log_progress","noop_progress","progress","setup","sync","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update","update","vzip","vzip","vzip","AnyBlockchain","AnyBlockchainConfig","CompactFilters","CompactFilters","Electrum","Electrum","Esplora","Esplora","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","serialize","setup","sync","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","0","0","0","0","0","0","Bip158","BitcoinPeerConfig","CompactFiltersBlockchain","CompactFiltersBlockchainConfig","CompactFiltersError","DataCorruption","Db","Global","InvalidFilter","InvalidFilterHeader","InvalidHeaders","InvalidResponse","Io","Mempool","MissingBlock","NoPeers","NotConnected","Peer","PeerBloomDisabled","Time","Timeout","add_tx","address","as_fail","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone_into","clone_into","connect","connect_proxy","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","drop","drop","eq","eq","estimate_fee","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_mempool","get_network","get_tx","get_tx","get_version","has_tx","init","init","init","init","init","init","into","into","into","into","into","into","is_connected","iter_txs","ne","ne","network","new","new","peers","recv","send","serialize","serialize","setup","skip_blocks","socks5","socks5_credentials","storage_dir","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","ElectrumBlockchain","ElectrumBlockchainConfig","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","retry","serialize","setup","socks5","stop_gap","timeout","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","url","vzip","vzip","BitcoinEncoding","EsploraBlockchain","EsploraBlockchainConfig","EsploraError","EsploraGetHistory","HeaderHashNotFound","HeaderHeightNotFound","Hex","HttpResponse","Io","NoHeader","Parsing","TransactionNotFound","Ureq","UreqTransport","as_fail","base_url","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","eq","estimate_fee","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","init","init","into","into","into","into","ne","new","proxy","serialize","setup","stop_gap","timeout_read","timeout_write","to_owned","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","with_agent","0","0","0","0","0","0","0","0","0","0","Batch","BatchDatabase","BatchOperations","Config","ConfigurableDatabase","Database","SqliteDatabase","any","begin_batch","begin_batch","borrow","borrow_mut","check_descriptor_checksum","check_descriptor_checksum","commit_batch","commit_batch","connection","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_tx","del_tx","del_utxo","del_utxo","deref","deref_mut","drop","flush","flush","fmt","from","from_config","from_config","get_last_index","get_last_index","get_path_from_script_pubkey","get_path_from_script_pubkey","get_raw_tx","get_raw_tx","get_script_pubkey_from_path","get_script_pubkey_from_path","get_tx","get_tx","get_utxo","get_utxo","increment_last_index","increment_last_index","init","into","iter_raw_txs","iter_raw_txs","iter_script_pubkeys","iter_script_pubkeys","iter_txs","iter_txs","iter_utxos","iter_utxos","memory","new","path","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_tx","set_tx","set_utxo","set_utxo","try_from","try_into","type_id","vzip","AnyBatch","AnyDatabase","AnyDatabaseConfig","Memory","Memory","Memory","Sled","Sled","Sled","SledDbConfiguration","Sqlite","Sqlite","Sqlite","SqliteDbConfiguration","begin_batch","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_descriptor_checksum","commit_batch","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_tx","del_tx","del_utxo","del_utxo","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","flush","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_tx","get_utxo","increment_last_index","init","init","init","init","init","into","into","into","into","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","path","path","serialize","serialize","serialize","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_tx","set_tx","set_utxo","set_utxo","tree_name","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","0","0","0","0","0","0","0","0","0","MemoryDatabase","begin_batch","borrow","borrow_mut","check_descriptor_checksum","commit_batch","default","del_last_index","del_path_from_script_pubkey","del_raw_tx","del_script_pubkey_from_path","del_tx","del_utxo","deref","deref_mut","drop","flush","fmt","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_tx","get_utxo","increment_last_index","init","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","new","set_last_index","set_raw_tx","set_script_pubkey","set_tx","set_utxo","try_from","try_into","type_id","vzip","Bare","DerivedDescriptor","DerivedDescriptorKey","Descriptor","ExtendedDescriptor","ExtractPolicy","HdKeyPaths","IntoWalletDescriptor","KeyMap","Legacy","Miniscript","Pkh","ScriptContext","Segwitv0","Sh","Wpkh","Wsh","address","as_enum","as_enum","as_inner","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","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_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","desc_type","deserialize","deserialize","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","eq","error","explicit_script","ext","extract_policy","extract_policy","extract_policy","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from_ast","from_str","from_str","from_str_insane","from_tree","from_tree","get_hash","get_hash","get_hash","get_hash","get_hash","get_leaf_pk","get_leaf_pk_pkh","get_leaf_pkh","get_nth_child","get_nth_pk","get_nth_pk_pkh","get_nth_pkh","get_satisfaction","has_mixed_timelocks","has_repeated_keys","hash","hash","hash","hash","hash","hash_to_hash160","init","init","init","init","init","into","into","into","into","into","into_inner","into_wallet_descriptor","is_deriveable","is_non_malleable","is_uncompressed","iter","iter_pk","iter_pk_pkh","iter_pkh","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","ne","new","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","serialized_len","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_public_key","to_string","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_into","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","vzip","within_resource_limits","0","0","0","0","0","get_checksum","Base58","Bip32","DuplicatedKeys","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","Pk","Policy","as_fail","borrow","borrow_mut","deref","deref_mut","drop","fmt","fmt","from","from","from","from","from","from","from","from","init","into","to_string","try_from","try_into","type_id","vzip","0","0","0","0","0","0","0","0","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","Sha256Preimage","Signature","SignatureKey","Thresh","as_fail","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","cmp","contribution","csv","default","default","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","get_hash","hash","id","id","init","init","init","init","init","init","init","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","ne","ne","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","current_height","input_max_height","psbt","0","0","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","0","0","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","0","0","0","0","0","0","0","0","0","1","1","1","1","1","1","2","2","2","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2Wpkh","P2Wpkh_P2Sh","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","build","build","build","build","build","build","build","build","build","build","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","drop","from","from","from","from","from","from","from","from","from","init","init","init","init","init","init","init","init","init","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","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","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","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","DescriptorSinglePriv","DescriptorSinglePub","Entropy","Error","ExtScriptContext","ExtendedKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","KeyError","KeyMap","Legacy","Message","Miniscript","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","SinglePriv","SinglePub","SortedMultiVec","ValidNetworks","XPrv","XPub","any_network","as_enum","as_fail","as_public","bip39","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","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_local_validity","check_terminal_non_malleable","check_witness","check_witness","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","compressed","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","derive_public_key","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","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_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","generate_with_entropy","generate_with_entropy_default","get_hash","get_hash","get_hash","has_secret","hash","hash","hash","init","init","init","init","init","init","init","init","init","init","init","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_uncompressed","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","ne","ne","ne","new","origin","origin","other_top_level_checks","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","pks","sanity_check","satisfy","script_size","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_string","to_string","to_string","to_string","top_level_checks","top_level_checks","top_level_type_check","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_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","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","ChineseSimplified","ChineseTraditional","English","French","Italian","Japanese","Korean","Language","Mnemonic","MnemonicType","MnemonicWithPassphrase","Seed","Spanish","Words12","Words15","Words18","Words21","Words24","as_bytes","as_ref","as_ref","base32_len","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","checksum_bits","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","default","default","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","entropy","entropy_bits","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_key_size","for_phrase","for_word_count","from","from","from","from","from_entropy","from_language_code","from_phrase","generate_with_entropy","init","init","init","init","into","into","into","into","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_phrase","language","new","new","phrase","to_hex","to_hex","to_owned","to_owned","to_owned","to_owned","to_string","to_string","total_bits","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","validate","vzip","vzip","vzip","vzip","word_count","wordlist","wordmap","write_base32","AddressIndex","AddressInfo","IsDust","LastUnused","New","Peek","Reset","Wallet","add_address_validator","add_signer","address","address_validator","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","build_fee_bump","build_tx","client","coin_selection","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_funded_wallet","get_psbt_input","get_utxo","index","init","init","init","into","into","into","is_dust","is_mine","list_transactions","list_unspent","ne","network","new","new_offline","policies","public_descriptor","secp_ctx","sign","signer","sync","time","to_string","try_from","try_from","try_from","try_into","try_into","try_into","tx_builder","type_id","type_id","type_id","vzip","vzip","vzip","0","0","AddressValidator","AddressValidatorError","ConnectionError","InvalidScript","Message","TimeoutError","UserRejected","as_fail","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","fmt","fmt","from","init","into","ne","to_owned","to_string","try_from","try_into","type_id","validate","vzip","0","BranchAndBoundCoinSelection","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","LargestFirstCoinSelection","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","coin_select","coin_select","coin_select","default","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","fee_amount","fmt","fmt","fmt","from","from","from","init","init","init","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","deref","deref_mut","descriptor","deserialize","drop","export_wallet","fmt","from","from_str","init","into","label","serialize","to_string","try_from","try_into","type_id","vzip","0","Dummy","Fingerprint","InputIndexOutOfRange","InvalidKey","InvalidNonWitnessUtxo","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","PkHash","SignOptions","Signer","SignerError","SignerId","SignerOrdering","SignersContainer","UserCanceled","add_external","allow_all_sighashes","as_fail","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor_secret_key","drop","drop","drop","drop","drop","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_hash","hash","id","ids","init","init","init","init","init","into","into","into","into","into","ne","ne","new","partial_cmp","partial_cmp","remove","sign","sign_whole_tx","signers","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","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","0","0","0","get_timestamp","Bip69Lexicographic","BumpFee","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","CreateTx","OnlyChange","Shuffle","TxBuilder","TxBuilderContext","TxOrdering","Untouched","add_foreign_utxo","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","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","default","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","do_not_spend_change","drain_to","drain_wallet","drop","drop","drop","drop","drop","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_hash","get_hash","hash","hash","include_output_redeem_witness_script","init","init","init","init","init","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::blockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any::AnyBlockchain","","","bdk::blockchain::any::AnyBlockchainConfig","","","bdk::blockchain::compact_filters","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::compact_filters::CompactFiltersError","","","","","bdk::blockchain::electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora::EsploraError","","","","","","","","","","bdk::database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any::AnyBatch","","","bdk::database::any::AnyDatabase","","","bdk::database::any::AnyDatabaseConfig","","","bdk::database::memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::Descriptor","","","","","bdk::descriptor::checksum","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::error::Error","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","","bdk::descriptor::policy::PolicyError","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys::DescriptorPublicKey","","bdk::keys::DescriptorSecretKey","","bdk::keys::ExtendedKey","","bdk::keys::KeyError","","","bdk::keys::bip39","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::AddressIndex","","bdk::wallet::address_validator","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::address_validator::AddressValidatorError","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerId","","","bdk::wallet::time","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Error that can be returned to fail the validation of an …","BIP32 error","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Compact filters client error)","Block height and timestamp of the block containing the …","Error related to the parsing and usage of descriptors","Electrum client error","Encoding error","Errors that can be thrown by the Wallet","Esplora client error","External","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","Hex decoding error","Wallet’s UTXO set is not enough to cover recipient’s …","Internal, usually used for change outputs","Invalid network","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Progress value must be between 0.0 (included) and 100.0 …","Wrong number of bytes found when trying to convert to u32","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error serializing or deserializing JSON data","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript 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","Progress update error (maybe the channel has been closed)","Partially signed bitcoin transaction error","Partially signed bitcoin transaction parseerror","Rusqlite client error","This error is thrown when trying to convert Bare and …","An ECDSA error","Signing error","Sled database 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","","Blockchain backends","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the transaction is confirmed, contains height and …","Database types","","","","Create a new FeeRate with the default min relay fee value","","","","","","","","","","","","","","","","","Descriptors","Macro to write full descriptors with code","","","","","","","","","","","","","","","","","","","","Fee value (sats) if available. The availability of the fee …","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","","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","","","","confirmation block height","","","","","","","","","","","","","","","","","","","","","Type of keychain","Key formats","","","","","","","Returns Some ConfirmationTime if both height and timestamp …","Get the location of the UTXO","Reference to a transaction output","","Received value (sats)","The weight of the witness data and scriptSig expressed in …","Sent value (sats)","","","","","","confirmation block timestamp","","","","","","","","","Optional transaction","","","","","","","","","","","","","","","","","Transaction id","Get the TxOut of the UTXO","Transaction output","","","","","","","","","The UTXO","Convert weight units to virtual bytes.","Whether the tx has been verified against the consensus …","Get the version of BDK at runtime","","","","","","","","","Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","Sats available for spending","found network, for example the network of the bitcoin node","Sats needed for some transaction","requested network, for example what is given as bdk-cli …","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 …","Can compute accurate fees for the transactions found …","Trait that defines the actions that must be supported by a …","Capabilities that can be supported by a Blockchain backend","Type that contains the configuration","Trait for Blockchain types that can be created given a …","Structure that implements the logic to sync with Esplora","Can recover the full history of a wallet and not only the …","Can fetch any historical transaction given its txid","Type that implements Progress and logs at level INFO every …","Type that implements Progress and drops every update …","Trait for types that can receive and process progress …","Data sent with a progress update over a channel","Runtime-checked blockchain types","","","","","","","Broadcast a transaction","","","","","","","Compact Filters","","","","","","","","","","Electrum","","Esplora","Estimate the fee rate required to confirm a transaction in …","","","","","Create a new instance given a configuration","Return the set of Capability supported by this backend","","Return the current height","Fetch a transaction from the blockchain given its txid","","","","","","","","Create a new instance of LogProgress","Create a new instance of NoopProgress","Shortcut to create a channel (pair of Sender and Receiver) …","Setup the backend and populate the internal database for …","Populate the internal database with transactions and UTXOs","","","","","","","","","","","","","Send a new progress update","","","","","","Type that can contain any of the Blockchain types defined …","Type that can contain any of the blockchain configurations …","Compact filters client","Compact filters client","Electrum client","Electrum client","Esplora client","Esplora client","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Invalid BIP158 filter","Data to connect to a Bitcoin P2P peer","Structure implementing the required blockchain traits","Configuration for a CompactFiltersBlockchain","An error that can occur during sync with a …","The data stored in the block filters storage are corrupted","Internal database error","Wrapper for crate::error::Error","The compact filter returned is invalid","The compact filter headers returned are invalid","The headers returned are invalid","A peer sent an invalid or unexpected response","Internal I/O error","Container for unconfirmed, but valid Bitcoin transactions","The peer is missing a block in the valid chain","No peers have been specified","A peer is not connected","A Bitcoin peer","The peer doesn’t advertise the BLOOM service flag","Internal system time error","A peer took too long to reply to one of our messages","Add a transaction to the mempool","Peer address such as 127.0.0.1:18333","","","","","","","","","","","","","","","","","","","Connect to a peer over a plaintext TCP connection","Connect to a peer through a SOCKS5 proxy, optionally by …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the mempool used by this peer","Return the Bitcoin Network in use","Look-up a transaction in the mempool given an Inventory …","","Return the VersionMessage sent by the peer","Return whether or not the mempool contains a transaction …","","","","","","","","","","","","","Return whether or not the peer is still connected","Return the list of transactions contained in the mempool","","","Network used","Create a new empty mempool","Construct a new instance given a list of peers, a path to …","List of peers to try to connect to for asking headers and …","Waits for a specific incoming Bitcoin message, optionally …","Send a raw Bitcoin message to the peer","","","","Optionally skip initial skip_blocks blocks (default: 0)","Optional socks5 proxy","Optional socks5 proxy credentials","Storage dir to save partially downloaded headers and full …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrapper over an Electrum Client that implements the …","Configuration for an ElectrumBlockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Request retry count","","","URL of the socks5 proxy server or a Tor service","Stop searching addresses for transactions after finding an …","Request timeout (seconds)","","","","","","","","URL of the Electrum server (such as ElectrumX, Esplora, …","","","Invalid Bitcoin data returned","Structure that implements the logic to sync with Esplora","Configuration for an EsploraBlockchain","Errors that can happen during a sync with EsploraBlockchain","Data type used when fetching transaction history from …","Header hash not found","Header height not found","Invalid Hex data returned","HTTP response error","IO error during ureq response read","No header found in ureq response","Invalid number returned","Transaction not found","Error during ureq HTTP request","Transport error during the ureq HTTP call","","Base URL of the esplora service eg. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new instance of the client from a base URL and …","Optional URL of the proxy to use to make requests to the …","","","Stop searching addresses for transactions after finding an …","Socket read timeout.","Socket write timeout.","","","","","","","","","","","","","","","","","","","Set the inner ureq agent.","","","","","","","","","","","Container for the operations","Trait for a database that supports batch operations","Trait for operations that can be batched","Type that contains the configuration","Trait for Database types that can be created given a …","Trait for reading data from a database","Sqlite database stored on filesystem","Runtime-checked database types","Create a new batch container","","","","Read and checks the descriptor checksum for a given …","","Consume and apply a batch of operations","","A rusqlite connection object to the sqlite database","Delete the last derivation index for a keychain.","","Delete the data related to a specific script_pubkey, …","","Delete a raw transaction given its Txid","","Delete a script_pubkey given the keychain and its child …","","Delete the metadata of a transaction and optionally the …","","Delete a LocalUtxo given its OutPoint","","","","","Force changes to be written to disk","","","","Create a new instance given a configuration","","Return the last defivation index for a keychain.","","Fetch the keychain and child number of a given …","","Fetch a raw transaction given its Txid","","Fetch a script_pubkey given the child number of a keychain.","","Fetch the transaction metadata and optionally also the raw …","","Fetch a LocalUtxo given its OutPoint","","Increment the last derivation index for a keychain and …","","","","Return the list of raw transactions","","Return the list of script_pubkeys","","Return the list of transactions metadata","","Return the list of LocalUtxos","","In-memory ephemeral database","Instantiate a new SqliteDatabase instance by creating a …","Path on the local filesystem to store the sqlite file","Store the last derivation index for a given keychain.","","Store a raw transaction","","Store a script_pubkey along with its keychain and child …","","Store the metadata of a transaction","","Store a LocalUtxo","","","","","","Type that contains any of the BatchDatabase::Batch types …","Type that can contain any of the Database types defined by …","Type that can contain any of the database configurations …","In-memory ephemeral database","In-memory ephemeral database","Memory database has no config","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Configuration type for a sled::Tree database","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Configuration type for a sqlite::SqliteDatabase database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Main directory of the db","Main directory of the db","","","","","","","","","","","","","","Name of the database tree, a separated namespace for the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","In-memory ephemeral database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new empty database","","","","","","","","","","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Extended DescriptorPublicKey that has been derived","Script descriptor","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","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","Pay-to-PubKey-Hash","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","","","","","","","","","","","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","","","","","","","","","","","","","","","","","","","","","","","","","","","Derives all wildcard keys in the descriptor using the …","Get the DescriptorType of Descriptor","","","","","","","","Encode as a Bitcoin script","","","","","","Descriptor errors","Computes the “witness script” of the descriptor, i.e. …","Additional information helpful for extra analysis.","Extract the spending policy","","","","","","","","","","","","","","","","","","Add type information(Type and Extdata) to Miniscript based …","","","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 Vec with cloned version of all public keys from …","Returns Vec of PkPkh entries, representing either public …","Returns Vec with hashes of all public keys from the …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns Option::Some with hash of n’th public key or …","Returns Option::Some with hash of n’th public key from …","Returns satisfying witness and scriptSig to spend an …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","","","","","","","","","","","","","","","","","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 …","Creates a new PkPkhIter iterator that will iterate over …","Creates a new PkhIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","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 …","","Construct a new derived key","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 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 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(","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 …","","","","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Whether the descriptor is safe Checks whether all the …","Check whether the underlying Miniscript is safe under the …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Get the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor","Size, in bytes of the script-pubkey. If this Miniscript is …","","","","Descriptor templates","","","","","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Convert a descriptor using abstract keys to one using …","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","The correctness and malleability type information for the …","","","","","","Computes the scriptSig that will be in place for an …","","","","","","Whether the miniscript can exceed the resource …","","","","","","Compute the checksum of a descriptor","Error during base58 decoding","BIP32 error","The descriptor contains multiple keys with the same BIP32 …","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid character 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","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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…","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","Raw public key or extended key fingerprint","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","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","SHA256 preimage hash","Signature for a raw public key","Signature for an extended key fingerprint","Threshold items with threshold count","","","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","","","","","","","","","","","","","","","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 timestamp value","The locktime value","","","","","","","","","","","","","","","","","","","BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(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)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The MiniscriptKey corresponding to Descriptors. This can …","A Secret Key that can be either a single key or an Xprv","A Single Descriptor Secret Key with optional origin …","A Single Descriptor Key with optional origin information","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","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","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 Secret Key","Single Public Key","Contents of a “sortedmulti” descriptor","Set of valid networks for a key","Xprv","Xpub","Create a set containing mainnet, testnet and regtest","Returns the ScriptContext as a ScriptContextEnum","","Return the public version of this key, by applying either …","BIP-0039","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Consensus rules at the Miniscript satisfaction time. It is …","Policy 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 …","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","","","","","","","","","","","","","","","","","","","","","","","If this public key has a wildcard, replace it by the given …","Computes the public key corresponding to this descriptor …","","","","","","","","","","","","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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","","","","","","","","","","","","","","","","","","","","","","","","","","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 wildcards","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 …","","signatures required","The key","The key","","Create a set only containing mainnet","The fingerprint of the master key associated with this key","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","","","","Create a new instance of SortedMultiVec given a list of …","Origin information","Origin information","Other top level checks that are context specific","Other top level checks that are context specific","Override the computed set of valid networks","","","","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 …","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","","","","Check top level consensus rules.","Check top level consensus rules.","Check whether the top-level is type B","Check whether the top-level is type B","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The language determines which words will be used in a …","The primary type in this crate, most tasks require …","Determines the number of words that will be present in a …","Type for a BIP39 mnemonic with an optional passphrase","The secret value used to derive HD wallet addresses from a …","","","","","","","Get the seed value as a byte slice","","","","","","","","","","","","","Return the number of checksum bits","","","","","","","","","","","","","","","","","","","","","","","Get the original entropy value of the mnemonic phrase as a …","Return the number of entropy bits","","","","","","","","","","","","Get a MnemonicType for a mnemonic phrase representing the …","Get a MnemonicType for an existing mnemonic phrase","Get a MnemonicType for a mnemonic phrase with a specific …","","","","","Create a Mnemonic from pre-generated entropy","Construct a word list from its language code. Returns None …","Create a Mnemonic from an existing mnemonic phrase","","","","","","","","","","","","","","Consume the Mnemonic and return the phrase as a String.","Get the Language","Generates a new Mnemonic","Generates the seed from the Mnemonic and the password.","Get the mnemonic phrase as a string reference.","Outputs the hash in hexadecimal form","Outputs the hash in hexadecimal form","","","","","","","Return the number of entropy+checksum bits","","","","","","","","","","","","","Validate a mnemonic phrase","","","","","Return the number of words","Get the word list for this language","Get a WordMap that allows word -> index lookups in the …","","The address index selection strategy to use to derived an …","A derived address and the index it was found at For …","Trait to check if a value is below the dust limit","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Return the address for a specific descriptor index. Does …","Return the address for a specific descriptor index and …","A Bitcoin wallet","Add an address validator","Add an external signer","Address","Address validation callbacks","","","","","","","Broadcast a transaction to the network","Bump the fee of a transaction previously created with this …","Start building a transaction.","Return a reference to the internal blockchain client","Coin selection","","","","","","","","","","","","Wallet export","Try to finalize a PSBT","","","","","","","","Return a derived address using the external descriptor, …","Return the balance, meaning the sum of this wallet’s …","Returns the descriptor used to create adddresses for a …","Return a fake wallet that appears to be funded for testing.","get the corresponding PSBT Input for a LocalUtxo","Returns the UTXO owned by this wallet corresponding to …","Child index of this address","","","","","","","Check whether or not a value is below dust limit","Return whether or not a script is part of this wallet …","Return the list of transactions made and received by the …","Return the list of unspent outputs of this wallet","","Get the Bitcoin network the wallet is using.","Create a new “online” wallet","Create a new “offline” wallet","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","Sync the internal database with the blockchain","Cross-platform time","","","","","","","","Transaction builder","","","","","","","","","Trait to build address validators","Errors that can be returned to fail the validation of an …","Network connection error","Invalid script","A custom error message","Network request timeout error","User rejected the address","","","","","","","","","","","","","","","","","","","","","Validate or inspect an address","","","Branch and bound coin selection","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Simple and dumb coin selection","","","","","","","","","Perform the coin selection","","","","","","","","","","","","","","Total fee amount in satoshi","","","","","","","","","","","","","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.","","","","","","","","","","","","","","Structure that contains the export of a wallet","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","","","Return the external descriptor","","","Export a wallet","","","","","","Arbitrary label for the wallet","","","","","","","","Dummy identifier","The fingerprint of a BIP32 extended key","Input index is out of range","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","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 requied to …","The witness_utxo field of the transaction is required to …","The psbt contains a non-SIGHASH_ALL sighash in one of its …","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Options for a software signer","Trait for signers","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Container for multiple signers","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 …","","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","","","","","","","","Return the SignerId for this signer","Returns the list of identifiers of all the signers in the …","","","","","","","","","","","","","Default constructor","","","Removes a signer from the container and returns it","Sign a PSBT","Return whether or not the signer signs the whole …","Returns the list of signers in the container, sorted by …","","","","","","","Whether the signer should trust the witness_utxo, if the …","","","","","","","","","","","","","","","","","","","","","","","","Return the current timestamp in seconds","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 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 …","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","","","","","","","","","","","","","","","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","Set a custom fee rate","Finish the building the transaction.","","","","","","","","","","","","","","","Fill-in the psbt::Output::redeem_script and …","","","","","","","","","","","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":[1,1,1,1,1,1,0,1,1,1,0,1,2,0,1,1,1,3,1,1,1,2,1,1,1,1,1,1,1,1,0,3,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,2,1,2,4,2,0,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,2,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,0,4,7,8,4,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,0,0,2,5,7,8,1,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,4,4,1,1,2,4,5,6,3,7,8,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4,5,6,3,7,8,4,4,4,4,2,5,2,5,8,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,9,9,10,11,5,0,4,5,6,3,7,8,8,3,5,4,7,6,7,2,5,7,8,4,8,2,4,5,6,3,7,8,1,7,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,7,3,5,1,2,4,5,6,3,7,8,6,12,7,0,1,2,4,5,6,3,7,8,0,2,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,38,39,40,41,42,43,43,44,0,0,45,0,0,44,44,0,0,0,0,0,44,46,47,44,46,47,48,44,46,47,44,46,47,0,44,46,47,44,46,47,44,46,47,0,44,0,48,44,44,46,47,45,48,44,48,48,44,44,46,47,44,46,47,0,0,0,48,48,44,46,47,44,46,47,44,46,47,44,46,47,49,46,47,44,46,47,0,0,50,51,50,51,50,51,50,51,50,51,50,51,51,50,51,50,51,51,50,51,51,50,51,50,50,50,50,51,51,51,51,50,50,50,50,50,51,50,51,51,51,50,50,51,50,51,50,51,50,51,50,51,52,53,54,55,56,57,58,0,0,0,0,58,58,58,58,58,58,58,58,0,58,58,58,0,58,58,58,59,60,58,59,61,62,60,63,58,59,61,62,60,63,58,62,60,63,60,63,61,61,59,59,61,62,60,63,58,59,61,62,60,63,58,60,63,59,61,62,60,63,58,60,63,62,59,61,62,60,63,58,58,59,61,62,60,63,58,58,58,58,58,58,62,62,62,61,61,59,62,61,59,59,61,62,60,63,58,59,61,62,60,63,58,61,59,60,63,63,59,62,63,61,61,60,63,62,63,60,60,63,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,64,65,66,67,68,0,0,69,70,69,70,69,70,70,69,70,69,70,70,69,70,70,69,70,69,69,70,69,69,69,69,69,70,69,70,70,70,70,69,70,70,70,70,69,70,69,70,69,70,70,69,70,71,0,0,0,0,71,71,71,71,71,71,71,71,71,71,71,72,73,72,74,71,73,72,74,71,73,72,72,73,72,74,71,73,72,74,71,72,74,73,72,74,71,72,73,73,72,71,71,73,72,74,71,71,71,71,71,71,71,73,73,73,73,73,72,74,71,73,72,74,71,72,73,72,72,73,72,72,72,72,71,73,72,74,71,73,72,74,71,73,72,74,71,73,72,74,71,73,75,76,77,78,79,80,81,82,83,84,85,0,0,86,0,0,0,0,85,87,87,87,88,87,85,87,87,89,87,89,87,89,87,89,87,89,87,89,87,87,87,87,88,87,87,87,86,87,88,87,88,87,88,87,88,87,88,87,88,87,88,87,87,87,88,87,88,87,88,87,88,87,0,87,87,89,87,89,87,89,87,89,87,89,87,87,87,87,87,0,0,0,90,91,92,90,91,92,0,90,91,92,0,91,90,91,93,94,92,90,91,93,94,92,91,91,90,91,90,91,90,91,90,91,90,91,90,91,90,91,93,94,92,90,91,93,94,92,93,94,92,90,91,93,94,92,91,91,93,94,92,90,90,90,90,91,91,91,91,93,94,92,92,92,92,91,91,91,91,91,91,91,91,90,91,93,94,92,90,91,93,94,92,91,91,91,91,93,94,93,94,92,90,91,90,91,90,91,90,91,90,91,93,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,95,96,97,98,99,100,101,102,103,0,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,105,0,0,0,0,0,0,0,0,0,0,105,0,0,105,105,105,105,106,107,108,109,105,106,107,108,109,105,106,107,108,108,110,106,107,110,107,110,110,106,107,110,106,107,110,110,106,107,110,106,107,0,109,105,106,107,108,109,105,106,107,108,109,105,106,107,108,109,109,105,106,107,108,109,105,106,107,108,105,105,105,108,109,105,106,107,108,108,109,105,106,107,108,0,105,108,111,105,108,109,109,105,105,106,107,108,108,105,108,109,105,106,107,108,108,105,108,108,105,108,109,105,106,107,108,108,108,108,108,108,108,108,105,108,108,109,105,106,107,108,109,109,105,106,107,108,109,105,106,107,108,108,112,105,108,109,108,108,108,108,105,108,108,110,106,107,108,105,108,105,109,105,105,105,105,105,105,105,105,105,105,105,108,110,108,105,108,109,105,106,107,108,0,108,105,108,108,108,105,105,108,105,108,109,0,109,105,106,107,108,109,109,109,105,108,105,110,110,105,108,109,105,106,107,108,109,105,106,107,108,108,109,105,106,107,108,105,109,105,106,107,108,108,113,114,115,116,117,0,118,118,118,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,120,121,122,123,124,125,126,127,128,128,0,129,0,0,0,127,127,128,128,128,127,129,130,128,129,129,0,0,0,130,130,127,127,0,0,127,127,127,127,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,130,131,127,129,132,133,130,133,132,133,131,133,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,133,128,131,127,129,132,133,128,128,130,131,127,129,129,132,132,133,128,130,132,133,133,127,132,131,127,129,132,133,128,130,131,127,129,132,133,128,130,127,129,133,132,133,128,133,132,132,131,127,129,132,133,133,131,127,129,132,133,130,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,134,135,135,135,136,137,138,139,140,139,140,139,140,139,140,139,140,141,142,143,144,145,146,147,148,148,147,149,150,151,152,153,154,155,156,157,158,159,154,155,156,157,158,159,155,157,159,0,0,0,0,0,0,0,0,0,0,0,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,160,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,161,0,0,0,0,0,0,162,162,0,0,0,0,0,0,161,161,161,0,0,163,161,161,162,164,0,164,0,0,163,165,166,0,0,165,166,0,167,161,165,0,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,163,170,171,166,172,163,170,171,166,172,171,166,172,170,170,164,168,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,166,166,164,168,169,163,170,161,171,166,172,173,165,171,163,171,166,172,169,163,170,161,161,171,171,166,166,172,173,165,165,171,164,164,164,168,169,163,170,161,161,161,171,166,172,173,165,169,169,166,165,171,166,162,174,162,174,171,166,172,164,171,166,172,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,175,176,168,168,169,166,165,176,164,168,168,164,164,166,167,163,167,163,166,171,172,173,171,0,166,110,171,171,0,171,166,172,171,172,173,110,110,169,171,166,172,171,171,171,171,171,0,163,170,171,166,172,166,161,171,166,165,110,110,110,110,171,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,164,168,169,163,170,161,171,166,172,173,165,177,178,179,180,181,182,183,184,185,186,186,186,186,186,186,186,0,0,0,0,0,186,187,187,187,187,187,188,189,188,188,186,189,187,188,186,189,187,188,188,187,186,189,187,188,186,189,187,188,186,187,186,189,187,188,186,189,187,188,186,189,187,188,189,187,186,186,189,189,189,189,187,187,188,188,188,187,187,187,186,189,187,188,189,186,189,189,186,189,187,188,186,189,187,188,189,188,189,188,189,189,189,188,189,189,188,186,189,187,188,189,187,187,186,189,187,188,186,189,187,188,186,189,187,188,189,186,189,187,188,187,186,186,188,0,0,0,190,190,190,190,0,191,191,192,0,191,190,192,191,190,192,191,191,191,191,0,191,190,192,192,191,190,192,191,190,192,192,0,191,191,190,192,192,191,190,192,191,191,191,0,191,191,192,191,190,192,191,190,192,193,191,191,191,192,191,191,191,191,191,191,191,0,191,0,192,191,190,192,191,190,192,0,191,190,192,191,190,192,194,195,0,0,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,196,198,0,0,0,0,0,199,200,201,199,200,201,200,200,202,200,201,200,201,199,200,201,199,200,201,199,200,201,199,199,200,201,199,200,201,199,200,201,199,200,201,199,201,199,199,200,199,200,201,199,200,201,199,200,201,199,200,201,0,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204,205,205,206,206,206,206,206,206,206,206,206,205,0,0,0,0,0,0,206,207,208,206,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,204,204,207,208,205,206,204,207,208,205,206,204,207,208,209,205,206,204,207,208,205,206,204,207,205,206,206,204,207,208,205,205,205,206,204,207,207,208,205,205,209,207,205,206,204,207,208,205,206,204,207,208,205,204,207,205,204,207,209,209,207,205,206,204,207,208,206,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,205,206,204,207,208,210,211,212,0,213,0,214,214,0,0,214,213,0,0,0,213,215,215,215,215,215,215,215,216,217,215,213,214,216,217,215,213,214,215,216,217,215,213,214,216,217,215,213,214,213,214,215,216,217,213,214,216,217,215,213,214,216,217,215,213,214,215,215,215,216,217,215,213,214,215,215,213,214,215,215,215,216,217,215,213,214,216,217,215,213,214,213,214,213,214,215,216,217,215,213,214,216,217,215,213,214,215,215,215,215,215,213,214,215,215,215,213,216,217,215,213,214,216,217,215,213,214,216,217,215,213,214,216,217,215,213,214,215,215,216,217,215,213,214],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u8",15]],[[],["fail",8]],[[]],[[],["f32",15]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["result",4,["vec"]],["vec",3,["u5","global"]]]],[[],["keychainkind",4]],[[],["feerate",3]],[[],["localutxo",3]],[[],["weightedutxo",3]],[[],["utxo",4]],[[],["transactiondetails",3]],[[],["confirmationtime",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[],["transactiondetails",3]],[[],["confirmationtime",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["keychainkind",4]],["bool",15]],[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["confirmationtime",3]],["bool",15]],null,[[["usize",15]],["u64",15]],[[["usize",15]],["u64",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[]],[[["error",3]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["psbtparseerror",4]]],[[["error",4]]],[[["error",4]]],[[["esploraerror",4]]],[[["compactfilterserror",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["keyerror",4]],["error",4]],[[["signererror",4]]],[[["error",4]]],[[["addressvalidatorerror",4]]],[[["policyerror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["f32",15]]],[[["f32",15]]],[[["u64",15],["usize",15]],["feerate",3]],[[["u64",15],["usize",15]],["feerate",3]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["keysource",6],["option",4,["keysource"]],["derivationpath",3]],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["extendedkey","keyerror"]],["extendedkey",4]]],[[["network",4],["secp256k1",3]],[["descriptorerror",4],["result",4,["descriptorerror"]]]],[[["network",4],["secp256k1",3]],[["descriptorerror",4],["result",4,["descriptorerror"]]]],null,null,[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["confirmationtime",3]],["bool",15]],[[["u64",15],["u32",15],["option",4,["u64"]],["option",4,["u32"]]],["option",4]],[[],["outpoint",3]],null,[[["feerate",3]],[["ordering",4],["option",4,["ordering"]]]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["feerate",3]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["txout",3]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[],["usize",15]],null,[[],["str",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["capability",4]],[[],["noopprogress",3]],[[],["logprogress",3]],[[]],[[]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["capability",4]],["bool",15]],null,[[["usize",15]],[["feerate",3],["error",4],["result",4,["feerate","error"]]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],["u64",15]],[[],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["logprogress",3]],[[],["noopprogress",3]],[[]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["f32",15],["option",4,["string"]],["string",3]],[["result",4,["error"]],["error",4]]],[[["f32",15],["option",4,["string"]],["string",3]],[["result",4,["error"]],["error",4]]],[[["f32",15],["option",4,["string"]],["string",3]],[["result",4,["error"]],["error",4]]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["anyblockchainconfig",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["anyblockchainconfig",4]],["bool",15]],[[["usize",15]],[["feerate",3],["error",4],["result",4,["feerate","error"]]]],[[["formatter",3]],["result",6]],[[["compactfiltersblockchain",3]]],[[]],[[["electrumblockchain",3]]],[[["esplorablockchain",3]]],[[]],[[["compactfiltersblockchainconfig",3]]],[[["esplorablockchainconfig",3]]],[[["electrumblockchainconfig",3]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["anyblockchainconfig",4]],["bool",15]],[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[["progress",8]],[["result",4,["error"]],["error",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["transaction",3]]],null,[[],["fail",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["bitcoinpeerconfig",3]],[[],["compactfiltersblockchainconfig",3]],[[]],[[]],[[["network",4],["tosocketaddrs",8],["arc",3,["mempool"]],["mempool",3]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],[[["totargetaddr",8],["tosocketaddrs",8],["arc",3,["mempool"]],["mempool",3],["network",4],["option",4]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],[[],["mempool",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],[[["usize",15]],[["feerate",3],["error",4],["result",4,["feerate","error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["error",4]]],[[["error",3]]],[[]],[[["error",4]]],[[["error",3]]],[[["systemtimeerror",3]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[],[["arc",3,["mempool"]],["mempool",3]]],[[],["network",4]],[[["inventory",4]],[["option",4,["transaction"]],["transaction",3]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["versionmessage",3]],[[["txid",3]],["bool",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],[["transaction",3],["vec",3,["transaction"]]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],null,[[]],[[["peer",3],["vec",3,["peer"]],["option",4,["usize"]],["usize",15],["path",3],["asref",8,["path"]]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],null,[[["duration",3],["option",4,["duration"]],["str",15]],[["compactfilterserror",4],["result",4,["option","compactfilterserror"]],["option",4,["networkmessage"]]]],[[["networkmessage",4]],[["result",4,["compactfilterserror"]],["compactfilterserror",4]]],[[],["result",4]],[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,null,[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["electrumblockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["electrumblockchainconfig",3]],["bool",15]],[[["usize",15]],[["feerate",3],["error",4],["result",4,["feerate","error"]]]],[[["formatter",3]],["result",6]],[[["client",3]]],[[]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["electrumblockchainconfig",3]],["bool",15]],null,[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[],["esplorablockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["esplorablockchainconfig",3]],["bool",15]],[[["usize",15]],[["feerate",3],["error",4],["result",4,["feerate","error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["parseinterror",3]]],[[["transport",3]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[]],[[["error",3]]],[[],[["result",4,["error"]],["error",4]]],[[],[["hashset",3,["capability"]],["capability",4]]],[[],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["esplorablockchainconfig",3]],["bool",15]],[[["usize",15],["str",15]]],null,[[],["result",4]],[[["progress",8]],[["result",4,["error"]],["error",4]]],null,null,null,[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[["agent",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["keychainkind",4],["asref",8]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["asref",8]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],null,[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["keychainkind",4]],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[["keychainkind",4]],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[],["usize",15]],[[]],[[],[["vec",3,["transaction"]],["error",4],["result",4,["vec","error"]]]],[[],[["vec",3,["transaction"]],["error",4],["result",4,["vec","error"]]]],[[["keychainkind",4],["option",4,["keychainkind"]]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["keychainkind",4],["option",4,["keychainkind"]]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["bool",15]],[["vec",3,["transactiondetails"]],["error",4],["result",4,["vec","error"]]]],[[["bool",15]],[["vec",3,["transactiondetails"]],["error",4],["result",4,["vec","error"]]]],[[],[["vec",3,["localutxo"]],["error",4],["result",4,["vec","error"]]]],[[],[["vec",3,["localutxo"]],["error",4],["result",4,["vec","error"]]]],null,[[["string",3]]],null,[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["script",3],["u32",15]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["script",3],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["keychainkind",4],["asref",8]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["sqlitedatabase",3]]],[[["tree",3]]],[[["memorydatabase",3]]],[[]],[[]],[[]],[[["sleddbconfiguration",3]]],[[]],[[["sqlitedbconfiguration",3]]],[[]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["keychainkind",4]],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],[["vec",3,["transaction"]],["error",4],["result",4,["vec","error"]]]],[[["keychainkind",4],["option",4,["keychainkind"]]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["bool",15]],[["vec",3,["transactiondetails"]],["error",4],["result",4,["vec","error"]]]],[[],[["vec",3,["localutxo"]],["error",4],["result",4,["vec","error"]]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["script",3],["u32",15]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["script",3],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["keychainkind",4],["asref",8]],[["result",4,["error"]],["error",4]]],[[],[["result",4,["error"]],["error",4]]],[[],["memorydatabase",3]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["result",4,["error"]],["error",4]]],[[["formatter",3]],["result",6]],[[]],[[],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["option",4,["u32"]],["error",4],["result",4,["option","error"]]]],[[["script",3]],[["option",4],["result",4,["option","error"]],["error",4]]],[[["txid",3]],[["error",4],["result",4,["option","error"]],["option",4,["transaction"]]]],[[["keychainkind",4],["u32",15]],[["result",4,["option","error"]],["option",4,["script"]],["error",4]]],[[["bool",15],["txid",3]],[["result",4,["option","error"]],["option",4,["transactiondetails"]],["error",4]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],[[["keychainkind",4]],[["result",4,["u32","error"]],["error",4],["u32",15]]],[[],["usize",15]],[[]],[[],[["vec",3,["transaction"]],["error",4],["result",4,["vec","error"]]]],[[["keychainkind",4],["option",4,["keychainkind"]]],[["error",4],["result",4,["vec","error"]],["vec",3,["script"]]]],[[["bool",15]],[["vec",3,["transactiondetails"]],["error",4],["result",4,["vec","error"]]]],[[],[["vec",3,["localutxo"]],["error",4],["result",4,["vec","error"]]]],[[]],[[["keychainkind",4],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transaction",3]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4],["script",3],["u32",15]],[["result",4,["error"]],["error",4]]],[[["transactiondetails",3]],[["result",4,["error"]],["error",4]]],[[["localutxo",3]],[["result",4,["error"]],["error",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["network",4]],[["result",4,["address","error"]],["address",3],["error",4]]],[[],["scriptcontextenum",4]],[[],["scriptcontextenum",4]],[[],["terminal",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["global",3],["miniscript",3],["vec",3,["miniscript","global"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],null,[[],["deriveddescriptorkey",3]],[[],["descriptor",4]],[[],["legacy",4]],[[],["segwitv0",4]],[[],["miniscript",3]],[[]],[[]],[[]],[[]],[[]],[[],["ordering",4]],[[["descriptor",4]],["ordering",4]],[[["legacy",4]],["ordering",4]],[[["segwitv0",4]],["ordering",4]],[[["miniscript",3]],["ordering",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],[["descriptorpublickey",4],["descriptor",4,["descriptorpublickey"]]]],[[],["descriptortype",4]],[[],[["result",4,["descriptor"]],["descriptor",4]]],[[],[["result",4,["miniscript"]],["miniscript",3]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[],["bool",15]],[[["descriptor",4]],["bool",15]],[[["legacy",4]],["bool",15]],[[["segwitv0",4]],["bool",15]],[[["miniscript",3]],["bool",15]],null,[[],["script",3]],null,[[["secp256k1",3],["buildsatisfaction",4],["signerscontainer",3]],[["option",4,["policy"]],["descriptorerror",4],["result",4,["option","descriptorerror"]]]],[[["secp256k1",3],["buildsatisfaction",4],["signerscontainer",3]],[["result",4,["option","error"]],["option",4,["policy"]],["error",4]]],[[["secp256k1",3],["buildsatisfaction",4],["signerscontainer",3]],[["result",4,["option","error"]],["option",4,["policy"]],["error",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[["terminal",4]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[["str",15]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["str",15]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[["str",15]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[["tree",3]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["tree",3]],[["result",4,["miniscript","error"]],["miniscript",3],["error",4]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],[["global",3],["vec",3,["global"]]]],[[],[["vec",3,["pkpkh","global"]],["pkpkh",4],["global",3]]],[[],[["vec",3,["global"]],["global",3]]],[[["usize",15]],[["option",4,["miniscript"]],["miniscript",3]]],[[["usize",15]],["option",4]],[[["usize",15]],[["option",4,["pkpkh"]],["pkpkh",4]]],[[["usize",15]],["option",4]],[[],[["result",4,["error"]],["error",4]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["hash",3]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],["terminal",4]],[[["network",4],["secp256k1",3]],[["descriptorerror",4],["result",4,["descriptorerror"]]]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["iter",3]],[[],["pkiter",3]],[[],["pkpkhiter",3]],[[],["pkhiter",3]],[[],[["error",4],["result",4,["policy","error"]],["policy",4]]],[[],[["error",4],["result",4,["policy","error"]],["policy",4]]],[[],[["result",4,["lifterror"]],["lifterror",4]]],[[["miniscript",3]],[["option",4,["usize"]],["usize",15]]],[[["miniscript",3]],[["option",4,["usize"]],["usize",15]]],[[["miniscript",3]],[["option",4,["usize"]],["usize",15]]],[[],[["usize",15],["result",4,["usize","error"]],["error",4]]],[[],[["usize",15],["result",4,["usize","error"]],["error",4]]],[[],[["usize",15],["result",4,["usize","error"]],["error",4]]],[[["descriptor",4]],["bool",15]],[[["descriptorpublickey",4],["secp256k1",3]],["deriveddescriptorkey",3]],[[["barectx",4],["miniscript",3,["barectx"]]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[],["descriptor",4]],[[],["descriptor",4]],[[["miniscript",3,["legacy"]],["legacy",4]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["miniscript",3,["segwitv0"]],["segwitv0",4]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["miniscript",3,["segwitv0"]],["segwitv0",4]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],[[["usize",15],["vec",3,["global"]],["global",3]],[["descriptor",4],["error",4],["result",4,["descriptor","error"]]]],null,[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["script",3]],[["miniscript",3,["publickey"]],["result",4,["miniscript","error"]],["error",4]]],[[["secp256k1",3],["str",15]],[["error",4],["result",4,["error"]]]],[[["script",3]],[["miniscript",3,["publickey"]],["result",4,["miniscript","error"]],["error",4]]],[[],[["option",4,["ordering"]],["ordering",4]]],[[["descriptor",4]],[["option",4,["ordering"]],["ordering",4]]],[[["legacy",4]],[["option",4,["ordering"]],["ordering",4]]],[[["segwitv0",4]],[["option",4,["ordering"]],["ordering",4]]],[[["miniscript",3]],[["option",4,["ordering"]],["ordering",4]]],null,[[],["bool",15]],[[],[["error",4],["result",4,["error"]]]],[[],[["analysiserror",4],["result",4,["analysiserror"]]]],[[],[["error",4],["vec",3,["vec","global"]],["result",4,["vec","error"]]]],[[],[["error",4],["vec",3,["vec","global"]],["result",4,["vec","error"]]]],[[],["script",3]],[[],["script",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["publickey",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["hashmap",3]],["string",3]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[],[["result",4,["descriptor"]],["descriptor",4]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["script",3]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,null,null,[[["str",15]],[["descriptorerror",4],["string",3],["result",4,["string","descriptorerror"]]]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["keyerror",4]],["error",4]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["policyerror",4]]],[[]],[[],["usize",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["pkorf",3]],[[],["satisfiableitem",4]],[[],["satisfaction",4]],[[],["policy",3]],[[],["condition",3]],[[],["buildsatisfaction",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[["condition",3]],["ordering",4]],null,null,[[],["pkorf",3]],[[],["condition",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["bool",15]]],[[]],[[["satisfiableitem",4]]],[[]],[[]],[[]],[[]],[[["btreemap",3]],[["policyerror",4],["condition",3],["result",4,["condition","policyerror"]]]],[[],["u64",15]],[[]],[[],["string",3]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["condition",3]],[["ordering",4],["option",4,["ordering"]]]],[[],["bool",15]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[],[["descriptortemplateout",6],["result",4,["descriptortemplateout","descriptorerror"]],["descriptorerror",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[["network",4],["secp256k1",3]],[["error",4],["result",4,["error"]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["validnetworks",6]],[[],["scriptcontextenum",4]],[[],["fail",8]],[[["secp256k1",3]],[["descriptorpublickey",4],["descriptorkeyparseerror",3],["result",4,["descriptorpublickey","descriptorkeyparseerror"]]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["miniscript",3]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[["terminal",4]],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],[["scriptcontexterror",4],["result",4,["scriptcontexterror"]]]],[[],["scriptcontextenum",4]],[[],["privatekeygenerateoptions",3]],[[],["sortedmultivec",3]],[[],["descriptorpublickey",4]],[[],["descriptorsinglepub",3]],[[]],[[]],[[]],[[]],[[]],[[["sortedmultivec",3]],["ordering",4]],[[["descriptorpublickey",4]],["ordering",4]],[[["descriptorsinglepub",3]],["ordering",4]],null,[[]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],["descriptorpublickey",4]],[[["secp256k1",3]],[["publickey",3],["result",4,["publickey","conversionerror"]],["conversionerror",4]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[["scriptcontextenum",4]],["bool",15]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[],["bool",15]],[[["extendedpubkey",3]]],[[["extendedprivkey",3]]],[[]],[[]],[[]],[[]],[[]],[[["error",4]]],[[]],[[["error",4]]],[[]],[[]],[[]],[[]],[[]],[[["descriptorpublickey",4],["validnetworks",6]]],[[["validnetworks",6],["descriptorsecretkey",4]]],[[["str",15]],[["descriptorpublickey",4],["result",4,["descriptorpublickey"]]]],[[["str",15]],[["result",4,["descriptorsecretkey"]],["descriptorsecretkey",4]]],[[["tree",3]],[["sortedmultivec",3],["result",4,["sortedmultivec","error"]],["error",4]]],[[],["derivationpath",3]],[[],[["generatedkey",3],["result",4,["generatedkey"]]]],[[],[["generatedkey",3],["result",4,["generatedkey"]]]],[[],[["generatedkey",3],["result",4,["generatedkey"]]]],[[],[["generatedkey",3],["result",4,["generatedkey"]]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["bool",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[["keysource",6],["option",4,["keysource"]],["derivationpath",3]],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[["keysource",6],["option",4,["keysource"]],["derivationpath",3]],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["extendedkey","keyerror"]],["extendedkey",4]]],[[],[["keyerror",4],["result",4,["extendedkey","keyerror"]],["extendedkey",4]]],[[],[["keyerror",4],["result",4,["extendedkey","keyerror"]],["extendedkey",4]]],[[]],[[["network",4]],[["option",4,["extendedprivkey"]],["extendedprivkey",3]]],[[["network",4],["secp256k1",3]],["extendedpubkey",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,[[],[["error",4],["result",4,["policy","error"]],["policy",4]]],[[],["validnetworks",6]],[[],["fingerprint",3]],[[["miniscript",3]],[["option",4,["usize"]],["usize",15]]],[[],["usize",15]],[[],["usize",15]],[[["validnetworks",6]],["validnetworks",6]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["usize",15],["vec",3,["global"]],["global",3]],[["sortedmultivec",3],["result",4,["sortedmultivec","error"]],["error",4]]],null,null,[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["validnetworks",6]]],[[["sortedmultivec",3]],[["option",4,["ordering"]],["ordering",4]]],[[["descriptorpublickey",4]],[["option",4,["ordering"]],["ordering",4]]],[[["descriptorsinglepub",3]],[["option",4,["ordering"]],["ordering",4]]],null,[[],[["error",4],["result",4,["error"]]]],[[],[["error",4],["vec",3,["vec","global"]],["result",4,["vec","error"]]]],[[],["usize",15]],[[],["terminal",4]],[[],["validnetworks",6]],[[]],[[]],[[]],[[]],[[]],[[],["descriptorpublickey",4]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[["miniscript",3]],[["error",4],["result",4,["error"]]]],[[],[["result",4,["sortedmultivec"]],["sortedmultivec",3]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[],["str",15]],[[]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[["result",4,["vec"]],["vec",3,["u5","global"]]]],[[],["u8",15]],[[],["language",4]],[[],["mnemonic",3]],[[],["mnemonictype",4]],[[],["seed",3]],[[]],[[]],[[]],[[]],[[],["language",4]],[[],["mnemonictype",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[],["usize",15]],[[["language",4]],["bool",15]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["formatter",3]],[["error",3],["result",4,["error"]]]],[[["usize",15]],[["error",3],["result",4,["mnemonictype","error"]],["mnemonictype",4]]],[[["str",15]],[["error",3],["result",4,["mnemonictype","error"]],["mnemonictype",4]]],[[["usize",15]],[["error",3],["result",4,["mnemonictype","error"]],["mnemonictype",4]]],[[]],[[]],[[]],[[]],[[["language",4]],[["result",4,["mnemonic","error"]],["error",3],["mnemonic",3]]],[[["str",15]],[["option",4,["language"]],["language",4]]],[[["str",15],["language",4]],[["result",4,["mnemonic","error"]],["error",3],["mnemonic",3]]],[[],[["generatedkey",3],["result",4,["generatedkey"]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["keysource",6],["option",4,["keysource"]],["derivationpath",3]],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[["keysource",6],["option",4,["keysource"]],["derivationpath",3]],[["keyerror",4],["result",4,["descriptorkey","keyerror"]],["descriptorkey",4]]],[[],[["keyerror",4],["result",4,["extendedkey","keyerror"]],["extendedkey",4]]],[[],[["keyerror",4],["result",4,["extendedkey","keyerror"]],["extendedkey",4]]],[[],["string",3]],[[],["language",4]],[[["language",4],["mnemonictype",4]],["mnemonic",3]],[[["str",15],["mnemonic",3]],["seed",3]],[[],["str",15]],[[],["string",3]],[[],["string",3]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["string",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15],["language",4]],[["error",3],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["wordlist",3]],[[],["wordmap",3]],[[],["result",4]],null,null,null,null,null,null,null,null,[[["addressvalidator",8],["arc",3,["addressvalidator"]]]],[[["arc",3,["signer"]],["signer",8],["keychainkind",4],["signerordering",3]]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],[["result",4,["txid","error"]],["txid",3],["error",4]]],[[["txid",3]],[["result",4,["txbuilder","error"]],["txbuilder",3,["defaultcoinselectionalgorithm","bumpfee"]],["error",4]]],[[],[["defaultcoinselectionalgorithm",6],["txbuilder",3,["defaultcoinselectionalgorithm","createtx"]],["createtx",3]]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressinfo",3]],["bool",15]],null,[[["psbt",3],["signoptions",3]],[["error",4],["result",4,["bool","error"]],["bool",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["addressindex",4]],[["result",4,["addressinfo","error"]],["addressinfo",3],["error",4]]],[[],[["u64",15],["error",4],["result",4,["u64","error"]]]],[[["keychainkind",4]],["extendeddescriptor",6]],[[["str",15]]],[[["sighashtype",4],["bool",15],["option",4,["sighashtype"]],["localutxo",3]],[["input",3],["error",4],["result",4,["input","error"]]]],[[["outpoint",3]],[["error",4],["result",4,["option","error"]],["option",4,["localutxo"]]]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["bool",15]],[[["script",3]],[["error",4],["result",4,["bool","error"]],["bool",15]]],[[["bool",15]],[["vec",3,["transactiondetails"]],["error",4],["result",4,["vec","error"]]]],[[],[["vec",3,["localutxo"]],["error",4],["result",4,["vec","error"]]]],[[["addressinfo",3]],["bool",15]],[[],["network",4]],[[["option",4],["intowalletdescriptor",8],["network",4]],[["result",4,["error"]],["error",4]]],[[["option",4],["intowalletdescriptor",8],["network",4]],[["result",4,["error"]],["error",4]]],[[["keychainkind",4]],[["result",4,["option","error"]],["option",4,["policy"]],["error",4]]],[[["keychainkind",4]],[["option",4,["extendeddescriptor"]],["result",4,["option","error"]],["error",4]]],[[],["secp256k1",3]],[[["psbt",3],["signoptions",3]],[["error",4],["result",4,["bool","error"]],["bool",15]]],null,[[["progress",8],["option",4,["u32"]],["u32",15]],[["result",4,["error"]],["error",4]]],null,[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,[[],["fail",8]],[[]],[[]],[[],["addressvalidatorerror",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressvalidatorerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[],["usize",15]],[[]],[[["addressvalidatorerror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["keychainkind",4],["hdkeypaths",6],["script",3]],[["result",4,["addressvalidatorerror"]],["addressvalidatorerror",4]]],[[]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["largestfirstcoinselection",3]],[[]],[[["u64",15],["feerate",3],["weightedutxo",3],["vec",3,["weightedutxo"]]],[["result",4,["coinselectionresult","error"]],["error",4],["coinselectionresult",3]]],[[["u64",15],["feerate",3],["weightedutxo",3],["vec",3,["weightedutxo"]]],[["result",4,["coinselectionresult","error"]],["error",4],["coinselectionresult",3]]],[[["u64",15],["feerate",3],["weightedutxo",3],["vec",3,["weightedutxo"]]],[["result",4,["coinselectionresult","error"]],["error",4],["coinselectionresult",3]]],[[],["largestfirstcoinselection",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["u64",15]],[[["u64",15]]],null,[[],["u64",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,[[]],[[]],[[],[["option",4,["string"]],["string",3]]],[[["usize",15]]],[[["usize",15]]],[[],["string",3]],[[],["result",4]],[[["usize",15]]],[[["bool",15],["str",15],["wallet",3]],[["result",4,["str"]],["str",15]]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],["result",4]],[[],["usize",15]],[[]],null,[[],["result",4]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["signerid",4],["arc",3,["signer"]],["signer",8],["signerordering",3]],[["arc",3,["signer"]],["option",4,["arc"]]]],null,[[],["fail",8]],[[["secp256k1",3]],["keymap",6]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["signerid",4]],[[],["signererror",4]],[[],["signerordering",3]],[[],["signerscontainer",3]],[[],["signoptions",3]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["ordering",4]],[[["signerordering",3]],["ordering",4]],[[]],[[],["signerscontainer",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],[["descriptorsecretkey",4],["option",4,["descriptorsecretkey"]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["signerid",4]],["bool",15]],[[["signererror",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[["signerid",4]],[["option",4,["arc"]],["arc",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["hash",3]],["signerid",4]],[[["fingerprint",3]],["signerid",4]],[[]],[[]],[[]],[[]],[[["keymap",6]],["signerscontainer",3]],[[]],[[],["u64",15]],[[]],[[["secp256k1",3]],["signerid",4]],[[],[["signerid",4],["vec",3,["signerid"]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[]],[[["signerid",4]],[["ordering",4],["option",4,["ordering"]]]],[[["signerordering",3]],[["ordering",4],["option",4,["ordering"]]]],[[["signerordering",3],["signerid",4]],[["arc",3,["signer"]],["option",4,["arc"]]]],[[["option",4,["usize"]],["usize",15],["partiallysignedtransaction",3],["secp256k1",3]],[["result",4,["signererror"]],["signererror",4]]],[[],["bool",15]],[[],[["arc",3],["vec",3,["arc"]]]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["u64",15]],null,null,null,null,null,null,null,null,null,null,null,null,[[["usize",15],["outpoint",3],["input",3]],[["error",4],["result",4,["error"]]]],[[]],[[["u64",15],["script",3]]],[[["outpoint",3]]],[[["outpoint",3]],[["error",4],["result",4,["error"]]]],[[],[["error",4],["result",4,["error"]]]],[[["script",3]],[["error",4],["result",4,["error"]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["changespendpolicy",4]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[],["txordering",4]],[[],["changespendpolicy",4]],[[]],[[]],[[]],[[]],[[]],[[["txordering",4]],["ordering",4]],[[["changespendpolicy",4]],["ordering",4]],[[["coinselectionalgorithm",8]],[["txbuilder",3],["coinselectionalgorithm",8]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["script",3]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["u32",15]]],[[["txordering",4]],["bool",15]],[[["changespendpolicy",4]],["bool",15]],[[["u64",15]]],[[["feerate",3]]],[[],[["error",4],["result",4,["error"]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[]],[[]],[[["txordering",4]]],[[["txordering",4]],[["ordering",4],["option",4,["ordering"]]]],[[["changespendpolicy",4]],[["ordering",4],["option",4,["ordering"]]]],[[["vec",3,["usize"]],["string",3],["keychainkind",4],["btreemap",3,["string","vec"]]]],[[["vec",3]]],[[["sighashtype",4]]],[[["transaction",3]]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["vec",3,["outpoint"]],["outpoint",3]]],[[["i32",15]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"Error"],[4,"KeychainKind"],[4,"Utxo"],[3,"FeeRate"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[3,"TransactionDetails"],[3,"ConfirmationTime"],[6,"MnemonicWithPassphrase"],[6,"DescriptorTemplateOut"],[6,"ExtendedDescriptor"],[8,"Vbytes"],[13,"InvalidU32Bytes"],[13,"Generic"],[13,"OutputBelowDustLimit"],[13,"MissingKeyOrigin"],[13,"Key"],[13,"SpendingPolicyRequired"],[13,"InvalidPolicyPathError"],[13,"Signer"],[13,"InvalidProgressValue"],[13,"InvalidOutpoint"],[13,"Descriptor"],[13,"AddressValidator"],[13,"Encode"],[13,"Miniscript"],[13,"Bip32"],[13,"Secp256k1"],[13,"Json"],[13,"Hex"],[13,"Psbt"],[13,"PsbtParse"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Sled"],[13,"Rusqlite"],[13,"InsufficientFunds"],[13,"InvalidNetwork"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Local"],[13,"Foreign"],[4,"Capability"],[8,"ConfigurableBlockchain"],[3,"NoopProgress"],[3,"LogProgress"],[8,"Blockchain"],[8,"Progress"],[4,"AnyBlockchain"],[4,"AnyBlockchainConfig"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[4,"CompactFiltersError"],[3,"Mempool"],[3,"BitcoinPeerConfig"],[3,"Peer"],[3,"CompactFiltersBlockchain"],[3,"CompactFiltersBlockchainConfig"],[13,"Db"],[13,"Io"],[13,"Bip158"],[13,"Time"],[13,"Global"],[3,"ElectrumBlockchain"],[3,"ElectrumBlockchainConfig"],[4,"EsploraError"],[3,"EsploraBlockchainConfig"],[3,"EsploraBlockchain"],[3,"EsploraGetHistory"],[13,"Ureq"],[13,"UreqTransport"],[13,"HttpResponse"],[13,"Io"],[13,"Parsing"],[13,"BitcoinEncoding"],[13,"Hex"],[13,"TransactionNotFound"],[13,"HeaderHeightNotFound"],[13,"HeaderHashNotFound"],[8,"BatchDatabase"],[8,"ConfigurableDatabase"],[3,"SqliteDatabase"],[8,"Database"],[8,"BatchOperations"],[4,"AnyBatch"],[4,"AnyDatabase"],[4,"AnyDatabaseConfig"],[3,"SledDbConfiguration"],[3,"SqliteDbConfiguration"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[3,"MemoryDatabase"],[4,"Descriptor"],[4,"Legacy"],[4,"Segwitv0"],[3,"Miniscript"],[3,"DerivedDescriptorKey"],[8,"ScriptContext"],[8,"ExtractPolicy"],[8,"IntoWalletDescriptor"],[13,"Bare"],[13,"Pkh"],[13,"Wpkh"],[13,"Sh"],[13,"Wsh"],[4,"Error"],[13,"Key"],[13,"Policy"],[13,"InvalidDescriptorCharacter"],[13,"Bip32"],[13,"Base58"],[13,"Pk"],[13,"Miniscript"],[13,"Hex"],[4,"SatisfiableItem"],[4,"PolicyError"],[4,"Satisfaction"],[4,"BuildSatisfaction"],[3,"PkOrF"],[3,"Policy"],[3,"Condition"],[13,"Psbt"],[13,"PsbtTimelocks"],[13,"NotEnoughItemsSelected"],[13,"IndexOutOfRange"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Signature"],[13,"SignatureKey"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[8,"DescriptorTemplate"],[4,"KeyError"],[8,"GeneratableKey"],[4,"ScriptContextEnum"],[4,"ExtendedKey"],[4,"DescriptorSecretKey"],[4,"DescriptorPublicKey"],[8,"ExtScriptContext"],[3,"GeneratedKey"],[4,"DescriptorKey"],[3,"PrivateKeyGenerateOptions"],[3,"SortedMultiVec"],[3,"DescriptorSinglePub"],[3,"DescriptorSinglePriv"],[8,"GeneratableDefaultOptions"],[8,"IntoDescriptorKey"],[8,"DerivableKey"],[13,"SinglePub"],[13,"XPub"],[13,"SinglePriv"],[13,"XPrv"],[13,"Private"],[13,"Public"],[13,"Message"],[13,"Bip32"],[13,"Miniscript"],[4,"Language"],[4,"MnemonicType"],[3,"Seed"],[3,"Mnemonic"],[4,"AddressIndex"],[3,"Wallet"],[3,"AddressInfo"],[8,"IsDust"],[13,"Peek"],[13,"Reset"],[4,"AddressValidatorError"],[8,"AddressValidator"],[13,"Message"],[3,"CoinSelectionResult"],[3,"LargestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[8,"CoinSelectionAlgorithm"],[3,"WalletExport"],[3,"SignerOrdering"],[4,"SignerId"],[4,"SignerError"],[3,"SignersContainer"],[3,"SignOptions"],[8,"Signer"],[13,"PkHash"],[13,"Fingerprint"],[13,"Dummy"],[4,"TxOrdering"],[4,"ChangeSpendPolicy"],[3,"TxBuilder"],[3,"CreateTx"],[3,"BumpFee"]]}\ +"bdk":{"doc":"A modern, lightweight, descriptor-based wallet library …","t":[13,13,3,13,13,13,13,6,13,13,13,4,13,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,13,13,4,8,3,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,11,11,11,11,11,11,11,12,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,14,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,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,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,12,0,11,11,11,11,11,11,11,11,12,11,12,12,12,11,11,11,11,11,12,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,12,11,12,11,11,11,11,11,11,11,11,12,10,12,5,11,11,11,11,11,11,11,11,0,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,12,12,12,12,12,12,12,12,12,12,13,8,4,16,8,3,13,13,3,3,8,6,0,11,11,11,11,11,11,10,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,0,11,0,10,11,11,11,11,10,10,11,10,10,11,11,11,11,11,11,11,5,5,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,4,4,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,11,11,11,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,13,3,3,3,4,13,13,13,13,13,13,13,13,3,13,13,13,3,13,13,13,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,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,12,12,12,12,12,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,12,11,11,12,12,12,11,11,11,11,11,11,11,12,11,11,13,3,3,4,13,13,13,13,13,13,13,13,13,13,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,11,11,11,11,11,12,11,11,12,12,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,16,8,8,16,8,8,3,3,0,10,11,12,11,11,11,11,10,11,11,11,10,11,12,10,11,10,11,10,11,10,11,10,11,10,11,10,11,11,11,11,11,11,11,11,10,11,11,11,11,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,11,11,11,11,10,11,10,11,10,11,10,11,0,11,12,11,10,11,10,11,10,11,10,11,10,11,10,11,11,11,11,11,11,11,11,11,11,4,4,4,13,13,13,13,13,13,3,13,13,13,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,11,11,11,11,11,11,11,11,11,11,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,12,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,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,13,6,3,4,6,8,6,8,6,4,3,13,8,4,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,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,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,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,10,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,11,11,11,11,11,11,11,11,11,0,11,11,11,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,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,5,13,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,11,11,11,12,12,12,12,12,12,12,12,13,13,13,4,13,3,6,6,13,13,13,13,13,13,13,13,13,13,13,3,3,4,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,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,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,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,8,6,3,3,3,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,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,3,3,16,16,8,4,8,8,3,8,13,13,13,4,6,13,13,13,16,13,3,13,8,4,13,13,13,3,6,13,13,5,10,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,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,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,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,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,11,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,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,12,12,12,12,12,12,12,12,12,13,4,3,6,4,13,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,4,3,8,13,13,13,13,3,11,11,12,0,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,12,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,0,11,0,11,11,11,11,11,11,11,0,11,11,11,11,11,11,5,12,12,8,4,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,12,3,8,3,6,3,11,11,11,11,11,11,11,11,10,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,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,3,3,13,11,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,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,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,12,12,12,5,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,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["AddressValidator","Bip32","BlockTime","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","CompactFilters","ConfirmationTime","Descriptor","Electrum","Encode","Error","Esplora","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","Hex","InsufficientFunds","Internal","InvalidNetwork","InvalidOutpoint","InvalidPolicyPathError","InvalidProgressValue","InvalidU32Bytes","IrreplaceableTransaction","Json","Key","KeychainKind","Local","LocalUtxo","Miniscript","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","ProgressUpdateError","Psbt","PsbtParse","Rusqlite","ScriptDoesntHaveAddressForm","Secp256k1","Signer","Sled","SpendingPolicyRequired","TransactionConfirmed","TransactionDetails","TransactionNotFound","UnknownUtxo","Utxo","Vbytes","WeightedUtxo","as_byte","as_ref","as_sat_vb","base32_len","blockchain","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_base32","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","confirmation_time","database","default","default","default","default_min_relay_fee","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor","descriptor","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","fee","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_vb","from_vb","from_wu","get_hash","get_hash","hash","hash","height","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into_descriptor_key","into_extended_key","into_wallet_descriptor","into_wallet_descriptor","keychain","keys","ne","ne","ne","ne","ne","ne","new","outpoint","outpoint","partial_cmp","received","satisfaction_weight","sent","serialize","serialize","serialize","serialize","sub","timestamp","to_owned","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_from","try_into","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","type_id","utxo","vbytes","verified","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","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","available","found","needed","requested","required","required","0","outpoint","psbt_input","AccurateFees","Blockchain","Capability","Config","ConfigurableBlockchain","EsploraBlockchain","FullHistory","GetAnyTx","LogProgress","NoopProgress","Progress","ProgressData","any","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone","clone_into","clone_into","clone_into","compact_filters","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","electrum","eq","esplora","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_hash","get_height","get_tx","hash","init","init","init","into","into","into","log_progress","noop_progress","progress","setup","sync","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update","update","update","vzip","vzip","vzip","AnyBlockchain","AnyBlockchainConfig","CompactFilters","CompactFilters","Electrum","Electrum","Esplora","Esplora","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","serialize","setup","sync","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","0","0","0","0","0","0","Bip158","BitcoinPeerConfig","CompactFiltersBlockchain","CompactFiltersBlockchainConfig","CompactFiltersError","DataCorruption","Db","Global","InvalidFilter","InvalidFilterHeader","InvalidHeaders","InvalidResponse","Io","Mempool","MissingBlock","NoPeers","NotConnected","Peer","PeerBloomDisabled","Time","Timeout","add_tx","address","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone","clone_into","clone_into","connect","connect_proxy","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","drop","drop","drop","drop","drop","drop","eq","eq","estimate_fee","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_mempool","get_network","get_tx","get_tx","get_version","has_tx","init","init","init","init","init","init","into","into","into","into","into","into","is_connected","iter_txs","ne","ne","network","new","new","peers","recv","send","serialize","serialize","setup","skip_blocks","socks5","socks5_credentials","storage_dir","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","ElectrumBlockchain","ElectrumBlockchainConfig","borrow","borrow","borrow_mut","borrow_mut","broadcast","clone","clone_into","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","eq","estimate_fee","fmt","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","into","into","ne","retry","serialize","setup","socks5","stop_gap","timeout","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","url","vzip","vzip","BitcoinEncoding","EsploraBlockchain","EsploraBlockchainConfig","EsploraError","HeaderHashNotFound","HeaderHeightNotFound","Hex","HttpResponse","Io","NoHeader","Parsing","TransactionNotFound","Ureq","UreqTransport","base_url","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","clone","clone_into","concurrency","deref","deref","deref","deref_mut","deref_mut","deref_mut","deserialize","drop","drop","drop","eq","estimate_fee","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_config","get_capabilities","get_height","get_tx","init","init","init","into","into","into","ne","new","new","proxy","serialize","setup","stop_gap","timeout","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","with_agent","with_concurrency","0","0","0","0","0","0","0","0","0","0","Batch","BatchDatabase","BatchOperations","Config","ConfigurableDatabase","Database","SqliteDatabase","SyncTime","any","begin_batch","begin_batch","block_time","borrow","borrow","borrow_mut","borrow_mut","check_descriptor_checksum","check_descriptor_checksum","clone","clone_into","commit_batch","commit_batch","connection","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_sync_time","del_sync_time","del_tx","del_tx","del_utxo","del_utxo","deref","deref","deref_mut","deref_mut","deserialize","drop","drop","flush","flush","fmt","fmt","from","from","from_config","from_config","get_last_index","get_last_index","get_path_from_script_pubkey","get_path_from_script_pubkey","get_raw_tx","get_raw_tx","get_script_pubkey_from_path","get_script_pubkey_from_path","get_sync_time","get_sync_time","get_tx","get_tx","get_utxo","get_utxo","increment_last_index","increment_last_index","init","init","into","into","iter_raw_txs","iter_raw_txs","iter_script_pubkeys","iter_script_pubkeys","iter_txs","iter_txs","iter_utxos","iter_utxos","memory","new","path","serialize","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_sync_time","set_sync_time","set_tx","set_tx","set_utxo","set_utxo","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","AnyBatch","AnyDatabase","AnyDatabaseConfig","Memory","Memory","Memory","Sled","Sled","Sled","SledDbConfiguration","Sqlite","Sqlite","Sqlite","SqliteDbConfiguration","begin_batch","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_descriptor_checksum","commit_batch","del_last_index","del_last_index","del_path_from_script_pubkey","del_path_from_script_pubkey","del_raw_tx","del_raw_tx","del_script_pubkey_from_path","del_script_pubkey_from_path","del_sync_time","del_sync_time","del_tx","del_tx","del_utxo","del_utxo","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","flush","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_sync_time","get_tx","get_utxo","increment_last_index","init","init","init","init","init","into","into","into","into","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","path","path","serialize","serialize","serialize","set_last_index","set_last_index","set_raw_tx","set_raw_tx","set_script_pubkey","set_script_pubkey","set_sync_time","set_sync_time","set_tx","set_tx","set_utxo","set_utxo","tree_name","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","0","0","0","0","0","0","0","0","0","MemoryDatabase","begin_batch","borrow","borrow_mut","check_descriptor_checksum","commit_batch","default","del_last_index","del_path_from_script_pubkey","del_raw_tx","del_script_pubkey_from_path","del_sync_time","del_tx","del_utxo","deref","deref_mut","drop","flush","fmt","from","from_config","get_last_index","get_path_from_script_pubkey","get_raw_tx","get_script_pubkey_from_path","get_sync_time","get_tx","get_utxo","increment_last_index","init","into","iter_raw_txs","iter_script_pubkeys","iter_txs","iter_utxos","new","set_last_index","set_raw_tx","set_script_pubkey","set_sync_time","set_tx","set_utxo","try_from","try_into","type_id","vzip","Bare","DerivedDescriptor","DerivedDescriptorKey","Descriptor","ExtendedDescriptor","ExtractPolicy","HdKeyPaths","IntoWalletDescriptor","KeyMap","Legacy","Miniscript","Pkh","ScriptContext","Segwitv0","Sh","Wpkh","Wsh","address","as_enum","as_enum","as_inner","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","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_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","desc_type","deserialize","deserialize","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","eq","error","explicit_script","ext","extract_policy","extract_policy","extract_policy","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from_ast","from_str","from_str","from_str_insane","from_tree","from_tree","get_hash","get_hash","get_hash","get_hash","get_hash","get_leaf_pk","get_leaf_pk_pkh","get_leaf_pkh","get_nth_child","get_nth_pk","get_nth_pk_pkh","get_nth_pkh","get_satisfaction","has_mixed_timelocks","has_repeated_keys","hash","hash","hash","hash","hash","hash_to_hash160","init","init","init","init","init","into","into","into","into","into","into_inner","into_wallet_descriptor","is_deriveable","is_non_malleable","is_uncompressed","iter","iter_pk","iter_pk_pkh","iter_pkh","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","ne","new","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","serialized_len","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_public_key","to_string","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_into","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","vzip","within_resource_limits","0","0","0","0","0","get_checksum","Base58","Bip32","DuplicatedKeys","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","Pk","Policy","borrow","borrow_mut","deref","deref_mut","drop","fmt","fmt","from","from","from","from","from","from","from","from","init","into","to_string","try_from","try_into","type_id","vzip","0","0","0","0","0","0","0","0","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","Sha256Preimage","Signature","SignatureKey","Thresh","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","cmp","contribution","csv","default","default","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","get_hash","hash","id","id","init","init","init","init","init","init","init","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","ne","ne","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","current_height","input_max_height","psbt","0","0","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","0","0","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","0","0","0","0","0","0","0","0","0","1","1","1","1","1","1","2","2","2","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2Wpkh","P2Wpkh_P2Sh","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","build","build","build","build","build","build","build","build","build","build","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","drop","from","from","from","from","from","from","from","from","from","init","init","init","init","init","init","init","init","init","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","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","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","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","DescriptorSinglePriv","DescriptorSinglePub","Entropy","Error","ExtScriptContext","ExtendedKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","KeyError","KeyMap","Legacy","Message","Miniscript","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","SinglePriv","SinglePub","SortedMultiVec","ValidNetworks","XPrv","XPub","any_network","as_enum","as_public","bip39","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","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_local_validity","check_terminal_non_malleable","check_witness","check_witness","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","compressed","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derive","derive_public_key","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encode","eq","eq","eq","eq","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_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","generate_with_entropy","generate_with_entropy_default","get_hash","get_hash","get_hash","has_secret","hash","hash","hash","init","init","init","init","init","init","init","init","init","init","init","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_uncompressed","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","ne","ne","ne","new","origin","origin","other_top_level_checks","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","pks","sanity_check","satisfy","script_size","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_pubkeyhash","to_string","to_string","to_string","to_string","top_level_checks","top_level_checks","top_level_type_check","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_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","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","0","0","0","0","0","0","0","0","0","English","Language","Mnemonic","MnemonicWithPassphrase","WordCount","Words12","Words15","Words18","Words21","Words24","all","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cmp","deref","deref","deref","deref_mut","deref_mut","deref_mut","deserialize","drop","drop","drop","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from_entropy","from_entropy_in","from_str","generate_in_with","generate_with_entropy","get_hash","get_hash","hash","hash","init","init","init","into","into","into","into_descriptor_key","into_extended_key","language","language_of","ne","parse","parse_in","parse_in_normalized","parse_normalized","partial_cmp","partial_cmp","serialize","to_entropy","to_entropy_array","to_owned","to_owned","to_seed","to_seed_normalized","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","word_count","word_iter","words_by_prefix","AddressIndex","AddressInfo","IsDust","LastUnused","New","Peek","Reset","Wallet","add_address_validator","add_signer","address","address_validator","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","broadcast","build_fee_bump","build_tx","client","coin_selection","database","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_funded_wallet","get_psbt_input","get_tx","get_utxo","index","init","init","init","into","into","into","is_dust","is_mine","list_transactions","list_unspent","ne","network","new","new_offline","policies","public_descriptor","secp_ctx","sign","signer","sync","time","to_string","try_from","try_from","try_from","try_into","try_into","try_into","tx_builder","type_id","type_id","type_id","vzip","vzip","vzip","wallet_name_from_descriptor","0","0","AddressValidator","AddressValidatorError","ConnectionError","InvalidScript","Message","TimeoutError","UserRejected","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","fmt","fmt","from","init","into","ne","to_owned","to_string","try_from","try_into","type_id","validate","vzip","0","BranchAndBoundCoinSelection","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","LargestFirstCoinSelection","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","coin_select","coin_select","coin_select","default","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","fee_amount","fmt","fmt","fmt","from","from","from","init","init","init","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","deref","deref_mut","descriptor","deserialize","drop","export_wallet","fmt","from","from_str","init","into","label","serialize","to_string","try_from","try_into","type_id","vzip","0","Dummy","Fingerprint","InputIndexOutOfRange","InvalidKey","InvalidNonWitnessUtxo","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","PkHash","SignOptions","Signer","SignerError","SignerId","SignerOrdering","SignersContainer","UserCanceled","add_external","allow_all_sighashes","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","descriptor_secret_key","drop","drop","drop","drop","drop","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_hash","hash","id","ids","init","init","init","init","init","into","into","into","into","into","ne","ne","new","partial_cmp","partial_cmp","remove","sign","sign_whole_tx","signers","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","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","0","0","0","get_timestamp","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_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","default","default","default","default","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","do_not_spend_change","drain_to","drain_wallet","drop","drop","drop","drop","drop","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_hash","get_hash","hash","hash","include_output_redeem_witness_script","init","init","init","init","init","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::blockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::any::AnyBlockchain","","","bdk::blockchain::any::AnyBlockchainConfig","","","bdk::blockchain::compact_filters","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::compact_filters::CompactFiltersError","","","","","bdk::blockchain::electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::blockchain::esplora::EsploraError","","","","","","","","","","bdk::database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::database::any::AnyBatch","","","bdk::database::any::AnyDatabase","","","bdk::database::any::AnyDatabaseConfig","","","bdk::database::memory","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::Descriptor","","","","","bdk::descriptor::checksum","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::error::Error","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","","bdk::descriptor::policy::PolicyError","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys::DescriptorPublicKey","","bdk::keys::DescriptorSecretKey","","bdk::keys::ExtendedKey","","bdk::keys::KeyError","","","bdk::keys::bip39","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::AddressIndex","","bdk::wallet::address_validator","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::address_validator::AddressValidatorError","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerId","","","bdk::wallet::time","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Error that can be returned to fail the validation of an …","BIP32 error","Block height and timestamp of a block","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Compact filters client error)","DEPRECATED: Confirmation time of a transaction","Error related to the parsing and usage of descriptors","Electrum client error","Encoding error","Errors that can be thrown by the Wallet","Esplora client error","External","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","Hex decoding error","Wallet’s UTXO set is not enough to cover recipient’s …","Internal, usually used for change outputs","Invalid network","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Progress value must be between 0.0 (included) and 100.0 …","Wrong number of bytes found when trying to convert to u32","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error serializing or deserializing JSON data","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript 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","Progress update error (maybe the channel has been closed)","Partially signed bitcoin transaction error","Partially signed bitcoin transaction parse error","Rusqlite client error","This error is thrown when trying to convert Bare and …","An ECDSA error","Signing error","Sled database 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","","Blockchain backends","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the transaction is confirmed, contains height and …","Database types","","","","Create a new FeeRate with the default min relay fee value","","","","","","","","","","","","","","","","","Descriptors","Macro to write full descriptors with code","","","","","","","","","","","","","","","","","","","","Fee value (sats) if available. The availability of the fee …","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","","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","","","","confirmation block height","","","","","","","","","","","","","","","","","","","","","Type of keychain","Key formats","","","","","","","Returns Some BlockTime if both height and timestamp are …","Get the location of the UTXO","Reference to a transaction output","","Received value (sats)","The weight of the witness data and scriptSig expressed in …","Sent value (sats)","","","","","","confirmation block timestamp","","","","","","","","","Optional transaction","","","","","","","","","","","","","","","","","Transaction id","Get the TxOut of the UTXO","Transaction output","","","","","","","","","The UTXO","Convert weight units to virtual bytes.","Whether the tx has been verified against the consensus …","Get the version of BDK at runtime","","","","","","","","","Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","Sats available for spending","found network, for example the network of the bitcoin node","Sats needed for some transaction","requested network, for example what is given as bdk-cli …","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 …","Can compute accurate fees for the transactions found …","Trait that defines the actions that must be supported by a …","Capabilities that can be supported by a Blockchain backend","Type that contains the configuration","Trait for Blockchain types that can be created given a …","Structure that implements the logic to sync with Esplora","Can recover the full history of a wallet and not only the …","Can fetch any historical transaction given its txid","Type that implements Progress and logs at level INFO every …","Type that implements Progress and drops every update …","Trait for types that can receive and process progress …","Data sent with a progress update over a channel","Runtime-checked blockchain types","","","","","","","Broadcast a transaction","","","","","","","Compact Filters","","","","","","","","","","Electrum","","Esplora","Estimate the fee rate required to confirm a transaction in …","","","","","Create a new instance given a configuration","Return the set of Capability supported by this backend","","Return the current height","Fetch a transaction from the blockchain given its txid","","","","","","","","Create a new instance of LogProgress","Create a new instance of NoopProgress","Shortcut to create a channel (pair of Sender and Receiver) …","Setup the backend and populate the internal database for …","Populate the internal database with transactions and UTXOs","","","","","","","","","","","","","Send a new progress update","","","","","","Type that can contain any of the Blockchain types defined …","Type that can contain any of the blockchain configurations …","Compact filters client","Compact filters client","Electrum client","Electrum client","Esplora client","Esplora client","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Invalid BIP158 filter","Data to connect to a Bitcoin P2P peer","Structure implementing the required blockchain traits","Configuration for a CompactFiltersBlockchain","An error that can occur during sync with a …","The data stored in the block filters storage are corrupted","Internal database error","Wrapper for crate::error::Error","The compact filter returned is invalid","The compact filter headers returned are invalid","The headers returned are invalid","A peer sent an invalid or unexpected response","Internal I/O error","Container for unconfirmed, but valid Bitcoin transactions","The peer is missing a block in the valid chain","No peers have been specified","A peer is not connected","A Bitcoin peer","The peer doesn’t advertise the BLOOM service flag","Internal system time error","A peer took too long to reply to one of our messages","Add a transaction to the mempool","Peer address such as 127.0.0.1:18333","","","","","","","","","","","","","","","","","","Connect to a peer over a plaintext TCP connection","Connect to a peer through a SOCKS5 proxy, optionally by …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the mempool used by this peer","Return the Bitcoin Network in use","Look-up a transaction in the mempool given an Inventory …","","Return the VersionMessage sent by the peer","Return whether or not the mempool contains a transaction …","","","","","","","","","","","","","Return whether or not the peer is still connected","Return the list of transactions contained in the mempool","","","Network used","Create a new empty mempool","Construct a new instance given a list of peers, a path to …","List of peers to try to connect to for asking headers and …","Waits for a specific incoming Bitcoin message, optionally …","Send a raw Bitcoin message to the peer","","","","Optionally skip initial skip_blocks blocks (default: 0)","Optional socks5 proxy","Optional socks5 proxy credentials","Storage dir to save partially downloaded headers and full …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Wrapper over an Electrum Client that implements the …","Configuration for an ElectrumBlockchain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Request retry count","","","URL of the socks5 proxy server or a Tor service","Stop searching addresses for transactions after finding an …","Request timeout (seconds)","","","","","","","","URL of the Electrum server (such as ElectrumX, Esplora, …","","","Invalid Bitcoin data returned","Structure that implements the logic to sync with Esplora","Configuration for an EsploraBlockchain","Errors that can happen during a sync with EsploraBlockchain","Header hash not found","Header height not found","Invalid Hex data returned","HTTP response error","IO error during ureq response read","No header found in ureq response","Invalid number returned","Transaction not found","Error during ureq HTTP request","Transport error during the ureq HTTP call","Base URL of the esplora service","","","","","","","","","","Number of parallel requests sent to the esplora service …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new instance of the client from a base URL and …","create a config with default values given the base url and …","Optional URL of the proxy to use to make requests to the …","","","Stop searching addresses for transactions after finding an …","Socket timeout.","","","","","","","","","","","","","","","Set the inner ureq agent.","Set the number of parallel requests the client can make.","","","","","","","","","","","Container for the operations","Trait for a database that supports batch operations","Trait for operations that can be batched","Type that contains the configuration","Trait for Database types that can be created given a …","Trait for reading data from a database","Sqlite database stored on filesystem","Blockchain state at the time of syncing","Runtime-checked database types","Create a new batch container","","Block timestamp and height at the time of sync","","","","","Read and checks the descriptor checksum for a given …","","","","Consume and apply a batch of operations","","A rusqlite connection object to the sqlite database","Delete the last derivation index for a keychain.","","Delete the data related to a specific script_pubkey, …","","Delete a raw transaction given its Txid","","Delete a script_pubkey given the keychain and its child …","","Reset the sync time to None","","Delete the metadata of a transaction and optionally the …","","Delete a LocalUtxo given its OutPoint","","","","","","","","","Force changes to be written to disk","","","","","","Create a new instance given a configuration","","Return the last derivation index for a keychain.","","Fetch the keychain and child number of a given …","","Fetch a raw transaction given its Txid","","Fetch a script_pubkey given the child number of a keychain.","","Return the sync time, if present","","Fetch the transaction metadata and optionally also the raw …","","Fetch a LocalUtxo given its OutPoint","","Increment the last derivation index for a keychain and …","","","","","","Return the list of raw transactions","","Return the list of script_pubkeys","","Return the list of transactions metadata","","Return the list of LocalUtxos","","In-memory ephemeral database","Instantiate a new SqliteDatabase instance by creating a …","Path on the local filesystem to store the sqlite file","","Store the last derivation index for a given keychain.","","Store a raw transaction","","Store a script_pubkey along with its keychain and child …","","Store the sync time","","Store the metadata of a transaction","","Store a LocalUtxo","","","","","","","","","","","Type that contains any of the BatchDatabase::Batch types …","Type that can contain any of the Database types defined by …","Type that can contain any of the database configurations …","In-memory ephemeral database","In-memory ephemeral database","Memory database has no config","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Simple key-value embedded database based on sled","Configuration type for a sled::Tree database","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Sqlite embedded database using rusqlite","Configuration type for a sqlite::SqliteDatabase database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Main directory of the db","Main directory of the db","","","","","","","","","","","","","","","","Name of the database tree, a separated namespace for the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","In-memory ephemeral database","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new empty database","","","","","","","","","","","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Extended DescriptorPublicKey that has been derived","Script descriptor","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","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","Pay-to-PubKey-Hash","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","","","","","","","","","","","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","","","","","","","","","","","","","","","","","","","","","","","","","","","Derives all wildcard keys in the descriptor using the …","Get the DescriptorType of Descriptor","","","","","","","","Encode as a Bitcoin script","","","","","","Descriptor errors","Computes the “witness script” of the descriptor, i.e. …","Additional information helpful for extra analysis.","Extract the spending policy","","","","","","","","","","","","","","","","","","Add type information(Type and Extdata) to Miniscript based …","","","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 Vec with cloned version of all public keys from …","Returns Vec of PkPkh entries, representing either public …","Returns Vec with hashes of all public keys from the …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns Option::Some with hash of n’th public key or …","Returns Option::Some with hash of n’th public key from …","Returns satisfying witness and scriptSig to spend an …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","","","","","","","","","","","","","","","","","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 …","Creates a new PkPkhIter iterator that will iterate over …","Creates a new PkhIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","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 …","","Construct a new derived key","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 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 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(","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 …","","","","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Whether the descriptor is safe Checks whether all the …","Check whether the underlying Miniscript is safe under the …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Get the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor","Size, in bytes of the script-pubkey. If this Miniscript is …","","","","Descriptor templates","","","","","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Convert a descriptor using abstract keys to one using …","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","The correctness and malleability type information for the …","","","","","","Computes the scriptSig that will be in place for an …","","","","","","Whether the miniscript can exceed the resource …","","","","","","Compute the checksum of a descriptor","Error during base58 decoding","BIP32 error","The descriptor contains multiple keys with the same BIP32 …","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid character 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","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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…","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","Raw public key or extended key fingerprint","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","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","SHA256 preimage hash","Signature for a raw public key","Signature for an extended key fingerprint","Threshold items with threshold count","","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","","","","","","","","","","","","","","","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 timestamp value","The locktime value","","","","","","","","","","","","","","","","","","","BIP44 template. Expands to pkh(key/44'/0'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to sh(wpkh(key/49'/0'/0'/{0,1}/*))","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/0'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(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)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The MiniscriptKey corresponding to Descriptors. This can …","A Secret Key that can be either a single key or an Xprv","A Single Descriptor Secret Key with optional origin …","A Single Descriptor Key with optional origin information","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","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","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 Secret Key","Single Public Key","Contents of a “sortedmulti” descriptor","Set of valid networks for a key","Xprv","Xpub","Create a set containing mainnet, testnet and regtest","Returns the ScriptContext as a ScriptContextEnum","Return the public version of this key, by applying either …","BIP-0039","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Consensus rules at the Miniscript satisfaction time. It is …","Policy 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 …","Check the consensus + policy(if not disabled) rules …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","","","","","","","","","","","","","","","","","","","","","","","If this public key has a wildcard, replace it by the given …","Computes the public key corresponding to this descriptor …","","","","","","","","","","","","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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","","","","","","","","","","","","","","","","","","","","","","","","","","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 wildcards","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 …","","signatures required","The key","The key","","Create a set only containing mainnet","The fingerprint of the master key associated with this key","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","","","","Create a new instance of SortedMultiVec given a list of …","Origin information","Origin information","Other top level checks that are context specific","Other top level checks that are context specific","Override the computed set of valid networks","","","","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 …","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","","","","Check top level consensus rules.","Check top level consensus rules.","Check whether the top-level is type B","Check whether the top-level is type B","This will panic if translatefpk returns an uncompressed …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The English language.","Language to be used for the mnemonic phrase.","A mnemonic code.","Type for a BIP39 mnemonic with an optional passphrase","Type describing entropy length (aka word count) in the …","12 words mnemonic (128 bits entropy)","15 words mnemonic (160 bits entropy)","18 words mnemonic (192 bits entropy)","21 words mnemonic (224 bits entropy)","24 words mnemonic (256 bits entropy)","The list of supported languages. Language support is …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new English Mnemonic from the given entropy. …","Create a new Mnemonic in the specified language from the …","","Generate a new Mnemonic in the given language with the …","","","","","","","","","","","","","","Get the language of the Mnemonic.","Determine the language of the mnemonic.","","Parse a mnemonic and detect the language from the enabled …","Parse a mnemonic in the given language.","Parse a mnemonic in normalized UTF8 in the given language.","Parse a mnemonic in normalized UTF8.","","","","Convert the mnemonic back to the entropy used to generate …","Convert the mnemonic back to the entropy used to generate …","","","Convert to seed bytes.","Convert to seed bytes with a passphrase in normalized UTF8.","","","","","","","","","","","","","","","Get the number of words in the mnemonic.","Get an iterator over the words.","Get words from the word list that start with the given …","The address index selection strategy to use to derived an …","A derived address and the index it was found at For …","Trait to check if a value is below the dust limit","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Return the address for a specific descriptor index. Does …","Return the address for a specific descriptor index and …","A Bitcoin wallet","Add an address validator","Add an external signer","Address","Address validation callbacks","","","","","","","Broadcast a transaction to the network","Bump the fee of a transaction previously created with this …","Start building a transaction.","Return a reference to the internal blockchain client","Coin selection","Return an immutable reference to the internal database","","","","","","","","","","","","Wallet export","Try to finalize a PSBT","","","","","","","","Return a derived address using the external descriptor, …","Return the balance, meaning the sum of this wallet’s …","Returns the descriptor used to create addresses for a …","Return a fake wallet that appears to be funded for testing.","get the corresponding PSBT Input for a LocalUtxo","Return a single transactions made and received by the …","Returns the UTXO owned by this wallet corresponding to …","Child index of this address","","","","","","","Check whether or not a value is below dust limit","Return whether or not a script is part of this wallet …","Return the list of transactions made and received by the …","Return the list of unspent outputs of this wallet","","Get the Bitcoin network the wallet is using.","Create a new “online” wallet","Create a new “offline” wallet","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","Sync the internal database with the blockchain","Cross-platform time","","","","","","","","Transaction builder","","","","","","","Deterministically generate a unique name given the …","","","Trait to build address validators","Errors that can be returned to fail the validation of an …","Network connection error","Invalid script","A custom error message","Network request timeout error","User rejected the address","","","","","","","","","","","","","","","","","","","","Validate or inspect an address","","","Branch and bound coin selection","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Simple and dumb coin selection","","","","","","","","","Perform the coin selection","","","","","","","","","","","","","","Total fee amount in satoshi","","","","","","","","","","","","","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.","","","","","","","","","","","","","","Structure that contains the export of a wallet","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","","","Return the external descriptor","","","Export a wallet","","","","","","Arbitrary label for the wallet","","","","","","","","Dummy identifier","The fingerprint of a BIP32 extended key","Input index is out of range","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","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 …","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Options for a software signer","Trait for signers","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Container for multiple signers","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 …","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","","","","","","","","Return the SignerId for this signer","Returns the list of identifiers of all the signers in the …","","","","","","","","","","","","","Default constructor","","","Removes a signer from the container and returns it","Sign a PSBT","Return whether or not the signer signs the whole …","Returns the list of signers in the container, sorted by …","","","","","","","Whether the signer should trust the witness_utxo, if the …","","","","","","","","","","","","","","","","","","","","","","","","Return the current timestamp in seconds","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 …","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","","","","","","","","","","","","","","","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","Set a custom fee rate","Finish the building the transaction.","","","","","","","","","","","","","","","Fill-in the psbt::Output::redeem_script and …","","","","","","","","","","","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":[1,1,0,1,1,1,1,0,1,1,1,0,1,2,0,1,1,1,3,1,1,1,2,1,1,1,1,1,1,1,1,0,3,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,2,2,4,2,0,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,2,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,0,4,7,8,4,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,0,0,2,5,7,8,1,2,4,5,6,3,7,8,2,4,5,6,3,7,8,7,4,4,1,1,2,4,5,6,3,7,8,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4,5,6,3,7,8,4,4,4,4,2,5,2,5,8,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,9,9,10,11,5,0,4,5,6,3,7,8,8,3,5,4,7,6,7,2,5,7,8,4,8,2,4,5,6,3,7,8,1,7,1,2,4,5,6,3,7,8,1,2,4,5,6,3,7,8,7,3,5,1,2,4,5,6,3,7,8,6,12,7,0,1,2,4,5,6,3,7,8,0,2,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,38,39,40,41,42,43,43,44,0,0,45,0,0,44,44,0,0,0,0,0,44,46,47,44,46,47,48,44,46,47,44,46,47,0,44,46,47,44,46,47,44,46,47,0,44,0,48,44,44,46,47,45,48,44,48,48,44,44,46,47,44,46,47,0,0,0,48,48,44,46,47,44,46,47,44,46,47,44,46,47,49,46,47,44,46,47,0,0,50,51,50,51,50,51,50,51,50,51,50,51,51,50,51,50,51,51,50,51,51,50,51,50,50,50,50,51,51,51,51,50,50,50,50,50,51,50,51,51,51,50,50,51,50,51,50,51,50,51,50,51,52,53,54,55,56,57,58,0,0,0,0,58,58,58,58,58,58,58,58,0,58,58,58,0,58,58,58,59,60,59,61,62,60,63,58,59,61,62,60,63,58,62,60,63,60,63,61,61,59,59,61,62,60,63,58,59,61,62,60,63,58,60,63,59,61,62,60,63,58,60,63,62,59,61,62,60,63,58,58,59,61,62,60,63,58,58,58,58,58,58,62,62,62,61,61,59,62,61,59,59,61,62,60,63,58,59,61,62,60,63,58,61,59,60,63,63,59,62,63,61,61,60,63,62,63,60,60,63,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,59,61,62,60,63,58,64,65,66,67,68,0,0,69,70,69,70,69,70,70,69,70,69,70,70,69,70,70,69,70,69,69,70,69,69,69,69,69,70,69,70,70,70,70,69,70,70,70,70,69,70,69,70,69,70,70,69,70,71,0,0,0,71,71,71,71,71,71,71,71,71,71,72,73,71,72,73,71,72,73,72,72,72,73,71,72,73,71,72,72,73,71,72,72,73,73,71,71,72,73,71,71,71,71,71,71,71,72,73,73,73,73,73,71,72,73,71,72,72,73,72,72,72,73,72,72,72,71,73,71,72,73,71,72,73,71,72,73,71,72,73,73,74,75,76,77,78,79,80,81,82,83,84,0,0,85,0,0,0,0,0,84,86,87,86,87,86,87,88,86,87,87,84,86,86,89,86,89,86,89,86,89,86,89,86,89,86,89,86,86,87,86,87,87,86,87,88,86,86,87,86,87,85,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,88,86,86,87,86,87,88,86,88,86,88,86,88,86,0,86,86,87,89,86,89,86,89,86,89,86,89,86,89,86,87,86,87,86,87,86,87,86,87,0,0,0,90,91,92,90,91,92,0,90,91,92,0,91,90,91,93,94,92,90,91,93,94,92,91,91,90,91,90,91,90,91,90,91,90,91,90,91,90,91,90,91,93,94,92,90,91,93,94,92,93,94,92,90,91,93,94,92,91,91,93,94,92,90,90,90,90,91,91,91,91,93,94,92,92,92,92,91,91,91,91,91,91,91,91,91,90,91,93,94,92,90,91,93,94,92,91,91,91,91,93,94,93,94,92,90,91,90,91,90,91,90,91,90,91,90,91,93,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,90,91,93,94,92,95,96,97,98,99,100,101,102,103,0,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,105,0,0,0,0,0,0,0,0,0,0,105,0,0,105,105,105,105,106,107,108,105,106,107,109,108,105,106,107,109,108,108,110,106,107,110,107,110,110,106,107,110,106,107,110,110,106,107,110,106,107,0,105,106,107,109,108,105,106,107,109,108,105,106,107,109,108,105,106,107,109,109,108,105,106,107,109,108,105,105,105,108,105,106,107,109,108,108,105,106,107,109,108,0,105,108,111,105,108,105,105,106,107,109,109,108,108,105,108,105,106,107,109,108,108,105,108,108,105,108,105,106,107,109,108,108,108,108,108,108,108,108,105,108,108,105,106,107,109,108,109,105,106,107,109,108,105,106,107,109,108,108,112,105,108,109,108,108,108,108,105,108,108,110,106,107,108,105,108,105,109,105,105,105,105,105,105,105,105,105,105,105,108,110,108,105,108,105,106,107,109,108,0,108,105,108,108,108,105,105,108,105,108,109,0,105,106,107,109,108,109,109,105,109,108,105,110,110,105,108,105,106,107,109,108,105,106,107,109,108,108,105,106,107,109,108,105,105,106,107,109,108,108,113,114,115,116,117,0,118,118,118,0,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,120,121,122,123,124,125,126,127,128,128,0,129,0,0,0,127,127,128,128,128,127,129,130,128,129,129,0,0,0,130,130,127,127,0,0,127,127,127,127,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,130,131,127,129,132,133,130,133,132,133,131,133,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,133,128,131,127,129,132,133,128,128,130,131,127,129,129,132,132,133,128,130,132,133,133,127,132,131,127,129,132,133,128,130,131,127,129,132,133,128,130,127,129,133,132,133,128,133,132,132,131,127,129,132,133,133,131,127,129,132,133,130,128,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,131,127,129,132,133,128,130,134,135,135,135,136,137,138,139,140,139,140,139,140,139,140,139,140,141,142,143,144,145,146,147,148,148,147,149,150,151,152,153,154,155,156,157,158,159,154,155,156,157,158,159,155,157,159,0,0,0,0,0,0,0,0,0,0,0,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,160,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,151,152,153,154,155,156,157,158,159,161,0,0,0,0,0,0,162,162,0,0,0,0,0,0,161,161,161,0,0,163,161,161,162,164,0,164,0,0,163,165,166,0,0,165,166,0,167,165,0,164,168,169,166,170,171,165,172,163,173,161,164,168,169,166,170,171,165,172,163,173,161,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,169,166,170,163,173,169,166,170,163,173,169,166,170,173,173,164,168,168,169,166,170,171,165,172,163,173,161,164,168,169,166,170,171,165,172,163,173,161,166,166,164,168,169,166,170,171,165,172,163,173,161,169,169,166,170,163,169,169,166,166,170,171,165,165,172,163,173,161,161,169,164,164,164,168,169,166,170,171,165,172,163,173,161,161,161,172,172,166,165,169,166,162,174,162,174,169,166,170,164,169,166,170,164,168,169,166,170,171,165,172,163,173,161,164,168,169,166,170,171,165,172,163,173,161,175,176,168,168,166,165,172,176,164,168,168,164,164,166,167,163,167,163,166,169,170,171,169,0,166,110,169,169,0,169,166,170,169,170,171,110,110,172,169,166,170,169,169,169,169,169,0,169,166,170,163,173,166,169,166,165,161,110,110,110,110,169,164,168,169,166,170,171,165,172,163,173,161,164,168,169,166,170,171,165,172,163,173,161,164,168,169,166,170,171,165,172,163,173,161,164,168,169,166,170,171,165,172,163,173,161,177,178,179,180,181,182,183,184,185,186,0,0,0,0,187,187,187,187,187,186,186,188,187,186,188,187,186,188,186,188,186,188,186,188,187,186,188,187,188,186,188,187,186,188,186,186,188,188,186,188,187,188,188,188,188,188,186,188,186,188,186,188,187,186,188,187,188,188,188,188,188,188,188,188,188,186,188,188,188,188,186,188,188,188,186,188,186,188,187,186,188,187,186,188,187,186,188,187,188,188,186,0,0,0,189,189,189,189,0,190,190,191,0,190,189,191,190,189,191,190,190,190,190,0,190,190,189,191,191,190,189,191,190,189,191,191,0,190,190,189,191,191,190,189,191,190,190,190,0,190,190,190,191,190,189,191,190,189,191,192,190,190,190,191,190,190,190,190,190,190,190,0,190,0,191,190,189,191,190,189,191,0,190,189,191,190,189,191,0,193,194,0,0,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,195,197,0,0,0,0,0,198,199,200,198,199,200,199,199,201,199,200,199,200,198,199,200,198,199,200,198,199,200,198,198,199,200,198,199,200,198,199,200,198,199,200,198,200,198,198,199,198,199,200,198,199,200,198,199,200,198,199,200,0,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,203,204,204,205,205,205,205,205,205,205,205,205,204,0,0,0,0,0,0,205,206,207,206,207,204,205,203,206,207,204,205,203,206,207,204,205,203,206,207,204,205,203,206,207,204,203,203,206,207,204,205,203,206,207,204,205,203,206,207,208,204,205,203,206,207,204,205,203,206,204,205,205,203,206,207,204,204,204,205,203,206,206,207,204,204,208,206,204,205,203,206,207,204,205,203,206,207,204,203,206,204,203,206,208,208,206,204,205,203,206,207,205,207,204,205,203,206,207,204,205,203,206,207,204,205,203,206,207,204,205,203,206,207,209,210,211,0,212,0,213,213,0,0,213,212,0,0,0,212,214,214,214,214,214,214,214,214,215,216,214,212,213,215,216,214,212,213,214,215,216,214,212,213,215,216,214,212,213,212,213,214,215,216,212,213,215,216,214,212,213,215,216,214,212,213,214,214,214,215,216,214,212,213,214,214,212,213,214,214,214,215,216,214,212,213,215,216,214,212,213,212,213,212,213,214,215,216,214,212,213,215,216,214,212,213,214,214,214,214,214,212,213,214,214,214,212,215,216,214,212,213,215,216,214,212,213,215,216,214,212,213,215,216,214,212,213,214,214,215,216,214,212,213],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["u8",15]],[[]],[[],["f32",15]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4,[["vec",3,[["u5",3],["global",3]]]]]],[[],["keychainkind",4]],[[],["feerate",3]],[[],["localutxo",3]],[[],["weightedutxo",3]],[[],["utxo",4]],[[],["transactiondetails",3]],[[],["blocktime",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,[[]],[[],["transactiondetails",3]],[[],["blocktime",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["keychainkind",4]],["bool",15]],[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["blocktime",3]],["bool",15]],null,[[["usize",15]],["u64",15]],[[["usize",15]],["u64",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,[[["error",4]]],[[["esploraerror",4]]],[[["error",4]]],[[["compactfilterserror",4]]],[[["error",4]]],[[["error",4]]],[[]],[[["keyerror",4]],["error",4]],[[["error",3]]],[[["error",4]]],[[["addressvalidatorerror",4]]],[[["error",4]]],[[["error",4]]],[[["psbtparseerror",4]]],[[["policyerror",4]]],[[["error",4]]],[[["signererror",4]]],[[["error",4]]],[[["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["f32",15]]],[[["f32",15]]],[[["u64",15],["usize",15]],["feerate",3]],[[["u64",15],["usize",15]],["feerate",3]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["option",4,[["keysource",6]]],["derivationpath",3]],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["extendedkey",4],["keyerror",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["descriptorerror",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["descriptorerror",4]]]],null,null,[[["feerate",3]],["bool",15]],[[["localutxo",3]],["bool",15]],[[["weightedutxo",3]],["bool",15]],[[["utxo",4]],["bool",15]],[[["transactiondetails",3]],["bool",15]],[[["blocktime",3]],["bool",15]],[[["option",4,[["u32",15]]],["option",4,[["u64",15]]]],["option",4]],[[],["outpoint",3]],null,[[["feerate",3]],["option",4,[["ordering",4]]]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["feerate",3]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["txout",3]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[],["usize",15]],null,[[],["str",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],["result",4,[["error",4]]]],[[],["capability",4]],[[],["noopprogress",3]],[[],["logprogress",3]],[[]],[[]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["capability",4]],["bool",15]],null,[[["usize",15]],["result",4,[["feerate",3],["error",4]]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["result",4,[["error",4]]]],[[],["hashset",3,[["capability",4]]]],[[],["u64",15]],[[],["result",4,[["u32",15],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["logprogress",3]],[[],["noopprogress",3]],[[]],[[["progress",8]],["result",4,[["error",4]]]],[[["progress",8]],["result",4,[["error",4]]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["f32",15],["option",4,[["string",3]]]],["result",4,[["error",4]]]],[[["f32",15],["option",4,[["string",3]]]],["result",4,[["error",4]]]],[[["f32",15],["option",4,[["string",3]]]],["result",4,[["error",4]]]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],["result",4,[["error",4]]]],[[],["anyblockchainconfig",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["anyblockchainconfig",4]],["bool",15]],[[["usize",15]],["result",4,[["feerate",3],["error",4]]]],[[["formatter",3]],["result",6]],[[["esplorablockchain",3]]],[[["compactfiltersblockchain",3]]],[[]],[[["electrumblockchain",3]]],[[["electrumblockchainconfig",3]]],[[]],[[["esplorablockchainconfig",3]]],[[["compactfiltersblockchainconfig",3]]],[[],["result",4,[["error",4]]]],[[],["hashset",3,[["capability",4]]]],[[],["result",4,[["u32",15],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["anyblockchainconfig",4]],["bool",15]],[[],["result",4]],[[["progress",8]],["result",4,[["error",4]]]],[[["progress",8]],["result",4,[["error",4]]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["transaction",3]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],["result",4,[["error",4]]]],[[],["bitcoinpeerconfig",3]],[[],["compactfiltersblockchainconfig",3]],[[]],[[]],[[["tosocketaddrs",8],["arc",3,[["mempool",3]]],["network",4]],["result",4,[["compactfilterserror",4]]]],[[["totargetaddr",8],["tosocketaddrs",8],["option",4],["arc",3,[["mempool",3]]],["network",4]],["result",4,[["compactfilterserror",4]]]],[[],["mempool",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],[[["usize",15]],["result",4,[["feerate",3],["error",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[["error",4]]],[[["systemtimeerror",3]]],[[["error",4]]],[[["error",3]]],[[]],[[["error",3]]],[[],["result",4,[["error",4]]]],[[],["hashset",3,[["capability",4]]]],[[],["result",4,[["u32",15],["error",4]]]],[[],["arc",3,[["mempool",3]]]],[[],["network",4]],[[["inventory",4]],["option",4,[["transaction",3]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[],["versionmessage",3]],[[["txid",3]],["bool",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["vec",3,[["transaction",3]]]],[[["bitcoinpeerconfig",3]],["bool",15]],[[["compactfiltersblockchainconfig",3]],["bool",15]],null,[[]],[[["vec",3,[["peer",3]]],["asref",8,[["path",3]]],["option",4,[["usize",15]]]],["result",4,[["compactfilterserror",4]]]],null,[[["str",15],["option",4,[["duration",3]]]],["result",4,[["option",4,[["networkmessage",4]]],["compactfilterserror",4]]]],[[["networkmessage",4]],["result",4,[["compactfilterserror",4]]]],[[],["result",4]],[[],["result",4]],[[["progress",8]],["result",4,[["error",4]]]],null,null,null,null,[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["transaction",3]],["result",4,[["error",4]]]],[[],["electrumblockchainconfig",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["electrumblockchainconfig",3]],["bool",15]],[[["usize",15]],["result",4,[["feerate",3],["error",4]]]],[[["formatter",3]],["result",6]],[[["client",3]]],[[]],[[]],[[],["result",4,[["error",4]]]],[[],["hashset",3,[["capability",4]]]],[[],["result",4,[["u32",15],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[["electrumblockchainconfig",3]],["bool",15]],null,[[],["result",4]],[[["progress",8]],["result",4,[["error",4]]]],null,null,null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],["result",4,[["error",4]]]],[[],["esplorablockchainconfig",3]],[[]],null,[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["esplorablockchainconfig",3]],["bool",15]],[[["usize",15]],["result",4,[["feerate",3],["error",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["error",3]]],[[["error",4]]],[[["parseinterror",3]]],[[["error",4]]],[[["error",4]]],[[]],[[["transport",3]]],[[]],[[],["result",4,[["error",4]]]],[[],["hashset",3,[["capability",4]]]],[[],["result",4,[["u32",15],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[["esplorablockchainconfig",3]],["bool",15]],[[["str",15],["usize",15]]],[[["string",3],["usize",15]]],null,[[],["result",4]],[[["progress",8]],["result",4,[["error",4]]]],null,null,[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[["agent",3]]],[[["u8",15]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],null,[[]],[[]],[[]],[[]],[[["keychainkind",4],["asref",8]],["result",4,[["error",4]]]],[[["keychainkind",4],["asref",8]],["result",4,[["error",4]]]],[[],["synctime",3]],[[]],[[],["result",4,[["error",4]]]],[[],["result",4,[["error",4]]]],null,[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[],["result",4,[["error",4]]]],[[],["result",4,[["error",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["result",4,[["error",4]]]],[[],["result",4,[["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["u32",15],["error",4]]]],[[["keychainkind",4]],["result",4,[["u32",15],["error",4]]]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[],["result",4,[["vec",3,[["transaction",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["transaction",3]]],["error",4]]]],[[["option",4,[["keychainkind",4]]]],["result",4,[["vec",3,[["script",3]]],["error",4]]]],[[["option",4,[["keychainkind",4]]]],["result",4,[["vec",3,[["script",3]]],["error",4]]]],[[["bool",15]],["result",4,[["vec",3,[["transactiondetails",3]]],["error",4]]]],[[["bool",15]],["result",4,[["vec",3,[["transactiondetails",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["localutxo",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["localutxo",3]]],["error",4]]]],null,[[["string",3]]],null,[[],["result",4]],[[["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["transaction",3]],["result",4,[["error",4]]]],[[["transaction",3]],["result",4,[["error",4]]]],[[["script",3],["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["script",3],["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["synctime",3]],["result",4,[["error",4]]]],[[["synctime",3]],["result",4,[["error",4]]]],[[["transactiondetails",3]],["result",4,[["error",4]]]],[[["transactiondetails",3]],["result",4,[["error",4]]]],[[["localutxo",3]],["result",4,[["error",4]]]],[[["localutxo",3]],["result",4,[["error",4]]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["keychainkind",4],["asref",8]],["result",4,[["error",4]]]],[[],["result",4,[["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4,[["error",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["memorydatabase",3]]],[[["sqlitedatabase",3]]],[[]],[[["tree",3]]],[[]],[[]],[[]],[[["sleddbconfiguration",3]]],[[["sqlitedbconfiguration",3]]],[[]],[[],["result",4,[["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["u32",15],["error",4]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],["result",4,[["vec",3,[["transaction",3]]],["error",4]]]],[[["option",4,[["keychainkind",4]]]],["result",4,[["vec",3,[["script",3]]],["error",4]]]],[[["bool",15]],["result",4,[["vec",3,[["transactiondetails",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["localutxo",3]]],["error",4]]]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["transaction",3]],["result",4,[["error",4]]]],[[["transaction",3]],["result",4,[["error",4]]]],[[["script",3],["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["script",3],["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["synctime",3]],["result",4,[["error",4]]]],[[["synctime",3]],["result",4,[["error",4]]]],[[["transactiondetails",3]],["result",4,[["error",4]]]],[[["transactiondetails",3]],["result",4,[["error",4]]]],[[["localutxo",3]],["result",4,[["error",4]]]],[[["localutxo",3]],["result",4,[["error",4]]]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[["keychainkind",4],["asref",8]],["result",4,[["error",4]]]],[[],["result",4,[["error",4]]]],[[],["memorydatabase",3]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4,[["error",4]]]],[[["formatter",3]],["result",6]],[[]],[[],["result",4,[["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["u32",15]]],["error",4]]]],[[["script",3]],["result",4,[["option",4],["error",4]]]],[[["txid",3]],["result",4,[["option",4,[["transaction",3]]],["error",4]]]],[[["keychainkind",4],["u32",15]],["result",4,[["option",4,[["script",3]]],["error",4]]]],[[],["result",4,[["option",4,[["synctime",3]]],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["u32",15],["error",4]]]],[[],["usize",15]],[[]],[[],["result",4,[["vec",3,[["transaction",3]]],["error",4]]]],[[["option",4,[["keychainkind",4]]]],["result",4,[["vec",3,[["script",3]]],["error",4]]]],[[["bool",15]],["result",4,[["vec",3,[["transactiondetails",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["localutxo",3]]],["error",4]]]],[[]],[[["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["transaction",3]],["result",4,[["error",4]]]],[[["script",3],["keychainkind",4],["u32",15]],["result",4,[["error",4]]]],[[["synctime",3]],["result",4,[["error",4]]]],[[["transactiondetails",3]],["result",4,[["error",4]]]],[[["localutxo",3]],["result",4,[["error",4]]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["network",4]],["result",4,[["address",3],["error",4]]]],[[],["scriptcontextenum",4]],[[],["scriptcontextenum",4]],[[],["terminal",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["vec",3,[["miniscript",3],["global",3]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["terminal",4]],["result",4,[["scriptcontexterror",4]]]],[[["terminal",4]],["result",4,[["scriptcontexterror",4]]]],[[["terminal",4]],["result",4,[["scriptcontexterror",4]]]],[[],["result",4,[["scriptcontexterror",4]]]],[[],["result",4,[["scriptcontexterror",4]]]],[[],["result",4,[["scriptcontexterror",4]]]],null,[[],["descriptor",4]],[[],["legacy",4]],[[],["segwitv0",4]],[[],["deriveddescriptorkey",3]],[[],["miniscript",3]],[[]],[[]],[[]],[[]],[[]],[[["descriptor",4]],["ordering",4]],[[["legacy",4]],["ordering",4]],[[["segwitv0",4]],["ordering",4]],[[],["ordering",4]],[[["miniscript",3]],["ordering",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],["descriptor",4,[["descriptorpublickey",4]]]],[[],["descriptortype",4]],[[],["result",4,[["descriptor",4]]]],[[],["result",4,[["miniscript",3]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[["descriptor",4]],["bool",15]],[[["legacy",4]],["bool",15]],[[["segwitv0",4]],["bool",15]],[[],["bool",15]],[[["miniscript",3]],["bool",15]],null,[[],["script",3]],null,[[["signerscontainer",3],["buildsatisfaction",4],["secp256k1",3]],["result",4,[["option",4,[["policy",3]]],["descriptorerror",4]]]],[[["signerscontainer",3],["buildsatisfaction",4],["secp256k1",3]],["result",4,[["option",4,[["policy",3]]],["error",4]]]],[[["signerscontainer",3],["buildsatisfaction",4],["secp256k1",3]],["result",4,[["option",4,[["policy",3]]],["error",4]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[["terminal",4]],["result",4,[["miniscript",3],["error",4]]]],[[["str",15]],["result",4,[["descriptor",4],["error",4]]]],[[["str",15]],["result",4,[["miniscript",3],["error",4]]]],[[["str",15]],["result",4,[["miniscript",3],["error",4]]]],[[["tree",3]],["result",4,[["descriptor",4],["error",4]]]],[[["tree",3]],["result",4,[["miniscript",3],["error",4]]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["vec",3,[["global",3]]]],[[],["vec",3,[["pkpkh",4],["global",3]]]],[[],["vec",3,[["global",3]]]],[[["usize",15]],["option",4,[["miniscript",3]]]],[[["usize",15]],["option",4]],[[["usize",15]],["option",4,[["pkpkh",4]]]],[[["usize",15]],["option",4]],[[],["result",4,[["error",4]]]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["hash",3]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[],["terminal",4]],[[["secp256k1",3],["network",4]],["result",4,[["descriptorerror",4]]]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["iter",3]],[[],["pkiter",3]],[[],["pkpkhiter",3]],[[],["pkhiter",3]],[[],["result",4,[["policy",4],["error",4]]]],[[],["result",4,[["policy",4],["error",4]]]],[[],["result",4,[["lifterror",4]]]],[[["miniscript",3]],["option",4,[["usize",15]]]],[[["miniscript",3]],["option",4,[["usize",15]]]],[[["miniscript",3]],["option",4,[["usize",15]]]],[[],["result",4,[["usize",15],["error",4]]]],[[],["result",4,[["usize",15],["error",4]]]],[[],["result",4,[["usize",15],["error",4]]]],[[["descriptor",4]],["bool",15]],[[["descriptorpublickey",4],["secp256k1",3]],["deriveddescriptorkey",3]],[[["miniscript",3,[["barectx",4]]]],["result",4,[["descriptor",4],["error",4]]]],[[],["descriptor",4]],[[],["descriptor",4]],[[["miniscript",3,[["legacy",4]]]],["result",4,[["descriptor",4],["error",4]]]],[[["usize",15],["vec",3,[["global",3]]]],["result",4,[["descriptor",4],["error",4]]]],[[],["result",4,[["descriptor",4],["error",4]]]],[[["miniscript",3,[["segwitv0",4]]]],["result",4,[["descriptor",4],["error",4]]]],[[["usize",15],["vec",3,[["global",3]]]],["result",4,[["descriptor",4],["error",4]]]],[[],["result",4,[["descriptor",4],["error",4]]]],[[["miniscript",3,[["segwitv0",4]]]],["result",4,[["descriptor",4],["error",4]]]],[[["usize",15],["vec",3,[["global",3]]]],["result",4,[["descriptor",4],["error",4]]]],null,[[["miniscript",3]],["result",4,[["error",4]]]],[[["script",3]],["result",4,[["miniscript",3,[["publickey",3]]],["error",4]]]],[[["secp256k1",3],["str",15]],["result",4,[["error",4]]]],[[["script",3]],["result",4,[["miniscript",3,[["publickey",3]]],["error",4]]]],[[["descriptor",4]],["option",4,[["ordering",4]]]],[[["legacy",4]],["option",4,[["ordering",4]]]],[[["segwitv0",4]],["option",4,[["ordering",4]]]],[[],["option",4,[["ordering",4]]]],[[["miniscript",3]],["option",4,[["ordering",4]]]],null,[[],["bool",15]],[[],["result",4,[["error",4]]]],[[],["result",4,[["analysiserror",4]]]],[[],["result",4,[["vec",3,[["vec",3,[["u8",15],["global",3]]],["global",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["vec",3,[["u8",15],["global",3]]],["global",3]]],["error",4]]]],[[],["script",3]],[[],["script",3]],[[],["usize",15]],[[],["result",4]],[[],["result",4]],[[],["usize",15]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["publickey",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["hashmap",3]],["string",3]],[[["miniscript",3]],["result",4,[["error",4]]]],[[["miniscript",3]],["result",4,[["error",4]]]],[[],["result",4,[["descriptor",4]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["script",3]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,null,null,[[["str",15]],["result",4,[["string",3],["descriptorerror",4]]]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",4]]],[[["policyerror",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["error",4]]],[[["keyerror",4]],["error",4]],[[]],[[],["usize",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["pkorf",3]],[[],["satisfiableitem",4]],[[],["satisfaction",4]],[[],["policy",3]],[[],["condition",3]],[[],["buildsatisfaction",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[["condition",3]],["ordering",4]],null,null,[[],["pkorf",3]],[[],["condition",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["bool",15]]],[[["satisfiableitem",4]]],[[]],[[]],[[]],[[]],[[["btreemap",3]],["result",4,[["condition",3],["policyerror",4]]]],[[],["u64",15]],[[]],[[],["string",3]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[["condition",3]],["bool",15]],[[["policyerror",4]],["bool",15]],[[["condition",3]],["option",4,[["ordering",4]]]],[[],["bool",15]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[],["result",4,[["descriptortemplateout",6],["descriptorerror",4]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[["secp256k1",3],["network",4]],["result",4,[["error",4]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["validnetworks",6]],[[],["scriptcontextenum",4]],[[["secp256k1",3]],["result",4,[["descriptorpublickey",4],["descriptorkeyparseerror",3]]]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["miniscript",3]],["result",4,[["scriptcontexterror",4]]]],[[["terminal",4]],["result",4,[["scriptcontexterror",4]]]],[[],["result",4,[["scriptcontexterror",4]]]],[[],["result",4,[["scriptcontexterror",4]]]],[[],["sortedmultivec",3]],[[],["descriptorpublickey",4]],[[],["descriptorsinglepub",3]],[[],["scriptcontextenum",4]],[[],["privatekeygenerateoptions",3]],[[]],[[]],[[]],[[]],[[]],[[["sortedmultivec",3]],["ordering",4]],[[["descriptorpublickey",4]],["ordering",4]],[[["descriptorsinglepub",3]],["ordering",4]],null,[[]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["u32",15]],["descriptorpublickey",4]],[[["secp256k1",3]],["result",4,[["publickey",3],["conversionerror",4]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["script",3]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["scriptcontextenum",4]],["bool",15]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[],["bool",15]],[[["extendedpubkey",3]]],[[]],[[["extendedprivkey",3]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["error",4]]],[[]],[[["error",4]]],[[["descriptorpublickey",4],["validnetworks",6]]],[[["descriptorsecretkey",4],["validnetworks",6]]],[[["str",15]],["result",4,[["descriptorpublickey",4]]]],[[["str",15]],["result",4,[["descriptorsecretkey",4]]]],[[["tree",3]],["result",4,[["sortedmultivec",3],["error",4]]]],[[],["derivationpath",3]],[[],["result",4,[["generatedkey",3]]]],[[],["result",4,[["generatedkey",3]]]],[[],["result",4,[["generatedkey",3]]]],[[],["result",4,[["generatedkey",3]]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["bool",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[["option",4,[["keysource",6]]],["derivationpath",3]],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[["option",4,[["keysource",6]]],["derivationpath",3]],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["extendedkey",4],["keyerror",4]]]],[[],["result",4,[["extendedkey",4],["keyerror",4]]]],[[],["result",4,[["extendedkey",4],["keyerror",4]]]],[[]],[[["network",4]],["option",4,[["extendedprivkey",3]]]],[[["network",4],["secp256k1",3]],["extendedpubkey",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,[[],["result",4,[["policy",4],["error",4]]]],[[],["validnetworks",6]],[[],["fingerprint",3]],[[["miniscript",3]],["option",4,[["usize",15]]]],[[],["usize",15]],[[],["usize",15]],[[["validnetworks",6],["validnetworks",6]],["validnetworks",6]],[[["sortedmultivec",3]],["bool",15]],[[["descriptorpublickey",4]],["bool",15]],[[["descriptorsinglepub",3]],["bool",15]],[[["usize",15],["vec",3,[["global",3]]]],["result",4,[["sortedmultivec",3],["error",4]]]],null,null,[[["miniscript",3]],["result",4,[["error",4]]]],[[["miniscript",3]],["result",4,[["error",4]]]],[[["validnetworks",6]]],[[["sortedmultivec",3]],["option",4,[["ordering",4]]]],[[["descriptorpublickey",4]],["option",4,[["ordering",4]]]],[[["descriptorsinglepub",3]],["option",4,[["ordering",4]]]],null,[[],["result",4,[["error",4]]]],[[],["result",4,[["vec",3,[["vec",3,[["u8",15],["global",3]]],["global",3]]],["error",4]]]],[[],["usize",15]],[[],["terminal",4]],[[],["validnetworks",6]],[[]],[[]],[[]],[[]],[[]],[[],["descriptorpublickey",4]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[["miniscript",3]],["result",4,[["error",4]]]],[[["miniscript",3]],["result",4,[["error",4]]]],[[["miniscript",3]],["result",4,[["error",4]]]],[[["miniscript",3]],["result",4,[["error",4]]]],[[],["result",4,[["sortedmultivec",3]]]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["language",4]],[[],["mnemonic",3]],[[]],[[]],[[["language",4]],["ordering",4]],[[["mnemonic",3]],["ordering",4]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["result",4,[["mnemonic",3]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["language",4]],["bool",15]],[[["mnemonic",3]],["bool",15]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[]],[[]],[[]],[[],["result",4,[["mnemonic",3],["error",4]]]],[[["language",4]],["result",4,[["mnemonic",3],["error",4]]]],[[["str",15]],["result",4,[["mnemonic",3],["error",4]]]],[[["language",4],["usize",15]],["result",4,[["mnemonic",3],["error",4]]]],[[],["result",4,[["generatedkey",3]]]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[["option",4,[["keysource",6]]],["derivationpath",3]],["result",4,[["descriptorkey",4],["keyerror",4]]]],[[],["result",4,[["extendedkey",4],["keyerror",4]]]],[[],["language",4]],[[],["result",4,[["language",4],["error",4]]]],[[["mnemonic",3]],["bool",15]],[[],["result",4,[["mnemonic",3],["error",4]]]],[[["language",4]],["result",4,[["mnemonic",3],["error",4]]]],[[["language",4],["str",15]],["result",4,[["mnemonic",3],["error",4]]]],[[["str",15]],["result",4,[["mnemonic",3],["error",4]]]],[[["language",4]],["option",4,[["ordering",4]]]],[[["mnemonic",3]],["option",4,[["ordering",4]]]],[[],["result",4]],[[],["vec",3,[["u8",15],["global",3]]]],[[]],[[]],[[]],[[]],[[["str",15]]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[],["usize",15]],[[]],[[["str",15]]],null,null,null,null,null,null,null,null,[[["arc",3,[["addressvalidator",8]]]]],[[["keychainkind",4],["signerordering",3],["arc",3,[["signer",8]]]]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["transaction",3]],["result",4,[["txid",3],["error",4]]]],[[["txid",3]],["result",4,[["txbuilder",3,[["defaultcoinselectionalgorithm",6],["bumpfee",3]]],["error",4]]]],[[],["txbuilder",3,[["defaultcoinselectionalgorithm",6],["createtx",3]]]],[[]],null,[[]],[[["usize",15]]],[[["usize",15]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressinfo",3]],["bool",15]],null,[[["psbt",3],["signoptions",3]],["result",4,[["bool",15],["error",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["addressindex",4]],["result",4,[["addressinfo",3],["error",4]]]],[[],["result",4,[["u64",15],["error",4]]]],[[["keychainkind",4]],["extendeddescriptor",6]],[[["str",15]]],[[["localutxo",3],["option",4,[["sighashtype",4]]],["bool",15]],["result",4,[["input",3],["error",4]]]],[[["txid",3],["bool",15]],["result",4,[["option",4,[["transactiondetails",3]]],["error",4]]]],[[["outpoint",3]],["result",4,[["option",4,[["localutxo",3]]],["error",4]]]],null,[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["bool",15]],[[["script",3]],["result",4,[["bool",15],["error",4]]]],[[["bool",15]],["result",4,[["vec",3,[["transactiondetails",3]]],["error",4]]]],[[],["result",4,[["vec",3,[["localutxo",3]]],["error",4]]]],[[["addressinfo",3]],["bool",15]],[[],["network",4]],[[["intowalletdescriptor",8],["option",4,[["intowalletdescriptor",8]]],["network",4]],["result",4,[["error",4]]]],[[["intowalletdescriptor",8],["option",4,[["intowalletdescriptor",8]]],["network",4]],["result",4,[["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["policy",3]]],["error",4]]]],[[["keychainkind",4]],["result",4,[["option",4,[["extendeddescriptor",6]]],["error",4]]]],[[],["secp256k1",3]],[[["psbt",3],["signoptions",3]],["result",4,[["bool",15],["error",4]]]],null,[[["progress",8],["option",4,[["u32",15]]]],["result",4,[["error",4]]]],null,[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[["option",4],["network",4],["secp256k1",3]],["result",4,[["string",3],["error",4]]]],null,null,null,null,null,null,null,null,null,[[]],[[]],[[],["addressvalidatorerror",4]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["addressvalidatorerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[],["usize",15]],[[]],[[["addressvalidatorerror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["keychainkind",4],["hdkeypaths",6],["script",3]],["result",4,[["addressvalidatorerror",4]]]],[[]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["largestfirstcoinselection",3]],[[]],[[["vec",3,[["weightedutxo",3]]],["vec",3,[["weightedutxo",3]]],["feerate",3],["u64",15],["u64",15]],["result",4,[["coinselectionresult",3],["error",4]]]],[[["vec",3,[["weightedutxo",3]]],["vec",3,[["weightedutxo",3]]],["feerate",3],["u64",15],["u64",15]],["result",4,[["coinselectionresult",3],["error",4]]]],[[["vec",3,[["weightedutxo",3]]],["vec",3,[["weightedutxo",3]]],["feerate",3],["u64",15],["u64",15]],["result",4,[["coinselectionresult",3],["error",4]]]],[[],["largestfirstcoinselection",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[],["u64",15]],[[["u64",15]]],null,[[],["u64",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,[[]],[[]],[[],["option",4,[["string",3]]]],[[["usize",15]]],[[["usize",15]]],[[],["string",3]],[[],["result",4]],[[["usize",15]]],[[["wallet",3],["str",15],["bool",15]],["result",4,[["str",15]]]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],["result",4]],[[],["usize",15]],[[]],null,[[],["result",4]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["signerid",4],["signerordering",3],["arc",3,[["signer",8]]]],["option",4,[["arc",3,[["signer",8]]]]]],null,[[["secp256k1",3]],["keymap",6]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["signerid",4]],[[],["signererror",4]],[[],["signerordering",3]],[[],["signerscontainer",3]],[[],["signoptions",3]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["ordering",4]],[[["signerordering",3]],["ordering",4]],[[]],[[],["signerscontainer",3]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[],["option",4,[["descriptorsecretkey",4]]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["signerid",4]],["bool",15]],[[["signererror",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[["signerid",4]],["option",4,[["arc",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["fingerprint",3]],["signerid",4]],[[]],[[["hash",3]],["signerid",4]],[[]],[[]],[[]],[[["keymap",6]],["signerscontainer",3]],[[]],[[],["u64",15]],[[]],[[["secp256k1",3]],["signerid",4]],[[],["vec",3,[["signerid",4]]]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[["signerid",4]],["bool",15]],[[["signerordering",3]],["bool",15]],[[]],[[["signerid",4]],["option",4,[["ordering",4]]]],[[["signerordering",3]],["option",4,[["ordering",4]]]],[[["signerid",4],["signerordering",3]],["option",4,[["arc",3,[["signer",8]]]]]],[[["partiallysignedtransaction",3],["option",4,[["usize",15]]],["secp256k1",3]],["result",4,[["signererror",4]]]],[[],["bool",15]],[[],["vec",3,[["arc",3]]]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["u64",15]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[["outpoint",3],["input",3],["usize",15]],["result",4,[["error",4]]]],[[]],[[["script",3],["u64",15]]],[[["outpoint",3]]],[[["outpoint",3]],["result",4,[["error",4]]]],[[],["result",4,[["error",4]]]],[[["script",3]],["result",4,[["error",4]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["changespendpolicy",4]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[],["txordering",4]],[[],["changespendpolicy",4]],[[]],[[]],[[]],[[]],[[]],[[["txordering",4]],["ordering",4]],[[["changespendpolicy",4]],["ordering",4]],[[["coinselectionalgorithm",8]],["txbuilder",3,[["coinselectionalgorithm",8]]]],[[],["createtx",3]],[[],["bumpfee",3]],[[]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["script",3]]],[[]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[]],[[["u32",15]]],[[["txordering",4]],["bool",15]],[[["changespendpolicy",4]],["bool",15]],[[["u64",15]]],[[["feerate",3]]],[[],["result",4,[["error",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[]],[[]],[[["u32",15]]],[[]],[[]],[[["txordering",4]]],[[["txordering",4]],["option",4,[["ordering",4]]]],[[["changespendpolicy",4]],["option",4,[["ordering",4]]]],[[["btreemap",3,[["string",3],["vec",3,[["usize",15]]]]],["keychainkind",4]]],[[["vec",3]]],[[["sighashtype",4]]],[[["transaction",3]]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["vec",3,[["outpoint",3]]]]],[[["i32",15]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"Error"],[4,"KeychainKind"],[4,"Utxo"],[3,"FeeRate"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[3,"TransactionDetails"],[3,"BlockTime"],[6,"MnemonicWithPassphrase"],[6,"DescriptorTemplateOut"],[6,"ExtendedDescriptor"],[8,"Vbytes"],[13,"InvalidU32Bytes"],[13,"Generic"],[13,"OutputBelowDustLimit"],[13,"MissingKeyOrigin"],[13,"Key"],[13,"SpendingPolicyRequired"],[13,"InvalidPolicyPathError"],[13,"Signer"],[13,"InvalidProgressValue"],[13,"InvalidOutpoint"],[13,"Descriptor"],[13,"AddressValidator"],[13,"Encode"],[13,"Miniscript"],[13,"Bip32"],[13,"Secp256k1"],[13,"Json"],[13,"Hex"],[13,"Psbt"],[13,"PsbtParse"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Sled"],[13,"Rusqlite"],[13,"InsufficientFunds"],[13,"InvalidNetwork"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Local"],[13,"Foreign"],[4,"Capability"],[8,"ConfigurableBlockchain"],[3,"NoopProgress"],[3,"LogProgress"],[8,"Blockchain"],[8,"Progress"],[4,"AnyBlockchain"],[4,"AnyBlockchainConfig"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[13,"Electrum"],[13,"Esplora"],[13,"CompactFilters"],[4,"CompactFiltersError"],[3,"Mempool"],[3,"BitcoinPeerConfig"],[3,"Peer"],[3,"CompactFiltersBlockchain"],[3,"CompactFiltersBlockchainConfig"],[13,"Db"],[13,"Io"],[13,"Bip158"],[13,"Time"],[13,"Global"],[3,"ElectrumBlockchain"],[3,"ElectrumBlockchainConfig"],[4,"EsploraError"],[3,"EsploraBlockchainConfig"],[3,"EsploraBlockchain"],[13,"Ureq"],[13,"UreqTransport"],[13,"HttpResponse"],[13,"Io"],[13,"Parsing"],[13,"BitcoinEncoding"],[13,"Hex"],[13,"TransactionNotFound"],[13,"HeaderHeightNotFound"],[13,"HeaderHashNotFound"],[8,"BatchDatabase"],[8,"ConfigurableDatabase"],[3,"SqliteDatabase"],[3,"SyncTime"],[8,"Database"],[8,"BatchOperations"],[4,"AnyBatch"],[4,"AnyDatabase"],[4,"AnyDatabaseConfig"],[3,"SledDbConfiguration"],[3,"SqliteDbConfiguration"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[13,"Memory"],[13,"Sled"],[13,"Sqlite"],[3,"MemoryDatabase"],[4,"Descriptor"],[4,"Legacy"],[4,"Segwitv0"],[3,"Miniscript"],[3,"DerivedDescriptorKey"],[8,"ScriptContext"],[8,"ExtractPolicy"],[8,"IntoWalletDescriptor"],[13,"Bare"],[13,"Pkh"],[13,"Wpkh"],[13,"Sh"],[13,"Wsh"],[4,"Error"],[13,"Key"],[13,"Policy"],[13,"InvalidDescriptorCharacter"],[13,"Bip32"],[13,"Base58"],[13,"Pk"],[13,"Miniscript"],[13,"Hex"],[4,"SatisfiableItem"],[4,"PolicyError"],[4,"Satisfaction"],[4,"BuildSatisfaction"],[3,"PkOrF"],[3,"Policy"],[3,"Condition"],[13,"Psbt"],[13,"PsbtTimelocks"],[13,"NotEnoughItemsSelected"],[13,"IndexOutOfRange"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Signature"],[13,"SignatureKey"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[8,"DescriptorTemplate"],[4,"KeyError"],[8,"GeneratableKey"],[4,"ScriptContextEnum"],[4,"ExtendedKey"],[4,"DescriptorSecretKey"],[4,"DescriptorPublicKey"],[8,"ExtScriptContext"],[3,"GeneratedKey"],[3,"SortedMultiVec"],[3,"DescriptorSinglePub"],[3,"DescriptorSinglePriv"],[4,"DescriptorKey"],[3,"PrivateKeyGenerateOptions"],[8,"GeneratableDefaultOptions"],[8,"IntoDescriptorKey"],[8,"DerivableKey"],[13,"SinglePub"],[13,"XPub"],[13,"SinglePriv"],[13,"XPrv"],[13,"Private"],[13,"Public"],[13,"Message"],[13,"Bip32"],[13,"Miniscript"],[4,"Language"],[4,"WordCount"],[3,"Mnemonic"],[4,"AddressIndex"],[3,"Wallet"],[3,"AddressInfo"],[8,"IsDust"],[13,"Peek"],[13,"Reset"],[4,"AddressValidatorError"],[8,"AddressValidator"],[13,"Message"],[3,"CoinSelectionResult"],[3,"LargestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[8,"CoinSelectionAlgorithm"],[3,"WalletExport"],[3,"SignerOrdering"],[4,"SignerId"],[4,"SignerError"],[3,"SignersContainer"],[3,"SignOptions"],[8,"Signer"],[13,"PkHash"],[13,"Fingerprint"],[13,"Dummy"],[4,"TxOrdering"],[4,"ChangeSpendPolicy"],[3,"TxBuilder"],[3,"CreateTx"],[3,"BumpFee"]]}\ }'); if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.js index 91de2a155a..eb6d6f7b9e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.js @@ -1 +1 @@ -(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias"];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){ar.push(results[entry])}}results=ar;var i,len,result;for(i=0,len=results.length;ib?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){var tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){return obj[GENERICS_DATA].some(function(name){return name===val.name})}return false}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}else if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,}}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args)}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,}}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned)}if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,}}results[fullId].lev=Math.min(results[fullId].lev,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type,query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var duplicates={};var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){if(item.is_alias!==true){if(duplicates[item.fullPath]){return}duplicates[item.fullPath]=true}var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :(
    "+"Try on
    DuckDuckGo?

    "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first){var search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){var elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}var query=getQuery(searchState.input.value);currentResults=query.id;var ret_others=addTab(results.others,query);var ret_in_args=addTab(results.in_args,query,false);var ret_returned=addTab(results.returned,query,false);var currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}var output="

    Results for "+escape(query.query)+(query.type?" (type: "+escape(query.type)+")":"")+"

    "+"
    "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
    ";var resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;search.appendChild(resultsElem);searchState.focusedByTab=[null,null,null];searchState.showResults(search);var elems=document.getElementById("titles").childNodes;elems[0].onclick=function(){printTab(0)};elems[1].onclick=function(){printTab(1)};elems[2].onclick=function(){printTab(2)};printTab(currentTab)}function execSearch(query,searchWords,filterCrates){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0,len=positions.length;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev}}return start}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0,arrays_len=arrays.length;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1}}}return ret}function tokenizeQuery(raw){var i,matched;var l=raw.length;var depth=0;var nextAngle=/(<|>)/g;var ret=[];var start=0;for(i=0;i'){depth+=1}break;case">":if(depth>0){depth-=1}break;case",":if(depth===0){ret.push(raw.substring(start,i));start=i+1}break}}if(start!==i){ret.push(raw.substring(start,i))}return ret}var queries=tokenizeQuery(query.raw);var results={"in_args":[],"returned":[],"others":[],};for(var i=0,len=queries.length;i1){return{"in_args":mergeArrays(results.in_args),"returned":mergeArrays(results.returned),"others":mergeArrays(results.others),}}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function getFilterCrates(){var elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return undefined}function search(e,forced){var params=searchState.getQueryStringParams();var query=getQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(query.query.length===0){return}if(!forced&&query.id===currentResults){if(query.query.length>0){searchState.putBackSearch(searchState.input)}return}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=getNakedUrl()+"?search="+encodeURIComponent(query.raw)+window.location.hash;if(!history.state&&!params.search){history.pushState(query,"",newURL)}else{history.replaceState(query,"",newURL)}}var filterCrates=getFilterCrates();showResults(execSearch(query,index,filterCrates),params.go_to_first)}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];var i,word;var currentIndex=0;var id=0;for(var crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}var crateSize=0;searchWords.push(crate);var crateRow={crate:crate,ty:1,name:crate,path:"",desc:rawSearchIndex[crate].doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),};id+=1;searchIndex.push(crateRow);currentIndex+=1;var itemTypes=rawSearchIndex[crate].t;var itemNames=rawSearchIndex[crate].n;var itemPaths=rawSearchIndex[crate].q;var itemDescs=rawSearchIndex[crate].d;var itemParentIdxs=rawSearchIndex[crate].i;var itemFunctionSearchTypes=rawSearchIndex[crate].f;var paths=rawSearchIndex[crate].p;var aliases=rawSearchIndex[crate].a;var len=paths.length;for(i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:itemFunctionSearchTypes[i],id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){ALIASES[crate]={};var j,local_aliases;for(var alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}local_aliases=aliases[alias_name];for(j=0,len=local_aliases.length;j0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=function(){var qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}index=buildIndex(rawSearchIndex);registerSearchEvents();if(searchState.getQueryStringParams().search){search()}};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file +(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[result.id];obj.lev=result.lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates[obj.fullPath]){continue}duplicates[obj.fullPath]=true;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){var result=results[entry];result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};ar.push(result)}}results=ar;if(results.length===0){return[]}results.sort(function(aaa,bbb){var a,b;a=(aaa.word!==val);b=(bbb.word!==val);if(a!==b){return a-b}a=(aaa.lev);b=(bbb.lev);if(a!==b){return a-b}a=(aaa.item.crate!==window.currentCrate);b=(bbb.item.crate!==window.currentCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(var i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){var found=false;if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){found=obj[GENERICS_DATA].some(function(gen){return gen[NAME]===val.name})}return found?0:MAX_LEV_DISTANCE+1}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}function addIntoResults(isExact,res,fullId,id,index,lev){if(lev===0||(!isExact&&lev<=MAX_LEV_DISTANCE)){if(res[fullId]!==undefined){var result=res[fullId];if(result.dontValidate||result.lev<=lev){return}}res[fullId]={id:id,index:index,dontValidate:isExact,lev:lev,}}}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i0){firstNonZeroDistance=distance;break}}in_args=firstNonZeroDistance}addIntoResults(true,results_in_args,fullId,i,-1,in_args);addIntoResults(true,results_returned,fullId,i,-1,returned);if(is_module){addIntoResults(true,results,fullId,i,-1,0)}}}query.inputs=inputs.map(function(input){return input.name});query.output=output.name}else{query.inputs=[val];query.output=val;query.search=val;val=val.replace(/_/g,"");var valGenerics=extractGenerics(val);var paths=valLower.split("::");removeEmptyStringsFromArray(paths);val=paths[paths.length-1];var contains=paths.slice(0,paths.length>1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}addIntoResults(false,results_in_args,fullId,j,index,in_args);addIntoResults(false,results_returned,fullId,j,index,returned);if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}addIntoResults(false,results,fullId,j,index,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type="",query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :(
    "+"Try on DuckDuckGo?

    "+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first){var search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){var elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}var query=getQuery(searchState.input.value);currentResults=query.id;var ret_others=addTab(results.others,query,true);var ret_in_args=addTab(results.in_args,query,false);var ret_returned=addTab(results.returned,query,false);var currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}var output="

    Results for "+escape(query.query)+(query.type?" (type: "+escape(query.type)+")":"")+"

    "+"
    "+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
    ";var resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;search.appendChild(resultsElem);searchState.focusedByTab=[null,null,null];searchState.showResults(search);var elems=document.getElementById("titles").childNodes;elems[0].onclick=function(){printTab(0)};elems[1].onclick=function(){printTab(1)};elems[2].onclick=function(){printTab(2)};printTab(currentTab)}function execSearch(query,searchWords,filterCrates){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0,len=positions.length;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev}}return start}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0,arrays_len=arrays.length;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1}}}return ret}function tokenizeQuery(raw){var i,matched;var l=raw.length;var depth=0;var nextAngle=/(<|>)/g;var ret=[];var start=0;for(i=0;i'){depth+=1}break;case">":if(depth>0){depth-=1}break;case",":if(depth===0){ret.push(raw.substring(start,i));start=i+1}break}}if(start!==i){ret.push(raw.substring(start,i))}return ret}var queries=tokenizeQuery(query.raw);var results={"in_args":[],"returned":[],"others":[],};for(var i=0,len=queries.length;i1){return{"in_args":mergeArrays(results.in_args),"returned":mergeArrays(results.returned),"others":mergeArrays(results.others),}}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function getFilterCrates(){var elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return undefined}function search(e,forced){var params=searchState.getQueryStringParams();var query=getQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(query.query.length===0){return}if(!forced&&query.id===currentResults){if(query.query.length>0){searchState.putBackSearch(searchState.input)}return}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=getNakedUrl()+"?search="+encodeURIComponent(query.raw)+window.location.hash;if(!history.state&&!params.search){history.pushState(query,"",newURL)}else{history.replaceState(query,"",newURL)}}var filterCrates=getFilterCrates();showResults(execSearch(query,searchWords,filterCrates),params["go_to_first"])}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];var i,word;var currentIndex=0;var id=0;for(var crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}var crateSize=0;var crateCorpus=rawSearchIndex[crate];searchWords.push(crate);var crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),};id+=1;searchIndex.push(crateRow);currentIndex+=1;var itemTypes=crateCorpus.t;var itemNames=crateCorpus.n;var itemPaths=crateCorpus.q;var itemDescs=crateCorpus.d;var itemParentIdxs=crateCorpus.i;var itemFunctionSearchTypes=crateCorpus.f;var paths=crateCorpus.p;var aliases=crateCorpus.a;var len=paths.length;for(i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:itemFunctionSearchTypes[i],id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){ALIASES[crate]={};var j,local_aliases;for(var alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}local_aliases=aliases[alias_name];for(j=0,len=local_aliases.length;j0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=function(){var qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}searchWords=buildIndex(rawSearchIndex);registerSearchEvents();if(searchState.getQueryStringParams().search){search()}};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html index e04d80ec2e..894666d940 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/settings.html @@ -1,4 +1,5 @@ -Rustdoc settings

    Rustdoc settings

    Theme preferences
    Use system theme
    Preferred dark theme
    Preferred light theme
    -
    Auto-hide item contents for large items.
    Auto-hide item methods' documentation
    Auto-hide trait implementation documentation
    Directly go to item in search if there is only one result
    Show line numbers on code examples
    Disable keyboard shortcuts
    - +Rustdoc settings +
    logo

    Rustdoc settings

    Theme preferences
    Use system theme
    Preferred dark theme
    Preferred light theme
    +
    Auto-hide item contents for large items.
    Auto-hide item methods' documentation
    Auto-hide trait implementation documentation
    Directly go to item in search if there is only one result
    Show line numbers on code examples
    Disable keyboard shortcuts
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-files.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-files.js index 34aad7c3a4..0b663f217c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-files.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-files.js @@ -1,3 +1,3 @@ var N = null;var sourcesIndex = {}; -sourcesIndex["bdk"] = {"name":"","dirs":[{"name":"blockchain","dirs":[{"name":"compact_filters","files":["mod.rs","peer.rs","store.rs","sync.rs"]},{"name":"esplora","files":["mod.rs","ureq.rs"]}],"files":["any.rs","electrum.rs","mod.rs","utils.rs"]},{"name":"database","files":["any.rs","keyvalue.rs","memory.rs","mod.rs","sqlite.rs"]},{"name":"descriptor","files":["checksum.rs","derived.rs","dsl.rs","error.rs","mod.rs","policy.rs","template.rs"]},{"name":"keys","files":["bip39.rs","mod.rs"]},{"name":"psbt","files":["mod.rs"]},{"name":"testutils","files":["mod.rs"]},{"name":"wallet","files":["address_validator.rs","coin_selection.rs","export.rs","mod.rs","signer.rs","time.rs","tx_builder.rs","utils.rs"]}],"files":["error.rs","lib.rs","types.rs"]}; +sourcesIndex["bdk"] = {"name":"","dirs":[{"name":"blockchain","dirs":[{"name":"compact_filters","files":["mod.rs","peer.rs","store.rs","sync.rs"]},{"name":"esplora","files":["api.rs","mod.rs","ureq.rs"]}],"files":["any.rs","electrum.rs","mod.rs","script_sync.rs"]},{"name":"database","files":["any.rs","keyvalue.rs","memory.rs","mod.rs","sqlite.rs"]},{"name":"descriptor","files":["checksum.rs","derived.rs","dsl.rs","error.rs","mod.rs","policy.rs","template.rs"]},{"name":"keys","files":["bip39.rs","mod.rs"]},{"name":"psbt","files":["mod.rs"]},{"name":"testutils","files":["mod.rs"]},{"name":"wallet","files":["address_validator.rs","coin_selection.rs","export.rs","mod.rs","signer.rs","time.rs","tx_builder.rs","utils.rs"]}],"files":["error.rs","lib.rs","types.rs"]}; createSourceSidebar(); diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-script.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-script.js index 5dc8fee0f2..09515e07cf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-script.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/source-script.js @@ -1 +1 @@ -(function(){function getCurrentFilePath(){var parts=window.location.pathname.split("/");var rootPathParts=window.rootPath.split("/");for(var i=0,len=rootPathParts.length;i"){sidebar.style.left="";this.style.left="";child.innerText="<";updateLocalStorage("rustdoc-source-sidebar-show","true")}else{sidebar.style.left="-300px";this.style.left="0";child.innerText=">";updateLocalStorage("rustdoc-source-sidebar-show","false")}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner1=document.createElement("div");inner1.style.position="relative";var inner2=document.createElement("div");inner2.style.paddingTop="3px";if(getCurrentValue("rustdoc-source-sidebar-show")==="true"){inner2.innerText="<"}else{inner2.innerText=">";sidebarToggle.style.left="0"}inner1.appendChild(inner2);sidebarToggle.appendChild(inner1);return sidebarToggle}function createSourceSidebar(){if(!window.rootPath.endsWith("/")){window.rootPath+="/"}var main=document.getElementById("main");var sidebarToggle=createSidebarToggle();main.insertBefore(sidebarToggle,main.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("rustdoc-source-sidebar-show")!=="true"){sidebar.style.left="-300px"}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});main.insertBefore(sidebar,main.firstChild);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(scrollTo,match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}var from=parseInt(match[1],10);var to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(tocur_line_id){var tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",function(){var match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(false,match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines(true);window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file +(function(){function getCurrentFilePath(){var parts=window.location.pathname.split("/");var rootPathParts=window.rootPath.split("/");for(var i=0,len=rootPathParts.length;i"){sidebar.classList.add("expanded");child.innerText="<";updateLocalStorage("rustdoc-source-sidebar-show","true")}else{sidebar.classList.remove("expanded");child.innerText=">";updateLocalStorage("rustdoc-source-sidebar-show","false")}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner=document.createElement("div");if(getCurrentValue("rustdoc-source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){if(!window.rootPath.endsWith("/")){window.rootPath+="/"}var container=document.querySelector("nav.sidebar");var sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("rustdoc-source-sidebar-show")!=="true"){container.classList.remove("expanded")}else{container.classList.add("expanded")}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});container.insertBefore(sidebar,document.querySelector(".sidebar-logo").nextSibling);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(scrollTo,match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}var from=parseInt(match[1],10);var to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(tocur_line_id){var tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",function(){var match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(false,match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines(true);window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html index 977b1afcca..e0bdb2908a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/any.rs.html @@ -1,4 +1,6 @@ -any.rs - source
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html index 4927399c69..b1db763392 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -639,7 +641,7 @@
     use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils};
     use crate::error::Error;
     use crate::types::{KeychainKind, LocalUtxo, TransactionDetails};
    -use crate::{ConfirmationTime, FeeRate};
    +use crate::{BlockTime, FeeRate};
     
     use peer::*;
     use store::*;
    @@ -675,7 +677,7 @@
             peers: Vec<Peer>,
             storage_dir: P,
             skip_blocks: Option<usize>,
    -    ) -> Result<Self, CompactFiltersError> {
    +    ) -> Result<Self, CompactFiltersError> {
             if peers.is_empty() {
                 return Err(CompactFiltersError::NoPeers);
             }
    @@ -711,13 +713,13 @@
         /// outputs that send funds to a know script_pubkey.
         fn process_tx<D: BatchDatabase>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             tx: &Transaction,
             height: Option<u32>,
             timestamp: Option<u64>,
    -        internal_max_deriv: &mut Option<u32>,
    -        external_max_deriv: &mut Option<u32>,
    -    ) -> Result<(), Error> {
    +        internal_max_deriv: &mut Option<u32>,
    +        external_max_deriv: &mut Option<u32>,
    +    ) -> Result<(), Error> {
             let mut updates = database.begin_batch();
     
             let mut incoming: u64 = 0;
    @@ -756,11 +758,11 @@
                     })?;
                     incoming += output.value;
     
    -                if keychain == KeychainKind::Internal
    +                if keychain == KeychainKind::Internal
                         && (internal_max_deriv.is_none() || child > internal_max_deriv.unwrap_or(0))
                     {
                         *internal_max_deriv = Some(child);
    -                } else if keychain == KeychainKind::External
    +                } else if keychain == KeychainKind::External
                         && (external_max_deriv.is_none() || child > external_max_deriv.unwrap_or(0))
                     {
                         *external_max_deriv = Some(child);
    @@ -774,7 +776,7 @@
                     transaction: Some(tx.clone()),
                     received: incoming,
                     sent: outgoing,
    -                confirmation_time: ConfirmationTime::new(height, timestamp),
    +                confirmation_time: BlockTime::new(height, timestamp),
                     verified: height.is_some(),
                     fee: Some(inputs_sum.saturating_sub(outputs_sum)),
                 };
    @@ -790,16 +792,16 @@
     }
     
     impl Blockchain for CompactFiltersBlockchain {
    -    fn get_capabilities(&self) -> HashSet<Capability> {
    +    fn get_capabilities(&self) -> HashSet<Capability> {
             vec![Capability::FullHistory].into_iter().collect()
         }
     
         #[allow(clippy::mutex_atomic)] // Mutex is easier to understand than a CAS loop.
         fn setup<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let first_peer = &self.peers[0];
     
             let skip_blocks = self.skip_blocks.unwrap_or(0);
    @@ -822,7 +824,7 @@
             let total_cost = headers_cost + filters_cost + PROCESS_BLOCKS_COST;
     
             if let Some(snapshot) = sync::sync_headers(
    -            Arc::clone(&first_peer),
    +            Arc::clone(first_peer),
                 Arc::clone(&self.headers),
                 |new_height| {
                     let local_headers_cost =
    @@ -843,7 +845,7 @@
             let buried_height = synced_height.saturating_sub(sync::BURIED_CONFIRMATIONS);
             info!("Synced headers to height: {}", synced_height);
     
    -        cf_sync.prepare_sync(Arc::clone(&first_peer))?;
    +        cf_sync.prepare_sync(Arc::clone(first_peer))?;
     
             let all_scripts = Arc::new(
                 database
    @@ -862,7 +864,7 @@
             let mut threads = Vec::with_capacity(self.peers.len());
             for peer in &self.peers {
                 let cf_sync = Arc::clone(&cf_sync);
    -            let peer = Arc::clone(&peer);
    +            let peer = Arc::clone(peer);
                 let headers = Arc::clone(&self.headers);
                 let all_scripts = Arc::clone(&all_scripts);
                 let last_synced_block = Arc::clone(&last_synced_block);
    @@ -874,13 +876,13 @@
                         peer,
                         |block_hash, filter| {
                             if !filter
    -                            .match_any(block_hash, &mut all_scripts.iter().map(AsRef::as_ref))?
    +                            .match_any(block_hash, &mut all_scripts.iter().map(AsRef::as_ref))?
                             {
                                 return Ok(false);
                             }
     
                             let block_height = headers.get_height_for(block_hash)?.unwrap_or(0);
    -                        let saved_correct_block = matches!(headers.get_full_block(block_height)?, Some(block) if &block.block_hash() == block_hash);
    +                        let saved_correct_block = matches!(headers.get_full_block(block_height)?, Some(block) if &block.block_hash() == block_hash);
     
                             if saved_correct_block {
                                 Ok(false)
    @@ -932,17 +934,17 @@
             let mut updates = database.begin_batch();
             for details in database.iter_txs(false)? {
                 match details.confirmation_time {
    -                Some(c) if (c.height as usize) < last_synced_block => continue,
    -                _ => updates.del_tx(&details.txid, false)?,
    +                Some(c) if (c.height as usize) < last_synced_block => continue,
    +                _ => updates.del_tx(&details.txid, false)?,
                 };
             }
             database.commit_batch(updates)?;
     
             match first_peer.ask_for_mempool() {
    -            Err(CompactFiltersError::PeerBloomDisabled) => {
    +            Err(CompactFiltersError::PeerBloomDisabled) => {
                     log::warn!("Peer has BLOOM disabled, we can't ask for the mempool")
                 }
    -            e => e?,
    +            e => e?,
             };
     
             let mut internal_max_deriv = None;
    @@ -955,8 +957,8 @@
                         tx,
                         Some(height as u32),
                         None,
    -                    &mut internal_max_deriv,
    -                    &mut external_max_deriv,
    +                    &mut internal_max_deriv,
    +                    &mut external_max_deriv,
                     )?;
                 }
             }
    @@ -966,8 +968,8 @@
                     tx,
                     None,
                     None,
    -                &mut internal_max_deriv,
    -                &mut external_max_deriv,
    +                &mut internal_max_deriv,
    +                &mut external_max_deriv,
                 )?;
             }
     
    @@ -1000,23 +1002,23 @@
             Ok(())
         }
     
    -    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             Ok(self.peers[0]
                 .get_mempool()
                 .get_tx(&Inventory::Transaction(*txid)))
         }
     
    -    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
    +    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
             self.peers[0].broadcast_tx(tx.clone())?;
     
             Ok(())
         }
     
    -    fn get_height(&self) -> Result<u32, Error> {
    +    fn get_height(&self) -> Result<u32, Error> {
             Ok(self.headers.get_height()? as u32)
         }
     
    -    fn estimate_fee(&self, _target: usize) -> Result<FeeRate, Error> {
    +    fn estimate_fee(&self, _target: usize) -> Result<FeeRate, Error> {
             // TODO
             Ok(FeeRate::default())
         }
    @@ -1040,7 +1042,7 @@
         pub peers: Vec<BitcoinPeerConfig>,
         /// Network used
         pub network: Network,
    -    /// Storage dir to save partially downloaded headers and full blocks
    +    /// Storage dir to save partially downloaded headers and full blocks. Should be a separate directory per descriptor. Consider using [crate::wallet::wallet_name_from_descriptor] for this.
         pub storage_dir: String,
         /// Optionally skip initial `skip_blocks` blocks (default: 0)
         pub skip_blocks: Option<usize>,
    @@ -1049,14 +1051,14 @@
     impl ConfigurableBlockchain for CompactFiltersBlockchain {
         type Config = CompactFiltersBlockchainConfig;
     
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
             let mempool = Arc::new(Mempool::default());
             let peers = config
                 .peers
                 .iter()
                 .map(|peer_conf| match &peer_conf.socks5 {
    -                None => Peer::connect(&peer_conf.address, Arc::clone(&mempool), config.network),
    -                Some(proxy) => Peer::connect_proxy(
    +                None => Peer::connect(&peer_conf.address, Arc::clone(&mempool), config.network),
    +                Some(proxy) => Peer::connect_proxy(
                         peer_conf.address.as_str(),
                         proxy,
                         peer_conf
    @@ -1117,7 +1119,7 @@
     }
     
     impl fmt::Display for CompactFiltersError {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -1130,11 +1132,10 @@
     impl_error!(std::time::SystemTimeError, Time, CompactFiltersError);
     
     impl From<crate::error::Error> for CompactFiltersError {
    -    fn from(err: crate::error::Error) -> Self {
    +    fn from(err: crate::error::Error) -> Self {
             CompactFiltersError::Global(Box::new(err))
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html index c9f3b00e9c..4c221b9644 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/peer.rs.html @@ -1,4 +1,6 @@ -peer.rs - source
      1
    +peer.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -629,7 +631,7 @@
     
     impl Mempool {
         /// Create a new empty mempool
    -    pub fn new() -> Self {
    +    pub fn new() -> Self {
             Self::default()
         }
     
    @@ -645,13 +647,13 @@
         }
     
         /// Look-up a transaction in the mempool given an [`Inventory`] request
    -    pub fn get_tx(&self, inventory: &Inventory) -> Option<Transaction> {
    +    pub fn get_tx(&self, inventory: &Inventory) -> Option<Transaction> {
             let identifer = match inventory {
    -            Inventory::Error | Inventory::Block(_) | Inventory::WitnessBlock(_) => return None,
    -            Inventory::Transaction(txid) => TxIdentifier::Txid(*txid),
    -            Inventory::WitnessTransaction(txid) => TxIdentifier::Txid(*txid),
    -            Inventory::WTx(wtxid) => TxIdentifier::Wtxid(*wtxid),
    -            Inventory::Unknown { inv_type, hash } => {
    +            Inventory::Error | Inventory::Block(_) | Inventory::WitnessBlock(_) => return None,
    +            Inventory::Transaction(txid) => TxIdentifier::Txid(*txid),
    +            Inventory::WitnessTransaction(txid) => TxIdentifier::Txid(*txid),
    +            Inventory::WTx(wtxid) => TxIdentifier::Wtxid(*wtxid),
    +            Inventory::Unknown { inv_type, hash } => {
                     log::warn!(
                         "Unknown inventory request type `{}`, hash `{:?}`",
                         inv_type,
    @@ -662,8 +664,8 @@
             };
     
             let txid = match identifer {
    -            TxIdentifier::Txid(txid) => Some(txid),
    -            TxIdentifier::Wtxid(wtxid) => self.0.read().unwrap().wtxids.get(&wtxid).cloned(),
    +            TxIdentifier::Txid(txid) => Some(txid),
    +            TxIdentifier::Wtxid(wtxid) => self.0.read().unwrap().wtxids.get(&wtxid).cloned(),
             };
     
             txid.map(|txid| self.0.read().unwrap().txs.get(&txid).cloned())
    @@ -671,12 +673,12 @@
         }
     
         /// Return whether or not the mempool contains a transaction with a given txid
    -    pub fn has_tx(&self, txid: &Txid) -> bool {
    +    pub fn has_tx(&self, txid: &Txid) -> bool {
             self.0.read().unwrap().txs.contains_key(txid)
         }
     
         /// Return the list of transactions contained in the mempool
    -    pub fn iter_txs(&self) -> Vec<Transaction> {
    +    pub fn iter_txs(&self) -> Vec<Transaction> {
             self.0.read().unwrap().txs.values().cloned().collect()
         }
     }
    @@ -705,7 +707,7 @@
             address: A,
             mempool: Arc<Mempool>,
             network: Network,
    -    ) -> Result<Self, CompactFiltersError> {
    +    ) -> Result<Self, CompactFiltersError> {
             let stream = TcpStream::connect(address)?;
     
             Peer::from_stream(stream, mempool, network)
    @@ -722,7 +724,7 @@
             credentials: Option<(&str, &str)>,
             mempool: Arc<Mempool>,
             network: Network,
    -    ) -> Result<Self, CompactFiltersError> {
    +    ) -> Result<Self, CompactFiltersError> {
             let socks_stream = if let Some((username, password)) = credentials {
                 Socks5Stream::connect_with_password(proxy, target, username, password)?
             } else {
    @@ -737,7 +739,7 @@
             stream: TcpStream,
             mempool: Arc<Mempool>,
             network: Network,
    -    ) -> Result<Self, CompactFiltersError> {
    +    ) -> Result<Self, CompactFiltersError> {
             let writer = Arc::new(Mutex::new(stream.try_clone()?));
             let responses: Arc<RwLock<ResponsesMap>> = Arc::new(RwLock::new(HashMap::new()));
             let connected = Arc::new(RwLock::new(true));
    @@ -769,7 +771,7 @@
             };
     
             Self::_send(
    -            &mut locked_writer,
    +            &mut locked_writer,
                 network.magic(),
                 NetworkMessage::Version(VersionMessage::new(
                     ServiceFlags::WITNESS,
    @@ -790,7 +792,7 @@
             };
     
             if let NetworkMessage::Verack = Self::_recv(&responses, "verack", None).unwrap() {
    -            Self::_send(&mut locked_writer, network.magic(), NetworkMessage::Verack)?;
    +            Self::_send(&mut locked_writer, network.magic(), NetworkMessage::Verack)?;
             } else {
                 return Err(CompactFiltersError::InvalidResponse);
             }
    @@ -810,10 +812,10 @@
     
         /// Send a Bitcoin network message
         fn _send(
    -        writer: &mut TcpStream,
    +        writer: &mut TcpStream,
             magic: u32,
             payload: NetworkMessage,
    -    ) -> Result<(), CompactFiltersError> {
    +    ) -> Result<(), CompactFiltersError> {
             log::trace!("==> {:?}", payload);
     
             let raw_message = RawNetworkMessage { magic, payload };
    @@ -830,11 +832,11 @@
             responses: &Arc<RwLock<ResponsesMap>>,
             wait_for: &'static str,
             timeout: Option<Duration>,
    -    ) -> Option<NetworkMessage> {
    +    ) -> Option<NetworkMessage> {
             let message_resp = {
                 let mut lock = responses.write().unwrap();
                 let message_resp = lock.entry(wait_for).or_default();
    -            Arc::clone(&message_resp)
    +            Arc::clone(message_resp)
             };
     
             let (lock, cvar) = &*message_resp;
    @@ -842,8 +844,8 @@
             let mut messages = lock.lock().unwrap();
             while messages.is_empty() {
                 match timeout {
    -                None => messages = cvar.wait(messages).unwrap(),
    -                Some(t) => {
    +                None => messages = cvar.wait(messages).unwrap(),
    +                Some(t) => {
                         let result = cvar.wait_timeout(messages, t).unwrap();
                         if result.1.timed_out() {
                             return None;
    @@ -857,22 +859,22 @@
         }
     
         /// Return the [`VersionMessage`] sent by the peer
    -    pub fn get_version(&self) -> &VersionMessage {
    +    pub fn get_version(&self) -> &VersionMessage {
             &self.version
         }
     
         /// Return the Bitcoin [`Network`] in use
    -    pub fn get_network(&self) -> Network {
    +    pub fn get_network(&self) -> Network {
             self.network
         }
     
         /// Return the mempool used by this peer
    -    pub fn get_mempool(&self) -> Arc<Mempool> {
    +    pub fn get_mempool(&self) -> Arc<Mempool> {
             Arc::clone(&self.mempool)
         }
     
         /// Return whether or not the peer is still connected
    -    pub fn is_connected(&self) -> bool {
    +    pub fn is_connected(&self) -> bool {
             *self.connected.read().unwrap()
         }
     
    @@ -886,10 +888,10 @@
             reader_thread_connected: Arc<RwLock<bool>>,
         ) {
             macro_rules! check_disconnect {
    -            ($call:expr) => {
    +            ($call:expr) => {
                     match $call {
    -                    Ok(good) => good,
    -                    Err(e) => {
    +                    Ok(good) => good,
    +                    Err(e) => {
                             log::debug!("Error {:?}", e);
                             *reader_thread_connected.write().unwrap() = false;
     
    @@ -912,24 +914,24 @@
                 log::trace!("<== {:?}", in_message);
     
                 match in_message {
    -                NetworkMessage::Ping(nonce) => {
    +                NetworkMessage::Ping(nonce) => {
                         check_disconnect!(Self::_send(
    -                        &mut reader_thread_writer.lock().unwrap(),
    +                        &mut reader_thread_writer.lock().unwrap(),
                             network.magic(),
                             NetworkMessage::Pong(nonce),
                         ));
     
                         continue;
                     }
    -                NetworkMessage::Alert(_) => continue,
    -                NetworkMessage::GetData(ref inv) => {
    +                NetworkMessage::Alert(_) => continue,
    +                NetworkMessage::GetData(ref inv) => {
                         let (found, not_found): (Vec<_>, Vec<_>) = inv
                             .iter()
                             .map(|item| (*item, reader_thread_mempool.get_tx(item)))
                             .partition(|(_, d)| d.is_some());
                         for (_, found_tx) in found {
                             check_disconnect!(Self::_send(
    -                            &mut reader_thread_writer.lock().unwrap(),
    +                            &mut reader_thread_writer.lock().unwrap(),
                                 network.magic(),
                                 NetworkMessage::Tx(found_tx.unwrap()),
                             ));
    @@ -937,7 +939,7 @@
     
                         if !not_found.is_empty() {
                             check_disconnect!(Self::_send(
    -                            &mut reader_thread_writer.lock().unwrap(),
    +                            &mut reader_thread_writer.lock().unwrap(),
                                 network.magic(),
                                 NetworkMessage::NotFound(
                                     not_found.into_iter().map(|(i, _)| i).collect(),
    @@ -945,13 +947,13 @@
                             ));
                         }
                     }
    -                _ => {}
    +                _ => {}
                 }
     
                 let message_resp = {
                     let mut lock = reader_thread_responses.write().unwrap();
                     let message_resp = lock.entry(in_message.cmd()).or_default();
    -                Arc::clone(&message_resp)
    +                Arc::clone(message_resp)
                 };
     
                 let (lock, cvar) = &*message_resp;
    @@ -962,9 +964,9 @@
         }
     
         /// Send a raw Bitcoin message to the peer
    -    pub fn send(&self, payload: NetworkMessage) -> Result<(), CompactFiltersError> {
    +    pub fn send(&self, payload: NetworkMessage) -> Result<(), CompactFiltersError> {
             let mut writer = self.writer.lock().unwrap();
    -        Self::_send(&mut writer, self.network.magic(), payload)
    +        Self::_send(&mut writer, self.network.magic(), payload)
         }
     
         /// Waits for a specific incoming Bitcoin message, optionally with a timeout
    @@ -972,7 +974,7 @@
             &self,
             wait_for: &'static str,
             timeout: Option<Duration>,
    -    ) -> Result<Option<NetworkMessage>, CompactFiltersError> {
    +    ) -> Result<Option<NetworkMessage>, CompactFiltersError> {
             Ok(Self::_recv(&self.responses, wait_for, timeout))
         }
     }
    @@ -982,20 +984,20 @@
             &self,
             filter_type: u8,
             stop_hash: BlockHash,
    -    ) -> Result<CFCheckpt, CompactFiltersError>;
    +    ) -> Result<CFCheckpt, CompactFiltersError>;
         fn get_cf_headers(
             &self,
             filter_type: u8,
             start_height: u32,
             stop_hash: BlockHash,
    -    ) -> Result<CFHeaders, CompactFiltersError>;
    +    ) -> Result<CFHeaders, CompactFiltersError>;
         fn get_cf_filters(
             &self,
             filter_type: u8,
             start_height: u32,
             stop_hash: BlockHash,
    -    ) -> Result<(), CompactFiltersError>;
    -    fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError>;
    +    ) -> Result<(), CompactFiltersError>;
    +    fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError>;
     }
     
     impl CompactFiltersPeer for Peer {
    @@ -1003,7 +1005,7 @@
             &self,
             filter_type: u8,
             stop_hash: BlockHash,
    -    ) -> Result<CFCheckpt, CompactFiltersError> {
    +    ) -> Result<CFCheckpt, CompactFiltersError> {
             self.send(NetworkMessage::GetCFCheckpt(GetCFCheckpt {
                 filter_type,
                 stop_hash,
    @@ -1013,8 +1015,8 @@
                 .recv("cfcheckpt", Some(Duration::from_secs(TIMEOUT_SECS)))?
                 .ok_or(CompactFiltersError::Timeout)?;
             let response = match response {
    -            NetworkMessage::CFCheckpt(response) => response,
    -            _ => return Err(CompactFiltersError::InvalidResponse),
    +            NetworkMessage::CFCheckpt(response) => response,
    +            _ => return Err(CompactFiltersError::InvalidResponse),
             };
     
             if response.filter_type != filter_type {
    @@ -1029,7 +1031,7 @@
             filter_type: u8,
             start_height: u32,
             stop_hash: BlockHash,
    -    ) -> Result<CFHeaders, CompactFiltersError> {
    +    ) -> Result<CFHeaders, CompactFiltersError> {
             self.send(NetworkMessage::GetCFHeaders(GetCFHeaders {
                 filter_type,
                 start_height,
    @@ -1040,8 +1042,8 @@
                 .recv("cfheaders", Some(Duration::from_secs(TIMEOUT_SECS)))?
                 .ok_or(CompactFiltersError::Timeout)?;
             let response = match response {
    -            NetworkMessage::CFHeaders(response) => response,
    -            _ => return Err(CompactFiltersError::InvalidResponse),
    +            NetworkMessage::CFHeaders(response) => response,
    +            _ => return Err(CompactFiltersError::InvalidResponse),
             };
     
             if response.filter_type != filter_type {
    @@ -1051,13 +1053,13 @@
             Ok(response)
         }
     
    -    fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError> {
    +    fn pop_cf_filter_resp(&self) -> Result<CFilter, CompactFiltersError> {
             let response = self
                 .recv("cfilter", Some(Duration::from_secs(TIMEOUT_SECS)))?
                 .ok_or(CompactFiltersError::Timeout)?;
             let response = match response {
    -            NetworkMessage::CFilter(response) => response,
    -            _ => return Err(CompactFiltersError::InvalidResponse),
    +            NetworkMessage::CFilter(response) => response,
    +            _ => return Err(CompactFiltersError::InvalidResponse),
             };
     
             Ok(response)
    @@ -1068,7 +1070,7 @@
             filter_type: u8,
             start_height: u32,
             stop_hash: BlockHash,
    -    ) -> Result<(), CompactFiltersError> {
    +    ) -> Result<(), CompactFiltersError> {
             self.send(NetworkMessage::GetCFilters(GetCFilters {
                 filter_type,
                 start_height,
    @@ -1080,34 +1082,34 @@
     }
     
     pub trait InvPeer {
    -    fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError>;
    -    fn ask_for_mempool(&self) -> Result<(), CompactFiltersError>;
    -    fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError>;
    +    fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError>;
    +    fn ask_for_mempool(&self) -> Result<(), CompactFiltersError>;
    +    fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError>;
     }
     
     impl InvPeer for Peer {
    -    fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError> {
    +    fn get_block(&self, block_hash: BlockHash) -> Result<Option<Block>, CompactFiltersError> {
             self.send(NetworkMessage::GetData(vec![Inventory::WitnessBlock(
                 block_hash,
             )]))?;
     
             match self.recv("block", Some(Duration::from_secs(TIMEOUT_SECS)))? {
    -            None => Ok(None),
    -            Some(NetworkMessage::Block(response)) => Ok(Some(response)),
    -            _ => Err(CompactFiltersError::InvalidResponse),
    +            None => Ok(None),
    +            Some(NetworkMessage::Block(response)) => Ok(Some(response)),
    +            _ => Err(CompactFiltersError::InvalidResponse),
             }
         }
     
    -    fn ask_for_mempool(&self) -> Result<(), CompactFiltersError> {
    +    fn ask_for_mempool(&self) -> Result<(), CompactFiltersError> {
             if !self.version.services.has(ServiceFlags::BLOOM) {
                 return Err(CompactFiltersError::PeerBloomDisabled);
             }
     
             self.send(NetworkMessage::MemPool)?;
             let inv = match self.recv("inv", Some(Duration::from_secs(5)))? {
    -            None => return Ok(()), // empty mempool
    -            Some(NetworkMessage::Inv(inv)) => inv,
    -            _ => return Err(CompactFiltersError::InvalidResponse),
    +            None => return Ok(()), // empty mempool
    +            Some(NetworkMessage::Inv(inv)) => inv,
    +            _ => return Err(CompactFiltersError::InvalidResponse),
             };
     
             let getdata = inv
    @@ -1125,8 +1127,8 @@
                     .recv("tx", Some(Duration::from_secs(TIMEOUT_SECS)))?
                     .ok_or(CompactFiltersError::Timeout)?;
                 let tx = match tx {
    -                NetworkMessage::Tx(tx) => tx,
    -                _ => return Err(CompactFiltersError::InvalidResponse),
    +                NetworkMessage::Tx(tx) => tx,
    +                _ => return Err(CompactFiltersError::InvalidResponse),
                 };
     
                 self.mempool.add_tx(tx);
    @@ -1135,7 +1137,7 @@
             Ok(())
         }
     
    -    fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError> {
    +    fn broadcast_tx(&self, tx: Transaction) -> Result<(), CompactFiltersError> {
             self.mempool.add_tx(tx.clone());
             self.send(NetworkMessage::Tx(tx))?;
     
    @@ -1143,6 +1145,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html index e7ee810018..80e0956346 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/store.rs.html @@ -1,4 +1,6 @@ -store.rs - source
      1
    +store.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -911,33 +913,33 @@
     }
     
     impl StoreEntry {
    -    pub fn get_prefix(&self) -> Vec<u8> {
    +    pub fn get_prefix(&self) -> Vec<u8> {
             match self {
    -            StoreEntry::BlockHeader(_) => b"z",
    -            StoreEntry::Block(_) => b"x",
    -            StoreEntry::BlockHeaderIndex(_) => b"i",
    -            StoreEntry::CFilterTable(_) => b"t",
    +            StoreEntry::BlockHeader(_) => b"z",
    +            StoreEntry::Block(_) => b"x",
    +            StoreEntry::BlockHeaderIndex(_) => b"i",
    +            StoreEntry::CFilterTable(_) => b"t",
             }
             .to_vec()
         }
     
    -    pub fn get_key(&self) -> Vec<u8> {
    +    pub fn get_key(&self) -> Vec<u8> {
             let mut prefix = self.get_prefix();
             match self {
    -            StoreEntry::BlockHeader(Some(height)) => {
    +            StoreEntry::BlockHeader(Some(height)) => {
                     prefix.extend_from_slice(&height.to_be_bytes())
                 }
    -            StoreEntry::Block(Some(height)) => prefix.extend_from_slice(&height.to_be_bytes()),
    -            StoreEntry::BlockHeaderIndex(Some(hash)) => {
    +            StoreEntry::Block(Some(height)) => prefix.extend_from_slice(&height.to_be_bytes()),
    +            StoreEntry::BlockHeaderIndex(Some(hash)) => {
                     prefix.extend_from_slice(&hash.into_inner())
                 }
    -            StoreEntry::CFilterTable((filter_type, bundle_index)) => {
    +            StoreEntry::CFilterTable((filter_type, bundle_index)) => {
                     prefix.push(*filter_type);
                     if let Some(bundle_index) = bundle_index {
                         prefix.extend_from_slice(&bundle_index.to_be_bytes());
                     }
                 }
    -            _ => {}
    +            _ => {}
             }
     
             prefix
    @@ -945,60 +947,60 @@
     }
     
     pub trait SerializeDb: Sized {
    -    fn serialize(&self) -> Vec<u8>;
    -    fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError>;
    +    fn serialize(&self) -> Vec<u8>;
    +    fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError>;
     }
     
     impl<T> SerializeDb for T
     where
         T: Encodable + Decodable,
     {
    -    fn serialize(&self) -> Vec<u8> {
    +    fn serialize(&self) -> Vec<u8> {
             serialize(self)
         }
     
    -    fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError> {
    +    fn deserialize(data: &[u8]) -> Result<Self, CompactFiltersError> {
             deserialize(data).map_err(|_| CompactFiltersError::DataCorruption)
         }
     }
     
     impl Encodable for BundleStatus {
    -    fn consensus_encode<W: Write>(&self, mut e: W) -> Result<usize, std::io::Error> {
    +    fn consensus_encode<W: Write>(&self, mut e: W) -> Result<usize, std::io::Error> {
             let mut written = 0;
     
             match self {
    -            BundleStatus::Init => {
    -                written += 0x00u8.consensus_encode(&mut e)?;
    +            BundleStatus::Init => {
    +                written += 0x00u8.consensus_encode(&mut e)?;
                 }
    -            BundleStatus::CfHeaders { cf_headers } => {
    -                written += 0x01u8.consensus_encode(&mut e)?;
    -                written += VarInt(cf_headers.len() as u64).consensus_encode(&mut e)?;
    +            BundleStatus::CfHeaders { cf_headers } => {
    +                written += 0x01u8.consensus_encode(&mut e)?;
    +                written += VarInt(cf_headers.len() as u64).consensus_encode(&mut e)?;
                     for header in cf_headers {
    -                    written += header.consensus_encode(&mut e)?;
    +                    written += header.consensus_encode(&mut e)?;
                     }
                 }
    -            BundleStatus::CFilters { cf_filters } => {
    -                written += 0x02u8.consensus_encode(&mut e)?;
    -                written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?;
    +            BundleStatus::CFilters { cf_filters } => {
    +                written += 0x02u8.consensus_encode(&mut e)?;
    +                written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?;
                     for filter in cf_filters {
    -                    written += filter.consensus_encode(&mut e)?;
    +                    written += filter.consensus_encode(&mut e)?;
                     }
                 }
    -            BundleStatus::Processed { cf_filters } => {
    -                written += 0x03u8.consensus_encode(&mut e)?;
    -                written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?;
    +            BundleStatus::Processed { cf_filters } => {
    +                written += 0x03u8.consensus_encode(&mut e)?;
    +                written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?;
                     for filter in cf_filters {
    -                    written += filter.consensus_encode(&mut e)?;
    +                    written += filter.consensus_encode(&mut e)?;
                     }
                 }
    -            BundleStatus::Pruned => {
    -                written += 0x04u8.consensus_encode(&mut e)?;
    +            BundleStatus::Pruned => {
    +                written += 0x04u8.consensus_encode(&mut e)?;
                 }
    -            BundleStatus::Tip { cf_filters } => {
    -                written += 0x05u8.consensus_encode(&mut e)?;
    -                written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?;
    +            BundleStatus::Tip { cf_filters } => {
    +                written += 0x05u8.consensus_encode(&mut e)?;
    +                written += VarInt(cf_filters.len() as u64).consensus_encode(&mut e)?;
                     for filter in cf_filters {
    -                    written += filter.consensus_encode(&mut e)?;
    +                    written += filter.consensus_encode(&mut e)?;
                     }
                 }
             }
    @@ -1008,56 +1010,56 @@
     }
     
     impl Decodable for BundleStatus {
    -    fn consensus_decode<D: Read>(mut d: D) -> Result<Self, bitcoin::consensus::encode::Error> {
    -        let byte_type = u8::consensus_decode(&mut d)?;
    +    fn consensus_decode<D: Read>(mut d: D) -> Result<Self, bitcoin::consensus::encode::Error> {
    +        let byte_type = u8::consensus_decode(&mut d)?;
             match byte_type {
    -            0x00 => Ok(BundleStatus::Init),
    -            0x01 => {
    -                let num = VarInt::consensus_decode(&mut d)?;
    +            0x00 => Ok(BundleStatus::Init),
    +            0x01 => {
    +                let num = VarInt::consensus_decode(&mut d)?;
                     let num = num.0 as usize;
     
                     let mut cf_headers = Vec::with_capacity(num);
                     for _ in 0..num {
    -                    cf_headers.push(FilterHeader::consensus_decode(&mut d)?);
    +                    cf_headers.push(FilterHeader::consensus_decode(&mut d)?);
                     }
     
                     Ok(BundleStatus::CfHeaders { cf_headers })
                 }
    -            0x02 => {
    -                let num = VarInt::consensus_decode(&mut d)?;
    +            0x02 => {
    +                let num = VarInt::consensus_decode(&mut d)?;
                     let num = num.0 as usize;
     
                     let mut cf_filters = Vec::with_capacity(num);
                     for _ in 0..num {
    -                    cf_filters.push(Vec::<u8>::consensus_decode(&mut d)?);
    +                    cf_filters.push(Vec::<u8>::consensus_decode(&mut d)?);
                     }
     
                     Ok(BundleStatus::CFilters { cf_filters })
                 }
    -            0x03 => {
    -                let num = VarInt::consensus_decode(&mut d)?;
    +            0x03 => {
    +                let num = VarInt::consensus_decode(&mut d)?;
                     let num = num.0 as usize;
     
                     let mut cf_filters = Vec::with_capacity(num);
                     for _ in 0..num {
    -                    cf_filters.push(Vec::<u8>::consensus_decode(&mut d)?);
    +                    cf_filters.push(Vec::<u8>::consensus_decode(&mut d)?);
                     }
     
                     Ok(BundleStatus::Processed { cf_filters })
                 }
    -            0x04 => Ok(BundleStatus::Pruned),
    -            0x05 => {
    -                let num = VarInt::consensus_decode(&mut d)?;
    +            0x04 => Ok(BundleStatus::Pruned),
    +            0x05 => {
    +                let num = VarInt::consensus_decode(&mut d)?;
                     let num = num.0 as usize;
     
                     let mut cf_filters = Vec::with_capacity(num);
                     for _ in 0..num {
    -                    cf_filters.push(Vec::<u8>::consensus_decode(&mut d)?);
    +                    cf_filters.push(Vec::<u8>::consensus_decode(&mut d)?);
                     }
     
                     Ok(BundleStatus::Tip { cf_filters })
                 }
    -            _ => Err(bitcoin::consensus::encode::Error::ParseFailed(
    +            _ => Err(bitcoin::consensus::encode::Error::ParseFailed(
                     "Invalid byte type",
                 )),
             }
    @@ -1073,12 +1075,12 @@
     }
     
     impl ChainStore<Full> {
    -    pub fn new(store: DB, network: Network) -> Result<Self, CompactFiltersError> {
    +    pub fn new(store: DB, network: Network) -> Result<Self, CompactFiltersError> {
             let genesis = match network {
    -            Network::Bitcoin => MAINNET_GENESIS.deref(),
    -            Network::Testnet => TESTNET_GENESIS.deref(),
    -            Network::Regtest => REGTEST_GENESIS.deref(),
    -            Network::Signet => SIGNET_GENESIS.deref(),
    +            Network::Bitcoin => MAINNET_GENESIS.deref(),
    +            Network::Testnet => TESTNET_GENESIS.deref(),
    +            Network::Regtest => REGTEST_GENESIS.deref(),
    +            Network::Signet => SIGNET_GENESIS.deref(),
             };
     
             let cf_name = "default".to_string();
    @@ -1110,7 +1112,7 @@
             })
         }
     
    -    pub fn get_locators(&self) -> Result<Vec<(BlockHash, usize)>, CompactFiltersError> {
    +    pub fn get_locators(&self) -> Result<Vec<(BlockHash, usize)>, CompactFiltersError> {
             let mut step = 1;
             let mut index = self.get_height()?;
             let mut answer = Vec::new();
    @@ -1140,7 +1142,7 @@
             Ok(answer)
         }
     
    -    pub fn start_snapshot(&self, from: usize) -> Result<ChainStore<Snapshot>, CompactFiltersError> {
    +    pub fn start_snapshot(&self, from: usize) -> Result<ChainStore<Snapshot>, CompactFiltersError> {
             let new_cf_name: String = thread_rng().sample_iter(&Alphanumeric).take(16).collect();
             let new_cf_name = format!("_headers:{}", new_cf_name);
     
    @@ -1180,7 +1182,7 @@
             })
         }
     
    -    pub fn recover_snapshot(&self, cf_name: &str) -> Result<(), CompactFiltersError> {
    +    pub fn recover_snapshot(&self, cf_name: &str) -> Result<(), CompactFiltersError> {
             let mut write_store = self.store.write().unwrap();
             let snapshot_cf_handle = write_store.cf_handle(cf_name).unwrap();
     
    @@ -1192,13 +1194,13 @@
                 .and_then(|(k, _)| k[1..].try_into().ok())
                 .map(usize::from_be_bytes)
             {
    -            None => {
    +            None => {
                     std::mem::drop(iterator);
                     write_store.drop_cf(cf_name).ok();
     
                     return Ok(());
                 }
    -            Some(x) => x,
    +            Some(x) => x,
             };
             std::mem::drop(iterator);
             std::mem::drop(write_store);
    @@ -1220,7 +1222,7 @@
         pub fn apply_snapshot(
             &self,
             snaphost: ChainStore<Snapshot>,
    -    ) -> Result<(), CompactFiltersError> {
    +    ) -> Result<(), CompactFiltersError> {
             let mut batch = WriteBatch::default();
     
             let read_store = self.store.read().unwrap();
    @@ -1248,7 +1250,7 @@
                 );
             }
     
    -        // Delete full blocks overriden by snapshot
    +        // Delete full blocks overridden by snapshot
             let from_key = StoreEntry::Block(Some(snaphost.min_height)).get_key();
             let to_key = StoreEntry::Block(Some(usize::MAX)).get_key();
             batch.delete_range(&from_key, &to_key);
    @@ -1269,7 +1271,7 @@
         pub fn get_height_for(
             &self,
             block_hash: &BlockHash,
    -    ) -> Result<Option<usize>, CompactFiltersError> {
    +    ) -> Result<Option<usize>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
             let cf_handle = read_store.cf_handle(&self.cf_name).unwrap();
     
    @@ -1285,7 +1287,7 @@
             .transpose()
         }
     
    -    pub fn get_block_hash(&self, height: usize) -> Result<Option<BlockHash>, CompactFiltersError> {
    +    pub fn get_block_hash(&self, height: usize) -> Result<Option<BlockHash>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
             let cf_handle = read_store.cf_handle(&self.cf_name).unwrap();
     
    @@ -1299,14 +1301,14 @@
             .transpose()
         }
     
    -    pub fn save_full_block(&self, block: &Block, height: usize) -> Result<(), CompactFiltersError> {
    +    pub fn save_full_block(&self, block: &Block, height: usize) -> Result<(), CompactFiltersError> {
             let key = StoreEntry::Block(Some(height)).get_key();
             self.store.read().unwrap().put(key, block.serialize())?;
     
             Ok(())
         }
     
    -    pub fn get_full_block(&self, height: usize) -> Result<Option<Block>, CompactFiltersError> {
    +    pub fn get_full_block(&self, height: usize) -> Result<Option<Block>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
     
             let key = StoreEntry::Block(Some(height)).get_key();
    @@ -1318,7 +1320,7 @@
                 .map_err(|_| CompactFiltersError::DataCorruption)
         }
     
    -    pub fn delete_blocks_until(&self, height: usize) -> Result<(), CompactFiltersError> {
    +    pub fn delete_blocks_until(&self, height: usize) -> Result<(), CompactFiltersError> {
             let from_key = StoreEntry::Block(Some(0)).get_key();
             let to_key = StoreEntry::Block(Some(height)).get_key();
     
    @@ -1330,7 +1332,7 @@
             Ok(())
         }
     
    -    pub fn iter_full_blocks(&self) -> Result<Vec<(usize, Block)>, CompactFiltersError> {
    +    pub fn iter_full_blocks(&self) -> Result<Vec<(usize, Block)>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
     
             let prefix = StoreEntry::Block(None).get_key();
    @@ -1355,7 +1357,7 @@
     }
     
     impl<T: StoreType> ChainStore<T> {
    -    pub fn work(&self) -> Result<Uint256, CompactFiltersError> {
    +    pub fn work(&self) -> Result<Uint256, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
             let cf_handle = read_store.cf_handle(&self.cf_name).unwrap();
     
    @@ -1364,7 +1366,7 @@
     
             Ok(iterator
                 .last()
    -            .map(|(_, v)| -> Result<_, CompactFiltersError> {
    +            .map(|(_, v)| -> Result<_, CompactFiltersError> {
                     let (_, work): (BlockHeader, Uint256) = SerializeDb::deserialize(&v)?;
     
                     Ok(work)
    @@ -1373,7 +1375,7 @@
                 .unwrap_or_default())
         }
     
    -    pub fn get_height(&self) -> Result<usize, CompactFiltersError> {
    +    pub fn get_height(&self) -> Result<usize, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
             let cf_handle = read_store.cf_handle(&self.cf_name).unwrap();
     
    @@ -1382,7 +1384,7 @@
     
             Ok(iterator
                 .last()
    -            .map(|(k, _)| -> Result<_, CompactFiltersError> {
    +            .map(|(k, _)| -> Result<_, CompactFiltersError> {
                     let height = usize::from_be_bytes(
                         k[1..]
                             .try_into()
    @@ -1395,7 +1397,7 @@
                 .unwrap_or_default())
         }
     
    -    pub fn get_tip_hash(&self) -> Result<Option<BlockHash>, CompactFiltersError> {
    +    pub fn get_tip_hash(&self) -> Result<Option<BlockHash>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
             let cf_handle = read_store.cf_handle(&self.cf_name).unwrap();
     
    @@ -1404,7 +1406,7 @@
     
             iterator
                 .last()
    -            .map(|(_, v)| -> Result<_, CompactFiltersError> {
    +            .map(|(_, v)| -> Result<_, CompactFiltersError> {
                     let (header, _): (BlockHeader, Uint256) = SerializeDb::deserialize(&v)?;
     
                     Ok(header.block_hash())
    @@ -1413,10 +1415,10 @@
         }
     
         pub fn apply(
    -        &mut self,
    +        &mut self,
             from: usize,
             headers: Vec<BlockHeader>,
    -    ) -> Result<BlockHash, CompactFiltersError> {
    +    ) -> Result<BlockHash, CompactFiltersError> {
             let mut batch = WriteBatch::default();
     
             let read_store = self.store.read().unwrap();
    @@ -1460,7 +1462,7 @@
     }
     
     impl<T: StoreType> fmt::Debug for ChainStore<T> {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             f.debug_struct(&format!("ChainStore<{:?}>", T::default()))
                 .field("cf_name", &self.cf_name)
                 .field("min_height", &self.min_height)
    @@ -1491,17 +1493,17 @@
         pub fn new(
             headers_store: &ChainStore<Full>,
             filter_type: u8,
    -    ) -> Result<Self, CompactFiltersError> {
    +    ) -> Result<Self, CompactFiltersError> {
             let cf_store = CfStore {
                 store: Arc::clone(&headers_store.store),
                 filter_type,
             };
     
             let genesis = match headers_store.network {
    -            Network::Bitcoin => MAINNET_GENESIS.deref(),
    -            Network::Testnet => TESTNET_GENESIS.deref(),
    -            Network::Regtest => REGTEST_GENESIS.deref(),
    -            Network::Signet => SIGNET_GENESIS.deref(),
    +            Network::Bitcoin => MAINNET_GENESIS.deref(),
    +            Network::Testnet => TESTNET_GENESIS.deref(),
    +            Network::Regtest => REGTEST_GENESIS.deref(),
    +            Network::Signet => SIGNET_GENESIS.deref(),
             };
     
             let filter = BlockFilter::new_script_filter(genesis, |utxo| {
    @@ -1527,11 +1529,11 @@
             Ok(cf_store)
         }
     
    -    pub fn get_filter_type(&self) -> u8 {
    +    pub fn get_filter_type(&self) -> u8 {
             self.filter_type
         }
     
    -    pub fn get_bundles(&self) -> Result<Vec<BundleEntry>, CompactFiltersError> {
    +    pub fn get_bundles(&self) -> Result<Vec<BundleEntry>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
     
             let prefix = StoreEntry::CFilterTable((self.filter_type, None)).get_key();
    @@ -1545,7 +1547,7 @@
                 .collect::<Result<_, _>>()
         }
     
    -    pub fn get_checkpoints(&self) -> Result<Vec<FilterHeader>, CompactFiltersError> {
    +    pub fn get_checkpoints(&self) -> Result<Vec<FilterHeader>, CompactFiltersError> {
             let read_store = self.store.read().unwrap();
     
             let prefix = StoreEntry::CFilterTable((self.filter_type, None)).get_key();
    @@ -1563,7 +1565,7 @@
         pub fn replace_checkpoints(
             &self,
             checkpoints: Vec<FilterHeader>,
    -    ) -> Result<(), CompactFiltersError> {
    +    ) -> Result<(), CompactFiltersError> {
             let current_checkpoints = self.get_checkpoints()?;
     
             let mut equal_bundles = 0;
    @@ -1606,11 +1608,11 @@
             bundle: usize,
             checkpoint: FilterHeader,
             filter_hashes: Vec<FilterHash>,
    -    ) -> Result<BundleStatus, CompactFiltersError> {
    +    ) -> Result<BundleStatus, CompactFiltersError> {
             let cf_headers: Vec<FilterHeader> = filter_hashes
                 .into_iter()
                 .scan(checkpoint, |prev_header, filter_hash| {
    -                let filter_header = filter_hash.filter_header(&prev_header);
    +                let filter_header = filter_hash.filter_header(prev_header);
                     *prev_header = filter_header;
     
                     Some(filter_header)
    @@ -1645,13 +1647,13 @@
             checkpoint: FilterHeader,
             headers: Vec<FilterHeader>,
             filters: Vec<(usize, Vec<u8>)>,
    -    ) -> Result<BundleStatus, CompactFiltersError> {
    +    ) -> Result<BundleStatus, CompactFiltersError> {
             let cf_filters = filters
                 .into_iter()
                 .zip(headers.into_iter())
                 .scan(checkpoint, |prev_header, ((_, filter_content), header)| {
                     let filter = BlockFilter::new(&filter_content);
    -                if header != filter.filter_header(&prev_header) {
    +                if header != filter.filter_header(prev_header) {
                         return Some(Err(CompactFiltersError::InvalidFilter));
                     }
                     *prev_header = header;
    @@ -1673,7 +1675,7 @@
             &self,
             bundle: usize,
             checkpoint: FilterHeader,
    -    ) -> Result<BundleStatus, CompactFiltersError> {
    +    ) -> Result<BundleStatus, CompactFiltersError> {
             let key = StoreEntry::CFilterTable((self.filter_type, Some(bundle))).get_key();
             let value = (BundleStatus::Pruned, checkpoint);
     
    @@ -1688,7 +1690,7 @@
             bundle: usize,
             cf_filters: Vec<Vec<u8>>,
             checkpoint: FilterHeader,
    -    ) -> Result<BundleStatus, CompactFiltersError> {
    +    ) -> Result<BundleStatus, CompactFiltersError> {
             let key = StoreEntry::CFilterTable((self.filter_type, Some(bundle))).get_key();
             let value = (BundleStatus::Tip { cf_filters }, checkpoint);
     
    @@ -1699,6 +1701,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html index 9e1601fadd..31039a028b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/compact_filters/sync.rs.html @@ -1,4 +1,6 @@ -sync.rs - source
      1
    +sync.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -333,7 +335,7 @@
             headers_store: Arc<ChainStore<Full>>,
             skip_blocks: usize,
             filter_type: u8,
    -    ) -> Result<Self, CompactFiltersError> {
    +    ) -> Result<Self, CompactFiltersError> {
             let cf_store = Arc::new(CfStore::new(&headers_store, filter_type)?);
     
             Ok(CfSync {
    @@ -344,19 +346,19 @@
             })
         }
     
    -    pub fn pruned_bundles(&self) -> Result<usize, CompactFiltersError> {
    +    pub fn pruned_bundles(&self) -> Result<usize, CompactFiltersError> {
             Ok(self
                 .cf_store
                 .get_bundles()?
                 .into_iter()
                 .skip(self.skip_blocks / 1000)
                 .fold(0, |acc, (status, _)| match status {
    -                BundleStatus::Pruned => acc + 1,
    -                _ => acc,
    +                BundleStatus::Pruned => acc + 1,
    +                _ => acc,
                 }))
         }
     
    -    pub fn prepare_sync(&self, peer: Arc<Peer>) -> Result<(), CompactFiltersError> {
    +    pub fn prepare_sync(&self, peer: Arc<Peer>) -> Result<(), CompactFiltersError> {
             let mut bundles_lock = self.bundles.lock().unwrap();
     
             let resp = peer.get_cf_checkpt(
    @@ -378,17 +380,17 @@
             peer: Arc<Peer>,
             process: F,
             completed_bundle: Q,
    -    ) -> Result<(), CompactFiltersError>
    +    ) -> Result<(), CompactFiltersError>
         where
    -        F: Fn(&BlockHash, &BlockFilter) -> Result<bool, CompactFiltersError>,
    -        Q: Fn(usize) -> Result<(), Error>,
    +        F: Fn(&BlockHash, &BlockFilter) -> Result<bool, CompactFiltersError>,
    +        Q: Fn(usize) -> Result<(), Error>,
         {
             let current_height = self.headers_store.get_height()?; // TODO: we should update it in case headers_store is also updated
     
             loop {
                 let (mut status, checkpoint, index) = match self.bundles.lock().unwrap().pop_front() {
    -                None => break,
    -                Some(x) => x,
    +                None => break,
    +                Some(x) => x,
                 };
     
                 log::debug!(
    @@ -399,7 +401,7 @@
                 );
     
                 let process_received_filters =
    -                |expected_filters| -> Result<BTreeMap<usize, Vec<u8>>, CompactFiltersError> {
    +                |expected_filters| -> Result<BTreeMap<usize, Vec<u8>>, CompactFiltersError> {
                         let mut filters_map = BTreeMap::new();
                         for _ in 0..expected_filters {
                             let filter = peer.pop_cf_filter_resp()?;
    @@ -408,8 +410,8 @@
                             }
     
                             match self.headers_store.get_height_for(&filter.block_hash)? {
    -                            Some(height) => filters_map.insert(height, filter.filter),
    -                            None => return Err(CompactFiltersError::InvalidFilter),
    +                            Some(height) => filters_map.insert(height, filter.filter),
    +                            None => return Err(CompactFiltersError::InvalidFilter),
                             };
                         }
     
    @@ -431,7 +433,7 @@
     
                     let resp = peer.get_cf_headers(0x00, start_height as u32, stop_hash)?;
     
    -                assert!(resp.previous_filter_header == checkpoint);
    +                assert!(resp.previous_filter_header == checkpoint);
                     status =
                         self.cf_store
                             .advance_to_cf_headers(index, checkpoint, resp.filter_hashes)?;
    @@ -447,8 +449,8 @@
                         checkpoint,
                         headers_resp.filter_hashes,
                     )? {
    -                    BundleStatus::CfHeaders { cf_headers } => cf_headers,
    -                    _ => return Err(CompactFiltersError::InvalidResponse),
    +                    BundleStatus::CfHeaders { cf_headers } => cf_headers,
    +                    _ => return Err(CompactFiltersError::InvalidResponse),
                     };
     
                     peer.get_cf_filters(
    @@ -501,7 +503,7 @@
                         let block_hash = self.headers_store.get_block_hash(height)?.unwrap();
     
                         // TODO: also download random blocks?
    -                    if process(&block_hash, &BlockFilter::new(&filter))? {
    +                    if process(&block_hash, &BlockFilter::new(filter))? {
                             log::debug!("Downloading block {}", block_hash);
     
                             let block = peer
    @@ -540,9 +542,9 @@
         peer: Arc<Peer>,
         store: Arc<ChainStore<Full>>,
         sync_fn: F,
    -) -> Result<Option<ChainStore<Snapshot>>, CompactFiltersError>
    +) -> Result<Option<ChainStore<Snapshot>>, CompactFiltersError>
     where
    -    F: Fn(usize) -> Result<(), Error>,
    +    F: Fn(usize) -> Result<(), Error>,
     {
         let locators = store.get_locators()?;
         let locators_vec = locators.iter().map(|(hash, _)| hash).cloned().collect();
    @@ -561,8 +563,8 @@
             }
     
             match locators_map.get(&headers[0].prev_blockhash) {
    -            None => return Err(CompactFiltersError::InvalidHeaders),
    -            Some(from) => (store.start_snapshot(*from)?, headers[0].prev_blockhash),
    +            None => return Err(CompactFiltersError::InvalidHeaders),
    +            Some(from) => (store.start_snapshot(*from)?, headers[0].prev_blockhash),
             }
         } else {
             return Err(CompactFiltersError::InvalidResponse);
    @@ -591,6 +593,5 @@
         Ok(Some(snapshot))
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html index a51f2cbb78..75ba2cb640 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/electrum.rs.html @@ -1,4 +1,6 @@ -electrum.rs - source
      1
    +electrum.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -183,6 +185,140 @@
     183
     184
     185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -209,20 +345,20 @@
     //! # Ok::<(), bdk::Error>(())
     //! ```
     
    -use std::collections::HashSet;
    +use std::collections::{HashMap, HashSet};
     
     #[allow(unused_imports)]
     use log::{debug, error, info, trace};
     
    -use bitcoin::{BlockHeader, Script, Transaction, Txid};
    +use bitcoin::{Transaction, Txid};
     
     use electrum_client::{Client, ConfigBuilder, ElectrumApi, Socks5Config};
     
    -use self::utils::{ElectrumLikeSync, ElsGetHistoryRes};
    +use super::script_sync::Request;
     use super::*;
    -use crate::database::BatchDatabase;
    +use crate::database::{BatchDatabase, Database};
     use crate::error::Error;
    -use crate::FeeRate;
    +use crate::{BlockTime, FeeRate};
     
     /// Wrapper over an Electrum Client that implements the required blockchain traits
     ///
    @@ -234,7 +370,7 @@
     }
     
     impl std::convert::From<Client> for ElectrumBlockchain {
    -    fn from(client: Client) -> Self {
    +    fn from(client: Client) -> Self {
             ElectrumBlockchain {
                 client,
                 stop_gap: 20,
    @@ -243,7 +379,7 @@
     }
     
     impl Blockchain for ElectrumBlockchain {
    -    fn get_capabilities(&self) -> HashSet<Capability> {
    +    fn get_capabilities(&self) -> HashSet<Capability> {
             vec![
                 Capability::FullHistory,
                 Capability::GetAnyTx,
    @@ -255,22 +391,151 @@
     
         fn setup<D: BatchDatabase, P: Progress>(
             &self,
    -        database: &mut D,
    -        progress_update: P,
    -    ) -> Result<(), Error> {
    -        self.client
    -            .electrum_like_setup(self.stop_gap, database, progress_update)
    +        database: &mut D,
    +        _progress_update: P,
    +    ) -> Result<(), Error> {
    +        let mut request = script_sync::start(database, self.stop_gap)?;
    +        let mut block_times = HashMap::<u32, u32>::new();
    +        let mut txid_to_height = HashMap::<Txid, u32>::new();
    +        let mut tx_cache = TxCache::new(database, &self.client);
    +        let chunk_size = self.stop_gap;
    +        // The electrum server has been inconsistent somehow in its responses during sync. For
    +        // example, we do a batch request of transactions and the response contains less
    +        // tranascations than in the request. This should never happen but we don't want to panic.
    +        let electrum_goof = || Error::Generic("electrum server misbehaving".to_string());
    +
    +        let batch_update = loop {
    +            request = match request {
    +                Request::Script(script_req) => {
    +                    let scripts = script_req.request().take(chunk_size);
    +                    let txids_per_script: Vec<Vec<_>> = self
    +                        .client
    +                        .batch_script_get_history(scripts)
    +                        .map_err(Error::Electrum)?
    +                        .into_iter()
    +                        .map(|txs| {
    +                            txs.into_iter()
    +                                .map(|tx| {
    +                                    let tx_height = match tx.height {
    +                                        none if none <= 0 => None,
    +                                        height => {
    +                                            txid_to_height.insert(tx.tx_hash, height as u32);
    +                                            Some(height as u32)
    +                                        }
    +                                    };
    +                                    (tx.tx_hash, tx_height)
    +                                })
    +                                .collect()
    +                        })
    +                        .collect();
    +
    +                    script_req.satisfy(txids_per_script)?
    +                }
    +
    +                Request::Conftime(conftime_req) => {
    +                    // collect up to chunk_size heights to fetch from electrum
    +                    let needs_block_height = {
    +                        let mut needs_block_height_iter = conftime_req
    +                            .request()
    +                            .filter_map(|txid| txid_to_height.get(txid).cloned())
    +                            .filter(|height| block_times.get(height).is_none());
    +                        let mut needs_block_height = HashSet::new();
    +
    +                        while needs_block_height.len() < chunk_size {
    +                            match needs_block_height_iter.next() {
    +                                Some(height) => needs_block_height.insert(height),
    +                                None => break,
    +                            };
    +                        }
    +                        needs_block_height
    +                    };
    +
    +                    let new_block_headers = self
    +                        .client
    +                        .batch_block_header(needs_block_height.iter().cloned())?;
    +
    +                    for (height, header) in needs_block_height.into_iter().zip(new_block_headers) {
    +                        block_times.insert(height, header.time);
    +                    }
    +
    +                    let conftimes = conftime_req
    +                        .request()
    +                        .take(chunk_size)
    +                        .map(|txid| {
    +                            let confirmation_time = txid_to_height
    +                                .get(txid)
    +                                .map(|height| {
    +                                    let timestamp =
    +                                        *block_times.get(height).ok_or_else(electrum_goof)?;
    +                                    Result::<_, Error>::Ok(BlockTime {
    +                                        height: *height,
    +                                        timestamp: timestamp.into(),
    +                                    })
    +                                })
    +                                .transpose()?;
    +                            Ok(confirmation_time)
    +                        })
    +                        .collect::<Result<_, Error>>()?;
    +
    +                    conftime_req.satisfy(conftimes)?
    +                }
    +                Request::Tx(tx_req) => {
    +                    let needs_full = tx_req.request().take(chunk_size);
    +                    tx_cache.save_txs(needs_full.clone())?;
    +                    let full_transactions = needs_full
    +                        .map(|txid| tx_cache.get(*txid).ok_or_else(electrum_goof))
    +                        .collect::<Result<Vec<_>, _>>()?;
    +                    let input_txs = full_transactions.iter().flat_map(|tx| {
    +                        tx.input
    +                            .iter()
    +                            .filter(|input| !input.previous_output.is_null())
    +                            .map(|input| &input.previous_output.txid)
    +                    });
    +                    tx_cache.save_txs(input_txs)?;
    +
    +                    let full_details = full_transactions
    +                        .into_iter()
    +                        .map(|tx| {
    +                            let prev_outputs = tx
    +                                .input
    +                                .iter()
    +                                .map(|input| {
    +                                    if input.previous_output.is_null() {
    +                                        return Ok(None);
    +                                    }
    +                                    let prev_tx = tx_cache
    +                                        .get(input.previous_output.txid)
    +                                        .ok_or_else(electrum_goof)?;
    +                                    let txout = prev_tx
    +                                        .output
    +                                        .get(input.previous_output.vout as usize)
    +                                        .ok_or_else(electrum_goof)?;
    +                                    Ok(Some(txout.clone()))
    +                                })
    +                                .collect::<Result<Vec<_>, Error>>()?;
    +                            Ok((prev_outputs, tx))
    +                        })
    +                        .collect::<Result<Vec<_>, Error>>()?;
    +
    +                    tx_req.satisfy(full_details)?
    +                }
    +                Request::Finish(batch_update) => break batch_update,
    +            }
    +        };
    +
    +        database.commit_batch(batch_update)?;
    +        Ok(())
         }
     
    -    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             Ok(self.client.transaction_get(txid).map(Option::Some)?)
         }
     
    -    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
    +    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
             Ok(self.client.transaction_broadcast(tx).map(|_| ())?)
         }
     
    -    fn get_height(&self) -> Result<u32, Error> {
    +    fn get_height(&self) -> Result<u32, Error> {
             // TODO: unsubscribe when added to the client, or is there a better call to use here?
     
             Ok(self
    @@ -279,50 +544,55 @@
                 .map(|data| data.height as u32)?)
         }
     
    -    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
    +    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
             Ok(FeeRate::from_btc_per_kvb(
                 self.client.estimate_fee(target)? as f32
             ))
         }
     }
     
    -impl ElectrumLikeSync for Client {
    -    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script> + Clone>(
    -        &self,
    -        scripts: I,
    -    ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error> {
    -        self.batch_script_get_history(scripts)
    -            .map(|v| {
    -                v.into_iter()
    -                    .map(|v| {
    -                        v.into_iter()
    -                            .map(
    -                                |electrum_client::GetHistoryRes {
    -                                     height, tx_hash, ..
    -                                 }| ElsGetHistoryRes {
    -                                    height,
    -                                    tx_hash,
    -                                },
    -                            )
    -                            .collect()
    -                    })
    -                    .collect()
    -            })
    -            .map_err(Error::Electrum)
    +struct TxCache<'a, 'b, D> {
    +    db: &'a D,
    +    client: &'b Client,
    +    cache: HashMap<Txid, Transaction>,
    +}
    +
    +impl<'a, 'b, D: Database> TxCache<'a, 'b, D> {
    +    fn new(db: &'a D, client: &'b Client) -> Self {
    +        TxCache {
    +            db,
    +            client,
    +            cache: HashMap::default(),
    +        }
         }
    +    fn save_txs<'c>(&mut self, txids: impl Iterator<Item = &'c Txid>) -> Result<(), Error> {
    +        let mut need_fetch = vec![];
    +        for txid in txids {
    +            if self.cache.get(txid).is_some() {
    +                continue;
    +            } else if let Some(transaction) = self.db.get_raw_tx(txid)? {
    +                self.cache.insert(*txid, transaction);
    +            } else {
    +                need_fetch.push(txid);
    +            }
    +        }
     
    -    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid> + Clone>(
    -        &self,
    -        txids: I,
    -    ) -> Result<Vec<Transaction>, Error> {
    -        self.batch_transaction_get(txids).map_err(Error::Electrum)
    +        if !need_fetch.is_empty() {
    +            let txs = self
    +                .client
    +                .batch_transaction_get(need_fetch.clone())
    +                .map_err(Error::Electrum)?;
    +            for (tx, _txid) in txs.into_iter().zip(need_fetch) {
    +                debug_assert_eq!(*_txid, tx.txid());
    +                self.cache.insert(tx.txid(), tx);
    +            }
    +        }
    +
    +        Ok(())
         }
     
    -    fn els_batch_block_header<I: IntoIterator<Item = u32> + Clone>(
    -        &self,
    -        heights: I,
    -    ) -> Result<Vec<BlockHeader>, Error> {
    -        self.batch_block_header(heights).map_err(Error::Electrum)
    +    fn get(&self, txid: Txid) -> Option<Transaction> {
    +        self.cache.get(&txid).map(Clone::clone)
         }
     }
     
    @@ -346,7 +616,7 @@
     impl ConfigurableBlockchain for ElectrumBlockchain {
         type Config = ElectrumBlockchainConfig;
     
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
             let socks5 = config.socks5.as_ref().map(Socks5Config::new);
             let electrum_config = ConfigBuilder::new()
                 .retry(config.retry)
    @@ -364,11 +634,10 @@
     #[cfg(test)]
     #[cfg(feature = "test-electrum")]
     crate::bdk_blockchain_tests! {
    -    fn test_instance(test_client: &TestClient) -> ElectrumBlockchain {
    +    fn test_instance(test_client: &TestClient) -> ElectrumBlockchain {
             ElectrumBlockchain::from(Client::new(&test_client.electrsd.electrum_url).unwrap())
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/api.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/api.rs.html new file mode 100644 index 0000000000..e0431a9fcb --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/api.rs.html @@ -0,0 +1,239 @@ +api.rs - source +
    logo
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    + 27
    + 28
    + 29
    + 30
    + 31
    + 32
    + 33
    + 34
    + 35
    + 36
    + 37
    + 38
    + 39
    + 40
    + 41
    + 42
    + 43
    + 44
    + 45
    + 46
    + 47
    + 48
    + 49
    + 50
    + 51
    + 52
    + 53
    + 54
    + 55
    + 56
    + 57
    + 58
    + 59
    + 60
    + 61
    + 62
    + 63
    + 64
    + 65
    + 66
    + 67
    + 68
    + 69
    + 70
    + 71
    + 72
    + 73
    + 74
    + 75
    + 76
    + 77
    + 78
    + 79
    + 80
    + 81
    + 82
    + 83
    + 84
    + 85
    + 86
    + 87
    + 88
    + 89
    + 90
    + 91
    + 92
    + 93
    + 94
    + 95
    + 96
    + 97
    + 98
    + 99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +
    //! structs from the esplora API
    +//!
    +//! see: <https://github.com/Blockstream/esplora/blob/master/API.md>
    +use crate::BlockTime;
    +use bitcoin::{OutPoint, Script, Transaction, TxIn, TxOut, Txid};
    +
    +#[derive(serde::Deserialize, Clone, Debug)]
    +pub struct PrevOut {
    +    pub value: u64,
    +    pub scriptpubkey: Script,
    +}
    +
    +#[derive(serde::Deserialize, Clone, Debug)]
    +pub struct Vin {
    +    pub txid: Txid,
    +    pub vout: u32,
    +    // None if coinbase
    +    pub prevout: Option<PrevOut>,
    +    pub scriptsig: Script,
    +    #[serde(deserialize_with = "deserialize_witness")]
    +    pub witness: Vec<Vec<u8>>,
    +    pub sequence: u32,
    +    pub is_coinbase: bool,
    +}
    +
    +#[derive(serde::Deserialize, Clone, Debug)]
    +pub struct Vout {
    +    pub value: u64,
    +    pub scriptpubkey: Script,
    +}
    +
    +#[derive(serde::Deserialize, Clone, Debug)]
    +pub struct TxStatus {
    +    pub confirmed: bool,
    +    pub block_height: Option<u32>,
    +    pub block_time: Option<u64>,
    +}
    +
    +#[derive(serde::Deserialize, Clone, Debug)]
    +pub struct Tx {
    +    pub txid: Txid,
    +    pub version: i32,
    +    pub locktime: u32,
    +    pub vin: Vec<Vin>,
    +    pub vout: Vec<Vout>,
    +    pub status: TxStatus,
    +    pub fee: u64,
    +}
    +
    +impl Tx {
    +    pub fn to_tx(&self) -> Transaction {
    +        Transaction {
    +            version: self.version,
    +            lock_time: self.locktime,
    +            input: self
    +                .vin
    +                .iter()
    +                .cloned()
    +                .map(|vin| TxIn {
    +                    previous_output: OutPoint {
    +                        txid: vin.txid,
    +                        vout: vin.vout,
    +                    },
    +                    script_sig: vin.scriptsig,
    +                    sequence: vin.sequence,
    +                    witness: vin.witness,
    +                })
    +                .collect(),
    +            output: self
    +                .vout
    +                .iter()
    +                .cloned()
    +                .map(|vout| TxOut {
    +                    value: vout.value,
    +                    script_pubkey: vout.scriptpubkey,
    +                })
    +                .collect(),
    +        }
    +    }
    +
    +    pub fn confirmation_time(&self) -> Option<BlockTime> {
    +        match self.status {
    +            TxStatus {
    +                confirmed: true,
    +                block_height: Some(height),
    +                block_time: Some(timestamp),
    +            } => Some(BlockTime { timestamp, height }),
    +            _ => None,
    +        }
    +    }
    +
    +    pub fn previous_outputs(&self) -> Vec<Option<TxOut>> {
    +        self.vin
    +            .iter()
    +            .cloned()
    +            .map(|vin| {
    +                vin.prevout.map(|po| TxOut {
    +                    script_pubkey: po.scriptpubkey,
    +                    value: po.value,
    +                })
    +            })
    +            .collect()
    +    }
    +}
    +
    +fn deserialize_witness<'de, D>(d: D) -> Result<Vec<Vec<u8>>, D::Error>
    +where
    +    D: serde::de::Deserializer<'de>,
    +{
    +    use crate::serde::Deserialize;
    +    use bitcoin::hashes::hex::FromHex;
    +    let list = Vec::<String>::deserialize(d)?;
    +    list.into_iter()
    +        .map(|hex_str| Vec::<u8>::from_hex(&hex_str))
    +        .collect::<Result<Vec<Vec<u8>>, _>>()
    +        .map_err(serde::de::Error::custom)
    +}
    +
    +
    + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html index 7d87905c9b..d0dfe2c563 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -127,6 +129,89 @@
     127
     128
     129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
     
    //! Esplora
     //!
     //! This module defines a [`EsploraBlockchain`] struct that can query an Esplora
    @@ -150,8 +235,6 @@
     use std::fmt;
     use std::io;
     
    -use serde::Deserialize;
    -
     use bitcoin::consensus;
     use bitcoin::{BlockHash, Txid};
     
    @@ -170,33 +253,24 @@
     #[cfg(feature = "ureq")]
     pub use self::ureq::*;
     
    -fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> {
    -    let fee_val = estimates
    -        .into_iter()
    -        .map(|(k, v)| Ok::<_, std::num::ParseIntError>((k.parse::<usize>()?, v)))
    -        .collect::<Result<Vec<_>, _>>()
    -        .map_err(|e| Error::Generic(e.to_string()))?
    -        .into_iter()
    -        .take_while(|(k, _)| k <= &target)
    -        .map(|(_, v)| v)
    -        .last()
    -        .unwrap_or(1.0);
    +mod api;
     
    +fn into_fee_rate(target: usize, estimates: HashMap<String, f64>) -> Result<FeeRate, Error> {
    +    let fee_val = {
    +        let mut pairs = estimates
    +            .into_iter()
    +            .filter_map(|(k, v)| Some((k.parse::<usize>().ok()?, v)))
    +            .collect::<Vec<_>>();
    +        pairs.sort_unstable_by_key(|(k, _)| std::cmp::Reverse(*k));
    +        pairs
    +            .into_iter()
    +            .find(|(k, _)| k <= &target)
    +            .map(|(_, v)| v)
    +            .unwrap_or(1.0)
    +    };
         Ok(FeeRate::from_sat_per_vb(fee_val as f32))
     }
     
    -/// Data type used when fetching transaction history from Esplora.
    -#[derive(Deserialize)]
    -pub struct EsploraGetHistory {
    -    txid: Txid,
    -    status: EsploraGetHistoryStatus,
    -}
    -
    -#[derive(Deserialize)]
    -struct EsploraGetHistoryStatus {
    -    block_height: Option<usize>,
    -}
    -
     /// Errors that can happen during a sync with [`EsploraBlockchain`]
     #[derive(Debug)]
     pub enum EsploraError {
    @@ -231,15 +305,55 @@
     }
     
     impl fmt::Display for EsploraError {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{:?}", self)
         }
     }
     
    +/// Configuration for an [`EsploraBlockchain`]
    +#[derive(Debug, serde::Deserialize, serde::Serialize, Clone, PartialEq)]
    +pub struct EsploraBlockchainConfig {
    +    /// Base URL of the esplora service
    +    ///
    +    /// eg. `https://blockstream.info/api/`
    +    pub base_url: String,
    +    /// Optional URL of the proxy to use to make requests to the Esplora server
    +    ///
    +    /// The string should be formatted as: `<protocol>://<user>:<password>@host:<port>`.
    +    ///
    +    /// Note that the format of this value and the supported protocols change slightly between the
    +    /// sync version of esplora (using `ureq`) and the async version (using `reqwest`). For more
    +    /// details check with the documentation of the two crates. Both of them are compiled with
    +    /// the `socks` feature enabled.
    +    ///
    +    /// The proxy is ignored when targeting `wasm32`.
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub proxy: Option<String>,
    +    /// Number of parallel requests sent to the esplora service (default: 4)
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub concurrency: Option<u8>,
    +    /// Stop searching addresses for transactions after finding an unused gap of this length.
    +    pub stop_gap: usize,
    +    /// Socket timeout.
    +    #[serde(skip_serializing_if = "Option::is_none")]
    +    pub timeout: Option<u64>,
    +}
    +
    +impl EsploraBlockchainConfig {
    +    /// create a config with default values given the base url and stop gap
    +    pub fn new(base_url: String, stop_gap: usize) -> Self {
    +        Self {
    +            base_url,
    +            proxy: None,
    +            timeout: None,
    +            stop_gap,
    +            concurrency: None,
    +        }
    +    }
    +}
    +
     impl std::error::Error for EsploraError {}
     
    -#[cfg(feature = "ureq")]
    -impl_error!(::ureq::Error, Ureq, EsploraError);
     #[cfg(feature = "ureq")]
     impl_error!(::ureq::Transport, UreqTransport, EsploraError);
     #[cfg(feature = "reqwest")]
    @@ -252,11 +366,64 @@
     #[cfg(test)]
     #[cfg(feature = "test-esplora")]
     crate::bdk_blockchain_tests! {
    -    fn test_instance(test_client: &TestClient) -> EsploraBlockchain {
    +    fn test_instance(test_client: &TestClient) -> EsploraBlockchain {
             EsploraBlockchain::new(&format!("http://{}",test_client.electrsd.esplora_url.as_ref().unwrap()), 20)
         }
     }
    +
    +const DEFAULT_CONCURRENT_REQUESTS: u8 = 4;
    +
    +#[cfg(test)]
    +mod test {
    +    use super::*;
    +
    +    #[test]
    +    fn feerate_parsing() {
    +        let esplora_fees = serde_json::from_str::<HashMap<String, f64>>(
    +            r#"{
    +  "25": 1.015,
    +  "5": 2.3280000000000003,
    +  "12": 2.0109999999999997,
    +  "15": 1.018,
    +  "17": 1.018,
    +  "11": 2.0109999999999997,
    +  "3": 3.01,
    +  "2": 4.9830000000000005,
    +  "6": 2.2359999999999998,
    +  "21": 1.018,
    +  "13": 1.081,
    +  "7": 2.2359999999999998,
    +  "8": 2.2359999999999998,
    +  "16": 1.018,
    +  "20": 1.018,
    +  "22": 1.017,
    +  "23": 1.017,
    +  "504": 1,
    +  "9": 2.2359999999999998,
    +  "14": 1.018,
    +  "10": 2.0109999999999997,
    +  "24": 1.017,
    +  "1008": 1,
    +  "1": 4.9830000000000005,
    +  "4": 2.3280000000000003,
    +  "19": 1.018,
    +  "144": 1,
    +  "18": 1.018
    +}
    +"#,
    +        )
    +        .unwrap();
    +        assert_eq!(
    +            into_fee_rate(6, esplora_fees.clone()).unwrap(),
    +            FeeRate::from_sat_per_vb(2.236)
    +        );
    +        assert_eq!(
    +            into_fee_rate(26, esplora_fees).unwrap(),
    +            FeeRate::from_sat_per_vb(1.015),
    +            "should inherit from value for 25"
    +        );
    +    }
    +}
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html index 10f92a0fea..2f7e9dc324 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/esplora/ureq.rs.html @@ -1,4 +1,6 @@ -ureq.rs - source
      1
    +ureq.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -369,33 +371,6 @@
     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
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -424,14 +399,14 @@
     use bitcoin::hashes::{sha256, Hash};
     use bitcoin::{BlockHeader, Script, Transaction, Txid};
     
    -use crate::blockchain::esplora::{EsploraError, EsploraGetHistory};
    -use crate::blockchain::utils::{ElectrumLikeSync, ElsGetHistoryRes};
    +use super::api::Tx;
    +use crate::blockchain::esplora::EsploraError;
     use crate::blockchain::*;
     use crate::database::BatchDatabase;
     use crate::error::Error;
     use crate::FeeRate;
     
    -#[derive(Debug)]
    +#[derive(Debug, Clone)]
     struct UrlClient {
         url: String,
         agent: Agent,
    @@ -445,38 +420,37 @@
     pub struct EsploraBlockchain {
         url_client: UrlClient,
         stop_gap: usize,
    -}
    -
    -impl std::convert::From<UrlClient> for EsploraBlockchain {
    -    fn from(url_client: UrlClient) -> Self {
    -        EsploraBlockchain {
    -            url_client,
    -            stop_gap: 20,
    -        }
    -    }
    +    concurrency: u8,
     }
     
     impl EsploraBlockchain {
         /// Create a new instance of the client from a base URL and the `stop_gap`.
    -    pub fn new(base_url: &str, stop_gap: usize) -> Self {
    +    pub fn new(base_url: &str, stop_gap: usize) -> Self {
             EsploraBlockchain {
                 url_client: UrlClient {
                     url: base_url.to_string(),
                     agent: Agent::new(),
                 },
    +            concurrency: super::DEFAULT_CONCURRENT_REQUESTS,
                 stop_gap,
             }
         }
     
         /// Set the inner `ureq` agent.
    -    pub fn with_agent(mut self, agent: Agent) -> Self {
    +    pub fn with_agent(mut self, agent: Agent) -> Self {
             self.url_client.agent = agent;
             self
         }
    +
    +    /// Set the number of parallel requests the client can make.
    +    pub fn with_concurrency(mut self, concurrency: u8) -> Self {
    +        self.concurrency = concurrency;
    +        self
    +    }
     }
     
     impl Blockchain for EsploraBlockchain {
    -    fn get_capabilities(&self) -> HashSet<Capability> {
    +    fn get_capabilities(&self) -> HashSet<Capability> {
             vec![
                 Capability::FullHistory,
                 Capability::GetAnyTx,
    @@ -488,73 +462,153 @@
     
         fn setup<D: BatchDatabase, P: Progress>(
             &self,
    -        database: &mut D,
    -        progress_update: P,
    -    ) -> Result<(), Error> {
    -        self.url_client
    -            .electrum_like_setup(self.stop_gap, database, progress_update)
    +        database: &mut D,
    +        _progress_update: P,
    +    ) -> Result<(), Error> {
    +        use crate::blockchain::script_sync::Request;
    +        let mut request = script_sync::start(database, self.stop_gap)?;
    +        let mut tx_index: HashMap<Txid, Tx> = HashMap::new();
    +        let batch_update = loop {
    +            request = match request {
    +                Request::Script(script_req) => {
    +                    let scripts = script_req
    +                        .request()
    +                        .take(self.concurrency as usize)
    +                        .cloned();
    +
    +                    let handles = scripts.map(move |script| {
    +                        let client = self.url_client.clone();
    +                        // make each request in its own thread.
    +                        std::thread::spawn(move || {
    +                            let mut related_txs: Vec<Tx> = 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's 25 or more we
    +                            // keep requesting to see if there's more.
    +                            if n_confirmed >= 25 {
    +                                loop {
    +                                    let new_related_txs: Vec<Tx> = 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;
    +                                    }
    +                                }
    +                            }
    +                            Result::<_, Error>::Ok(related_txs)
    +                        })
    +                    });
    +
    +                    let txs_per_script: Vec<Vec<Tx>> = handles
    +                        .map(|handle| handle.join().unwrap())
    +                        .collect::<Result<_, _>>()?;
    +                    let mut satisfaction = vec![];
    +
    +                    for txs in txs_per_script {
    +                        satisfaction.push(
    +                            txs.iter()
    +                                .map(|tx| (tx.txid, tx.status.block_height))
    +                                .collect(),
    +                        );
    +                        for tx in txs {
    +                            tx_index.insert(tx.txid, tx);
    +                        }
    +                    }
    +
    +                    script_req.satisfy(satisfaction)?
    +                }
    +                Request::Conftime(conftime_req) => {
    +                    let conftimes = conftime_req
    +                        .request()
    +                        .map(|txid| {
    +                            tx_index
    +                                .get(txid)
    +                                .expect("must be in index")
    +                                .confirmation_time()
    +                        })
    +                        .collect();
    +                    conftime_req.satisfy(conftimes)?
    +                }
    +                Request::Tx(tx_req) => {
    +                    let full_txs = tx_req
    +                        .request()
    +                        .map(|txid| {
    +                            let tx = tx_index.get(txid).expect("must be in index");
    +                            (tx.previous_outputs(), tx.to_tx())
    +                        })
    +                        .collect();
    +                    tx_req.satisfy(full_txs)?
    +                }
    +                Request::Finish(batch_update) => break batch_update,
    +            }
    +        };
    +
    +        database.commit_batch(batch_update)?;
    +
    +        Ok(())
         }
     
    -    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             Ok(self.url_client._get_tx(txid)?)
         }
     
    -    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
    +    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
             let _txid = self.url_client._broadcast(tx)?;
             Ok(())
         }
     
    -    fn get_height(&self) -> Result<u32, Error> {
    +    fn get_height(&self) -> Result<u32, Error> {
             Ok(self.url_client._get_height()?)
         }
     
    -    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
    +    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
             let estimates = self.url_client._get_fee_estimates()?;
             super::into_fee_rate(target, estimates)
         }
     }
     
     impl UrlClient {
    -    fn script_to_scripthash(script: &Script) -> String {
    -        sha256::Hash::hash(script.as_bytes()).into_inner().to_hex()
    -    }
    -
    -    fn _get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, EsploraError> {
    +    fn _get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, EsploraError> {
             let resp = self
                 .agent
                 .get(&format!("{}/tx/{}/raw", self.url, txid))
                 .call();
     
             match resp {
    -            Ok(resp) => Ok(Some(deserialize(&into_bytes(resp)?)?)),
    -            Err(ureq::Error::Status(code, _)) => {
    +            Ok(resp) => Ok(Some(deserialize(&into_bytes(resp)?)?)),
    +            Err(ureq::Error::Status(code, _)) => {
                     if is_status_not_found(code) {
                         return Ok(None);
                     }
                     Err(EsploraError::HttpResponse(code))
                 }
    -            Err(e) => Err(EsploraError::Ureq(e)),
    +            Err(e) => Err(EsploraError::Ureq(e)),
             }
         }
     
    -    fn _get_tx_no_opt(&self, txid: &Txid) -> Result<Transaction, EsploraError> {
    +    fn _get_tx_no_opt(&self, txid: &Txid) -> Result<Transaction, EsploraError> {
             match self._get_tx(txid) {
    -            Ok(Some(tx)) => Ok(tx),
    -            Ok(None) => Err(EsploraError::TransactionNotFound(*txid)),
    -            Err(e) => Err(e),
    +            Ok(Some(tx)) => Ok(tx),
    +            Ok(None) => Err(EsploraError::TransactionNotFound(*txid)),
    +            Err(e) => Err(e),
             }
         }
     
    -    fn _get_header(&self, block_height: u32) -> Result<BlockHeader, EsploraError> {
    +    fn _get_header(&self, block_height: u32) -> Result<BlockHeader, EsploraError> {
             let resp = self
                 .agent
                 .get(&format!("{}/block-height/{}", self.url, block_height))
                 .call();
     
             let bytes = match resp {
    -            Ok(resp) => Ok(into_bytes(resp)?),
    -            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -            Err(e) => Err(EsploraError::Ureq(e)),
    +            Ok(resp) => Ok(into_bytes(resp)?),
    +            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    +            Err(e) => Err(EsploraError::Ureq(e)),
             }?;
     
             let hash = std::str::from_utf8(&bytes)
    @@ -566,143 +620,84 @@
                 .call();
     
             match resp {
    -            Ok(resp) => Ok(deserialize(&Vec::from_hex(&resp.into_string()?)?)?),
    -            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -            Err(e) => Err(EsploraError::Ureq(e)),
    +            Ok(resp) => Ok(deserialize(&Vec::from_hex(&resp.into_string()?)?)?),
    +            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    +            Err(e) => Err(EsploraError::Ureq(e)),
             }
         }
     
    -    fn _broadcast(&self, transaction: &Transaction) -> Result<(), EsploraError> {
    +    fn _broadcast(&self, transaction: &Transaction) -> Result<(), EsploraError> {
             let resp = self
                 .agent
                 .post(&format!("{}/tx", self.url))
                 .send_string(&serialize(transaction).to_hex());
     
             match resp {
    -            Ok(_) => Ok(()), // We do not return the txid?
    -            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -            Err(e) => Err(EsploraError::Ureq(e)),
    +            Ok(_) => Ok(()), // We do not return the txid?
    +            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    +            Err(e) => Err(EsploraError::Ureq(e)),
             }
         }
     
    -    fn _get_height(&self) -> Result<u32, EsploraError> {
    +    fn _get_height(&self) -> Result<u32, EsploraError> {
             let resp = self
                 .agent
                 .get(&format!("{}/blocks/tip/height", self.url))
                 .call();
     
             match resp {
    -            Ok(resp) => Ok(resp.into_string()?.parse()?),
    -            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -            Err(e) => Err(EsploraError::Ureq(e)),
    +            Ok(resp) => Ok(resp.into_string()?.parse()?),
    +            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    +            Err(e) => Err(EsploraError::Ureq(e)),
             }
         }
     
    -    fn _script_get_history(&self, script: &Script) -> Result<Vec<ElsGetHistoryRes>, EsploraError> {
    -        let mut result = Vec::new();
    -        let scripthash = Self::script_to_scripthash(script);
    -
    -        // Add the unconfirmed transactions first
    -
    -        let resp = self
    -            .agent
    -            .get(&format!(
    -                "{}/scripthash/{}/txs/mempool",
    -                self.url, scripthash
    -            ))
    -            .call();
    -
    -        let v = match resp {
    -            Ok(resp) => {
    -                let v: Vec<EsploraGetHistory> = resp.into_json()?;
    -                Ok(v)
    -            }
    -            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -            Err(e) => Err(EsploraError::Ureq(e)),
    -        }?;
    -
    -        result.extend(v.into_iter().map(|x| ElsGetHistoryRes {
    -            tx_hash: x.txid,
    -            height: x.status.block_height.unwrap_or(0) as i32,
    -        }));
    -
    -        debug!(
    -            "Found {} mempool txs for {} - {:?}",
    -            result.len(),
    -            scripthash,
    -            script
    -        );
    -
    -        // Then go through all the pages of confirmed transactions
    -        let mut last_txid = String::new();
    -        loop {
    -            let resp = self
    -                .agent
    -                .get(&format!(
    -                    "{}/scripthash/{}/txs/chain/{}",
    -                    self.url, scripthash, last_txid
    -                ))
    -                .call();
    -
    -            let v = match resp {
    -                Ok(resp) => {
    -                    let v: Vec<EsploraGetHistory> = resp.into_json()?;
    -                    Ok(v)
    -                }
    -                Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -                Err(e) => Err(EsploraError::Ureq(e)),
    -            }?;
    -
    -            let len = v.len();
    -            if let Some(elem) = v.last() {
    -                last_txid = elem.txid.to_hex();
    -            }
    -
    -            debug!("... adding {} confirmed transactions", len);
    -
    -            result.extend(v.into_iter().map(|x| ElsGetHistoryRes {
    -                tx_hash: x.txid,
    -                height: x.status.block_height.unwrap_or(0) as i32,
    -            }));
    -
    -            if len < 25 {
    -                break;
    -            }
    -        }
    -
    -        Ok(result)
    -    }
    -
    -    fn _get_fee_estimates(&self) -> Result<HashMap<String, f64>, EsploraError> {
    +    fn _get_fee_estimates(&self) -> Result<HashMap<String, f64>, EsploraError> {
             let resp = self
                 .agent
                 .get(&format!("{}/fee-estimates", self.url,))
                 .call();
     
             let map = match resp {
    -            Ok(resp) => {
    +            Ok(resp) => {
                     let map: HashMap<String, f64> = resp.into_json()?;
                     Ok(map)
                 }
    -            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    -            Err(e) => Err(EsploraError::Ureq(e)),
    +            Err(ureq::Error::Status(code, _)) => Err(EsploraError::HttpResponse(code)),
    +            Err(e) => Err(EsploraError::Ureq(e)),
             }?;
     
             Ok(map)
         }
    +
    +    fn _scripthash_txs(
    +        &self,
    +        script: &Script,
    +        last_seen: Option<Txid>,
    +    ) -> Result<Vec<Tx>, EsploraError> {
    +        let script_hash = sha256::Hash::hash(script.as_bytes()).into_inner().to_hex();
    +        let url = match last_seen {
    +            Some(last_seen) => format!(
    +                "{}/scripthash/{}/txs/chain/{}",
    +                self.url, script_hash, last_seen
    +            ),
    +            None => format!("{}/scripthash/{}/txs", self.url, script_hash),
    +        };
    +        Ok(self.agent.get(&url).call()?.into_json()?)
    +    }
     }
     
    -fn is_status_not_found(status: u16) -> bool {
    -    status == 404
    +fn is_status_not_found(status: u16) -> bool {
    +    status == 404
     }
     
    -fn into_bytes(resp: Response) -> Result<Vec<u8>, io::Error> {
    +fn into_bytes(resp: Response) -> Result<Vec<u8>, io::Error> {
         const BYTES_LIMIT: usize = 10 * 1_024 * 1_024;
     
         let mut buf: Vec<u8> = vec![];
         resp.into_reader()
             .take((BYTES_LIMIT + 1) as u64)
    -        .read_to_end(&mut buf)?;
    +        .read_to_end(&mut buf)?;
         if buf.len() > BYTES_LIMIT {
             return Err(io::Error::new(
                 io::ErrorKind::Other,
    @@ -713,88 +708,40 @@
         Ok(buf)
     }
     
    -impl ElectrumLikeSync for UrlClient {
    -    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>(
    -        &self,
    -        scripts: I,
    -    ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error> {
    -        let mut results = vec![];
    -        for script in scripts.into_iter() {
    -            let v = self._script_get_history(script)?;
    -            results.push(v);
    -        }
    -        Ok(results)
    -    }
    +impl ConfigurableBlockchain for EsploraBlockchain {
    +    type Config = super::EsploraBlockchainConfig;
     
    -    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid>>(
    -        &self,
    -        txids: I,
    -    ) -> Result<Vec<Transaction>, Error> {
    -        let mut results = vec![];
    -        for txid in txids.into_iter() {
    -            let tx = self._get_tx_no_opt(txid)?;
    -            results.push(tx);
    -        }
    -        Ok(results)
    -    }
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +        let mut agent_builder = ureq::AgentBuilder::new();
     
    -    fn els_batch_block_header<I: IntoIterator<Item = u32>>(
    -        &self,
    -        heights: I,
    -    ) -> Result<Vec<BlockHeader>, Error> {
    -        let mut results = vec![];
    -        for height in heights.into_iter() {
    -            let header = self._get_header(height)?;
    -            results.push(header);
    +        if let Some(timeout) = config.timeout {
    +            agent_builder = agent_builder.timeout(Duration::from_secs(timeout));
             }
    -        Ok(results)
    -    }
    -}
    -
    -/// Configuration for an [`EsploraBlockchain`]
    -#[derive(Debug, serde::Deserialize, serde::Serialize, Clone, PartialEq)]
    -pub struct EsploraBlockchainConfig {
    -    /// Base URL of the esplora service eg. `https://blockstream.info/api/`
    -    pub base_url: String,
    -    /// Optional URL of the proxy to use to make requests to the Esplora server
    -    ///
    -    /// The string should be formatted as: `<protocol>://<user>:<password>@host:<port>`.
    -    ///
    -    /// Note that the format of this value and the supported protocols change slightly between the
    -    /// sync version of esplora (using `ureq`) and the async version (using `reqwest`). For more
    -    /// details check with the documentation of the two crates. Both of them are compiled with
    -    /// the `socks` feature enabled.
    -    ///
    -    /// The proxy is ignored when targeting `wasm32`.
    -    pub proxy: Option<String>,
    -    /// Socket read timeout.
    -    pub timeout_read: u64,
    -    /// Socket write timeout.
    -    pub timeout_write: u64,
    -    /// Stop searching addresses for transactions after finding an unused gap of this length.
    -    pub stop_gap: usize,
    -}
    -
    -impl ConfigurableBlockchain for EsploraBlockchain {
    -    type Config = EsploraBlockchainConfig;
    -
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    -        let mut agent_builder = ureq::AgentBuilder::new()
    -            .timeout_read(Duration::from_secs(config.timeout_read))
    -            .timeout_write(Duration::from_secs(config.timeout_write));
     
             if let Some(proxy) = &config.proxy {
                 agent_builder = agent_builder
                     .proxy(Proxy::new(proxy).map_err(|e| Error::Esplora(Box::new(e.into())))?);
             }
     
    -        Ok(
    -            EsploraBlockchain::new(config.base_url.as_str(), config.stop_gap)
    -                .with_agent(agent_builder.build()),
    -        )
    +        let mut blockchain = EsploraBlockchain::new(config.base_url.as_str(), config.stop_gap)
    +            .with_agent(agent_builder.build());
    +
    +        if let Some(concurrency) = config.concurrency {
    +            blockchain = blockchain.with_concurrency(concurrency);
    +        }
    +
    +        Ok(blockchain)
    +    }
    +}
    +
    +impl From<ureq::Error> for EsploraError {
    +    fn from(e: ureq::Error) -> Self {
    +        match e {
    +            ureq::Error::Status(code, _) => EsploraError::HttpResponse(code),
    +            e => EsploraError::Ureq(e),
    +        }
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html index 6bac7fc40c..8dda3c9d90 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -253,7 +255,6 @@
     253
     254
     255
    -256
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -283,9 +284,6 @@
     use crate::error::Error;
     use crate::FeeRate;
     
    -#[cfg(any(feature = "electrum", feature = "esplora"))]
    -pub(crate) mod utils;
    -
     #[cfg(any(
         feature = "electrum",
         feature = "esplora",
    @@ -293,6 +291,8 @@
         feature = "rpc"
     ))]
     pub mod any;
    +mod script_sync;
    +
     #[cfg(any(
         feature = "electrum",
         feature = "esplora",
    @@ -345,7 +345,7 @@
     #[maybe_async]
     pub trait Blockchain {
         /// Return the set of [`Capability`] supported by this backend
    -    fn get_capabilities(&self) -> HashSet<Capability>;
    +    fn get_capabilities(&self) -> HashSet<Capability>;
     
         /// Setup the backend and populate the internal database for the first time
         ///
    @@ -359,9 +359,9 @@
         /// [`Blockchain::sync`] defaults to calling this internally if not overridden.
         fn setup<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error>;
    +    ) -> Result<(), Error>;
         /// Populate the internal database with transactions and UTXOs
         ///
         /// If not overridden, it defaults to calling [`Blockchain::setup`] internally.
    @@ -383,21 +383,21 @@
         /// [`BatchOperations::del_utxo`]: crate::database::BatchOperations::del_utxo
         fn sync<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             maybe_await!(self.setup(database, progress_update))
         }
     
         /// Fetch a transaction from the blockchain given its txid
    -    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>;
    +    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>;
         /// Broadcast a transaction
    -    fn broadcast(&self, tx: &Transaction) -> Result<(), Error>;
    +    fn broadcast(&self, tx: &Transaction) -> Result<(), Error>;
     
         /// Return the current height
    -    fn get_height(&self) -> Result<u32, Error>;
    +    fn get_height(&self) -> Result<u32, Error>;
         /// Estimate the fee rate required to confirm a transaction in a given `target` of blocks
    -    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error>;
    +    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error>;
     }
     
     /// Trait for [`Blockchain`] types that can be created given a configuration
    @@ -406,7 +406,7 @@
         type Config: std::fmt::Debug;
     
         /// Create a new instance given a configuration
    -    fn from_config(config: &Self::Config) -> Result<Self, Error>;
    +    fn from_config(config: &Self::Config) -> Result<Self, Error>;
     }
     
     /// Data sent with a progress update over a [`channel`]
    @@ -419,16 +419,16 @@
         ///
         /// The `progress` value should be in the range 0.0 - 100.0, and the `message` value is an
         /// optional text message that can be displayed to the user.
    -    fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error>;
    +    fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error>;
     }
     
     /// Shortcut to create a [`channel`] (pair of [`Sender`] and [`Receiver`]) that can transport [`ProgressData`]
    -pub fn progress() -> (Sender<ProgressData>, Receiver<ProgressData>) {
    +pub fn progress() -> (Sender<ProgressData>, Receiver<ProgressData>) {
         channel()
     }
     
     impl Progress for Sender<ProgressData> {
    -    fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> {
    +    fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> {
             if !(0.0..=100.0).contains(&progress) {
                 return Err(Error::InvalidProgressValue(progress));
             }
    @@ -443,12 +443,12 @@
     pub struct NoopProgress;
     
     /// Create a new instance of [`NoopProgress`]
    -pub fn noop_progress() -> NoopProgress {
    +pub fn noop_progress() -> NoopProgress {
         NoopProgress
     }
     
     impl Progress for NoopProgress {
    -    fn update(&self, _progress: f32, _message: Option<String>) -> Result<(), Error> {
    +    fn update(&self, _progress: f32, _message: Option<String>) -> Result<(), Error> {
             Ok(())
         }
     }
    @@ -458,12 +458,12 @@
     pub struct LogProgress;
     
     /// Create a new instance of [`LogProgress`]
    -pub fn log_progress() -> LogProgress {
    +pub fn log_progress() -> LogProgress {
         LogProgress
     }
     
     impl Progress for LogProgress {
    -    fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> {
    +    fn update(&self, progress: f32, message: Option<String>) -> Result<(), Error> {
             log::info!(
                 "Sync {:.3}%: `{}`",
                 progress,
    @@ -476,41 +476,40 @@
     
     #[maybe_async]
     impl<T: Blockchain> Blockchain for Arc<T> {
    -    fn get_capabilities(&self) -> HashSet<Capability> {
    +    fn get_capabilities(&self) -> HashSet<Capability> {
             maybe_await!(self.deref().get_capabilities())
         }
     
         fn setup<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             maybe_await!(self.deref().setup(database, progress_update))
         }
     
         fn sync<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             maybe_await!(self.deref().sync(database, progress_update))
         }
     
    -    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             maybe_await!(self.deref().get_tx(txid))
         }
    -    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
    +    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
             maybe_await!(self.deref().broadcast(tx))
         }
     
    -    fn get_height(&self) -> Result<u32, Error> {
    +    fn get_height(&self) -> Result<u32, Error> {
             maybe_await!(self.deref().get_height())
         }
    -    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
    +    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
             maybe_await!(self.deref().estimate_fee(target))
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/script_sync.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/script_sync.rs.html new file mode 100644 index 0000000000..043335eaf0 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/script_sync.rs.html @@ -0,0 +1,793 @@ +script_sync.rs - source +
    logo
      1
    +  2
    +  3
    +  4
    +  5
    +  6
    +  7
    +  8
    +  9
    + 10
    + 11
    + 12
    + 13
    + 14
    + 15
    + 16
    + 17
    + 18
    + 19
    + 20
    + 21
    + 22
    + 23
    + 24
    + 25
    + 26
    + 27
    + 28
    + 29
    + 30
    + 31
    + 32
    + 33
    + 34
    + 35
    + 36
    + 37
    + 38
    + 39
    + 40
    + 41
    + 42
    + 43
    + 44
    + 45
    + 46
    + 47
    + 48
    + 49
    + 50
    + 51
    + 52
    + 53
    + 54
    + 55
    + 56
    + 57
    + 58
    + 59
    + 60
    + 61
    + 62
    + 63
    + 64
    + 65
    + 66
    + 67
    + 68
    + 69
    + 70
    + 71
    + 72
    + 73
    + 74
    + 75
    + 76
    + 77
    + 78
    + 79
    + 80
    + 81
    + 82
    + 83
    + 84
    + 85
    + 86
    + 87
    + 88
    + 89
    + 90
    + 91
    + 92
    + 93
    + 94
    + 95
    + 96
    + 97
    + 98
    + 99
    +100
    +101
    +102
    +103
    +104
    +105
    +106
    +107
    +108
    +109
    +110
    +111
    +112
    +113
    +114
    +115
    +116
    +117
    +118
    +119
    +120
    +121
    +122
    +123
    +124
    +125
    +126
    +127
    +128
    +129
    +130
    +131
    +132
    +133
    +134
    +135
    +136
    +137
    +138
    +139
    +140
    +141
    +142
    +143
    +144
    +145
    +146
    +147
    +148
    +149
    +150
    +151
    +152
    +153
    +154
    +155
    +156
    +157
    +158
    +159
    +160
    +161
    +162
    +163
    +164
    +165
    +166
    +167
    +168
    +169
    +170
    +171
    +172
    +173
    +174
    +175
    +176
    +177
    +178
    +179
    +180
    +181
    +182
    +183
    +184
    +185
    +186
    +187
    +188
    +189
    +190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
    +209
    +210
    +211
    +212
    +213
    +214
    +215
    +216
    +217
    +218
    +219
    +220
    +221
    +222
    +223
    +224
    +225
    +226
    +227
    +228
    +229
    +230
    +231
    +232
    +233
    +234
    +235
    +236
    +237
    +238
    +239
    +240
    +241
    +242
    +243
    +244
    +245
    +246
    +247
    +248
    +249
    +250
    +251
    +252
    +253
    +254
    +255
    +256
    +257
    +258
    +259
    +260
    +261
    +262
    +263
    +264
    +265
    +266
    +267
    +268
    +269
    +270
    +271
    +272
    +273
    +274
    +275
    +276
    +277
    +278
    +279
    +280
    +281
    +282
    +283
    +284
    +285
    +286
    +287
    +288
    +289
    +290
    +291
    +292
    +293
    +294
    +295
    +296
    +297
    +298
    +299
    +300
    +301
    +302
    +303
    +304
    +305
    +306
    +307
    +308
    +309
    +310
    +311
    +312
    +313
    +314
    +315
    +316
    +317
    +318
    +319
    +320
    +321
    +322
    +323
    +324
    +325
    +326
    +327
    +328
    +329
    +330
    +331
    +332
    +333
    +334
    +335
    +336
    +337
    +338
    +339
    +340
    +341
    +342
    +343
    +344
    +345
    +346
    +347
    +348
    +349
    +350
    +351
    +352
    +353
    +354
    +355
    +356
    +357
    +358
    +359
    +360
    +361
    +362
    +363
    +364
    +365
    +366
    +367
    +368
    +369
    +370
    +371
    +372
    +373
    +374
    +375
    +376
    +377
    +378
    +379
    +380
    +381
    +382
    +383
    +384
    +385
    +386
    +387
    +388
    +389
    +390
    +391
    +392
    +393
    +394
    +
    /*!
    +This models a how a sync happens where you have a server that you send your script pubkeys to and it
    +returns associated transactions i.e. electrum.
    +*/
    +#![allow(dead_code)]
    +use crate::{
    +    database::{BatchDatabase, BatchOperations, DatabaseUtils},
    +    wallet::time::Instant,
    +    BlockTime, Error, KeychainKind, LocalUtxo, TransactionDetails,
    +};
    +use bitcoin::{OutPoint, Script, Transaction, TxOut, Txid};
    +use log::*;
    +use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque};
    +
    +/// A request for on-chain information
    +pub enum Request<'a, D: BatchDatabase> {
    +    /// A request for transactions related to script pubkeys.
    +    Script(ScriptReq<'a, D>),
    +    /// A request for confirmation times for some transactions.
    +    Conftime(ConftimeReq<'a, D>),
    +    /// A request for full transaction details of some transactions.
    +    Tx(TxReq<'a, D>),
    +    /// Requests are finished here's a batch database update to reflect data gathered.
    +    Finish(D::Batch),
    +}
    +
    +/// starts a sync
    +pub fn start<D: BatchDatabase>(db: &D, stop_gap: usize) -> Result<Request<'_, D>, Error> {
    +    use rand::seq::SliceRandom;
    +    let mut keychains = vec![KeychainKind::Internal, KeychainKind::External];
    +    // shuffling improve privacy, the server doesn't know my first request is from my internal or external addresses
    +    keychains.shuffle(&mut rand::thread_rng());
    +    let keychain = keychains.pop().unwrap();
    +    let scripts_needed = db
    +        .iter_script_pubkeys(Some(keychain))?
    +        .into_iter()
    +        .collect();
    +    let state = State::new(db);
    +
    +    Ok(Request::Script(ScriptReq {
    +        state,
    +        scripts_needed,
    +        script_index: 0,
    +        stop_gap,
    +        keychain,
    +        next_keychains: keychains,
    +    }))
    +}
    +
    +pub struct ScriptReq<'a, D: BatchDatabase> {
    +    state: State<'a, D>,
    +    script_index: usize,
    +    scripts_needed: VecDeque<Script>,
    +    stop_gap: usize,
    +    keychain: KeychainKind,
    +    next_keychains: Vec<KeychainKind>,
    +}
    +
    +/// The sync starts by returning script pubkeys we are interested in.
    +impl<'a, D: BatchDatabase> ScriptReq<'a, D> {
    +    pub fn request(&self) -> impl Iterator<Item = &Script> + Clone {
    +        self.scripts_needed.iter()
    +    }
    +
    +    pub fn satisfy(
    +        mut self,
    +        // we want to know the txids assoiciated with the script and their height
    +        txids: Vec<Vec<(Txid, Option<u32>)>>,
    +    ) -> Result<Request<'a, D>, Error> {
    +        for (txid_list, script) in txids.iter().zip(self.scripts_needed.iter()) {
    +            debug!(
    +                "found {} transactions for script pubkey {}",
    +                txid_list.len(),
    +                script
    +            );
    +            if !txid_list.is_empty() {
    +                // the address is active
    +                self.state
    +                    .last_active_index
    +                    .insert(self.keychain, self.script_index);
    +            }
    +
    +            for (txid, height) in txid_list {
    +                // have we seen this txid already?
    +                match self.state.db.get_tx(txid, true)? {
    +                    Some(mut details) => {
    +                        let old_height = details.confirmation_time.as_ref().map(|x| x.height);
    +                        match (old_height, height) {
    +                            (None, Some(_)) => {
    +                                // It looks like the tx has confirmed since we last saw it -- we
    +                                // need to know the confirmation time.
    +                                self.state.tx_missing_conftime.insert(*txid, details);
    +                            }
    +                            (Some(old_height), Some(new_height)) if old_height != *new_height => {
    +                                // The height of the tx has changed !? -- It's a reorg get the new confirmation time.
    +                                self.state.tx_missing_conftime.insert(*txid, details);
    +                            }
    +                            (Some(_), None) => {
    +                                // A re-org where the tx is not in the chain anymore.
    +                                details.confirmation_time = None;
    +                                self.state.finished_txs.push(details);
    +                            }
    +                            _ => self.state.finished_txs.push(details),
    +                        }
    +                    }
    +                    None => {
    +                        // we've never seen it let's get the whole thing
    +                        self.state.tx_needed.insert(*txid);
    +                    }
    +                };
    +            }
    +
    +            self.script_index += 1;
    +        }
    +
    +        for _ in txids {
    +            self.scripts_needed.pop_front();
    +        }
    +
    +        let last_active_index = self
    +            .state
    +            .last_active_index
    +            .get(&self.keychain)
    +            .map(|x| x + 1)
    +            .unwrap_or(0); // so no addresses active maps to 0
    +
    +        Ok(
    +            if self.script_index > last_active_index + self.stop_gap
    +                || self.scripts_needed.is_empty()
    +            {
    +                debug!(
    +                    "finished scanning for transactions for keychain {:?} at index {}",
    +                    self.keychain, last_active_index
    +                );
    +                // we're done here -- check if we need to do the next keychain
    +                if let Some(keychain) = self.next_keychains.pop() {
    +                    self.keychain = keychain;
    +                    self.script_index = 0;
    +                    self.scripts_needed = self
    +                        .state
    +                        .db
    +                        .iter_script_pubkeys(Some(keychain))?
    +                        .into_iter()
    +                        .collect();
    +                    Request::Script(self)
    +                } else {
    +                    Request::Tx(TxReq { state: self.state })
    +                }
    +            } else {
    +                Request::Script(self)
    +            },
    +        )
    +    }
    +}
    +
    +/// Then we get full transactions
    +pub struct TxReq<'a, D> {
    +    state: State<'a, D>,
    +}
    +
    +impl<'a, D: BatchDatabase> TxReq<'a, D> {
    +    pub fn request(&self) -> impl Iterator<Item = &Txid> + Clone {
    +        self.state.tx_needed.iter()
    +    }
    +
    +    pub fn satisfy(
    +        mut self,
    +        tx_details: Vec<(Vec<Option<TxOut>>, Transaction)>,
    +    ) -> Result<Request<'a, D>, Error> {
    +        let tx_details: Vec<TransactionDetails> = tx_details
    +            .into_iter()
    +            .zip(self.state.tx_needed.iter())
    +            .map(|((vout, tx), txid)| {
    +                debug!("found tx_details for {}", txid);
    +                assert_eq!(tx.txid(), *txid);
    +                let mut sent: u64 = 0;
    +                let mut received: u64 = 0;
    +                let mut inputs_sum: u64 = 0;
    +                let mut outputs_sum: u64 = 0;
    +
    +                for (txout, input) in vout.into_iter().zip(tx.input.iter()) {
    +                    let txout = match txout {
    +                        Some(txout) => txout,
    +                        None => {
    +                            // skip coinbase inputs
    +                            debug_assert!(
    +                                input.previous_output.is_null(),
    +                                "prevout should only be missing for coinbase"
    +                            );
    +                            continue;
    +                        }
    +                    };
    +
    +                    inputs_sum += txout.value;
    +                    if self.state.db.is_mine(&txout.script_pubkey)? {
    +                        sent += txout.value;
    +                    }
    +                }
    +
    +                for out in &tx.output {
    +                    outputs_sum += out.value;
    +                    if self.state.db.is_mine(&out.script_pubkey)? {
    +                        received += out.value;
    +                    }
    +                }
    +                // we need to saturating sub since we want coinbase txs to map to 0 fee and
    +                // this subtraction will be negative for coinbase txs.
    +                let fee = inputs_sum.saturating_sub(outputs_sum);
    +                Result::<_, Error>::Ok(TransactionDetails {
    +                    txid: *txid,
    +                    transaction: Some(tx),
    +                    received,
    +                    sent,
    +                    // we're going to fill this in later
    +                    confirmation_time: None,
    +                    fee: Some(fee),
    +                    verified: false,
    +                })
    +            })
    +            .collect::<Result<Vec<_>, _>>()?;
    +
    +        for tx_detail in tx_details {
    +            self.state.tx_needed.remove(&tx_detail.txid);
    +            self.state
    +                .tx_missing_conftime
    +                .insert(tx_detail.txid, tx_detail);
    +        }
    +
    +        if !self.state.tx_needed.is_empty() {
    +            Ok(Request::Tx(self))
    +        } else {
    +            Ok(Request::Conftime(ConftimeReq { state: self.state }))
    +        }
    +    }
    +}
    +
    +/// Final step is to get confirmation times
    +pub struct ConftimeReq<'a, D> {
    +    state: State<'a, D>,
    +}
    +
    +impl<'a, D: BatchDatabase> ConftimeReq<'a, D> {
    +    pub fn request(&self) -> impl Iterator<Item = &Txid> + Clone {
    +        self.state.tx_missing_conftime.keys()
    +    }
    +
    +    pub fn satisfy(
    +        mut self,
    +        confirmation_times: Vec<Option<BlockTime>>,
    +    ) -> Result<Request<'a, D>, Error> {
    +        let conftime_needed = self
    +            .request()
    +            .cloned()
    +            .take(confirmation_times.len())
    +            .collect::<Vec<_>>();
    +        for (confirmation_time, txid) in confirmation_times.into_iter().zip(conftime_needed.iter())
    +        {
    +            debug!("confirmation time for {} was {:?}", txid, confirmation_time);
    +            if let Some(mut tx_details) = self.state.tx_missing_conftime.remove(txid) {
    +                tx_details.confirmation_time = confirmation_time;
    +                self.state.finished_txs.push(tx_details);
    +            }
    +        }
    +
    +        if self.state.tx_missing_conftime.is_empty() {
    +            Ok(Request::Finish(self.state.into_db_update()?))
    +        } else {
    +            Ok(Request::Conftime(self))
    +        }
    +    }
    +}
    +
    +struct State<'a, D> {
    +    db: &'a D,
    +    last_active_index: HashMap<KeychainKind, usize>,
    +    /// Transactions where we need to get the full details
    +    tx_needed: BTreeSet<Txid>,
    +    /// Transacitions that we know everything about
    +    finished_txs: Vec<TransactionDetails>,
    +    /// Transactions that discovered conftimes should be inserted into
    +    tx_missing_conftime: BTreeMap<Txid, TransactionDetails>,
    +    /// The start of the sync
    +    start_time: Instant,
    +}
    +
    +impl<'a, D: BatchDatabase> State<'a, D> {
    +    fn new(db: &'a D) -> Self {
    +        State {
    +            db,
    +            last_active_index: HashMap::default(),
    +            finished_txs: vec![],
    +            tx_needed: BTreeSet::default(),
    +            tx_missing_conftime: BTreeMap::default(),
    +            start_time: Instant::new(),
    +        }
    +    }
    +    fn into_db_update(self) -> Result<D::Batch, Error> {
    +        debug_assert!(self.tx_needed.is_empty() && self.tx_missing_conftime.is_empty());
    +        let existing_txs = self.db.iter_txs(false)?;
    +        let existing_txids: HashSet<Txid> = existing_txs.iter().map(|tx| tx.txid).collect();
    +        let finished_txs = make_txs_consistent(&self.finished_txs);
    +        let observed_txids: HashSet<Txid> = finished_txs.iter().map(|tx| tx.txid).collect();
    +        let txids_to_delete = existing_txids.difference(&observed_txids);
    +        let mut batch = self.db.begin_batch();
    +
    +        // Delete old txs that no longer exist
    +        for txid in txids_to_delete {
    +            if let Some(raw_tx) = self.db.get_raw_tx(txid)? {
    +                for i in 0..raw_tx.output.len() {
    +                    // Also delete any utxos from the txs that no longer exist.
    +                    let _ = batch.del_utxo(&OutPoint {
    +                        txid: *txid,
    +                        vout: i as u32,
    +                    })?;
    +                }
    +            } else {
    +                unreachable!("we should always have the raw tx");
    +            }
    +            batch.del_tx(txid, true)?;
    +        }
    +
    +        // Set every tx we observed
    +        for finished_tx in &finished_txs {
    +            let tx = finished_tx
    +                .transaction
    +                .as_ref()
    +                .expect("transaction will always be present here");
    +            for (i, output) in tx.output.iter().enumerate() {
    +                if let Some((keychain, _)) =
    +                    self.db.get_path_from_script_pubkey(&output.script_pubkey)?
    +                {
    +                    // add utxos we own from the new transactions we've seen.
    +                    batch.set_utxo(&LocalUtxo {
    +                        outpoint: OutPoint {
    +                            txid: finished_tx.txid,
    +                            vout: i as u32,
    +                        },
    +                        txout: output.clone(),
    +                        keychain,
    +                    })?;
    +                }
    +            }
    +            batch.set_tx(finished_tx)?;
    +        }
    +
    +        // we don't do this in the loop above since we may want to delete some of the utxos we
    +        // just added in case there are new tranasactions that spend form each other.
    +        for finished_tx in &finished_txs {
    +            let tx = finished_tx
    +                .transaction
    +                .as_ref()
    +                .expect("transaction will always be present here");
    +            for input in &tx.input {
    +                // Delete any spent utxos
    +                batch.del_utxo(&input.previous_output)?;
    +            }
    +        }
    +
    +        for (keychain, last_active_index) in self.last_active_index {
    +            batch.set_last_index(keychain, last_active_index as u32)?;
    +        }
    +
    +        info!(
    +            "finished setup, elapsed {:?}ms",
    +            self.start_time.elapsed().as_millis()
    +        );
    +        Ok(batch)
    +    }
    +}
    +
    +/// Remove conflicting transactions -- tie breaking them by fee.
    +fn make_txs_consistent(txs: &[TransactionDetails]) -> Vec<&TransactionDetails> {
    +    let mut utxo_index: HashMap<OutPoint, &TransactionDetails> = HashMap::default();
    +    for tx in txs {
    +        for input in &tx.transaction.as_ref().unwrap().input {
    +            utxo_index
    +                .entry(input.previous_output)
    +                .and_modify(|existing| match (tx.fee, existing.fee) {
    +                    (Some(fee), Some(existing_fee)) if fee > existing_fee => *existing = tx,
    +                    (Some(_), None) => *existing = tx,
    +                    _ => { /* leave it the same */ }
    +                })
    +                .or_insert(tx);
    +        }
    +    }
    +
    +    utxo_index
    +        .into_iter()
    +        .map(|(_, tx)| (tx.txid, tx))
    +        .collect::<HashMap<_, _>>()
    +        .into_iter()
    +        .map(|(_, tx)| tx)
    +        .collect()
    +}
    +
    +
    + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html deleted file mode 100644 index c5288d5967..0000000000 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/blockchain/utils.rs.html +++ /dev/null @@ -1,780 +0,0 @@ -utils.rs - source
      1
    -  2
    -  3
    -  4
    -  5
    -  6
    -  7
    -  8
    -  9
    - 10
    - 11
    - 12
    - 13
    - 14
    - 15
    - 16
    - 17
    - 18
    - 19
    - 20
    - 21
    - 22
    - 23
    - 24
    - 25
    - 26
    - 27
    - 28
    - 29
    - 30
    - 31
    - 32
    - 33
    - 34
    - 35
    - 36
    - 37
    - 38
    - 39
    - 40
    - 41
    - 42
    - 43
    - 44
    - 45
    - 46
    - 47
    - 48
    - 49
    - 50
    - 51
    - 52
    - 53
    - 54
    - 55
    - 56
    - 57
    - 58
    - 59
    - 60
    - 61
    - 62
    - 63
    - 64
    - 65
    - 66
    - 67
    - 68
    - 69
    - 70
    - 71
    - 72
    - 73
    - 74
    - 75
    - 76
    - 77
    - 78
    - 79
    - 80
    - 81
    - 82
    - 83
    - 84
    - 85
    - 86
    - 87
    - 88
    - 89
    - 90
    - 91
    - 92
    - 93
    - 94
    - 95
    - 96
    - 97
    - 98
    - 99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -378
    -379
    -380
    -381
    -382
    -383
    -384
    -385
    -386
    -387
    -388
    -
    // Bitcoin Dev Kit
    -// Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
    -//
    -// Copyright (c) 2020-2021 Bitcoin Dev Kit Developers
    -//
    -// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
    -// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
    -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
    -// You may not use this file except in accordance with one or both of these
    -// licenses.
    -
    -use std::collections::{HashMap, HashSet};
    -
    -#[allow(unused_imports)]
    -use log::{debug, error, info, trace};
    -use rand::seq::SliceRandom;
    -use rand::thread_rng;
    -
    -use bitcoin::{BlockHeader, OutPoint, Script, Transaction, Txid};
    -
    -use super::*;
    -use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils};
    -use crate::error::Error;
    -use crate::types::{ConfirmationTime, KeychainKind, LocalUtxo, TransactionDetails};
    -use crate::wallet::time::Instant;
    -use crate::wallet::utils::ChunksIterator;
    -
    -#[derive(Debug)]
    -pub struct ElsGetHistoryRes {
    -    pub height: i32,
    -    pub tx_hash: Txid,
    -}
    -
    -/// Implements the synchronization logic for an Electrum-like client.
    -#[maybe_async]
    -pub trait ElectrumLikeSync {
    -    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script> + Clone>(
    -        &self,
    -        scripts: I,
    -    ) -> Result<Vec<Vec<ElsGetHistoryRes>>, Error>;
    -
    -    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid> + Clone>(
    -        &self,
    -        txids: I,
    -    ) -> Result<Vec<Transaction>, Error>;
    -
    -    fn els_batch_block_header<I: IntoIterator<Item = u32> + Clone>(
    -        &self,
    -        heights: I,
    -    ) -> Result<Vec<BlockHeader>, Error>;
    -
    -    // Provided methods down here...
    -
    -    fn electrum_like_setup<D: BatchDatabase, P: Progress>(
    -        &self,
    -        stop_gap: usize,
    -        db: &mut D,
    -        _progress_update: P,
    -    ) -> Result<(), Error> {
    -        // TODO: progress
    -        let start = Instant::new();
    -        debug!("start setup");
    -
    -        let chunk_size = stop_gap;
    -
    -        let mut history_txs_id = HashSet::new();
    -        let mut txid_height = HashMap::new();
    -        let mut max_indexes = HashMap::new();
    -
    -        let mut wallet_chains = vec![KeychainKind::Internal, KeychainKind::External];
    -        // shuffling improve privacy, the server doesn't know my first request is from my internal or external addresses
    -        wallet_chains.shuffle(&mut thread_rng());
    -        // download history of our internal and external script_pubkeys
    -        for keychain in wallet_chains.iter() {
    -            let script_iter = db.iter_script_pubkeys(Some(*keychain))?.into_iter();
    -
    -            for (i, chunk) in ChunksIterator::new(script_iter, stop_gap).enumerate() {
    -                // TODO if i == last, should create another chunk of addresses in db
    -                let call_result: Vec<Vec<ElsGetHistoryRes>> =
    -                    maybe_await!(self.els_batch_script_get_history(chunk.iter()))?;
    -                let max_index = call_result
    -                    .iter()
    -                    .enumerate()
    -                    .filter_map(|(i, v)| v.first().map(|_| i as u32))
    -                    .max();
    -                if let Some(max) = max_index {
    -                    max_indexes.insert(keychain, max + (i * chunk_size) as u32);
    -                }
    -                let flattened: Vec<ElsGetHistoryRes> = call_result.into_iter().flatten().collect();
    -                debug!("#{} of {:?} results:{}", i, keychain, flattened.len());
    -                if flattened.is_empty() {
    -                    // Didn't find anything in the last `stop_gap` script_pubkeys, breaking
    -                    break;
    -                }
    -
    -                for el in flattened {
    -                    // el.height = -1 means unconfirmed with unconfirmed parents
    -                    // el.height =  0 means unconfirmed with confirmed parents
    -                    // but we treat those tx the same
    -                    if el.height <= 0 {
    -                        txid_height.insert(el.tx_hash, None);
    -                    } else {
    -                        txid_height.insert(el.tx_hash, Some(el.height as u32));
    -                    }
    -                    history_txs_id.insert(el.tx_hash);
    -                }
    -            }
    -        }
    -
    -        // saving max indexes
    -        info!("max indexes are: {:?}", max_indexes);
    -        for keychain in wallet_chains.iter() {
    -            if let Some(index) = max_indexes.get(keychain) {
    -                db.set_last_index(*keychain, *index)?;
    -            }
    -        }
    -
    -        // get db status
    -        let txs_details_in_db: HashMap<Txid, TransactionDetails> = db
    -            .iter_txs(false)?
    -            .into_iter()
    -            .map(|tx| (tx.txid, tx))
    -            .collect();
    -        let txs_raw_in_db: HashMap<Txid, Transaction> = db
    -            .iter_raw_txs()?
    -            .into_iter()
    -            .map(|tx| (tx.txid(), tx))
    -            .collect();
    -        let utxos_deps = utxos_deps(db, &txs_raw_in_db)?;
    -
    -        // download new txs and headers
    -        let new_txs = maybe_await!(self.download_and_save_needed_raw_txs(
    -            &history_txs_id,
    -            &txs_raw_in_db,
    -            chunk_size,
    -            db
    -        ))?;
    -        let new_timestamps = maybe_await!(self.download_needed_headers(
    -            &txid_height,
    -            &txs_details_in_db,
    -            chunk_size
    -        ))?;
    -
    -        let mut batch = db.begin_batch();
    -
    -        // save any tx details not in db but in history_txs_id or with different height/timestamp
    -        for txid in history_txs_id.iter() {
    -            let height = txid_height.get(txid).cloned().flatten();
    -            let timestamp = new_timestamps.get(txid).cloned();
    -            if let Some(tx_details) = txs_details_in_db.get(txid) {
    -                // check if tx height matches, otherwise updates it. timestamp is not in the if clause
    -                // because we are not asking headers for confirmed tx we know about
    -                if tx_details.confirmation_time.as_ref().map(|c| c.height) != height {
    -                    let confirmation_time = ConfirmationTime::new(height, timestamp);
    -                    let mut new_tx_details = tx_details.clone();
    -                    new_tx_details.confirmation_time = confirmation_time;
    -                    batch.set_tx(&new_tx_details)?;
    -                }
    -            } else {
    -                save_transaction_details_and_utxos(
    -                    txid,
    -                    db,
    -                    timestamp,
    -                    height,
    -                    &mut batch,
    -                    &utxos_deps,
    -                )?;
    -            }
    -        }
    -
    -        // remove any tx details in db but not in history_txs_id
    -        for txid in txs_details_in_db.keys() {
    -            if !history_txs_id.contains(txid) {
    -                batch.del_tx(txid, false)?;
    -            }
    -        }
    -
    -        // remove any spent utxo
    -        for new_tx in new_txs.iter() {
    -            for input in new_tx.input.iter() {
    -                batch.del_utxo(&input.previous_output)?;
    -            }
    -        }
    -
    -        db.commit_batch(batch)?;
    -        info!("finish setup, elapsed {:?}ms", start.elapsed().as_millis());
    -
    -        Ok(())
    -    }
    -
    -    /// download txs identified by `history_txs_id` and theirs previous outputs if not already present in db
    -    fn download_and_save_needed_raw_txs<D: BatchDatabase>(
    -        &self,
    -        history_txs_id: &HashSet<Txid>,
    -        txs_raw_in_db: &HashMap<Txid, Transaction>,
    -        chunk_size: usize,
    -        db: &mut D,
    -    ) -> Result<Vec<Transaction>, Error> {
    -        let mut txs_downloaded = vec![];
    -        let txids_raw_in_db: HashSet<Txid> = txs_raw_in_db.keys().cloned().collect();
    -        let txids_to_download: Vec<&Txid> = history_txs_id.difference(&txids_raw_in_db).collect();
    -        if !txids_to_download.is_empty() {
    -            info!("got {} txs to download", txids_to_download.len());
    -            txs_downloaded.extend(maybe_await!(self.download_and_save_in_chunks(
    -                txids_to_download,
    -                chunk_size,
    -                db,
    -            ))?);
    -            let mut prev_txids = HashSet::new();
    -            let mut txids_downloaded = HashSet::new();
    -            for tx in txs_downloaded.iter() {
    -                txids_downloaded.insert(tx.txid());
    -                // add every previous input tx, but skip coinbase
    -                for input in tx.input.iter().filter(|i| !i.previous_output.is_null()) {
    -                    prev_txids.insert(input.previous_output.txid);
    -                }
    -            }
    -            let already_present: HashSet<Txid> =
    -                txids_downloaded.union(&txids_raw_in_db).cloned().collect();
    -            let prev_txs_to_download: Vec<&Txid> =
    -                prev_txids.difference(&already_present).collect();
    -            info!("{} previous txs to download", prev_txs_to_download.len());
    -            txs_downloaded.extend(maybe_await!(self.download_and_save_in_chunks(
    -                prev_txs_to_download,
    -                chunk_size,
    -                db,
    -            ))?);
    -        }
    -
    -        Ok(txs_downloaded)
    -    }
    -
    -    /// download headers at heights in `txid_height` if tx details not already present, returns a map Txid -> timestamp
    -    fn download_needed_headers(
    -        &self,
    -        txid_height: &HashMap<Txid, Option<u32>>,
    -        txs_details_in_db: &HashMap<Txid, TransactionDetails>,
    -        chunk_size: usize,
    -    ) -> Result<HashMap<Txid, u64>, Error> {
    -        let mut txid_timestamp = HashMap::new();
    -        let txid_in_db_with_conf: HashSet<_> = txs_details_in_db
    -            .values()
    -            .filter_map(|details| details.confirmation_time.as_ref().map(|_| details.txid))
    -            .collect();
    -        let needed_txid_height: HashMap<&Txid, u32> = txid_height
    -            .iter()
    -            .filter(|(t, _)| !txid_in_db_with_conf.contains(*t))
    -            .filter_map(|(t, o)| o.map(|h| (t, h)))
    -            .collect();
    -        let needed_heights: HashSet<u32> = needed_txid_height.values().cloned().collect();
    -        if !needed_heights.is_empty() {
    -            info!("{} headers to download for timestamp", needed_heights.len());
    -            let mut height_timestamp: HashMap<u32, u64> = HashMap::new();
    -            for chunk in ChunksIterator::new(needed_heights.into_iter(), chunk_size) {
    -                let call_result: Vec<BlockHeader> =
    -                    maybe_await!(self.els_batch_block_header(chunk.clone()))?;
    -                height_timestamp.extend(
    -                    chunk
    -                        .into_iter()
    -                        .zip(call_result.iter().map(|h| h.time as u64)),
    -                );
    -            }
    -            for (txid, height) in needed_txid_height {
    -                let timestamp = height_timestamp
    -                    .get(&height)
    -                    .ok_or_else(|| Error::Generic("timestamp missing".to_string()))?;
    -                txid_timestamp.insert(*txid, *timestamp);
    -            }
    -        }
    -
    -        Ok(txid_timestamp)
    -    }
    -
    -    fn download_and_save_in_chunks<D: BatchDatabase>(
    -        &self,
    -        to_download: Vec<&Txid>,
    -        chunk_size: usize,
    -        db: &mut D,
    -    ) -> Result<Vec<Transaction>, Error> {
    -        let mut txs_downloaded = vec![];
    -        for chunk in ChunksIterator::new(to_download.into_iter(), chunk_size) {
    -            let call_result: Vec<Transaction> =
    -                maybe_await!(self.els_batch_transaction_get(chunk))?;
    -            let mut batch = db.begin_batch();
    -            for new_tx in call_result.iter() {
    -                batch.set_raw_tx(new_tx)?;
    -            }
    -            db.commit_batch(batch)?;
    -            txs_downloaded.extend(call_result);
    -        }
    -
    -        Ok(txs_downloaded)
    -    }
    -}
    -
    -fn save_transaction_details_and_utxos<D: BatchDatabase>(
    -    txid: &Txid,
    -    db: &mut D,
    -    timestamp: Option<u64>,
    -    height: Option<u32>,
    -    updates: &mut dyn BatchOperations,
    -    utxo_deps: &HashMap<OutPoint, OutPoint>,
    -) -> Result<(), Error> {
    -    let tx = db.get_raw_tx(txid)?.ok_or(Error::TransactionNotFound)?;
    -
    -    let mut incoming: u64 = 0;
    -    let mut outgoing: u64 = 0;
    -
    -    let mut inputs_sum: u64 = 0;
    -    let mut outputs_sum: u64 = 0;
    -
    -    // look for our own inputs
    -    for input in tx.input.iter() {
    -        // skip coinbase inputs
    -        if input.previous_output.is_null() {
    -            continue;
    -        }
    -
    -        // We already downloaded all previous output txs in the previous step
    -        if let Some(previous_output) = db.get_previous_output(&input.previous_output)? {
    -            inputs_sum += previous_output.value;
    -
    -            if db.is_mine(&previous_output.script_pubkey)? {
    -                outgoing += previous_output.value;
    -            }
    -        } else {
    -            // The input is not ours, but we still need to count it for the fees
    -            let tx = db
    -                .get_raw_tx(&input.previous_output.txid)?
    -                .ok_or(Error::TransactionNotFound)?;
    -            inputs_sum += tx.output[input.previous_output.vout as usize].value;
    -        }
    -
    -        // removes conflicting UTXO if any (generated from same inputs, like for example RBF)
    -        if let Some(outpoint) = utxo_deps.get(&input.previous_output) {
    -            updates.del_utxo(outpoint)?;
    -        }
    -    }
    -
    -    for (i, output) in tx.output.iter().enumerate() {
    -        // to compute the fees later
    -        outputs_sum += output.value;
    -
    -        // this output is ours, we have a path to derive it
    -        if let Some((keychain, _child)) = db.get_path_from_script_pubkey(&output.script_pubkey)? {
    -            debug!("{} output #{} is mine, adding utxo", txid, i);
    -            updates.set_utxo(&LocalUtxo {
    -                outpoint: OutPoint::new(tx.txid(), i as u32),
    -                txout: output.clone(),
    -                keychain,
    -            })?;
    -
    -            incoming += output.value;
    -        }
    -    }
    -
    -    let tx_details = TransactionDetails {
    -        txid: tx.txid(),
    -        transaction: Some(tx),
    -        received: incoming,
    -        sent: outgoing,
    -        confirmation_time: ConfirmationTime::new(height, timestamp),
    -        fee: Some(inputs_sum.saturating_sub(outputs_sum)), /* if the tx is a coinbase, fees would be negative */
    -        verified: height.is_some(),
    -    };
    -    updates.set_tx(&tx_details)?;
    -
    -    Ok(())
    -}
    -
    -/// returns utxo dependency as the inputs needed for the utxo to exist
    -/// `tx_raw_in_db` must contains utxo's generating txs or errors with [crate::Error::TransactionNotFound]
    -fn utxos_deps<D: BatchDatabase>(
    -    db: &mut D,
    -    tx_raw_in_db: &HashMap<Txid, Transaction>,
    -) -> Result<HashMap<OutPoint, OutPoint>, Error> {
    -    let utxos = db.iter_utxos()?;
    -    let mut utxos_deps = HashMap::new();
    -    for utxo in utxos {
    -        let from_tx = tx_raw_in_db
    -            .get(&utxo.outpoint.txid)
    -            .ok_or(Error::TransactionNotFound)?;
    -        for input in from_tx.input.iter() {
    -            utxos_deps.insert(input.previous_output, utxo.outpoint);
    -        }
    -    }
    -    Ok(utxos_deps)
    -}
    -
    -
    - - \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html index a259b301c3..30bb8c5dbb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/any.rs.html @@ -1,4 +1,6 @@ -any.rs - source
      1
    +any.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -413,6 +415,21 @@
     413
     414
     415
    +416
    +417
    +418
    +419
    +420
    +421
    +422
    +423
    +424
    +425
    +426
    +427
    +428
    +429
    +430
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -464,10 +481,10 @@
     use super::*;
     
     macro_rules! impl_from {
    -    ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
    +    ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
             $( $cfg )*
             impl From<$from> for $to {
    -            fn from(inner: $from) -> Self {
    +            fn from(inner: $from) -> Self {
                     <$to>::$variant(inner)
                 }
             }
    @@ -475,13 +492,13 @@
     }
     
     macro_rules! impl_inner_method {
    -    ( $enum_name:ident, $self:expr, $name:ident $(, $args:expr)* ) => {
    +    ( $enum_name:ident, $self:expr, $name:ident $(, $args:expr)* ) => {
             match $self {
    -            $enum_name::Memory(inner) => inner.$name( $($args, )* ),
    +            $enum_name::Memory(inner) => inner.$name( $($args, )* ),
                 #[cfg(feature = "key-value-db")]
    -            $enum_name::Sled(inner) => inner.$name( $($args, )* ),
    +            $enum_name::Sled(inner) => inner.$name( $($args, )* ),
                 #[cfg(feature = "sqlite")]
    -            $enum_name::Sqlite(inner) => inner.$name( $($args, )* ),
    +            $enum_name::Sqlite(inner) => inner.$name( $($args, )* ),
             }
         }
     }
    @@ -533,11 +550,11 @@
     
     impl BatchOperations for AnyDatabase {
         fn set_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             impl_inner_method!(
                 AnyDatabase,
                 self,
    @@ -547,24 +564,27 @@
                 child
             )
         }
    -    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
    +    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
             impl_inner_method!(AnyDatabase, self, set_utxo, utxo)
         }
    -    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
    +    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
             impl_inner_method!(AnyDatabase, self, set_raw_tx, transaction)
         }
    -    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
    +    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
             impl_inner_method!(AnyDatabase, self, set_tx, transaction)
         }
    -    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
    +    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
             impl_inner_method!(AnyDatabase, self, set_last_index, keychain, value)
         }
    +    fn set_sync_time(&mut self, sync_time: SyncTime) -> Result<(), Error> {
    +        impl_inner_method!(AnyDatabase, self, set_sync_time, sync_time)
    +    }
     
         fn del_script_pubkey_from_path(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             impl_inner_method!(
                 AnyDatabase,
                 self,
    @@ -574,35 +594,38 @@
             )
         }
         fn del_path_from_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             impl_inner_method!(AnyDatabase, self, del_path_from_script_pubkey, script)
         }
    -    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             impl_inner_method!(AnyDatabase, self, del_utxo, outpoint)
         }
    -    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             impl_inner_method!(AnyDatabase, self, del_raw_tx, txid)
         }
         fn del_tx(
    -        &mut self,
    +        &mut self,
             txid: &Txid,
             include_raw: bool,
    -    ) -> Result<Option<TransactionDetails>, Error> {
    +    ) -> Result<Option<TransactionDetails>, Error> {
             impl_inner_method!(AnyDatabase, self, del_tx, txid, include_raw)
         }
    -    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             impl_inner_method!(AnyDatabase, self, del_last_index, keychain)
         }
    +    fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error> {
    +        impl_inner_method!(AnyDatabase, self, del_sync_time)
    +    }
     }
     
     impl Database for AnyDatabase {
         fn check_descriptor_checksum<B: AsRef<[u8]>>(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             bytes: B,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             impl_inner_method!(
                 AnyDatabase,
                 self,
    @@ -612,16 +635,16 @@
             )
         }
     
    -    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
    +    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
             impl_inner_method!(AnyDatabase, self, iter_script_pubkeys, keychain)
         }
    -    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
    +    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
             impl_inner_method!(AnyDatabase, self, iter_utxos)
         }
    -    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
    +    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
             impl_inner_method!(AnyDatabase, self, iter_raw_txs)
         }
    -    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
    +    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
             impl_inner_method!(AnyDatabase, self, iter_txs, include_raw)
         }
     
    @@ -629,7 +652,7 @@
             &self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             impl_inner_method!(
                 AnyDatabase,
                 self,
    @@ -641,112 +664,121 @@
         fn get_path_from_script_pubkey(
             &self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             impl_inner_method!(AnyDatabase, self, get_path_from_script_pubkey, script)
         }
    -    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             impl_inner_method!(AnyDatabase, self, get_utxo, outpoint)
         }
    -    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             impl_inner_method!(AnyDatabase, self, get_raw_tx, txid)
         }
    -    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
    +    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
             impl_inner_method!(AnyDatabase, self, get_tx, txid, include_raw)
         }
    -    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             impl_inner_method!(AnyDatabase, self, get_last_index, keychain)
         }
    +    fn get_sync_time(&self) -> Result<Option<SyncTime>, Error> {
    +        impl_inner_method!(AnyDatabase, self, get_sync_time)
    +    }
     
    -    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
    +    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
             impl_inner_method!(AnyDatabase, self, increment_last_index, keychain)
         }
     
    -    fn flush(&mut self) -> Result<(), Error> {
    +    fn flush(&mut self) -> Result<(), Error> {
             impl_inner_method!(AnyDatabase, self, flush)
         }
     }
     
     impl BatchOperations for AnyBatch {
         fn set_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             impl_inner_method!(AnyBatch, self, set_script_pubkey, script, keychain, child)
         }
    -    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
    +    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
             impl_inner_method!(AnyBatch, self, set_utxo, utxo)
         }
    -    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
    +    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
             impl_inner_method!(AnyBatch, self, set_raw_tx, transaction)
         }
    -    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
    +    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
             impl_inner_method!(AnyBatch, self, set_tx, transaction)
         }
    -    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
    +    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
             impl_inner_method!(AnyBatch, self, set_last_index, keychain, value)
         }
    +    fn set_sync_time(&mut self, sync_time: SyncTime) -> Result<(), Error> {
    +        impl_inner_method!(AnyBatch, self, set_sync_time, sync_time)
    +    }
     
         fn del_script_pubkey_from_path(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             impl_inner_method!(AnyBatch, self, del_script_pubkey_from_path, keychain, child)
         }
         fn del_path_from_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             impl_inner_method!(AnyBatch, self, del_path_from_script_pubkey, script)
         }
    -    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             impl_inner_method!(AnyBatch, self, del_utxo, outpoint)
         }
    -    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             impl_inner_method!(AnyBatch, self, del_raw_tx, txid)
         }
         fn del_tx(
    -        &mut self,
    +        &mut self,
             txid: &Txid,
             include_raw: bool,
    -    ) -> Result<Option<TransactionDetails>, Error> {
    +    ) -> Result<Option<TransactionDetails>, Error> {
             impl_inner_method!(AnyBatch, self, del_tx, txid, include_raw)
         }
    -    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             impl_inner_method!(AnyBatch, self, del_last_index, keychain)
         }
    +    fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error> {
    +        impl_inner_method!(AnyBatch, self, del_sync_time)
    +    }
     }
     
     impl BatchDatabase for AnyDatabase {
         type Batch = AnyBatch;
     
    -    fn begin_batch(&self) -> Self::Batch {
    +    fn begin_batch(&self) -> Self::Batch {
             match self {
    -            AnyDatabase::Memory(inner) => inner.begin_batch().into(),
    +            AnyDatabase::Memory(inner) => inner.begin_batch().into(),
                 #[cfg(feature = "key-value-db")]
    -            AnyDatabase::Sled(inner) => inner.begin_batch().into(),
    +            AnyDatabase::Sled(inner) => inner.begin_batch().into(),
                 #[cfg(feature = "sqlite")]
    -            AnyDatabase::Sqlite(inner) => inner.begin_batch().into(),
    +            AnyDatabase::Sqlite(inner) => inner.begin_batch().into(),
             }
         }
    -    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> {
    +    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> {
             match self {
    -            AnyDatabase::Memory(db) => match batch {
    -                AnyBatch::Memory(batch) => db.commit_batch(batch),
    +            AnyDatabase::Memory(db) => match batch {
    +                AnyBatch::Memory(batch) => db.commit_batch(batch),
                     #[cfg(any(feature = "key-value-db", feature = "sqlite"))]
    -                _ => unimplemented!("Other batch shouldn't be used with Memory db."),
    +                _ => unimplemented!("Other batch shouldn't be used with Memory db."),
                 },
                 #[cfg(feature = "key-value-db")]
    -            AnyDatabase::Sled(db) => match batch {
    -                AnyBatch::Sled(batch) => db.commit_batch(batch),
    -                _ => unimplemented!("Other batch shouldn't be used with Sled db."),
    +            AnyDatabase::Sled(db) => match batch {
    +                AnyBatch::Sled(batch) => db.commit_batch(batch),
    +                _ => unimplemented!("Other batch shouldn't be used with Sled db."),
                 },
                 #[cfg(feature = "sqlite")]
    -            AnyDatabase::Sqlite(db) => match batch {
    -                AnyBatch::Sqlite(batch) => db.commit_batch(batch),
    -                _ => unimplemented!("Other batch shouldn't be used with Sqlite db."),
    +            AnyDatabase::Sqlite(db) => match batch {
    +                AnyBatch::Sqlite(batch) => db.commit_batch(batch),
    +                _ => unimplemented!("Other batch shouldn't be used with Sqlite db."),
                 },
             }
         }
    @@ -766,7 +798,7 @@
     impl ConfigurableDatabase for sled::Tree {
         type Config = SledDbConfiguration;
     
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
             Ok(sled::open(&config.path)?.open_tree(&config.tree_name)?)
         }
     }
    @@ -783,7 +815,7 @@
     impl ConfigurableDatabase for sqlite::SqliteDatabase {
         type Config = SqliteDbConfiguration;
     
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
             Ok(sqlite::SqliteDatabase::new(config.path.clone()))
         }
     }
    @@ -810,15 +842,15 @@
     impl ConfigurableDatabase for AnyDatabase {
         type Config = AnyDatabaseConfig;
     
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
             Ok(match config {
    -            AnyDatabaseConfig::Memory(inner) => {
    +            AnyDatabaseConfig::Memory(inner) => {
                     AnyDatabase::Memory(memory::MemoryDatabase::from_config(inner)?)
                 }
                 #[cfg(feature = "key-value-db")]
    -            AnyDatabaseConfig::Sled(inner) => AnyDatabase::Sled(sled::Tree::from_config(inner)?),
    +            AnyDatabaseConfig::Sled(inner) => AnyDatabase::Sled(sled::Tree::from_config(inner)?),
                 #[cfg(feature = "sqlite")]
    -            AnyDatabaseConfig::Sqlite(inner) => {
    +            AnyDatabaseConfig::Sqlite(inner) => {
                     AnyDatabase::Sqlite(sqlite::SqliteDatabase::from_config(inner)?)
                 }
             })
    @@ -829,6 +861,5 @@
     impl_from!(SledDbConfiguration, AnyDatabaseConfig, Sled, #[cfg(feature = "key-value-db")]);
     impl_from!(SqliteDbConfiguration, AnyDatabaseConfig, Sqlite, #[cfg(feature = "sqlite")]);
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html index 111cc74a11..11af5db3aa 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/keyvalue.rs.html @@ -1,4 +1,6 @@ -keyvalue.rs - source
      1
    +keyvalue.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -471,6 +473,34 @@
     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
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -491,13 +521,13 @@
     use bitcoin::{OutPoint, Script, Transaction};
     
     use crate::database::memory::MapKey;
    -use crate::database::{BatchDatabase, BatchOperations, Database};
    +use crate::database::{BatchDatabase, BatchOperations, Database, SyncTime};
     use crate::error::Error;
     use crate::types::*;
     
     macro_rules! impl_batch_operations {
    -    ( { $($after_insert:tt)* }, $process_delete:ident ) => {
    -        fn set_script_pubkey(&mut self, script: &Script, keychain: KeychainKind, path: u32) -> Result<(), Error> {
    +    ( { $($after_insert:tt)* }, $process_delete:ident ) => {
    +        fn set_script_pubkey(&mut self, script: &Script, keychain: KeychainKind, path: u32) -> Result<(), Error> {
                 let key = MapKey::Path((Some(keychain), Some(path))).as_map_key();
                 self.insert(key, serialize(script))$($after_insert)*;
     
    @@ -511,7 +541,7 @@
                 Ok(())
             }
     
    -        fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
    +        fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
                 let key = MapKey::Utxo(Some(&utxo.outpoint)).as_map_key();
                 let value = json!({
                     "t": utxo.txout,
    @@ -522,7 +552,7 @@
                 Ok(())
             }
     
    -        fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
    +        fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
                 let key = MapKey::RawTx(Some(&transaction.txid())).as_map_key();
                 let value = serialize(transaction);
                 self.insert(key, value)$($after_insert)*;
    @@ -530,7 +560,7 @@
                 Ok(())
             }
     
    -        fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
    +        fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
                 let key = MapKey::Transaction(Some(&transaction.txid)).as_map_key();
     
                 // remove the raw tx from the serialized version
    @@ -548,14 +578,21 @@
                 Ok(())
             }
     
    -        fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
    +        fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
                 let key = MapKey::LastIndex(keychain).as_map_key();
                 self.insert(key, &value.to_be_bytes())$($after_insert)*;
     
                 Ok(())
             }
     
    -        fn del_script_pubkey_from_path(&mut self, keychain: KeychainKind, path: u32) -> Result<Option<Script>, Error> {
    +        fn set_sync_time(&mut self, data: SyncTime) -> Result<(), Error> {
    +            let key = MapKey::SyncTime.as_map_key();
    +            self.insert(key, serde_json::to_vec(&data)?)$($after_insert)*;
    +
    +            Ok(())
    +        }
    +
    +        fn del_script_pubkey_from_path(&mut self, keychain: KeychainKind, path: u32) -> Result<Option<Script>, Error> {
                 let key = MapKey::Path((Some(keychain), Some(path))).as_map_key();
                 let res = self.remove(key);
                 let res = $process_delete!(res);
    @@ -563,14 +600,14 @@
                 Ok(res.map_or(Ok(None), |x| Some(deserialize(&x)).transpose())?)
             }
     
    -        fn del_path_from_script_pubkey(&mut self, script: &Script) -> Result<Option<(KeychainKind, u32)>, Error> {
    +        fn del_path_from_script_pubkey(&mut self, script: &Script) -> Result<Option<(KeychainKind, u32)>, Error> {
                 let key = MapKey::Script(Some(script)).as_map_key();
                 let res = self.remove(key);
                 let res = $process_delete!(res);
     
                 match res {
    -                None => Ok(None),
    -                Some(b) => {
    +                None => Ok(None),
    +                Some(b) => {
                         let mut val: serde_json::Value = serde_json::from_slice(&b)?;
                         let st = serde_json::from_value(val["t"].take())?;
                         let path = serde_json::from_value(val["p"].take())?;
    @@ -580,14 +617,14 @@
                 }
             }
     
    -        fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +        fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
                 let key = MapKey::Utxo(Some(outpoint)).as_map_key();
                 let res = self.remove(key);
                 let res = $process_delete!(res);
     
                 match res {
    -                None => Ok(None),
    -                Some(b) => {
    +                None => Ok(None),
    +                Some(b) => {
                         let mut val: serde_json::Value = serde_json::from_slice(&b)?;
                         let txout = serde_json::from_value(val["t"].take())?;
                         let keychain = serde_json::from_value(val["i"].take())?;
    @@ -597,7 +634,7 @@
                 }
             }
     
    -        fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +        fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
                 let key = MapKey::RawTx(Some(txid)).as_map_key();
                 let res = self.remove(key);
                 let res = $process_delete!(res);
    @@ -605,7 +642,7 @@
                 Ok(res.map_or(Ok(None), |x| Some(deserialize(&x)).transpose())?)
             }
     
    -        fn del_tx(&mut self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
    +        fn del_tx(&mut self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
                 let raw_tx = if include_raw {
                     self.del_raw_tx(txid)?
                 } else {
    @@ -617,8 +654,8 @@
                 let res = $process_delete!(res);
     
                 match res {
    -                None => Ok(None),
    -                Some(b) => {
    +                None => Ok(None),
    +                Some(b) => {
                         let mut val: TransactionDetails = serde_json::from_slice(&b)?;
                         val.transaction = raw_tx;
     
    @@ -627,25 +664,33 @@
                 }
             }
     
    -        fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +        fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
                 let key = MapKey::LastIndex(keychain).as_map_key();
                 let res = self.remove(key);
                 let res = $process_delete!(res);
     
                 match res {
    -                None => Ok(None),
    -                Some(b) => {
    +                None => Ok(None),
    +                Some(b) => {
                         let array: [u8; 4] = b.as_ref().try_into().map_err(|_| Error::InvalidU32Bytes(b.to_vec()))?;
                         let val = u32::from_be_bytes(array);
                         Ok(Some(val))
                     }
                 }
             }
    +
    +        fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error> {
    +            let key = MapKey::SyncTime.as_map_key();
    +            let res = self.remove(key);
    +            let res = $process_delete!(res);
    +
    +            Ok(res.map(|b| serde_json::from_slice(&b)).transpose()?)
    +        }
         }
     }
     
     macro_rules! process_delete_tree {
    -    ($res:expr) => {
    +    ($res:expr) => {
             $res?
         };
     }
    @@ -654,7 +699,7 @@
     }
     
     macro_rules! process_delete_batch {
    -    ($res:expr) => {
    +    ($res:expr) => {
             None as Option<sled::IVec>
         };
     }
    @@ -665,15 +710,15 @@
     
     impl Database for Tree {
         fn check_descriptor_checksum<B: AsRef<[u8]>>(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             bytes: B,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let key = MapKey::DescriptorChecksum(keychain).as_map_key();
     
             let prev = self.get(&key)?.map(|x| x.to_vec());
             if let Some(val) = prev {
    -            if val == bytes.as_ref() {
    +            if val == bytes.as_ref() {
                     Ok(())
                 } else {
                     Err(Error::ChecksumMismatch)
    @@ -684,20 +729,20 @@
             }
         }
     
    -    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
    +    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
             let key = MapKey::Path((keychain, None)).as_map_key();
             self.scan_prefix(key)
    -            .map(|x| -> Result<_, Error> {
    +            .map(|x| -> Result<_, Error> {
                     let (_, v) = x?;
                     Ok(deserialize(&v)?)
                 })
                 .collect()
         }
     
    -    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
    +    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
             let key = MapKey::Utxo(None).as_map_key();
             self.scan_prefix(key)
    -            .map(|x| -> Result<_, Error> {
    +            .map(|x| -> Result<_, Error> {
                     let (k, v) = x?;
                     let outpoint = deserialize(&k[1..])?;
     
    @@ -714,20 +759,20 @@
                 .collect()
         }
     
    -    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
    +    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
             let key = MapKey::RawTx(None).as_map_key();
             self.scan_prefix(key)
    -            .map(|x| -> Result<_, Error> {
    +            .map(|x| -> Result<_, Error> {
                     let (_, v) = x?;
                     Ok(deserialize(&v)?)
                 })
                 .collect()
         }
     
    -    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
    +    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
             let key = MapKey::Transaction(None).as_map_key();
             self.scan_prefix(key)
    -            .map(|x| -> Result<_, Error> {
    +            .map(|x| -> Result<_, Error> {
                     let (k, v) = x?;
                     let mut txdetails: TransactionDetails = serde_json::from_slice(&v)?;
                     if include_raw {
    @@ -744,7 +789,7 @@
             &self,
             keychain: KeychainKind,
             path: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             let key = MapKey::Path((Some(keychain), Some(path))).as_map_key();
             Ok(self.get(key)?.map(|b| deserialize(&b)).transpose()?)
         }
    @@ -752,10 +797,10 @@
         fn get_path_from_script_pubkey(
             &self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             let key = MapKey::Script(Some(script)).as_map_key();
             self.get(key)?
    -            .map(|b| -> Result<_, Error> {
    +            .map(|b| -> Result<_, Error> {
                     let mut val: serde_json::Value = serde_json::from_slice(&b)?;
                     let st = serde_json::from_value(val["t"].take())?;
                     let path = serde_json::from_value(val["p"].take())?;
    @@ -765,10 +810,10 @@
                 .transpose()
         }
     
    -    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             let key = MapKey::Utxo(Some(outpoint)).as_map_key();
             self.get(key)?
    -            .map(|b| -> Result<_, Error> {
    +            .map(|b| -> Result<_, Error> {
                     let mut val: serde_json::Value = serde_json::from_slice(&b)?;
                     let txout = serde_json::from_value(val["t"].take())?;
                     let keychain = serde_json::from_value(val["i"].take())?;
    @@ -782,15 +827,15 @@
                 .transpose()
         }
     
    -    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             let key = MapKey::RawTx(Some(txid)).as_map_key();
             Ok(self.get(key)?.map(|b| deserialize(&b)).transpose()?)
         }
     
    -    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
    +    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
             let key = MapKey::Transaction(Some(txid)).as_map_key();
             self.get(key)?
    -            .map(|b| -> Result<_, Error> {
    +            .map(|b| -> Result<_, Error> {
                     let mut txdetails: TransactionDetails = serde_json::from_slice(&b)?;
                     if include_raw {
                         txdetails.transaction = self.get_raw_tx(txid)?;
    @@ -801,10 +846,10 @@
                 .transpose()
         }
     
    -    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             let key = MapKey::LastIndex(keychain).as_map_key();
             self.get(key)?
    -            .map(|b| -> Result<_, Error> {
    +            .map(|b| -> Result<_, Error> {
                     let array: [u8; 4] = b
                         .as_ref()
                         .try_into()
    @@ -815,23 +860,31 @@
                 .transpose()
         }
     
    +    fn get_sync_time(&self) -> Result<Option<SyncTime>, Error> {
    +        let key = MapKey::SyncTime.as_map_key();
    +        Ok(self
    +            .get(key)?
    +            .map(|b| serde_json::from_slice(&b))
    +            .transpose()?)
    +    }
    +
         // inserts 0 if not present
    -    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
    +    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
             let key = MapKey::LastIndex(keychain).as_map_key();
             self.update_and_fetch(key, |prev| {
                 let new = match prev {
    -                Some(b) => {
    +                Some(b) => {
                         let array: [u8; 4] = b.try_into().unwrap_or([0; 4]);
                         let val = u32::from_be_bytes(array);
     
                         val + 1
                     }
    -                None => 0,
    +                None => 0,
                 };
     
                 Some(new.to_be_bytes().to_vec())
             })?
    -        .map_or(Ok(0), |b| -> Result<_, Error> {
    +        .map_or(Ok(0), |b| -> Result<_, Error> {
                 let array: [u8; 4] = b
                     .as_ref()
                     .try_into()
    @@ -841,7 +894,7 @@
             })
         }
     
    -    fn flush(&mut self) -> Result<(), Error> {
    +    fn flush(&mut self) -> Result<(), Error> {
             Ok(Tree::flush(self).map(|_| ())?)
         }
     }
    @@ -849,11 +902,11 @@
     impl BatchDatabase for Tree {
         type Batch = sled::Batch;
     
    -    fn begin_batch(&self) -> Self::Batch {
    +    fn begin_batch(&self) -> Self::Batch {
             sled::Batch::default()
         }
     
    -    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> {
    +    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> {
             Ok(self.apply_batch(batch)?)
         }
     }
    @@ -874,7 +927,7 @@
             static ref INIT: Once = Once::new();
         }
     
    -    fn get_tree() -> Tree {
    +    fn get_tree() -> Tree {
             unsafe {
                 let cloned = DB.clone();
                 let (mutex, cvar) = &*cloned;
    @@ -943,8 +996,12 @@
         fn test_last_index() {
             crate::database::test::test_last_index(get_tree());
         }
    +
    +    #[test]
    +    fn test_sync_time() {
    +        crate::database::test::test_sync_time(get_tree());
    +    }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html index 5c0d43db48..f060681106 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/memory.rs.html @@ -1,4 +1,6 @@ -memory.rs - source
      1
    +memory.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -590,6 +592,34 @@
     590
     591
     592
    +593
    +594
    +595
    +596
    +597
    +598
    +599
    +600
    +601
    +602
    +603
    +604
    +605
    +606
    +607
    +608
    +609
    +610
    +611
    +612
    +613
    +614
    +615
    +616
    +617
    +618
    +619
    +620
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -606,6 +636,7 @@
     //! This module defines an in-memory database type called [`MemoryDatabase`] that is based on a
     //! [`BTreeMap`].
     
    +use std::any::Any;
     use std::collections::BTreeMap;
     use std::ops::Bound::{Excluded, Included};
     
    @@ -613,7 +644,7 @@
     use bitcoin::hash_types::Txid;
     use bitcoin::{OutPoint, Script, Transaction};
     
    -use crate::database::{BatchDatabase, BatchOperations, ConfigurableDatabase, Database};
    +use crate::database::{BatchDatabase, BatchOperations, ConfigurableDatabase, Database, SyncTime};
     use crate::error::Error;
     use crate::types::*;
     
    @@ -624,6 +655,7 @@
     // transactions         t<txid> -> tx details
     // deriv indexes        c{i,e} -> u32
     // descriptor checksum  d{i,e} -> vec<u8>
    +// last sync time       l -> { height, timestamp }
     
     pub(crate) enum MapKey<'a> {
         Path((Option<KeychainKind>, Option<u32>)),
    @@ -632,40 +664,42 @@
         RawTx(Option<&'a Txid>),
         Transaction(Option<&'a Txid>),
         LastIndex(KeychainKind),
    +    SyncTime,
         DescriptorChecksum(KeychainKind),
     }
     
     impl MapKey<'_> {
    -    fn as_prefix(&self) -> Vec<u8> {
    +    fn as_prefix(&self) -> Vec<u8> {
             match self {
    -            MapKey::Path((st, _)) => {
    +            MapKey::Path((st, _)) => {
                     let mut v = b"p".to_vec();
                     if let Some(st) = st {
                         v.push(st.as_byte());
                     }
                     v
                 }
    -            MapKey::Script(_) => b"s".to_vec(),
    -            MapKey::Utxo(_) => b"u".to_vec(),
    -            MapKey::RawTx(_) => b"r".to_vec(),
    -            MapKey::Transaction(_) => b"t".to_vec(),
    -            MapKey::LastIndex(st) => [b"c", st.as_ref()].concat(),
    -            MapKey::DescriptorChecksum(st) => [b"d", st.as_ref()].concat(),
    +            MapKey::Script(_) => b"s".to_vec(),
    +            MapKey::Utxo(_) => b"u".to_vec(),
    +            MapKey::RawTx(_) => b"r".to_vec(),
    +            MapKey::Transaction(_) => b"t".to_vec(),
    +            MapKey::LastIndex(st) => [b"c", st.as_ref()].concat(),
    +            MapKey::SyncTime => b"l".to_vec(),
    +            MapKey::DescriptorChecksum(st) => [b"d", st.as_ref()].concat(),
             }
         }
     
    -    fn serialize_content(&self) -> Vec<u8> {
    +    fn serialize_content(&self) -> Vec<u8> {
             match self {
    -            MapKey::Path((_, Some(child))) => child.to_be_bytes().to_vec(),
    -            MapKey::Script(Some(s)) => serialize(*s),
    -            MapKey::Utxo(Some(s)) => serialize(*s),
    -            MapKey::RawTx(Some(s)) => serialize(*s),
    -            MapKey::Transaction(Some(s)) => serialize(*s),
    -            _ => vec![],
    +            MapKey::Path((_, Some(child))) => child.to_be_bytes().to_vec(),
    +            MapKey::Script(Some(s)) => serialize(*s),
    +            MapKey::Utxo(Some(s)) => serialize(*s),
    +            MapKey::RawTx(Some(s)) => serialize(*s),
    +            MapKey::Transaction(Some(s)) => serialize(*s),
    +            _ => vec![],
             }
         }
     
    -    pub fn as_map_key(&self) -> Vec<u8> {
    +    pub fn as_map_key(&self) -> Vec<u8> {
             let mut v = self.as_prefix();
             v.extend_from_slice(&self.serialize_content());
     
    @@ -673,11 +707,11 @@
         }
     }
     
    -fn after(key: &[u8]) -> Vec<u8> {
    +fn after(key: &[u8]) -> Vec<u8> {
         let mut key = key.to_owned();
         let mut idx = key.len();
         while idx > 0 {
    -        if key[idx - 1] == 0xFF {
    +        if key[idx - 1] == 0xFF {
                 idx -= 1;
                 continue;
             } else {
    @@ -697,18 +731,18 @@
     /// Once it's dropped its content will be lost.
     ///
     /// If you are looking for a permanent storage solution, you can try with the default key-value
    -/// database called [`sled`]. See the [`database`] module documentation for more defailts.
    +/// database called [`sled`]. See the [`database`] module documentation for more details.
     ///
     /// [`database`]: crate::database
     #[derive(Debug, Default)]
     pub struct MemoryDatabase {
    -    map: BTreeMap<Vec<u8>, Box<dyn std::any::Any>>,
    +    map: BTreeMap<Vec<u8>, Box<dyn Any + Send + Sync>>,
         deleted_keys: Vec<Vec<u8>>,
     }
     
     impl MemoryDatabase {
         /// Create a new empty database
    -    pub fn new() -> Self {
    +    pub fn new() -> Self {
             MemoryDatabase {
                 map: BTreeMap::new(),
                 deleted_keys: Vec::new(),
    @@ -718,11 +752,11 @@
     
     impl BatchOperations for MemoryDatabase {
         fn set_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
             keychain: KeychainKind,
             path: u32,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let key = MapKey::Path((Some(keychain), Some(path))).as_map_key();
             self.map.insert(key, Box::new(script.clone()));
     
    @@ -736,20 +770,20 @@
             Ok(())
         }
     
    -    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
    +    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
             let key = MapKey::Utxo(Some(&utxo.outpoint)).as_map_key();
             self.map
                 .insert(key, Box::new((utxo.txout.clone(), utxo.keychain)));
     
             Ok(())
         }
    -    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
    +    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
             let key = MapKey::RawTx(Some(&transaction.txid())).as_map_key();
             self.map.insert(key, Box::new(transaction.clone()));
     
             Ok(())
         }
    -    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
    +    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
             let key = MapKey::Transaction(Some(&transaction.txid)).as_map_key();
     
             // insert the raw_tx if present
    @@ -765,18 +799,24 @@
     
             Ok(())
         }
    -    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
    +    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
             let key = MapKey::LastIndex(keychain).as_map_key();
             self.map.insert(key, Box::new(value));
     
             Ok(())
         }
    +    fn set_sync_time(&mut self, data: SyncTime) -> Result<(), Error> {
    +        let key = MapKey::SyncTime.as_map_key();
    +        self.map.insert(key, Box::new(data));
    +
    +        Ok(())
    +    }
     
         fn del_script_pubkey_from_path(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             path: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             let key = MapKey::Path((Some(keychain), Some(path))).as_map_key();
             let res = self.map.remove(&key);
             self.deleted_keys.push(key);
    @@ -784,16 +824,16 @@
             Ok(res.map(|x| x.downcast_ref().cloned().unwrap()))
         }
         fn del_path_from_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             let key = MapKey::Script(Some(script)).as_map_key();
             let res = self.map.remove(&key);
             self.deleted_keys.push(key);
     
             match res {
    -            None => Ok(None),
    -            Some(b) => {
    +            None => Ok(None),
    +            Some(b) => {
                     let mut val: serde_json::Value = b.downcast_ref().cloned().unwrap();
                     let st = serde_json::from_value(val["t"].take())?;
                     let path = serde_json::from_value(val["p"].take())?;
    @@ -802,14 +842,14 @@
                 }
             }
         }
    -    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             let key = MapKey::Utxo(Some(outpoint)).as_map_key();
             let res = self.map.remove(&key);
             self.deleted_keys.push(key);
     
             match res {
    -            None => Ok(None),
    -            Some(b) => {
    +            None => Ok(None),
    +            Some(b) => {
                     let (txout, keychain) = b.downcast_ref().cloned().unwrap();
                     Ok(Some(LocalUtxo {
                         outpoint: *outpoint,
    @@ -819,7 +859,7 @@
                 }
             }
         }
    -    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             let key = MapKey::RawTx(Some(txid)).as_map_key();
             let res = self.map.remove(&key);
             self.deleted_keys.push(key);
    @@ -827,10 +867,10 @@
             Ok(res.map(|x| x.downcast_ref().cloned().unwrap()))
         }
         fn del_tx(
    -        &mut self,
    +        &mut self,
             txid: &Txid,
             include_raw: bool,
    -    ) -> Result<Option<TransactionDetails>, Error> {
    +    ) -> Result<Option<TransactionDetails>, Error> {
             let raw_tx = if include_raw {
                 self.del_raw_tx(txid)?
             } else {
    @@ -842,8 +882,8 @@
             self.deleted_keys.push(key);
     
             match res {
    -            None => Ok(None),
    -            Some(b) => {
    +            None => Ok(None),
    +            Some(b) => {
                     let mut val: TransactionDetails = b.downcast_ref().cloned().unwrap();
                     val.transaction = raw_tx;
     
    @@ -851,24 +891,31 @@
                 }
             }
         }
    -    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             let key = MapKey::LastIndex(keychain).as_map_key();
             let res = self.map.remove(&key);
             self.deleted_keys.push(key);
     
             match res {
    -            None => Ok(None),
    -            Some(b) => Ok(Some(*b.downcast_ref().unwrap())),
    +            None => Ok(None),
    +            Some(b) => Ok(Some(*b.downcast_ref().unwrap())),
             }
         }
    +    fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error> {
    +        let key = MapKey::SyncTime.as_map_key();
    +        let res = self.map.remove(&key);
    +        self.deleted_keys.push(key);
    +
    +        Ok(res.map(|b| b.downcast_ref().cloned().unwrap()))
    +    }
     }
     
     impl Database for MemoryDatabase {
         fn check_descriptor_checksum<B: AsRef<[u8]>>(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             bytes: B,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let key = MapKey::DescriptorChecksum(keychain).as_map_key();
     
             let prev = self
    @@ -876,7 +923,7 @@
                 .get(&key)
                 .map(|x| x.downcast_ref::<Vec<u8>>().unwrap());
             if let Some(val) = prev {
    -            if val == &bytes.as_ref().to_vec() {
    +            if val == &bytes.as_ref().to_vec() {
                     Ok(())
                 } else {
                     Err(Error::ChecksumMismatch)
    @@ -887,7 +934,7 @@
             }
         }
     
    -    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
    +    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
             let key = MapKey::Path((keychain, None)).as_map_key();
             self.map
                 .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key))))
    @@ -895,7 +942,7 @@
                 .collect()
         }
     
    -    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
    +    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
             let key = MapKey::Utxo(None).as_map_key();
             self.map
                 .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key))))
    @@ -911,7 +958,7 @@
                 .collect()
         }
     
    -    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
    +    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
             let key = MapKey::RawTx(None).as_map_key();
             self.map
                 .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key))))
    @@ -919,7 +966,7 @@
                 .collect()
         }
     
    -    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
    +    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
             let key = MapKey::Transaction(None).as_map_key();
             self.map
                 .range::<Vec<u8>, _>((Included(&key), Excluded(&after(&key))))
    @@ -939,7 +986,7 @@
             &self,
             keychain: KeychainKind,
             path: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             let key = MapKey::Path((Some(keychain), Some(path))).as_map_key();
             Ok(self
                 .map
    @@ -950,7 +997,7 @@
         fn get_path_from_script_pubkey(
             &self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             let key = MapKey::Script(Some(script)).as_map_key();
             Ok(self.map.get(&key).map(|b| {
                 let mut val: serde_json::Value = b.downcast_ref().cloned().unwrap();
    @@ -961,7 +1008,7 @@
             }))
         }
     
    -    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             let key = MapKey::Utxo(Some(outpoint)).as_map_key();
             Ok(self.map.get(&key).map(|b| {
                 let (txout, keychain) = b.downcast_ref().cloned().unwrap();
    @@ -973,7 +1020,7 @@
             }))
         }
     
    -    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             let key = MapKey::RawTx(Some(txid)).as_map_key();
             Ok(self
                 .map
    @@ -981,7 +1028,7 @@
                 .map(|b| b.downcast_ref().cloned().unwrap()))
         }
     
    -    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
    +    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
             let key = MapKey::Transaction(Some(txid)).as_map_key();
             Ok(self.map.get(&key).map(|b| {
                 let mut txdetails: TransactionDetails = b.downcast_ref().cloned().unwrap();
    @@ -993,13 +1040,21 @@
             }))
         }
     
    -    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             let key = MapKey::LastIndex(keychain).as_map_key();
             Ok(self.map.get(&key).map(|b| *b.downcast_ref().unwrap()))
         }
     
    +    fn get_sync_time(&self) -> Result<Option<SyncTime>, Error> {
    +        let key = MapKey::SyncTime.as_map_key();
    +        Ok(self
    +            .map
    +            .get(&key)
    +            .map(|b| b.downcast_ref().cloned().unwrap()))
    +    }
    +
         // inserts 0 if not present
    -    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
    +    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
             let key = MapKey::LastIndex(keychain).as_map_key();
             let value = self
                 .map
    @@ -1012,7 +1067,7 @@
             Ok(*value)
         }
     
    -    fn flush(&mut self) -> Result<(), Error> {
    +    fn flush(&mut self) -> Result<(), Error> {
             Ok(())
         }
     }
    @@ -1020,15 +1075,15 @@
     impl BatchDatabase for MemoryDatabase {
         type Batch = Self;
     
    -    fn begin_batch(&self) -> Self::Batch {
    +    fn begin_batch(&self) -> Self::Batch {
             MemoryDatabase::new()
         }
     
    -    fn commit_batch(&mut self, mut batch: Self::Batch) -> Result<(), Error> {
    +    fn commit_batch(&mut self, mut batch: Self::Batch) -> Result<(), Error> {
             for key in batch.deleted_keys.iter() {
                 self.map.remove(key);
             }
    -        self.map.append(&mut batch.map);
    +        self.map.append(&mut batch.map);
             Ok(())
         }
     }
    @@ -1036,7 +1091,7 @@
     impl ConfigurableDatabase for MemoryDatabase {
         type Config = ();
     
    -    fn from_config(_config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(_config: &Self::Config) -> Result<Self, Error> {
             Ok(MemoryDatabase::default())
         }
     }
    @@ -1047,7 +1102,7 @@
     /// macro and not a `[cfg(test)]` function so it can be called within the context of doctests which
     /// don't have `test` set.
     macro_rules! populate_test_db {
    -    ($db:expr, $tx_meta:expr, $current_height:expr$(,)?) => {{
    +    ($db:expr, $tx_meta:expr, $current_height:expr$(,)?) => {{
             use std::str::FromStr;
             use $crate::database::BatchOperations;
             let mut db = $db;
    @@ -1070,12 +1125,10 @@
             };
     
             let txid = tx.txid();
    -        let confirmation_time = tx_meta
    -            .min_confirmations
    -            .map(|conf| $crate::ConfirmationTime {
    -                height: current_height.unwrap().checked_sub(conf as u32).unwrap(),
    -                timestamp: 0,
    -            });
    +        let confirmation_time = tx_meta.min_confirmations.map(|conf| $crate::BlockTime {
    +            height: current_height.unwrap().checked_sub(conf as u32).unwrap(),
    +            timestamp: 0,
    +        });
     
             let tx_details = $crate::TransactionDetails {
                 transaction: Some(tx.clone()),
    @@ -1108,7 +1161,7 @@
     #[doc(hidden)]
     /// Macro for getting a wallet for use in a doctest
     macro_rules! doctest_wallet {
    -    () => {{
    +    () => {{
             use $crate::bitcoin::Network;
             use $crate::database::MemoryDatabase;
             use $crate::testutils;
    @@ -1117,9 +1170,9 @@
     
             let mut db = MemoryDatabase::new();
             let txid = populate_test_db!(
    -            &mut db,
    +            &mut db,
                 testutils! {
    -                @tx ( (@external descriptors, 0) => 500_000 ) (@confirmations 1)
    +                @tx ( (@external descriptors, 0) => 500_000 ) (@confirmations 1)
                 },
                 Some(100),
             );
    @@ -1138,7 +1191,7 @@
     mod test {
         use super::MemoryDatabase;
     
    -    fn get_tree() -> MemoryDatabase {
    +    fn get_tree() -> MemoryDatabase {
             MemoryDatabase::new()
         }
     
    @@ -1181,8 +1234,12 @@
         fn test_last_index() {
             crate::database::test::test_last_index(get_tree());
         }
    +
    +    #[test]
    +    fn test_sync_time() {
    +        crate::database::test::test_sync_time(get_tree());
    +    }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html index 8dfc8a0079..cb98183bda 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -379,6 +381,45 @@
     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
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -405,6 +446,8 @@
     //!
     //! [`Wallet`]: crate::wallet::Wallet
     
    +use serde::{Deserialize, Serialize};
    +
     use bitcoin::hash_types::Txid;
     use bitcoin::{OutPoint, Script, Transaction, TxOut};
     
    @@ -425,6 +468,15 @@
     pub mod memory;
     pub use memory::MemoryDatabase;
     
    +/// Blockchain state at the time of syncing
    +///
    +/// Contains only the block time and height at the moment
    +#[derive(Clone, Debug, Serialize, Deserialize)]
    +pub struct SyncTime {
    +    /// Block timestamp and height at the time of sync
    +    pub block_time: BlockTime,
    +}
    +
     /// Trait for operations that can be batched
     ///
     /// This trait defines the list of operations that must be implemented on the [`Database`] type and
    @@ -432,44 +484,50 @@
     pub trait BatchOperations {
         /// Store a script_pubkey along with its keychain and child number.
         fn set_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<(), Error>;
    +    ) -> Result<(), Error>;
         /// Store a [`LocalUtxo`]
    -    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error>;
    +    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error>;
         /// Store a raw transaction
    -    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error>;
    +    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error>;
         /// Store the metadata of a transaction
    -    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error>;
    +    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error>;
         /// Store the last derivation index for a given keychain.
    -    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error>;
    +    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error>;
    +    /// Store the sync time
    +    fn set_sync_time(&mut self, sync_time: SyncTime) -> Result<(), Error>;
     
         /// Delete a script_pubkey given the keychain and its child number.
         fn del_script_pubkey_from_path(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error>;
    +    ) -> Result<Option<Script>, Error>;
         /// Delete the data related to a specific script_pubkey, meaning the keychain and the child
         /// number.
         fn del_path_from_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error>;
    +    ) -> Result<Option<(KeychainKind, u32)>, Error>;
         /// Delete a [`LocalUtxo`] given its [`OutPoint`]
    -    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>;
    +    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>;
         /// Delete a raw transaction given its [`Txid`]
    -    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error>;
    +    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error>;
         /// Delete the metadata of a transaction and optionally the raw transaction itself
         fn del_tx(
    -        &mut self,
    +        &mut self,
             txid: &Txid,
             include_raw: bool,
    -    ) -> Result<Option<TransactionDetails>, Error>;
    +    ) -> Result<Option<TransactionDetails>, Error>;
         /// Delete the last derivation index for a keychain.
    -    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error>;
    +    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error>;
    +    /// Reset the sync time to `None`
    +    ///
    +    /// Returns the removed value
    +    fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error>;
     }
     
     /// Trait for reading data from a database
    @@ -482,47 +540,49 @@
         /// checksum doesn't match. If there's no checksum in the database, simply store it for the
         /// next time.
         fn check_descriptor_checksum<B: AsRef<[u8]>>(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             bytes: B,
    -    ) -> Result<(), Error>;
    +    ) -> Result<(), Error>;
     
         /// Return the list of script_pubkeys
    -    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error>;
    +    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error>;
         /// Return the list of [`LocalUtxo`]s
    -    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error>;
    +    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error>;
         /// Return the list of raw transactions
    -    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error>;
    +    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error>;
         /// Return the list of transactions metadata
    -    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error>;
    +    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error>;
     
         /// Fetch a script_pubkey given the child number of a keychain.
         fn get_script_pubkey_from_path(
             &self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error>;
    +    ) -> Result<Option<Script>, Error>;
         /// Fetch the keychain and child number of a given script_pubkey
         fn get_path_from_script_pubkey(
             &self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error>;
    +    ) -> Result<Option<(KeychainKind, u32)>, Error>;
         /// Fetch a [`LocalUtxo`] given its [`OutPoint`]
    -    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>;
    +    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error>;
         /// Fetch a raw transaction given its [`Txid`]
    -    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>;
    +    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>;
         /// Fetch the transaction metadata and optionally also the raw transaction
    -    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error>;
    -    /// Return the last defivation index for a keychain.
    -    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error>;
    +    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error>;
    +    /// Return the last derivation index for a keychain.
    +    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error>;
    +    /// Return the sync time, if present
    +    fn get_sync_time(&self) -> Result<Option<SyncTime>, Error>;
     
         /// Increment the last derivation index for a keychain and return it
         ///
         /// It should insert and return `0` if not present in the database
    -    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error>;
    +    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error>;
     
         /// Force changes to be written to disk
    -    fn flush(&mut self) -> Result<(), Error>;
    +    fn flush(&mut self) -> Result<(), Error>;
     }
     
     /// Trait for a database that supports batch operations
    @@ -533,9 +593,9 @@
         type Batch: BatchOperations;
     
         /// Create a new batch container
    -    fn begin_batch(&self) -> Self::Batch;
    +    fn begin_batch(&self) -> Self::Batch;
         /// Consume and apply a batch of operations
    -    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error>;
    +    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error>;
     }
     
     /// Trait for [`Database`] types that can be created given a configuration
    @@ -544,18 +604,18 @@
         type Config: std::fmt::Debug;
     
         /// Create a new instance given a configuration
    -    fn from_config(config: &Self::Config) -> Result<Self, Error>;
    +    fn from_config(config: &Self::Config) -> Result<Self, Error>;
     }
     
     pub(crate) trait DatabaseUtils: Database {
    -    fn is_mine(&self, script: &Script) -> Result<bool, Error> {
    +    fn is_mine(&self, script: &Script) -> Result<bool, Error> {
             self.get_path_from_script_pubkey(script)
                 .map(|o| o.is_some())
         }
     
    -    fn get_raw_tx_or<D>(&self, txid: &Txid, default: D) -> Result<Option<Transaction>, Error>
    +    fn get_raw_tx_or<D>(&self, txid: &Txid, default: D) -> Result<Option<Transaction>, Error>
         where
    -        D: FnOnce() -> Result<Option<Transaction>, Error>,
    +        D: FnOnce() -> Result<Option<Transaction>, Error>,
         {
             self.get_tx(txid, true)?
                 .map(|t| t.transaction)
    @@ -563,7 +623,7 @@
                 .map_or_else(default, |t| Ok(Some(t)))
         }
     
    -    fn get_previous_output(&self, outpoint: &OutPoint) -> Result<Option<TxOut>, Error> {
    +    fn get_previous_output(&self, outpoint: &OutPoint) -> Result<Option<TxOut>, Error> {
             self.get_raw_tx(&outpoint.txid)?
                 .map(|previous_tx| {
                     if outpoint.vout as usize >= previous_tx.output.len() {
    @@ -706,7 +766,7 @@
                 received: 1337,
                 sent: 420420,
                 fee: Some(140),
    -            confirmation_time: Some(ConfirmationTime {
    +            confirmation_time: Some(BlockTime {
                     timestamp: 123456,
                     height: 1000,
                 }),
    @@ -758,9 +818,28 @@
             );
         }
     
    +    pub fn test_sync_time<D: Database>(mut tree: D) {
    +        assert!(tree.get_sync_time().unwrap().is_none());
    +
    +        tree.set_sync_time(SyncTime {
    +            block_time: BlockTime {
    +                height: 100,
    +                timestamp: 1000,
    +            },
    +        })
    +        .unwrap();
    +
    +        let extracted = tree.get_sync_time().unwrap();
    +        assert!(extracted.is_some());
    +        assert_eq!(extracted.as_ref().unwrap().block_time.height, 100);
    +        assert_eq!(extracted.as_ref().unwrap().block_time.timestamp, 1000);
    +
    +        tree.del_sync_time().unwrap();
    +        assert!(tree.get_sync_time().unwrap().is_none());
    +    }
    +
         // TODO: more tests...
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html index ff5e01c5bf..158331d2ea 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/database/sqlite.rs.html @@ -1,971 +1,1038 @@ -sqlite.rs - source
      1
    -  2
    -  3
    -  4
    -  5
    -  6
    -  7
    -  8
    -  9
    - 10
    - 11
    - 12
    - 13
    - 14
    - 15
    - 16
    - 17
    - 18
    - 19
    - 20
    - 21
    - 22
    - 23
    - 24
    - 25
    - 26
    - 27
    - 28
    - 29
    - 30
    - 31
    - 32
    - 33
    - 34
    - 35
    - 36
    - 37
    - 38
    - 39
    - 40
    - 41
    - 42
    - 43
    - 44
    - 45
    - 46
    - 47
    - 48
    - 49
    - 50
    - 51
    - 52
    - 53
    - 54
    - 55
    - 56
    - 57
    - 58
    - 59
    - 60
    - 61
    - 62
    - 63
    - 64
    - 65
    - 66
    - 67
    - 68
    - 69
    - 70
    - 71
    - 72
    - 73
    - 74
    - 75
    - 76
    - 77
    - 78
    - 79
    - 80
    - 81
    - 82
    - 83
    - 84
    - 85
    - 86
    - 87
    - 88
    - 89
    - 90
    - 91
    - 92
    - 93
    - 94
    - 95
    - 96
    - 97
    - 98
    - 99
    -100
    -101
    -102
    -103
    -104
    -105
    -106
    -107
    -108
    -109
    -110
    -111
    -112
    -113
    -114
    -115
    -116
    -117
    -118
    -119
    -120
    -121
    -122
    -123
    -124
    -125
    -126
    -127
    -128
    -129
    -130
    -131
    -132
    -133
    -134
    -135
    -136
    -137
    -138
    -139
    -140
    -141
    -142
    -143
    -144
    -145
    -146
    -147
    -148
    -149
    -150
    -151
    -152
    -153
    -154
    -155
    -156
    -157
    -158
    -159
    -160
    -161
    -162
    -163
    -164
    -165
    -166
    -167
    -168
    -169
    -170
    -171
    -172
    -173
    -174
    -175
    -176
    -177
    -178
    -179
    -180
    -181
    -182
    -183
    -184
    -185
    -186
    -187
    -188
    -189
    -190
    -191
    -192
    -193
    -194
    -195
    -196
    -197
    -198
    -199
    -200
    -201
    -202
    -203
    -204
    -205
    -206
    -207
    -208
    -209
    -210
    -211
    -212
    -213
    -214
    -215
    -216
    -217
    -218
    -219
    -220
    -221
    -222
    -223
    -224
    -225
    -226
    -227
    -228
    -229
    -230
    -231
    -232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
    -267
    -268
    -269
    -270
    -271
    -272
    -273
    -274
    -275
    -276
    -277
    -278
    -279
    -280
    -281
    -282
    -283
    -284
    -285
    -286
    -287
    -288
    -289
    -290
    -291
    -292
    -293
    -294
    -295
    -296
    -297
    -298
    -299
    -300
    -301
    -302
    -303
    -304
    -305
    -306
    -307
    -308
    -309
    -310
    -311
    -312
    -313
    -314
    -315
    -316
    -317
    -318
    -319
    -320
    -321
    -322
    -323
    -324
    -325
    -326
    -327
    -328
    -329
    -330
    -331
    -332
    -333
    -334
    -335
    -336
    -337
    -338
    -339
    -340
    -341
    -342
    -343
    -344
    -345
    -346
    -347
    -348
    -349
    -350
    -351
    -352
    -353
    -354
    -355
    -356
    -357
    -358
    -359
    -360
    -361
    -362
    -363
    -364
    -365
    -366
    -367
    -368
    -369
    -370
    -371
    -372
    -373
    -374
    -375
    -376
    -377
    -378
    -379
    -380
    -381
    -382
    -383
    -384
    -385
    -386
    -387
    -388
    -389
    -390
    -391
    -392
    -393
    -394
    -395
    -396
    -397
    -398
    -399
    -400
    -401
    -402
    -403
    -404
    -405
    -406
    -407
    -408
    -409
    -410
    -411
    -412
    -413
    -414
    -415
    -416
    -417
    -418
    -419
    -420
    -421
    -422
    -423
    -424
    -425
    -426
    -427
    -428
    -429
    -430
    -431
    -432
    -433
    -434
    -435
    -436
    -437
    -438
    -439
    -440
    -441
    -442
    -443
    -444
    -445
    -446
    -447
    -448
    -449
    -450
    -451
    -452
    -453
    -454
    -455
    -456
    -457
    -458
    -459
    -460
    -461
    -462
    -463
    -464
    -465
    -466
    -467
    -468
    -469
    -470
    -471
    -472
    -473
    -474
    -475
    -476
    -477
    -478
    -479
    -480
    -481
    -482
    -483
    -484
    -485
    -486
    -487
    -488
    -489
    -490
    -491
    -492
    -493
    -494
    -495
    -496
    -497
    -498
    -499
    -500
    -501
    -502
    -503
    -504
    -505
    -506
    -507
    -508
    -509
    -510
    -511
    -512
    -513
    -514
    -515
    -516
    -517
    -518
    -519
    -520
    -521
    -522
    -523
    -524
    -525
    -526
    -527
    -528
    -529
    -530
    -531
    -532
    -533
    -534
    -535
    -536
    -537
    -538
    -539
    -540
    -541
    -542
    -543
    -544
    -545
    -546
    -547
    -548
    -549
    -550
    -551
    -552
    -553
    -554
    -555
    -556
    -557
    -558
    -559
    -560
    -561
    -562
    -563
    -564
    -565
    -566
    -567
    -568
    -569
    -570
    -571
    -572
    -573
    -574
    -575
    -576
    -577
    -578
    -579
    -580
    -581
    -582
    -583
    -584
    -585
    -586
    -587
    -588
    -589
    -590
    -591
    -592
    -593
    -594
    -595
    -596
    -597
    -598
    -599
    -600
    -601
    -602
    -603
    -604
    -605
    -606
    -607
    -608
    -609
    -610
    -611
    -612
    -613
    -614
    -615
    -616
    -617
    -618
    -619
    -620
    -621
    -622
    -623
    -624
    -625
    -626
    -627
    -628
    -629
    -630
    -631
    -632
    -633
    -634
    -635
    -636
    -637
    -638
    -639
    -640
    -641
    -642
    -643
    -644
    -645
    -646
    -647
    -648
    -649
    -650
    -651
    -652
    -653
    -654
    -655
    -656
    -657
    -658
    -659
    -660
    -661
    -662
    -663
    -664
    -665
    -666
    -667
    -668
    -669
    -670
    -671
    -672
    -673
    -674
    -675
    -676
    -677
    -678
    -679
    -680
    -681
    -682
    -683
    -684
    -685
    -686
    -687
    -688
    -689
    -690
    -691
    -692
    -693
    -694
    -695
    -696
    -697
    -698
    -699
    -700
    -701
    -702
    -703
    -704
    -705
    -706
    -707
    -708
    -709
    -710
    -711
    -712
    -713
    -714
    -715
    -716
    -717
    -718
    -719
    -720
    -721
    -722
    -723
    -724
    -725
    -726
    -727
    -728
    -729
    -730
    -731
    -732
    -733
    -734
    -735
    -736
    -737
    -738
    -739
    -740
    -741
    -742
    -743
    -744
    -745
    -746
    -747
    -748
    -749
    -750
    -751
    -752
    -753
    -754
    -755
    -756
    -757
    -758
    -759
    -760
    -761
    -762
    -763
    -764
    -765
    -766
    -767
    -768
    -769
    -770
    -771
    -772
    -773
    -774
    -775
    -776
    -777
    -778
    -779
    -780
    -781
    -782
    -783
    -784
    -785
    -786
    -787
    -788
    -789
    -790
    -791
    -792
    -793
    -794
    -795
    -796
    -797
    -798
    -799
    -800
    -801
    -802
    -803
    -804
    -805
    -806
    -807
    -808
    -809
    -810
    -811
    -812
    -813
    -814
    -815
    -816
    -817
    -818
    -819
    -820
    -821
    -822
    -823
    -824
    -825
    -826
    -827
    -828
    -829
    -830
    -831
    -832
    -833
    -834
    -835
    -836
    -837
    -838
    -839
    -840
    -841
    -842
    -843
    -844
    -845
    -846
    -847
    -848
    -849
    -850
    -851
    -852
    -853
    -854
    -855
    -856
    -857
    -858
    -859
    -860
    -861
    -862
    -863
    -864
    -865
    -866
    -867
    -868
    -869
    -870
    -871
    -872
    -873
    -874
    -875
    -876
    -877
    -878
    -879
    -880
    -881
    -882
    -883
    -884
    -885
    -886
    -887
    -888
    -889
    -890
    -891
    -892
    -893
    -894
    -895
    -896
    -897
    -898
    -899
    -900
    -901
    -902
    -903
    -904
    -905
    -906
    -907
    -908
    -909
    -910
    -911
    -912
    -913
    -914
    -915
    -916
    -917
    -918
    -919
    -920
    -921
    -922
    -923
    -924
    -925
    -926
    -927
    -928
    -929
    -930
    -931
    -932
    -933
    -934
    -935
    -936
    -937
    -938
    -939
    -940
    -941
    -942
    -943
    -944
    -945
    -946
    -947
    -948
    -949
    -950
    -951
    -952
    -953
    -954
    -955
    -956
    -957
    -958
    -959
    -960
    -961
    -962
    -963
    -964
    -965
    -966
    -967
    -968
    +sqlite.rs - source
    +    
    logo
       1
    +   2
    +   3
    +   4
    +   5
    +   6
    +   7
    +   8
    +   9
    +  10
    +  11
    +  12
    +  13
    +  14
    +  15
    +  16
    +  17
    +  18
    +  19
    +  20
    +  21
    +  22
    +  23
    +  24
    +  25
    +  26
    +  27
    +  28
    +  29
    +  30
    +  31
    +  32
    +  33
    +  34
    +  35
    +  36
    +  37
    +  38
    +  39
    +  40
    +  41
    +  42
    +  43
    +  44
    +  45
    +  46
    +  47
    +  48
    +  49
    +  50
    +  51
    +  52
    +  53
    +  54
    +  55
    +  56
    +  57
    +  58
    +  59
    +  60
    +  61
    +  62
    +  63
    +  64
    +  65
    +  66
    +  67
    +  68
    +  69
    +  70
    +  71
    +  72
    +  73
    +  74
    +  75
    +  76
    +  77
    +  78
    +  79
    +  80
    +  81
    +  82
    +  83
    +  84
    +  85
    +  86
    +  87
    +  88
    +  89
    +  90
    +  91
    +  92
    +  93
    +  94
    +  95
    +  96
    +  97
    +  98
    +  99
    + 100
    + 101
    + 102
    + 103
    + 104
    + 105
    + 106
    + 107
    + 108
    + 109
    + 110
    + 111
    + 112
    + 113
    + 114
    + 115
    + 116
    + 117
    + 118
    + 119
    + 120
    + 121
    + 122
    + 123
    + 124
    + 125
    + 126
    + 127
    + 128
    + 129
    + 130
    + 131
    + 132
    + 133
    + 134
    + 135
    + 136
    + 137
    + 138
    + 139
    + 140
    + 141
    + 142
    + 143
    + 144
    + 145
    + 146
    + 147
    + 148
    + 149
    + 150
    + 151
    + 152
    + 153
    + 154
    + 155
    + 156
    + 157
    + 158
    + 159
    + 160
    + 161
    + 162
    + 163
    + 164
    + 165
    + 166
    + 167
    + 168
    + 169
    + 170
    + 171
    + 172
    + 173
    + 174
    + 175
    + 176
    + 177
    + 178
    + 179
    + 180
    + 181
    + 182
    + 183
    + 184
    + 185
    + 186
    + 187
    + 188
    + 189
    + 190
    + 191
    + 192
    + 193
    + 194
    + 195
    + 196
    + 197
    + 198
    + 199
    + 200
    + 201
    + 202
    + 203
    + 204
    + 205
    + 206
    + 207
    + 208
    + 209
    + 210
    + 211
    + 212
    + 213
    + 214
    + 215
    + 216
    + 217
    + 218
    + 219
    + 220
    + 221
    + 222
    + 223
    + 224
    + 225
    + 226
    + 227
    + 228
    + 229
    + 230
    + 231
    + 232
    + 233
    + 234
    + 235
    + 236
    + 237
    + 238
    + 239
    + 240
    + 241
    + 242
    + 243
    + 244
    + 245
    + 246
    + 247
    + 248
    + 249
    + 250
    + 251
    + 252
    + 253
    + 254
    + 255
    + 256
    + 257
    + 258
    + 259
    + 260
    + 261
    + 262
    + 263
    + 264
    + 265
    + 266
    + 267
    + 268
    + 269
    + 270
    + 271
    + 272
    + 273
    + 274
    + 275
    + 276
    + 277
    + 278
    + 279
    + 280
    + 281
    + 282
    + 283
    + 284
    + 285
    + 286
    + 287
    + 288
    + 289
    + 290
    + 291
    + 292
    + 293
    + 294
    + 295
    + 296
    + 297
    + 298
    + 299
    + 300
    + 301
    + 302
    + 303
    + 304
    + 305
    + 306
    + 307
    + 308
    + 309
    + 310
    + 311
    + 312
    + 313
    + 314
    + 315
    + 316
    + 317
    + 318
    + 319
    + 320
    + 321
    + 322
    + 323
    + 324
    + 325
    + 326
    + 327
    + 328
    + 329
    + 330
    + 331
    + 332
    + 333
    + 334
    + 335
    + 336
    + 337
    + 338
    + 339
    + 340
    + 341
    + 342
    + 343
    + 344
    + 345
    + 346
    + 347
    + 348
    + 349
    + 350
    + 351
    + 352
    + 353
    + 354
    + 355
    + 356
    + 357
    + 358
    + 359
    + 360
    + 361
    + 362
    + 363
    + 364
    + 365
    + 366
    + 367
    + 368
    + 369
    + 370
    + 371
    + 372
    + 373
    + 374
    + 375
    + 376
    + 377
    + 378
    + 379
    + 380
    + 381
    + 382
    + 383
    + 384
    + 385
    + 386
    + 387
    + 388
    + 389
    + 390
    + 391
    + 392
    + 393
    + 394
    + 395
    + 396
    + 397
    + 398
    + 399
    + 400
    + 401
    + 402
    + 403
    + 404
    + 405
    + 406
    + 407
    + 408
    + 409
    + 410
    + 411
    + 412
    + 413
    + 414
    + 415
    + 416
    + 417
    + 418
    + 419
    + 420
    + 421
    + 422
    + 423
    + 424
    + 425
    + 426
    + 427
    + 428
    + 429
    + 430
    + 431
    + 432
    + 433
    + 434
    + 435
    + 436
    + 437
    + 438
    + 439
    + 440
    + 441
    + 442
    + 443
    + 444
    + 445
    + 446
    + 447
    + 448
    + 449
    + 450
    + 451
    + 452
    + 453
    + 454
    + 455
    + 456
    + 457
    + 458
    + 459
    + 460
    + 461
    + 462
    + 463
    + 464
    + 465
    + 466
    + 467
    + 468
    + 469
    + 470
    + 471
    + 472
    + 473
    + 474
    + 475
    + 476
    + 477
    + 478
    + 479
    + 480
    + 481
    + 482
    + 483
    + 484
    + 485
    + 486
    + 487
    + 488
    + 489
    + 490
    + 491
    + 492
    + 493
    + 494
    + 495
    + 496
    + 497
    + 498
    + 499
    + 500
    + 501
    + 502
    + 503
    + 504
    + 505
    + 506
    + 507
    + 508
    + 509
    + 510
    + 511
    + 512
    + 513
    + 514
    + 515
    + 516
    + 517
    + 518
    + 519
    + 520
    + 521
    + 522
    + 523
    + 524
    + 525
    + 526
    + 527
    + 528
    + 529
    + 530
    + 531
    + 532
    + 533
    + 534
    + 535
    + 536
    + 537
    + 538
    + 539
    + 540
    + 541
    + 542
    + 543
    + 544
    + 545
    + 546
    + 547
    + 548
    + 549
    + 550
    + 551
    + 552
    + 553
    + 554
    + 555
    + 556
    + 557
    + 558
    + 559
    + 560
    + 561
    + 562
    + 563
    + 564
    + 565
    + 566
    + 567
    + 568
    + 569
    + 570
    + 571
    + 572
    + 573
    + 574
    + 575
    + 576
    + 577
    + 578
    + 579
    + 580
    + 581
    + 582
    + 583
    + 584
    + 585
    + 586
    + 587
    + 588
    + 589
    + 590
    + 591
    + 592
    + 593
    + 594
    + 595
    + 596
    + 597
    + 598
    + 599
    + 600
    + 601
    + 602
    + 603
    + 604
    + 605
    + 606
    + 607
    + 608
    + 609
    + 610
    + 611
    + 612
    + 613
    + 614
    + 615
    + 616
    + 617
    + 618
    + 619
    + 620
    + 621
    + 622
    + 623
    + 624
    + 625
    + 626
    + 627
    + 628
    + 629
    + 630
    + 631
    + 632
    + 633
    + 634
    + 635
    + 636
    + 637
    + 638
    + 639
    + 640
    + 641
    + 642
    + 643
    + 644
    + 645
    + 646
    + 647
    + 648
    + 649
    + 650
    + 651
    + 652
    + 653
    + 654
    + 655
    + 656
    + 657
    + 658
    + 659
    + 660
    + 661
    + 662
    + 663
    + 664
    + 665
    + 666
    + 667
    + 668
    + 669
    + 670
    + 671
    + 672
    + 673
    + 674
    + 675
    + 676
    + 677
    + 678
    + 679
    + 680
    + 681
    + 682
    + 683
    + 684
    + 685
    + 686
    + 687
    + 688
    + 689
    + 690
    + 691
    + 692
    + 693
    + 694
    + 695
    + 696
    + 697
    + 698
    + 699
    + 700
    + 701
    + 702
    + 703
    + 704
    + 705
    + 706
    + 707
    + 708
    + 709
    + 710
    + 711
    + 712
    + 713
    + 714
    + 715
    + 716
    + 717
    + 718
    + 719
    + 720
    + 721
    + 722
    + 723
    + 724
    + 725
    + 726
    + 727
    + 728
    + 729
    + 730
    + 731
    + 732
    + 733
    + 734
    + 735
    + 736
    + 737
    + 738
    + 739
    + 740
    + 741
    + 742
    + 743
    + 744
    + 745
    + 746
    + 747
    + 748
    + 749
    + 750
    + 751
    + 752
    + 753
    + 754
    + 755
    + 756
    + 757
    + 758
    + 759
    + 760
    + 761
    + 762
    + 763
    + 764
    + 765
    + 766
    + 767
    + 768
    + 769
    + 770
    + 771
    + 772
    + 773
    + 774
    + 775
    + 776
    + 777
    + 778
    + 779
    + 780
    + 781
    + 782
    + 783
    + 784
    + 785
    + 786
    + 787
    + 788
    + 789
    + 790
    + 791
    + 792
    + 793
    + 794
    + 795
    + 796
    + 797
    + 798
    + 799
    + 800
    + 801
    + 802
    + 803
    + 804
    + 805
    + 806
    + 807
    + 808
    + 809
    + 810
    + 811
    + 812
    + 813
    + 814
    + 815
    + 816
    + 817
    + 818
    + 819
    + 820
    + 821
    + 822
    + 823
    + 824
    + 825
    + 826
    + 827
    + 828
    + 829
    + 830
    + 831
    + 832
    + 833
    + 834
    + 835
    + 836
    + 837
    + 838
    + 839
    + 840
    + 841
    + 842
    + 843
    + 844
    + 845
    + 846
    + 847
    + 848
    + 849
    + 850
    + 851
    + 852
    + 853
    + 854
    + 855
    + 856
    + 857
    + 858
    + 859
    + 860
    + 861
    + 862
    + 863
    + 864
    + 865
    + 866
    + 867
    + 868
    + 869
    + 870
    + 871
    + 872
    + 873
    + 874
    + 875
    + 876
    + 877
    + 878
    + 879
    + 880
    + 881
    + 882
    + 883
    + 884
    + 885
    + 886
    + 887
    + 888
    + 889
    + 890
    + 891
    + 892
    + 893
    + 894
    + 895
    + 896
    + 897
    + 898
    + 899
    + 900
    + 901
    + 902
    + 903
    + 904
    + 905
    + 906
    + 907
    + 908
    + 909
    + 910
    + 911
    + 912
    + 913
    + 914
    + 915
    + 916
    + 917
    + 918
    + 919
    + 920
    + 921
    + 922
    + 923
    + 924
    + 925
    + 926
    + 927
    + 928
    + 929
    + 930
    + 931
    + 932
    + 933
    + 934
    + 935
    + 936
    + 937
    + 938
    + 939
    + 940
    + 941
    + 942
    + 943
    + 944
    + 945
    + 946
    + 947
    + 948
    + 949
    + 950
    + 951
    + 952
    + 953
    + 954
    + 955
    + 956
    + 957
    + 958
    + 959
    + 960
    + 961
    + 962
    + 963
    + 964
    + 965
    + 966
    + 967
    + 968
    + 969
    + 970
    + 971
    + 972
    + 973
    + 974
    + 975
    + 976
    + 977
    + 978
    + 979
    + 980
    + 981
    + 982
    + 983
    + 984
    + 985
    + 986
    + 987
    + 988
    + 989
    + 990
    + 991
    + 992
    + 993
    + 994
    + 995
    + 996
    + 997
    + 998
    + 999
    +1000
    +1001
    +1002
    +1003
    +1004
    +1005
    +1006
    +1007
    +1008
    +1009
    +1010
    +1011
    +1012
    +1013
    +1014
    +1015
    +1016
    +1017
    +1018
    +1019
    +1020
    +1021
    +1022
    +1023
    +1024
    +1025
    +1026
    +1027
    +1028
    +1029
    +1030
    +1031
    +1032
    +1033
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -981,7 +1048,7 @@
     use bitcoin::hash_types::Txid;
     use bitcoin::{OutPoint, Script, Transaction, TxOut};
     
    -use crate::database::{BatchDatabase, BatchOperations, Database};
    +use crate::database::{BatchDatabase, BatchOperations, Database, SyncTime};
     use crate::error::Error;
     use crate::types::*;
     
    @@ -1003,6 +1070,7 @@
         "CREATE UNIQUE INDEX idx_indices_keychain ON last_derivation_indices(keychain);",
         "CREATE TABLE checksums (keychain TEXT, checksum BLOB);",
         "CREATE INDEX idx_checksums_keychain ON checksums(keychain);",
    +    "CREATE TABLE sync_time (id INTEGER PRIMARY KEY, height INTEGER, timestamp INTEGER);"
     ];
     
     /// Sqlite database stored on filesystem
    @@ -1020,7 +1088,7 @@
     impl SqliteDatabase {
         /// Instantiate a new SqliteDatabase instance by creating a connection
         /// to the database stored at path
    -    pub fn new(path: String) -> Self {
    +    pub fn new(path: String) -> Self {
             let connection = get_connection(&path).unwrap();
             SqliteDatabase { path, connection }
         }
    @@ -1029,7 +1097,7 @@
             keychain: String,
             child: u32,
             script: &[u8],
    -    ) -> Result<i64, Error> {
    +    ) -> Result<i64, Error> {
             let mut statement = self.connection.prepare_cached("INSERT INTO script_pubkeys (keychain, child, script) VALUES (:keychain, :child, :script)")?;
             statement.execute(named_params! {
                 ":keychain": keychain,
    @@ -1046,7 +1114,7 @@
             vout: u32,
             txid: &[u8],
             script: &[u8],
    -    ) -> Result<i64, Error> {
    +    ) -> Result<i64, Error> {
             let mut statement = self.connection.prepare_cached("INSERT INTO utxos (value, keychain, vout, txid, script) VALUES (:value, :keychain, :vout, :txid, :script)")?;
             statement.execute(named_params! {
                 ":value": value,
    @@ -1058,7 +1126,7 @@
     
             Ok(self.connection.last_insert_rowid())
         }
    -    fn insert_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<i64, Error> {
    +    fn insert_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<i64, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("INSERT INTO transactions (txid, raw_tx) VALUES (:txid, :raw_tx)")?;
    @@ -1070,7 +1138,7 @@
             Ok(self.connection.last_insert_rowid())
         }
     
    -    fn update_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<(), Error> {
    +    fn update_transaction(&self, txid: &[u8], raw_tx: &[u8]) -> Result<(), Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("UPDATE transactions SET raw_tx=:raw_tx WHERE txid=:txid")?;
    @@ -1083,13 +1151,13 @@
             Ok(())
         }
     
    -    fn insert_transaction_details(&self, transaction: &TransactionDetails) -> Result<i64, Error> {
    +    fn insert_transaction_details(&self, transaction: &TransactionDetails) -> Result<i64, Error> {
             let (timestamp, height) = match &transaction.confirmation_time {
    -            Some(confirmation_time) => (
    +            Some(confirmation_time) => (
                     Some(confirmation_time.timestamp),
                     Some(confirmation_time.height),
                 ),
    -            None => (None, None),
    +            None => (None, None),
             };
     
             let txid: &[u8] = &transaction.txid;
    @@ -1109,13 +1177,13 @@
             Ok(self.connection.last_insert_rowid())
         }
     
    -    fn update_transaction_details(&self, transaction: &TransactionDetails) -> Result<(), Error> {
    +    fn update_transaction_details(&self, transaction: &TransactionDetails) -> Result<(), Error> {
             let (timestamp, height) = match &transaction.confirmation_time {
    -            Some(confirmation_time) => (
    +            Some(confirmation_time) => (
                     Some(confirmation_time.timestamp),
                     Some(confirmation_time.height),
                 ),
    -            None => (None, None),
    +            None => (None, None),
             };
     
             let txid: &[u8] = &transaction.txid;
    @@ -1135,7 +1203,7 @@
             Ok(())
         }
     
    -    fn insert_last_derivation_index(&self, keychain: String, value: u32) -> Result<i64, Error> {
    +    fn insert_last_derivation_index(&self, keychain: String, value: u32) -> Result<i64, Error> {
             let mut statement = self.connection.prepare_cached(
                 "INSERT INTO last_derivation_indices (keychain, value) VALUES (:keychain, :value)",
             )?;
    @@ -1148,7 +1216,7 @@
             Ok(self.connection.last_insert_rowid())
         }
     
    -    fn insert_checksum(&self, keychain: String, checksum: &[u8]) -> Result<i64, Error> {
    +    fn insert_checksum(&self, keychain: String, checksum: &[u8]) -> Result<i64, Error> {
             let mut statement = self.connection.prepare_cached(
                 "INSERT INTO checksums (keychain, checksum) VALUES (:keychain, :checksum)",
             )?;
    @@ -1160,7 +1228,7 @@
             Ok(self.connection.last_insert_rowid())
         }
     
    -    fn update_last_derivation_index(&self, keychain: String, value: u32) -> Result<(), Error> {
    +    fn update_last_derivation_index(&self, keychain: String, value: u32) -> Result<(), Error> {
             let mut statement = self.connection.prepare_cached(
                 "INSERT INTO last_derivation_indices (keychain, value) VALUES (:keychain, :value) ON CONFLICT(keychain) DO UPDATE SET value=:value WHERE keychain=:keychain",
             )?;
    @@ -1173,7 +1241,20 @@
             Ok(())
         }
     
    -    fn select_script_pubkeys(&self) -> Result<Vec<Script>, Error> {
    +    fn update_sync_time(&self, data: SyncTime) -> Result<i64, Error> {
    +        let mut statement = self.connection.prepare_cached(
    +            "INSERT INTO sync_time (id, height, timestamp) VALUES (0, :height, :timestamp) ON CONFLICT(id) DO UPDATE SET height=:height, timestamp=:timestamp WHERE id = 0",
    +        )?;
    +
    +        statement.execute(named_params! {
    +            ":height": data.block_time.height,
    +            ":timestamp": data.block_time.timestamp,
    +        })?;
    +
    +        Ok(self.connection.last_insert_rowid())
    +    }
    +
    +    fn select_script_pubkeys(&self) -> Result<Vec<Script>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT script FROM script_pubkeys")?;
    @@ -1187,7 +1268,7 @@
             Ok(scripts)
         }
     
    -    fn select_script_pubkeys_by_keychain(&self, keychain: String) -> Result<Vec<Script>, Error> {
    +    fn select_script_pubkeys_by_keychain(&self, keychain: String) -> Result<Vec<Script>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT script FROM script_pubkeys WHERE keychain=:keychain")?;
    @@ -1205,42 +1286,42 @@
             &self,
             keychain: String,
             child: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             let mut statement = self.connection.prepare_cached(
                 "SELECT script FROM script_pubkeys WHERE keychain=:keychain AND child=:child",
             )?;
             let mut rows = statement.query(named_params! {":keychain": keychain,":child": child})?;
     
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let script: Vec<u8> = row.get(0)?;
                     let script: Script = script.into();
                     Ok(Some(script))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
         fn select_script_pubkey_by_script(
             &self,
             script: &[u8],
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT keychain, child FROM script_pubkeys WHERE script=:script")?;
             let mut rows = statement.query(named_params! {":script": script})?;
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let keychain: String = row.get(0)?;
                     let keychain: KeychainKind = serde_json::from_str(&keychain)?;
                     let child: u32 = row.get(1)?;
                     Ok(Some((keychain, child)))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn select_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
    +    fn select_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT value, keychain, vout, txid, script FROM utxos")?;
    @@ -1272,13 +1353,13 @@
             &self,
             txid: &[u8],
             vout: u32,
    -    ) -> Result<Option<(u64, KeychainKind, Script)>, Error> {
    +    ) -> Result<Option<(u64, KeychainKind, Script)>, Error> {
             let mut statement = self.connection.prepare_cached(
                 "SELECT value, keychain, script FROM utxos WHERE txid=:txid AND vout=:vout",
             )?;
             let mut rows = statement.query(named_params! {":txid": txid,":vout": vout})?;
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let value: u64 = row.get(0)?;
                     let keychain: String = row.get(1)?;
                     let keychain: KeychainKind = serde_json::from_str(&keychain)?;
    @@ -1287,11 +1368,11 @@
     
                     Ok(Some((value, keychain, script)))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn select_transactions(&self) -> Result<Vec<Transaction>, Error> {
    +    fn select_transactions(&self) -> Result<Vec<Transaction>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT raw_tx FROM transactions")?;
    @@ -1305,22 +1386,22 @@
             Ok(txs)
         }
     
    -    fn select_transaction_by_txid(&self, txid: &[u8]) -> Result<Option<Transaction>, Error> {
    +    fn select_transaction_by_txid(&self, txid: &[u8]) -> Result<Option<Transaction>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT raw_tx FROM transactions WHERE txid=:txid")?;
             let mut rows = statement.query(named_params! {":txid": txid})?;
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let raw_tx: Vec<u8> = row.get(0)?;
                     let tx: Transaction = deserialize(&raw_tx)?;
                     Ok(Some(tx))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn select_transaction_details_with_raw(&self) -> Result<Vec<TransactionDetails>, Error> {
    +    fn select_transaction_details_with_raw(&self) -> Result<Vec<TransactionDetails>, Error> {
             let mut statement = self.connection.prepare_cached("SELECT transaction_details.txid, transaction_details.timestamp, transaction_details.received, transaction_details.sent, transaction_details.fee, transaction_details.height, transaction_details.verified, transactions.raw_tx FROM transaction_details, transactions WHERE transaction_details.txid = transactions.txid")?;
             let mut transaction_details: Vec<TransactionDetails> = vec![];
             let mut rows = statement.query([])?;
    @@ -1335,16 +1416,16 @@
                 let verified: bool = row.get(6)?;
                 let raw_tx: Option<Vec<u8>> = row.get(7)?;
                 let tx: Option<Transaction> = match raw_tx {
    -                Some(raw_tx) => {
    +                Some(raw_tx) => {
                         let tx: Transaction = deserialize(&raw_tx)?;
                         Some(tx)
                     }
    -                None => None,
    +                None => None,
                 };
     
                 let confirmation_time = match (height, timestamp) {
    -                (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }),
    -                _ => None,
    +                (Some(height), Some(timestamp)) => Some(BlockTime { height, timestamp }),
    +                _ => None,
                 };
     
                 transaction_details.push(TransactionDetails {
    @@ -1360,7 +1441,7 @@
             Ok(transaction_details)
         }
     
    -    fn select_transaction_details(&self) -> Result<Vec<TransactionDetails>, Error> {
    +    fn select_transaction_details(&self) -> Result<Vec<TransactionDetails>, Error> {
             let mut statement = self.connection.prepare_cached(
                 "SELECT txid, timestamp, received, sent, fee, height, verified FROM transaction_details",
             )?;
    @@ -1377,8 +1458,8 @@
                 let verified: bool = row.get(6)?;
     
                 let confirmation_time = match (height, timestamp) {
    -                (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }),
    -                _ => None,
    +                (Some(height), Some(timestamp)) => Some(BlockTime { height, timestamp }),
    +                _ => None,
                 };
     
                 transaction_details.push(TransactionDetails {
    @@ -1397,12 +1478,12 @@
         fn select_transaction_details_by_txid(
             &self,
             txid: &[u8],
    -    ) -> Result<Option<TransactionDetails>, Error> {
    +    ) -> Result<Option<TransactionDetails>, Error> {
             let mut statement = self.connection.prepare_cached("SELECT transaction_details.timestamp, transaction_details.received, transaction_details.sent, transaction_details.fee, transaction_details.height, transaction_details.verified, transactions.raw_tx FROM transaction_details, transactions WHERE transaction_details.txid=transactions.txid AND transaction_details.txid=:txid")?;
             let mut rows = statement.query(named_params! { ":txid": txid })?;
     
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let timestamp: Option<u64> = row.get(0)?;
                     let received: u64 = row.get(1)?;
                     let sent: u64 = row.get(2)?;
    @@ -1412,16 +1493,16 @@
     
                     let raw_tx: Option<Vec<u8>> = row.get(6)?;
                     let tx: Option<Transaction> = match raw_tx {
    -                    Some(raw_tx) => {
    +                    Some(raw_tx) => {
                             let tx: Transaction = deserialize(&raw_tx)?;
                             Some(tx)
                         }
    -                    None => None,
    +                    None => None,
                     };
     
                     let confirmation_time = match (height, timestamp) {
    -                    (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }),
    -                    _ => None,
    +                    (Some(height), Some(timestamp)) => Some(BlockTime { height, timestamp }),
    +                    _ => None,
                     };
     
                     Ok(Some(TransactionDetails {
    @@ -1434,43 +1515,61 @@
                         verified,
                     }))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
         fn select_last_derivation_index_by_keychain(
             &self,
             keychain: String,
    -    ) -> Result<Option<u32>, Error> {
    +    ) -> Result<Option<u32>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT value FROM last_derivation_indices WHERE keychain=:keychain")?;
             let mut rows = statement.query(named_params! {":keychain": keychain})?;
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let value: u32 = row.get(0)?;
                     Ok(Some(value))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn select_checksum_by_keychain(&self, keychain: String) -> Result<Option<Vec<u8>>, Error> {
    +    fn select_sync_time(&self) -> Result<Option<SyncTime>, Error> {
    +        let mut statement = self
    +            .connection
    +            .prepare_cached("SELECT height, timestamp FROM sync_time WHERE id = 0")?;
    +        let mut rows = statement.query([])?;
    +
    +        if let Some(row) = rows.next()? {
    +            Ok(Some(SyncTime {
    +                block_time: BlockTime {
    +                    height: row.get(0)?,
    +                    timestamp: row.get(1)?,
    +                },
    +            }))
    +        } else {
    +            Ok(None)
    +        }
    +    }
    +
    +    fn select_checksum_by_keychain(&self, keychain: String) -> Result<Option<Vec<u8>>, Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("SELECT checksum FROM checksums WHERE keychain=:keychain")?;
             let mut rows = statement.query(named_params! {":keychain": keychain})?;
     
             match rows.next()? {
    -            Some(row) => {
    +            Some(row) => {
                     let checksum: Vec<u8> = row.get(0)?;
                     Ok(Some(checksum))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn delete_script_pubkey_by_path(&self, keychain: String, child: u32) -> Result<(), Error> {
    +    fn delete_script_pubkey_by_path(&self, keychain: String, child: u32) -> Result<(), Error> {
             let mut statement = self.connection.prepare_cached(
                 "DELETE FROM script_pubkeys WHERE keychain=:keychain AND child=:child",
             )?;
    @@ -1482,7 +1581,7 @@
             Ok(())
         }
     
    -    fn delete_script_pubkey_by_script(&self, script: &[u8]) -> Result<(), Error> {
    +    fn delete_script_pubkey_by_script(&self, script: &[u8]) -> Result<(), Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("DELETE FROM script_pubkeys WHERE script=:script")?;
    @@ -1493,7 +1592,7 @@
             Ok(())
         }
     
    -    fn delete_utxo_by_outpoint(&self, txid: &[u8], vout: u32) -> Result<(), Error> {
    +    fn delete_utxo_by_outpoint(&self, txid: &[u8], vout: u32) -> Result<(), Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("DELETE FROM utxos WHERE txid=:txid AND vout=:vout")?;
    @@ -1505,7 +1604,7 @@
             Ok(())
         }
     
    -    fn delete_transaction_by_txid(&self, txid: &[u8]) -> Result<(), Error> {
    +    fn delete_transaction_by_txid(&self, txid: &[u8]) -> Result<(), Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("DELETE FROM transactions WHERE txid=:txid")?;
    @@ -1513,7 +1612,7 @@
             Ok(())
         }
     
    -    fn delete_transaction_details_by_txid(&self, txid: &[u8]) -> Result<(), Error> {
    +    fn delete_transaction_details_by_txid(&self, txid: &[u8]) -> Result<(), Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("DELETE FROM transaction_details WHERE txid=:txid")?;
    @@ -1521,7 +1620,7 @@
             Ok(())
         }
     
    -    fn delete_last_derivation_index_by_keychain(&self, keychain: String) -> Result<(), Error> {
    +    fn delete_last_derivation_index_by_keychain(&self, keychain: String) -> Result<(), Error> {
             let mut statement = self
                 .connection
                 .prepare_cached("DELETE FROM last_derivation_indices WHERE keychain=:keychain")?;
    @@ -1531,21 +1630,29 @@
     
             Ok(())
         }
    +
    +    fn delete_sync_time(&self) -> Result<(), Error> {
    +        let mut statement = self
    +            .connection
    +            .prepare_cached("DELETE FROM sync_time WHERE id = 0")?;
    +        statement.execute([])?;
    +        Ok(())
    +    }
     }
     
     impl BatchOperations for SqliteDatabase {
         fn set_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let keychain = serde_json::to_string(&keychain)?;
             self.insert_script_pubkey(keychain, child, script.as_bytes())?;
             Ok(())
         }
     
    -    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
    +    fn set_utxo(&mut self, utxo: &LocalUtxo) -> Result<(), Error> {
             self.insert_utxo(
                 utxo.txout.value,
                 serde_json::to_string(&utxo.keychain)?,
    @@ -1556,24 +1663,24 @@
             Ok(())
         }
     
    -    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
    +    fn set_raw_tx(&mut self, transaction: &Transaction) -> Result<(), Error> {
             match self.select_transaction_by_txid(&transaction.txid())? {
    -            Some(_) => {
    +            Some(_) => {
                     self.update_transaction(&transaction.txid(), &serialize(transaction))?;
                 }
    -            None => {
    +            None => {
                     self.insert_transaction(&transaction.txid(), &serialize(transaction))?;
                 }
             }
             Ok(())
         }
     
    -    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
    +    fn set_tx(&mut self, transaction: &TransactionDetails) -> Result<(), Error> {
             match self.select_transaction_details_by_txid(&transaction.txid)? {
    -            Some(_) => {
    +            Some(_) => {
                     self.update_transaction_details(transaction)?;
                 }
    -            None => {
    +            None => {
                     self.insert_transaction_details(transaction)?;
                 }
             }
    @@ -1585,43 +1692,48 @@
             Ok(())
         }
     
    -    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
    +    fn set_last_index(&mut self, keychain: KeychainKind, value: u32) -> Result<(), Error> {
             self.update_last_derivation_index(serde_json::to_string(&keychain)?, value)?;
             Ok(())
         }
     
    +    fn set_sync_time(&mut self, ct: SyncTime) -> Result<(), Error> {
    +        self.update_sync_time(ct)?;
    +        Ok(())
    +    }
    +
         fn del_script_pubkey_from_path(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             let keychain = serde_json::to_string(&keychain)?;
             let script = self.select_script_pubkey_by_path(keychain.clone(), child)?;
             match script {
    -            Some(script) => {
    +            Some(script) => {
                     self.delete_script_pubkey_by_path(keychain, child)?;
                     Ok(Some(script))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
         fn del_path_from_script_pubkey(
    -        &mut self,
    +        &mut self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             match self.select_script_pubkey_by_script(script.as_bytes())? {
    -            Some((keychain, child)) => {
    +            Some((keychain, child)) => {
                     self.delete_script_pubkey_by_script(script.as_bytes())?;
                     Ok(Some((keychain, child)))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn del_utxo(&mut self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             match self.select_utxo_by_outpoint(&outpoint.txid, outpoint.vout)? {
    -            Some((value, keychain, script_pubkey)) => {
    +            Some((value, keychain, script_pubkey)) => {
                     self.delete_utxo_by_outpoint(&outpoint.txid, outpoint.vout)?;
                     Ok(Some(LocalUtxo {
                         outpoint: *outpoint,
    @@ -1632,27 +1744,27 @@
                         keychain,
                     }))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn del_raw_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             match self.select_transaction_by_txid(txid)? {
    -            Some(tx) => {
    +            Some(tx) => {
                     self.delete_transaction_by_txid(txid)?;
                     Ok(Some(tx))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
         fn del_tx(
    -        &mut self,
    +        &mut self,
             txid: &Txid,
             include_raw: bool,
    -    ) -> Result<Option<TransactionDetails>, Error> {
    +    ) -> Result<Option<TransactionDetails>, Error> {
             match self.select_transaction_details_by_txid(txid)? {
    -            Some(transaction_details) => {
    +            Some(transaction_details) => {
                     self.delete_transaction_details_by_txid(txid)?;
     
                     if include_raw {
    @@ -1660,68 +1772,79 @@
                     }
                     Ok(Some(transaction_details))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn del_last_index(&mut self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             let keychain = serde_json::to_string(&keychain)?;
             match self.select_last_derivation_index_by_keychain(keychain.clone())? {
    -            Some(value) => {
    +            Some(value) => {
                     self.delete_last_derivation_index_by_keychain(keychain)?;
     
                     Ok(Some(value))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
    +        }
    +    }
    +
    +    fn del_sync_time(&mut self) -> Result<Option<SyncTime>, Error> {
    +        match self.select_sync_time()? {
    +            Some(value) => {
    +                self.delete_sync_time()?;
    +
    +                Ok(Some(value))
    +            }
    +            None => Ok(None),
             }
         }
     }
     
     impl Database for SqliteDatabase {
         fn check_descriptor_checksum<B: AsRef<[u8]>>(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             bytes: B,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let keychain = serde_json::to_string(&keychain)?;
     
             match self.select_checksum_by_keychain(keychain.clone())? {
    -            Some(checksum) => {
    -                if checksum == bytes.as_ref().to_vec() {
    +            Some(checksum) => {
    +                if checksum == bytes.as_ref().to_vec() {
                         Ok(())
                     } else {
                         Err(Error::ChecksumMismatch)
                     }
                 }
    -            None => {
    +            None => {
                     self.insert_checksum(keychain, bytes.as_ref())?;
                     Ok(())
                 }
             }
         }
     
    -    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
    +    fn iter_script_pubkeys(&self, keychain: Option<KeychainKind>) -> Result<Vec<Script>, Error> {
             match keychain {
    -            Some(keychain) => {
    +            Some(keychain) => {
                     let keychain = serde_json::to_string(&keychain)?;
                     self.select_script_pubkeys_by_keychain(keychain)
                 }
    -            None => self.select_script_pubkeys(),
    +            None => self.select_script_pubkeys(),
             }
         }
     
    -    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
    +    fn iter_utxos(&self) -> Result<Vec<LocalUtxo>, Error> {
             self.select_utxos()
         }
     
    -    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
    +    fn iter_raw_txs(&self) -> Result<Vec<Transaction>, Error> {
             self.select_transactions()
         }
     
    -    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
    +    fn iter_txs(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
             match include_raw {
    -            true => self.select_transaction_details_with_raw(),
    -            false => self.select_transaction_details(),
    +            true => self.select_transaction_details_with_raw(),
    +            false => self.select_transaction_details(),
             }
         }
     
    @@ -1729,27 +1852,27 @@
             &self,
             keychain: KeychainKind,
             child: u32,
    -    ) -> Result<Option<Script>, Error> {
    +    ) -> Result<Option<Script>, Error> {
             let keychain = serde_json::to_string(&keychain)?;
             match self.select_script_pubkey_by_path(keychain, child)? {
    -            Some(script) => Ok(Some(script)),
    -            None => Ok(None),
    +            Some(script) => Ok(Some(script)),
    +            None => Ok(None),
             }
         }
     
         fn get_path_from_script_pubkey(
             &self,
             script: &Script,
    -    ) -> Result<Option<(KeychainKind, u32)>, Error> {
    +    ) -> Result<Option<(KeychainKind, u32)>, Error> {
             match self.select_script_pubkey_by_script(script.as_bytes())? {
    -            Some((keychain, child)) => Ok(Some((keychain, child))),
    -            None => Ok(None),
    +            Some((keychain, child)) => Ok(Some((keychain, child))),
    +            None => Ok(None),
             }
         }
     
    -    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    fn get_utxo(&self, outpoint: &OutPoint) -> Result<Option<LocalUtxo>, Error> {
             match self.select_utxo_by_outpoint(&outpoint.txid, outpoint.vout)? {
    -            Some((value, keychain, script_pubkey)) => Ok(Some(LocalUtxo {
    +            Some((value, keychain, script_pubkey)) => Ok(Some(LocalUtxo {
                     outpoint: *outpoint,
                     txout: TxOut {
                         value,
    @@ -1757,50 +1880,54 @@
                     },
                     keychain,
                 })),
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_raw_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             match self.select_transaction_by_txid(txid)? {
    -            Some(tx) => Ok(Some(tx)),
    -            None => Ok(None),
    +            Some(tx) => Ok(Some(tx)),
    +            None => Ok(None),
             }
         }
     
    -    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
    +    fn get_tx(&self, txid: &Txid, include_raw: bool) -> Result<Option<TransactionDetails>, Error> {
             match self.select_transaction_details_by_txid(txid)? {
    -            Some(mut transaction_details) => {
    +            Some(mut transaction_details) => {
                     if !include_raw {
                         transaction_details.transaction = None;
                     }
                     Ok(Some(transaction_details))
                 }
    -            None => Ok(None),
    +            None => Ok(None),
             }
         }
     
    -    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
    +    fn get_last_index(&self, keychain: KeychainKind) -> Result<Option<u32>, Error> {
             let keychain = serde_json::to_string(&keychain)?;
             let value = self.select_last_derivation_index_by_keychain(keychain)?;
             Ok(value)
         }
     
    -    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
    +    fn get_sync_time(&self) -> Result<Option<SyncTime>, Error> {
    +        self.select_sync_time()
    +    }
    +
    +    fn increment_last_index(&mut self, keychain: KeychainKind) -> Result<u32, Error> {
             let keychain_string = serde_json::to_string(&keychain)?;
             match self.get_last_index(keychain)? {
    -            Some(value) => {
    +            Some(value) => {
                     self.update_last_derivation_index(keychain_string, value + 1)?;
                     Ok(value + 1)
                 }
    -            None => {
    +            None => {
                     self.insert_last_derivation_index(keychain_string, 0)?;
                     Ok(0)
                 }
             }
         }
     
    -    fn flush(&mut self) -> Result<(), Error> {
    +    fn flush(&mut self) -> Result<(), Error> {
             Ok(())
         }
     }
    @@ -1808,61 +1935,61 @@
     impl BatchDatabase for SqliteDatabase {
         type Batch = SqliteDatabase;
     
    -    fn begin_batch(&self) -> Self::Batch {
    +    fn begin_batch(&self) -> Self::Batch {
             let db = SqliteDatabase::new(self.path.clone());
             db.connection.execute("BEGIN TRANSACTION", []).unwrap();
             db
         }
     
    -    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> {
    +    fn commit_batch(&mut self, batch: Self::Batch) -> Result<(), Error> {
             batch.connection.execute("COMMIT TRANSACTION", [])?;
             Ok(())
         }
     }
     
    -pub fn get_connection(path: &str) -> Result<Connection, Error> {
    +pub fn get_connection(path: &str) -> Result<Connection, Error> {
         let connection = Connection::open(path)?;
         migrate(&connection)?;
         Ok(connection)
     }
     
    -pub fn get_schema_version(conn: &Connection) -> rusqlite::Result<i32> {
    +pub fn get_schema_version(conn: &Connection) -> rusqlite::Result<i32> {
         let statement = conn.prepare_cached("SELECT version FROM version");
         match statement {
    -        Err(rusqlite::Error::SqliteFailure(e, Some(msg))) => {
    -            if msg == "no such table: version" {
    +        Err(rusqlite::Error::SqliteFailure(e, Some(msg))) => {
    +            if msg == "no such table: version" {
                     Ok(0)
                 } else {
                     Err(rusqlite::Error::SqliteFailure(e, Some(msg)))
                 }
             }
    -        Ok(mut stmt) => {
    +        Ok(mut stmt) => {
                 let mut rows = stmt.query([])?;
                 match rows.next()? {
    -                Some(row) => {
    +                Some(row) => {
                         let version: i32 = row.get(0)?;
                         Ok(version)
                     }
    -                None => Ok(0),
    +                None => Ok(0),
                 }
             }
    -        _ => Ok(0),
    +        _ => Ok(0),
         }
     }
     
    -pub fn set_schema_version(conn: &Connection, version: i32) -> rusqlite::Result<usize> {
    +pub fn set_schema_version(conn: &Connection, version: i32) -> rusqlite::Result<usize> {
         conn.execute(
             "UPDATE version SET version=:version",
             named_params! {":version": version},
         )
     }
     
    -pub fn migrate(conn: &Connection) -> rusqlite::Result<()> {
    +pub fn migrate(conn: &Connection) -> rusqlite::Result<()> {
         let version = get_schema_version(conn)?;
         let stmts = &MIGRATIONS[(version as usize)..];
         let mut i: i32 = version;
     
    -    if version == MIGRATIONS.len() as i32 {
    +    if version == MIGRATIONS.len() as i32 {
             log::info!("db up to date, no migration needed");
             return Ok(());
         }
    @@ -1887,7 +2014,7 @@
         use crate::database::SqliteDatabase;
         use std::time::{SystemTime, UNIX_EPOCH};
     
    -    fn get_database() -> SqliteDatabase {
    +    fn get_database() -> SqliteDatabase {
             let time = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
             let mut dir = std::env::temp_dir();
             dir.push(format!("bdk_{}", time.as_nanos()));
    @@ -1933,8 +2060,12 @@
         fn test_last_index() {
             crate::database::test::test_last_index(get_database());
         }
    +
    +    #[test]
    +    fn test_sync_time() {
    +        crate::database::test::test_sync_time(get_database());
    +    }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html index 93562a5060..38ea7ac795 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/checksum.rs.html @@ -1,4 +1,6 @@ -checksum.rs - source
      1
    +checksum.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -134,7 +136,7 @@
     const INPUT_CHARSET: &str =  "0123456789()[],'/*abcdefgh@:$%{}IJKLMNOPQRSTUVWXYZ&+-.;<=>?!^_|~ijklmnopqrstuvwxyzABCDEFGH`#\"\\ ";
     const CHECKSUM_CHARSET: &str = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
     
    -fn poly_mod(mut c: u64, val: u64) -> u64 {
    +fn poly_mod(mut c: u64, val: u64) -> u64 {
         let c0 = c >> 35;
         c = ((c & 0x7ffffffff) << 5) ^ val;
         if c0 & 1 > 0 {
    @@ -157,7 +159,7 @@
     }
     
     /// Compute the checksum of a descriptor
    -pub fn get_checksum(desc: &str) -> Result<String, DescriptorError> {
    +pub fn get_checksum(desc: &str) -> Result<String, DescriptorError> {
         let mut c = 1;
         let mut cls = 0;
         let mut clscount = 0;
    @@ -168,7 +170,7 @@
             c = poly_mod(c, pos & 31);
             cls = cls * 3 + (pos >> 5);
             clscount += 1;
    -        if clscount == 3 {
    +        if clscount == 3 {
                 c = poly_mod(c, cls);
                 cls = 0;
                 clscount = 0;
    @@ -220,11 +222,10 @@
     
             assert!(matches!(
                 get_checksum(&invalid_desc).err(),
    -            Some(DescriptorError::InvalidDescriptorCharacter(invalid_char)) if invalid_char == sparkle_heart
    +            Some(DescriptorError::InvalidDescriptorCharacter(invalid_char)) if invalid_char == sparkle_heart
             ));
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html index edd1b2714d..78fa523ea9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/derived.rs.html @@ -1,4 +1,6 @@ -derived.rs - source
      1
    +derived.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -187,9 +189,9 @@
         /// Construct a new derived key
         ///
         /// Panics if the key is wildcard
    -    pub fn new(key: DescriptorPublicKey, secp: &'s SecpCtx) -> DerivedDescriptorKey<'s> {
    +    pub fn new(key: DescriptorPublicKey, secp: &'s SecpCtx) -> DerivedDescriptorKey<'s> {
             if let DescriptorPublicKey::XPub(xpub) = &key {
    -            assert!(xpub.wildcard == Wildcard::None)
    +            assert!(xpub.wildcard == Wildcard::None)
             }
     
             DerivedDescriptorKey(key, secp)
    @@ -199,39 +201,39 @@
     impl<'s> Deref for DerivedDescriptorKey<'s> {
         type Target = DescriptorPublicKey;
     
    -    fn deref(&self) -> &Self::Target {
    +    fn deref(&self) -> &Self::Target {
             &self.0
         }
     }
     
     impl<'s> PartialEq for DerivedDescriptorKey<'s> {
    -    fn eq(&self, other: &Self) -> bool {
    -        self.0 == other.0
    +    fn eq(&self, other: &Self) -> bool {
    +        self.0 == other.0
         }
     }
     
     impl<'s> Eq for DerivedDescriptorKey<'s> {}
     
     impl<'s> PartialOrd for DerivedDescriptorKey<'s> {
    -    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
    +    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
             self.0.partial_cmp(&other.0)
         }
     }
     
     impl<'s> Ord for DerivedDescriptorKey<'s> {
    -    fn cmp(&self, other: &Self) -> Ordering {
    +    fn cmp(&self, other: &Self) -> Ordering {
             self.0.cmp(&other.0)
         }
     }
     
     impl<'s> fmt::Display for DerivedDescriptorKey<'s> {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             self.0.fmt(f)
         }
     }
     
     impl<'s> Hash for DerivedDescriptorKey<'s> {
    -    fn hash<H: Hasher>(&self, state: &mut H) {
    +    fn hash<H: Hasher>(&self, state: &mut H) {
             self.0.hash(state);
         }
     }
    @@ -239,23 +241,23 @@
     impl<'s> MiniscriptKey for DerivedDescriptorKey<'s> {
         type Hash = Self;
     
    -    fn to_pubkeyhash(&self) -> Self::Hash {
    +    fn to_pubkeyhash(&self) -> Self::Hash {
             DerivedDescriptorKey(self.0.to_pubkeyhash(), self.1)
         }
     
    -    fn is_uncompressed(&self) -> bool {
    +    fn is_uncompressed(&self) -> bool {
             self.0.is_uncompressed()
         }
    -    fn serialized_len(&self) -> usize {
    +    fn serialized_len(&self) -> usize {
             self.0.serialized_len()
         }
     }
     
     impl<'s> ToPublicKey for DerivedDescriptorKey<'s> {
    -    fn to_public_key(&self) -> PublicKey {
    +    fn to_public_key(&self) -> PublicKey {
             match &self.0 {
    -            DescriptorPublicKey::SinglePub(ref spub) => spub.key.to_public_key(),
    -            DescriptorPublicKey::XPub(ref xpub) => {
    +            DescriptorPublicKey::SinglePub(ref spub) => spub.key.to_public_key(),
    +            DescriptorPublicKey::XPub(ref xpub) => {
                     xpub.xkey
                         .derive_pub(self.1, &xpub.derivation_path)
                         .expect("Shouldn't fail, only normal derivations")
    @@ -264,7 +266,7 @@
             }
         }
     
    -    fn hash_to_hash160(hash: &Self::Hash) -> hash160::Hash {
    +    fn hash_to_hash160(hash: &Self::Hash) -> hash160::Hash {
             hash.to_public_key().to_pubkeyhash()
         }
     }
    @@ -272,12 +274,12 @@
     pub(crate) trait AsDerived {
         // Derive a descriptor and transform all of its keys to `DerivedDescriptorKey`
         fn as_derived<'s>(&self, index: u32, secp: &'s SecpCtx)
    -        -> Descriptor<DerivedDescriptorKey<'s>>;
    +        -> Descriptor<DerivedDescriptorKey<'s>>;
     
         // Transform the keys into `DerivedDescriptorKey`.
         //
         // Panics if the descriptor is not "fixed", i.e. if it's derivable
    -    fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>>;
    +    fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>>;
     }
     
     impl AsDerived for Descriptor<DescriptorPublicKey> {
    @@ -285,20 +287,19 @@
             &self,
             index: u32,
             secp: &'s SecpCtx,
    -    ) -> Descriptor<DerivedDescriptorKey<'s>> {
    +    ) -> Descriptor<DerivedDescriptorKey<'s>> {
             self.derive(index).translate_pk_infallible(
                 |key| DerivedDescriptorKey::new(key.clone(), secp),
                 |key| DerivedDescriptorKey::new(key.clone(), secp),
             )
         }
     
    -    fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>> {
    +    fn as_derived_fixed<'s>(&self, secp: &'s SecpCtx) -> Descriptor<DerivedDescriptorKey<'s>> {
             assert!(!self.is_deriveable());
     
             self.as_derived(0, secp)
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html index 4914cdfc1d..687e65fd49 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/dsl.rs.html @@ -1,4 +1,6 @@ -dsl.rs - source
       1
    +dsl.rs - source
    +    
    logo
       1
        2
        3
        4
    @@ -1080,14 +1082,14 @@
     #[macro_export]
     macro_rules! impl_top_level_sh {
         // disallow `sortedmulti` in `bare()`
    -    ( Bare, new, new, Legacy, sortedmulti $( $inner:tt )* ) => {
    +    ( Bare, new, new, Legacy, sortedmulti $( $inner:tt )* ) => {
             compile_error!("`bare()` descriptors can't contain any `sortedmulti()` operands");
         };
    -    ( Bare, new, new, Legacy, sortedmulti_vec $( $inner:tt )* ) => {
    +    ( Bare, new, new, Legacy, sortedmulti_vec $( $inner:tt )* ) => {
             compile_error!("`bare()` descriptors can't contain any `sortedmulti_vec()` operands");
         };
     
    -    ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti $( $inner:tt )* ) => {{
    +    ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti $( $inner:tt )* ) => {{
             use std::marker::PhantomData;
     
             use $crate::miniscript::descriptor::{$inner_struct, Descriptor, DescriptorPublicKey};
    @@ -1099,7 +1101,7 @@
     
             $crate::impl_sortedmulti!(build_desc, sortedmulti $( $inner )*)
         }};
    -    ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti_vec $( $inner:tt )* ) => {{
    +    ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, sortedmulti_vec $( $inner:tt )* ) => {{
             use std::marker::PhantomData;
     
             use $crate::miniscript::descriptor::{$inner_struct, Descriptor, DescriptorPublicKey};
    @@ -1112,7 +1114,7 @@
             $crate::impl_sortedmulti!(build_desc, sortedmulti_vec $( $inner )*)
         }};
     
    -    ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, $( $minisc:tt )* ) => {{
    +    ( $inner_struct:ident, $constructor:ident, $sortedmulti_constructor:ident, $ctx:ident, $( $minisc:tt )* ) => {{
             use $crate::miniscript::descriptor::{$inner_struct, Descriptor, DescriptorPublicKey};
     
             $crate::fragment!($( $minisc )*)
    @@ -1124,7 +1126,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_top_level_pk {
    -    ( $inner_type:ident, $ctx:ty, $key:expr ) => {{
    +    ( $inner_type:ident, $ctx:ty, $key:expr ) => {{
             use $crate::miniscript::descriptor::$inner_type;
     
             #[allow(unused_imports)]
    @@ -1141,7 +1143,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_leaf_opcode {
    -    ( $terminal_variant:ident ) => {{
    +    ( $terminal_variant:ident ) => {{
             use $crate::descriptor::CheckMiniscript;
     
             $crate::miniscript::Miniscript::from_ast(
    @@ -1149,7 +1151,7 @@
             )
             .map_err($crate::descriptor::DescriptorError::Miniscript)
             .and_then(|minisc| {
    -            minisc.check_minsicript()?;
    +            minisc.check_miniscript()?;
                 Ok(minisc)
             })
             .map(|minisc| {
    @@ -1165,7 +1167,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_leaf_opcode_value {
    -    ( $terminal_variant:ident, $value:expr ) => {{
    +    ( $terminal_variant:ident, $value:expr ) => {{
             use $crate::descriptor::CheckMiniscript;
     
             $crate::miniscript::Miniscript::from_ast(
    @@ -1173,7 +1175,7 @@
             )
             .map_err($crate::descriptor::DescriptorError::Miniscript)
             .and_then(|minisc| {
    -            minisc.check_minsicript()?;
    +            minisc.check_miniscript()?;
                 Ok(minisc)
             })
             .map(|minisc| {
    @@ -1189,7 +1191,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_leaf_opcode_value_two {
    -    ( $terminal_variant:ident, $one:expr, $two:expr ) => {{
    +    ( $terminal_variant:ident, $one:expr, $two:expr ) => {{
             use $crate::descriptor::CheckMiniscript;
     
             $crate::miniscript::Miniscript::from_ast(
    @@ -1197,7 +1199,7 @@
             )
             .map_err($crate::descriptor::DescriptorError::Miniscript)
             .and_then(|minisc| {
    -            minisc.check_minsicript()?;
    +            minisc.check_miniscript()?;
                 Ok(minisc)
             })
             .map(|minisc| {
    @@ -1213,7 +1215,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_node_opcode_two {
    -    ( $terminal_variant:ident, $( $inner:tt )* ) => ({
    +    ( $terminal_variant:ident, $( $inner:tt )* ) => ({
             use $crate::descriptor::CheckMiniscript;
     
             let inner = $crate::fragment_internal!( @t $( $inner )* );
    @@ -1230,7 +1232,7 @@
                         std::sync::Arc::new(b_minisc),
                     ))?;
     
    -                minisc.check_minsicript()?;
    +                minisc.check_miniscript()?;
     
                     Ok((minisc, a_keymap, $crate::keys::merge_networks(&a_networks, &b_networks)))
                 })
    @@ -1240,7 +1242,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_node_opcode_three {
    -    ( $terminal_variant:ident, $( $inner:tt )* ) => ({
    +    ( $terminal_variant:ident, $( $inner:tt )* ) => ({
             use $crate::descriptor::CheckMiniscript;
     
             let inner = $crate::fragment_internal!( @t $( $inner )* );
    @@ -1262,7 +1264,7 @@
                         std::sync::Arc::new(c_minisc),
                     ))?;
     
    -                minisc.check_minsicript()?;
    +                minisc.check_miniscript()?;
     
                     Ok((minisc, a_keymap, networks))
                 })
    @@ -1272,11 +1274,11 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! impl_sortedmulti {
    -    ( $build_desc:expr, sortedmulti_vec ( $thresh:expr, $keys:expr ) ) => ({
    +    ( $build_desc:expr, sortedmulti_vec ( $thresh:expr, $keys:expr ) ) => ({
             let secp = $crate::bitcoin::secp256k1::Secp256k1::new();
             $crate::keys::make_sortedmulti($thresh, $keys, $build_desc, &secp)
         });
    -    ( $build_desc:expr, sortedmulti ( $thresh:expr $(, $key:expr )+ ) ) => ({
    +    ( $build_desc:expr, sortedmulti ( $thresh:expr $(, $key:expr )+ ) ) => ({
             use $crate::keys::IntoDescriptorKey;
             let secp = $crate::bitcoin::secp256k1::Secp256k1::new();
     
    @@ -1296,11 +1298,11 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! apply_modifier {
    -    ( $terminal_variant:ident, $inner:expr ) => {{
    +    ( $terminal_variant:ident, $inner:expr ) => {{
             use $crate::descriptor::CheckMiniscript;
     
             $inner
    -            .map_err(|e| -> $crate::descriptor::DescriptorError { e.into() })
    +            .map_err(|e| -> $crate::descriptor::DescriptorError { e.into() })
                 .and_then(|(minisc, keymap, networks)| {
                     let minisc = $crate::miniscript::Miniscript::from_ast(
                         $crate::miniscript::miniscript::decode::Terminal::$terminal_variant(
    @@ -1308,36 +1310,36 @@
                         ),
                     )?;
     
    -                minisc.check_minsicript()?;
    +                minisc.check_miniscript()?;
     
                     Ok((minisc, keymap, networks))
                 })
         }};
     
    -    ( a: $inner:expr ) => {{
    +    ( a: $inner:expr ) => {{
             $crate::apply_modifier!(Alt, $inner)
         }};
    -    ( s: $inner:expr ) => {{
    +    ( s: $inner:expr ) => {{
             $crate::apply_modifier!(Swap, $inner)
         }};
    -    ( c: $inner:expr ) => {{
    +    ( c: $inner:expr ) => {{
             $crate::apply_modifier!(Check, $inner)
         }};
    -    ( d: $inner:expr ) => {{
    +    ( d: $inner:expr ) => {{
             $crate::apply_modifier!(DupIf, $inner)
         }};
    -    ( v: $inner:expr ) => {{
    +    ( v: $inner:expr ) => {{
             $crate::apply_modifier!(Verify, $inner)
         }};
    -    ( j: $inner:expr ) => {{
    +    ( j: $inner:expr ) => {{
             $crate::apply_modifier!(NonZero, $inner)
         }};
    -    ( n: $inner:expr ) => {{
    +    ( n: $inner:expr ) => {{
             $crate::apply_modifier!(ZeroNotEqual, $inner)
         }};
     
         // Modifiers expanded to other operators
    -    ( t: $inner:expr ) => {{
    +    ( t: $inner:expr ) => {{
             $inner.and_then(|(a_minisc, a_keymap, a_networks)| {
                 $crate::impl_leaf_opcode_value_two!(
                     AndV,
    @@ -1347,7 +1349,7 @@
                 .map(|(minisc, _, _)| (minisc, a_keymap, a_networks))
             })
         }};
    -    ( l: $inner:expr ) => {{
    +    ( l: $inner:expr ) => {{
             $inner.and_then(|(a_minisc, a_keymap, a_networks)| {
                 $crate::impl_leaf_opcode_value_two!(
                     OrI,
    @@ -1357,7 +1359,7 @@
                 .map(|(minisc, _, _)| (minisc, a_keymap, a_networks))
             })
         }};
    -    ( u: $inner:expr ) => {{
    +    ( u: $inner:expr ) => {{
             $inner.and_then(|(a_minisc, a_keymap, a_networks)| {
                 $crate::impl_leaf_opcode_value_two!(
                     OrI,
    @@ -1464,46 +1466,46 @@
     /// ```
     #[macro_export]
     macro_rules! descriptor {
    -    ( bare ( $( $minisc:tt )* ) ) => ({
    +    ( bare ( $( $minisc:tt )* ) ) => ({
             $crate::impl_top_level_sh!(Bare, new, new, Legacy, $( $minisc )*)
         });
    -    ( sh ( wsh ( $( $minisc:tt )* ) ) ) => ({
    +    ( sh ( wsh ( $( $minisc:tt )* ) ) ) => ({
             $crate::descriptor!(shwsh ($( $minisc )*))
         });
    -    ( shwsh ( $( $minisc:tt )* ) ) => ({
    +    ( shwsh ( $( $minisc:tt )* ) ) => ({
             $crate::impl_top_level_sh!(Sh, new_wsh, new_wsh_sortedmulti, Segwitv0, $( $minisc )*)
         });
    -    ( pk ( $key:expr ) ) => ({
    +    ( pk ( $key:expr ) ) => ({
             // `pk()` is actually implemented as `bare(pk())`
             $crate::descriptor!( bare ( pk ( $key ) ) )
         });
    -    ( pkh ( $key:expr ) ) => ({
    +    ( pkh ( $key:expr ) ) => ({
             use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey};
     
             $crate::impl_top_level_pk!(Pkh, $crate::miniscript::Legacy, $key)
                 .map(|(a, b, c)| (Descriptor::<DescriptorPublicKey>::Pkh(a), b, c))
         });
    -    ( wpkh ( $key:expr ) ) => ({
    +    ( wpkh ( $key:expr ) ) => ({
             use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey};
     
             $crate::impl_top_level_pk!(Wpkh, $crate::miniscript::Segwitv0, $key)
                 .and_then(|(a, b, c)| Ok((a?, b, c)))
                 .map(|(a, b, c)| (Descriptor::<DescriptorPublicKey>::Wpkh(a), b, c))
         });
    -    ( sh ( wpkh ( $key:expr ) ) ) => ({
    +    ( sh ( wpkh ( $key:expr ) ) ) => ({
             $crate::descriptor!(shwpkh ( $key ))
         });
    -    ( shwpkh ( $key:expr ) ) => ({
    +    ( shwpkh ( $key:expr ) ) => ({
             use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey, Sh};
     
             $crate::impl_top_level_pk!(Wpkh, $crate::miniscript::Segwitv0, $key)
                 .and_then(|(a, b, c)| Ok((a?, b, c)))
                 .and_then(|(a, b, c)| Ok((Descriptor::<DescriptorPublicKey>::Sh(Sh::new_wpkh(a.into_inner())?), b, c)))
         });
    -    ( sh ( $( $minisc:tt )* ) ) => ({
    +    ( sh ( $( $minisc:tt )* ) ) => ({
             $crate::impl_top_level_sh!(Sh, new, new_sortedmulti, Legacy, $( $minisc )*)
         });
    -    ( wsh ( $( $minisc:tt )* ) ) => ({
    +    ( wsh ( $( $minisc:tt )* ) ) => ({
             $crate::impl_top_level_sh!(Wsh, new, new_sortedmulti, Segwitv0, $( $minisc )*)
         });
     }
    @@ -1515,13 +1517,13 @@
     }
     
     impl<A, B> TupleTwo<A, B> {
    -    pub fn flattened(self) -> (A, B) {
    +    pub fn flattened(self) -> (A, B) {
             (self.a, self.b)
         }
     }
     
     impl<A, B> From<(A, (B, ()))> for TupleTwo<A, B> {
    -    fn from((a, (b, _)): (A, (B, ()))) -> Self {
    +    fn from((a, (b, _)): (A, (B, ()))) -> Self {
             TupleTwo { a, b }
         }
     }
    @@ -1534,13 +1536,13 @@
     }
     
     impl<A, B, C> TupleThree<A, B, C> {
    -    pub fn flattened(self) -> (A, B, C) {
    +    pub fn flattened(self) -> (A, B, C) {
             (self.a, self.b, self.c)
         }
     }
     
     impl<A, B, C> From<(A, (B, (C, ())))> for TupleThree<A, B, C> {
    -    fn from((a, (b, (c, _))): (A, (B, (C, ())))) -> Self {
    +    fn from((a, (b, (c, _))): (A, (B, (C, ())))) -> Self {
             TupleThree { a, b, c }
         }
     }
    @@ -1550,29 +1552,29 @@
     macro_rules! fragment_internal {
         // The @v prefix is used to parse a sequence of operands and return them in a vector. This is
         // used by operands that take a variable number of arguments, like `thresh()` and `multi()`.
    -    ( @v $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({
    +    ( @v $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({
             let mut v = vec![$crate::fragment!( $op ( $( $args )* ) )];
    -        v.append(&mut $crate::fragment_internal!( @v $( $tail )* ));
    +        v.append(&mut $crate::fragment_internal!( @v $( $tail )* ));
     
             v
         });
         // Match modifiers
    -    ( @v $modif:tt : $( $tail:tt )* ) => ({
    +    ( @v $modif:tt : $( $tail:tt )* ) => ({
             let mut v = $crate::fragment_internal!( @v $( $tail )* );
             let first = v.drain(..1).next().unwrap();
     
             let first = $crate::apply_modifier!($modif:first);
     
             let mut v_final = vec![first];
    -        v_final.append(&mut v);
    +        v_final.append(&mut v);
     
             v_final
         });
         // Remove commas between operands
    -    ( @v , $( $tail:tt )* ) => ({
    +    ( @v , $( $tail:tt )* ) => ({
             $crate::fragment_internal!( @v $( $tail )* )
         });
    -    ( @v ) => ({
    +    ( @v ) => ({
             vec![]
         });
     
    @@ -1586,24 +1588,24 @@
         // three operands it's (X, (X, (X, ()))), etc.
         //
         // To check that the right number of arguments has been passed we can "cast" those tuples to
    -    // more convenient structures like `TupleTwo`. If the conversion succedes, the right number of
    +    // more convenient structures like `TupleTwo`. If the conversion succeeds, the right number of
         // args was passed. Otherwise the compilation fails entirely.
    -    ( @t $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({
    +    ( @t $op:ident ( $( $args:tt )* ) $( $tail:tt )* ) => ({
             ($crate::fragment!( $op ( $( $args )* ) ), $crate::fragment_internal!( @t $( $tail )* ))
         });
         // Match modifiers
    -    ( @t $modif:tt : $( $tail:tt )* ) => ({
    +    ( @t $modif:tt : $( $tail:tt )* ) => ({
             let (first, tail) = $crate::fragment_internal!( @t $( $tail )* );
             ($crate::apply_modifier!($modif:first), tail)
         });
         // Remove commas between operands
    -    ( @t , $( $tail:tt )* ) => ({
    +    ( @t , $( $tail:tt )* ) => ({
             $crate::fragment_internal!( @t $( $tail )* )
         });
    -    ( @t ) => ({});
    +    ( @t ) => ({});
     
         // Fallback to calling `fragment!()`
    -    ( $( $tokens:tt )* ) => ({
    +    ( $( $tokens:tt )* ) => ({
             $crate::fragment!($( $tokens )*)
         });
     }
    @@ -1617,72 +1619,72 @@
     #[macro_export]
     macro_rules! fragment {
         // Modifiers
    -    ( $modif:tt : $( $tail:tt )* ) => ({
    +    ( $modif:tt : $( $tail:tt )* ) => ({
             let op = $crate::fragment!( $( $tail )* );
             $crate::apply_modifier!($modif:op)
         });
     
         // Miniscript
    -    ( true ) => ({
    +    ( true ) => ({
             $crate::impl_leaf_opcode!(True)
         });
    -    ( false ) => ({
    +    ( false ) => ({
             $crate::impl_leaf_opcode!(False)
         });
    -    ( pk_k ( $key:expr ) ) => ({
    +    ( pk_k ( $key:expr ) ) => ({
             let secp = $crate::bitcoin::secp256k1::Secp256k1::new();
             $crate::keys::make_pk($key, &secp)
         });
    -    ( pk ( $key:expr ) ) => ({
    +    ( pk ( $key:expr ) ) => ({
             $crate::fragment!(c:pk_k ( $key ))
         });
    -    ( pk_h ( $key:expr ) ) => ({
    +    ( pk_h ( $key:expr ) ) => ({
             let secp = $crate::bitcoin::secp256k1::Secp256k1::new();
             $crate::keys::make_pkh($key, &secp)
         });
    -    ( after ( $value:expr ) ) => ({
    +    ( after ( $value:expr ) ) => ({
             $crate::impl_leaf_opcode_value!(After, $value)
         });
    -    ( older ( $value:expr ) ) => ({
    +    ( older ( $value:expr ) ) => ({
             $crate::impl_leaf_opcode_value!(Older, $value)
         });
    -    ( sha256 ( $hash:expr ) ) => ({
    +    ( sha256 ( $hash:expr ) ) => ({
             $crate::impl_leaf_opcode_value!(Sha256, $hash)
         });
    -    ( hash256 ( $hash:expr ) ) => ({
    +    ( hash256 ( $hash:expr ) ) => ({
             $crate::impl_leaf_opcode_value!(Hash256, $hash)
         });
    -    ( ripemd160 ( $hash:expr ) ) => ({
    +    ( ripemd160 ( $hash:expr ) ) => ({
             $crate::impl_leaf_opcode_value!(Ripemd160, $hash)
         });
    -    ( hash160 ( $hash:expr ) ) => ({
    +    ( hash160 ( $hash:expr ) ) => ({
             $crate::impl_leaf_opcode_value!(Hash160, $hash)
         });
    -    ( and_v ( $( $inner:tt )* ) ) => ({
    +    ( and_v ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_two!(AndV, $( $inner )*)
         });
    -    ( and_b ( $( $inner:tt )* ) ) => ({
    +    ( and_b ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_two!(AndB, $( $inner )*)
         });
    -    ( and_or ( $( $inner:tt )* ) ) => ({
    +    ( and_or ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_three!(AndOr, $( $inner )*)
         });
    -    ( andor ( $( $inner:tt )* ) ) => ({
    +    ( andor ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_three!(AndOr, $( $inner )*)
         });
    -    ( or_b ( $( $inner:tt )* ) ) => ({
    +    ( or_b ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_two!(OrB, $( $inner )*)
         });
    -    ( or_d ( $( $inner:tt )* ) ) => ({
    +    ( or_d ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_two!(OrD, $( $inner )*)
         });
    -    ( or_c ( $( $inner:tt )* ) ) => ({
    +    ( or_c ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_two!(OrC, $( $inner )*)
         });
    -    ( or_i ( $( $inner:tt )* ) ) => ({
    +    ( or_i ( $( $inner:tt )* ) ) => ({
             $crate::impl_node_opcode_two!(OrI, $( $inner )*)
         });
    -    ( thresh_vec ( $thresh:expr, $items:expr ) ) => ({
    +    ( thresh_vec ( $thresh:expr, $items:expr ) ) => ({
             use $crate::miniscript::descriptor::KeyMap;
     
             let (items, key_maps_networks): (Vec<_>, Vec<_>) = $items.into_iter().map(|(a, b, c)| (a, (b, c))).unzip();
    @@ -1698,16 +1700,16 @@
             $crate::impl_leaf_opcode_value_two!(Thresh, $thresh, items)
                 .map(|(minisc, _, _)| (minisc, key_maps, valid_networks))
         });
    -    ( thresh ( $thresh:expr, $( $inner:tt )* ) ) => ({
    +    ( thresh ( $thresh:expr, $( $inner:tt )* ) ) => ({
             let items = $crate::fragment_internal!( @v $( $inner )* );
     
             items.into_iter().collect::<Result<Vec<_>, _>>()
                 .and_then(|items| $crate::fragment!(thresh_vec($thresh, items)))
         });
    -    ( multi_vec ( $thresh:expr, $keys:expr ) ) => ({
    +    ( multi_vec ( $thresh:expr, $keys:expr ) ) => ({
             $crate::keys::make_multi($thresh, $keys)
         });
    -    ( multi ( $thresh:expr $(, $key:expr )+ ) ) => ({
    +    ( multi ( $thresh:expr $(, $key:expr )+ ) ) => ({
             use $crate::keys::IntoDescriptorKey;
             let secp = $crate::bitcoin::secp256k1::Secp256k1::new();
     
    @@ -1723,10 +1725,10 @@
         });
     
         // `sortedmulti()` is handled separately
    -    ( sortedmulti ( $( $inner:tt )* ) ) => ({
    +    ( sortedmulti ( $( $inner:tt )* ) ) => ({
             compile_error!("`sortedmulti` can only be used as the root operand of a descriptor");
         });
    -    ( sortedmulti_vec ( $( $inner:tt )* ) ) => ({
    +    ( sortedmulti_vec ( $( $inner:tt )* ) ) => ({
             compile_error!("`sortedmulti_vec` can only be used as the root operand of a descriptor");
         });
     }
    @@ -2129,6 +2131,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html index 49cea1f62b..47b08bc819 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/error.rs.html @@ -1,4 +1,6 @@ -error.rs - source
     1
    +error.rs - source
    +    
    logo
     1
      2
      3
      4
    @@ -113,17 +115,17 @@
     }
     
     impl From<crate::keys::KeyError> for Error {
    -    fn from(key_error: crate::keys::KeyError) -> Error {
    +    fn from(key_error: crate::keys::KeyError) -> Error {
             match key_error {
    -            crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner),
    -            crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner),
    -            e => Error::Key(e),
    +            crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner),
    +            crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner),
    +            e => Error::Key(e),
             }
         }
     }
     
     impl std::fmt::Display for Error {
    -    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    +    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -137,6 +139,5 @@
     impl_error!(bitcoin::hashes::hex::Error, Hex);
     impl_error!(crate::descriptor::policy::PolicyError, Policy);
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html index 628c70d6f8..2e17f53ced 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -871,7 +873,7 @@
             self,
             secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError>;
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError>;
     }
     
     impl IntoWalletDescriptor for &str {
    @@ -879,12 +881,12 @@
             self,
             secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
             let descriptor = if self.contains('#') {
                 let parts: Vec<&str> = self.splitn(2, '#').collect();
                 if !get_checksum(parts[0])
                     .ok()
    -                .map(|computed| computed == parts[1])
    +                .map(|computed| computed == parts[1])
                     .unwrap_or(false)
                 {
                     return Err(DescriptorError::InvalidDescriptorChecksum);
    @@ -905,7 +907,7 @@
             self,
             secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
             self.as_str().into_wallet_descriptor(secp, network)
         }
     }
    @@ -915,7 +917,7 @@
             self,
             secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
             (self, KeyMap::default()).into_wallet_descriptor(secp, network)
         }
     }
    @@ -925,7 +927,7 @@
             self,
             secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
             use crate::keys::DescriptorKey;
     
             let check_key = |pk: &DescriptorPublicKey| {
    @@ -958,7 +960,7 @@
             self,
             _secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
             let valid_networks = &self.2;
     
             let fix_key = |pk: &DescriptorPublicKey| {
    @@ -969,13 +971,13 @@
                     // them are valid. here we reset the network to make sure the wallet struct gets a
                     // descriptor with the right network everywhere.
                     let pk = match pk {
    -                    DescriptorPublicKey::XPub(ref xpub) => {
    +                    DescriptorPublicKey::XPub(ref xpub) => {
                             let mut xpub = xpub.clone();
                             xpub.xkey.network = network;
     
                             DescriptorPublicKey::XPub(xpub)
                         }
    -                    other => other.clone(),
    +                    other => other.clone(),
                     };
     
                     Ok(pk)
    @@ -997,7 +999,7 @@
         inner: T,
         secp: &SecpCtx,
         network: Network,
    -) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
         let (descriptor, keymap) = inner.into_wallet_descriptor(secp, network)?;
     
         // Ensure the keys don't contain any hardened derivation steps or hardened wildcards
    @@ -1008,7 +1010,7 @@
                 ..
             }) = k.as_key()
             {
    -            return *wildcard == Wildcard::Hardened
    +            return *wildcard == Wildcard::Hardened
                     || derivation_path.into_iter().any(ChildNumber::is_hardened);
             }
     
    @@ -1042,13 +1044,13 @@
     #[doc(hidden)]
     /// Used internally mainly by the `descriptor!()` and `fragment!()` macros
     pub trait CheckMiniscript<Ctx: miniscript::ScriptContext> {
    -    fn check_minsicript(&self) -> Result<(), miniscript::Error>;
    +    fn check_miniscript(&self) -> Result<(), miniscript::Error>;
     }
     
     impl<Ctx: miniscript::ScriptContext, Pk: miniscript::MiniscriptKey> CheckMiniscript<Ctx>
         for miniscript::Miniscript<Pk, Ctx>
     {
    -    fn check_minsicript(&self) -> Result<(), miniscript::Error> {
    +    fn check_miniscript(&self) -> Result<(), miniscript::Error> {
             Ctx::check_global_validity(self)?;
     
             Ok(())
    @@ -1063,12 +1065,12 @@
             signers: &SignersContainer,
             psbt: BuildSatisfaction,
             secp: &SecpCtx,
    -    ) -> Result<Option<Policy>, DescriptorError>;
    +    ) -> Result<Option<Policy>, DescriptorError>;
     }
     
     pub(crate) trait XKeyUtils {
    -    fn full_path(&self, append: &[ChildNumber]) -> DerivationPath;
    -    fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint;
    +    fn full_path(&self, append: &[ChildNumber]) -> DerivationPath;
    +    fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint;
     }
     
     // FIXME: `InnerXKey` was made private in rust-miniscript, so we have to implement this manually on
    @@ -1077,14 +1079,14 @@
     // Revert back to using the trait once https://github.com/rust-bitcoin/rust-miniscript/pull/230 is
     // released
     impl XKeyUtils for DescriptorXKey<ExtendedPubKey> {
    -    fn full_path(&self, append: &[ChildNumber]) -> DerivationPath {
    +    fn full_path(&self, append: &[ChildNumber]) -> DerivationPath {
             let full_path = match self.origin {
    -            Some((_, ref path)) => path
    +            Some((_, ref path)) => path
                     .into_iter()
                     .chain(self.derivation_path.into_iter())
                     .cloned()
                     .collect(),
    -            None => self.derivation_path.clone(),
    +            None => self.derivation_path.clone(),
             };
     
             if self.wildcard != Wildcard::None {
    @@ -1098,22 +1100,22 @@
             }
         }
     
    -    fn root_fingerprint(&self, _: &SecpCtx) -> Fingerprint {
    +    fn root_fingerprint(&self, _: &SecpCtx) -> Fingerprint {
             match self.origin {
    -            Some((fingerprint, _)) => fingerprint,
    -            None => self.xkey.fingerprint(),
    +            Some((fingerprint, _)) => fingerprint,
    +            None => self.xkey.fingerprint(),
             }
         }
     }
     impl XKeyUtils for DescriptorXKey<ExtendedPrivKey> {
    -    fn full_path(&self, append: &[ChildNumber]) -> DerivationPath {
    +    fn full_path(&self, append: &[ChildNumber]) -> DerivationPath {
             let full_path = match self.origin {
    -            Some((_, ref path)) => path
    +            Some((_, ref path)) => path
                     .into_iter()
                     .chain(self.derivation_path.into_iter())
                     .cloned()
                     .collect(),
    -            None => self.derivation_path.clone(),
    +            None => self.derivation_path.clone(),
             };
     
             if self.wildcard != Wildcard::None {
    @@ -1127,65 +1129,65 @@
             }
         }
     
    -    fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint {
    +    fn root_fingerprint(&self, secp: &SecpCtx) -> Fingerprint {
             match self.origin {
    -            Some((fingerprint, _)) => fingerprint,
    -            None => self.xkey.fingerprint(secp),
    +            Some((fingerprint, _)) => fingerprint,
    +            None => self.xkey.fingerprint(secp),
             }
         }
     }
     
     pub(crate) trait DerivedDescriptorMeta {
    -    fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError>;
    +    fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError>;
     }
     
     pub(crate) trait DescriptorMeta {
    -    fn is_witness(&self) -> bool;
    -    fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError>;
    +    fn is_witness(&self) -> bool;
    +    fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError>;
         fn derive_from_hd_keypaths<'s>(
             &self,
             hd_keypaths: &HdKeyPaths,
             secp: &'s SecpCtx,
    -    ) -> Option<DerivedDescriptor<'s>>;
    +    ) -> Option<DerivedDescriptor<'s>>;
         fn derive_from_psbt_input<'s>(
             &self,
             psbt_input: &psbt::Input,
             utxo: Option<TxOut>,
             secp: &'s SecpCtx,
    -    ) -> Option<DerivedDescriptor<'s>>;
    +    ) -> Option<DerivedDescriptor<'s>>;
     }
     
     pub(crate) trait DescriptorScripts {
    -    fn psbt_redeem_script(&self) -> Option<Script>;
    -    fn psbt_witness_script(&self) -> Option<Script>;
    +    fn psbt_redeem_script(&self) -> Option<Script>;
    +    fn psbt_witness_script(&self) -> Option<Script>;
     }
     
     impl<'s> DescriptorScripts for DerivedDescriptor<'s> {
    -    fn psbt_redeem_script(&self) -> Option<Script> {
    +    fn psbt_redeem_script(&self) -> Option<Script> {
             match self.desc_type() {
    -            DescriptorType::ShWpkh => Some(self.explicit_script()),
    -            DescriptorType::ShWsh => Some(self.explicit_script().to_v0_p2wsh()),
    -            DescriptorType::Sh => Some(self.explicit_script()),
    -            DescriptorType::Bare => Some(self.explicit_script()),
    -            DescriptorType::ShSortedMulti => Some(self.explicit_script()),
    -            _ => None,
    +            DescriptorType::ShWpkh => Some(self.explicit_script()),
    +            DescriptorType::ShWsh => Some(self.explicit_script().to_v0_p2wsh()),
    +            DescriptorType::Sh => Some(self.explicit_script()),
    +            DescriptorType::Bare => Some(self.explicit_script()),
    +            DescriptorType::ShSortedMulti => Some(self.explicit_script()),
    +            _ => None,
             }
         }
     
    -    fn psbt_witness_script(&self) -> Option<Script> {
    +    fn psbt_witness_script(&self) -> Option<Script> {
             match self.desc_type() {
    -            DescriptorType::Wsh => Some(self.explicit_script()),
    -            DescriptorType::ShWsh => Some(self.explicit_script()),
    -            DescriptorType::WshSortedMulti | DescriptorType::ShWshSortedMulti => {
    +            DescriptorType::Wsh => Some(self.explicit_script()),
    +            DescriptorType::ShWsh => Some(self.explicit_script()),
    +            DescriptorType::WshSortedMulti | DescriptorType::ShWshSortedMulti => {
                     Some(self.explicit_script())
                 }
    -            _ => None,
    +            _ => None,
             }
         }
     }
     
     impl DescriptorMeta for ExtendedDescriptor {
    -    fn is_witness(&self) -> bool {
    +    fn is_witness(&self) -> bool {
             matches!(
                 self.desc_type(),
                 DescriptorType::Wpkh
    @@ -1197,7 +1199,7 @@
             )
         }
     
    -    fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError> {
    +    fn get_extended_keys(&self) -> Result<Vec<DescriptorXKey<ExtendedPubKey>>, DescriptorError> {
             let mut answer = Vec::new();
     
             self.for_each_key(|pk| {
    @@ -1215,7 +1217,7 @@
             &self,
             hd_keypaths: &HdKeyPaths,
             secp: &'s SecpCtx,
    -    ) -> Option<DerivedDescriptor<'s>> {
    +    ) -> Option<DerivedDescriptor<'s>> {
             let index: HashMap<_, _> = hd_keypaths.values().map(|(a, b)| (a, b)).collect();
     
             let mut path_found = None;
    @@ -1247,16 +1249,16 @@
                         });
     
                     match derivation_path {
    -                    Some(path) if xpub.wildcard != Wildcard::None && path.len() == 1 => {
    +                    Some(path) if xpub.wildcard != Wildcard::None && path.len() == 1 => {
                             // Ignore hardened wildcards
                             if let ChildNumber::Normal { index } = path[0] {
                                 path_found = Some(index)
                             }
                         }
    -                    Some(path) if xpub.wildcard == Wildcard::None && path.is_empty() => {
    +                    Some(path) if xpub.wildcard == Wildcard::None && path.is_empty() => {
                             path_found = Some(0)
                         }
    -                    _ => {}
    +                    _ => {}
                     }
                 }
     
    @@ -1271,7 +1273,7 @@
             psbt_input: &psbt::Input,
             utxo: Option<TxOut>,
             secp: &'s SecpCtx,
    -    ) -> Option<DerivedDescriptor<'s>> {
    +    ) -> Option<DerivedDescriptor<'s>> {
             if let Some(derived) = self.derive_from_hd_keypaths(&psbt_input.bip32_derivation, secp) {
                 return Some(derived);
             }
    @@ -1285,14 +1287,14 @@
                 // TODO: add pk() here
                 DescriptorType::Pkh | DescriptorType::Wpkh | DescriptorType::ShWpkh
                     if utxo.is_some()
    -                    && descriptor.script_pubkey() == utxo.as_ref().unwrap().script_pubkey =>
    +                    && descriptor.script_pubkey() == utxo.as_ref().unwrap().script_pubkey =>
                 {
                     Some(descriptor)
                 }
                 DescriptorType::Bare | DescriptorType::Sh | DescriptorType::ShSortedMulti
                     if psbt_input.redeem_script.is_some()
                         && &descriptor.explicit_script()
    -                        == psbt_input.redeem_script.as_ref().unwrap() =>
    +                        == psbt_input.redeem_script.as_ref().unwrap() =>
                 {
                     Some(descriptor)
                 }
    @@ -1302,17 +1304,17 @@
                 | DescriptorType::WshSortedMulti
                     if psbt_input.witness_script.is_some()
                         && &descriptor.explicit_script()
    -                        == psbt_input.witness_script.as_ref().unwrap() =>
    +                        == psbt_input.witness_script.as_ref().unwrap() =>
                 {
                     Some(descriptor)
                 }
    -            _ => None,
    +            _ => None,
             }
         }
     }
     
     impl<'s> DerivedDescriptorMeta for DerivedDescriptor<'s> {
    -    fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError> {
    +    fn get_hd_keypaths(&self, secp: &SecpCtx) -> Result<HdKeyPaths, DescriptorError> {
             let mut answer = BTreeMap::new();
             self.for_each_key(|key| {
                 if let DescriptorPublicKey::XPub(xpub) = key.as_key().deref() {
    @@ -1471,7 +1473,7 @@
     
             // make a descriptor out of it
             let desc = crate::descriptor!(wpkh(key)).unwrap();
    -        // this should conver the key that supports "any_network" to the right network (testnet)
    +        // this should convert the key that supports "any_network" to the right network (testnet)
             let (wallet_desc, _) = desc
                 .into_wallet_descriptor(&secp, Network::Testnet)
                 .unwrap();
    @@ -1607,6 +1609,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html index 98bb3b3e19..b190eaec9d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/policy.rs.html @@ -1,4 +1,6 @@ -policy.rs - source
       1
    +policy.rs - source
    +    
    logo
       1
        2
        3
        4
    @@ -1676,13 +1678,13 @@
     }
     
     impl PkOrF {
    -    fn from_key(k: &DescriptorPublicKey, secp: &SecpCtx) -> Self {
    +    fn from_key(k: &DescriptorPublicKey, secp: &SecpCtx) -> Self {
             match k {
    -            DescriptorPublicKey::SinglePub(pubkey) => PkOrF {
    +            DescriptorPublicKey::SinglePub(pubkey) => PkOrF {
                     pubkey: Some(pubkey.key),
                     ..Default::default()
                 },
    -            DescriptorPublicKey::XPub(xpub) => PkOrF {
    +            DescriptorPublicKey::XPub(xpub) => PkOrF {
                     fingerprint: Some(xpub.root_fingerprint(secp)),
                     ..Default::default()
                 },
    @@ -1749,7 +1751,7 @@
     
     impl SatisfiableItem {
         /// Returns whether the [`SatisfiableItem`] is a leaf item
    -    pub fn is_leaf(&self) -> bool {
    +    pub fn is_leaf(&self) -> bool {
             !matches!(
                 self,
                 SatisfiableItem::Thresh {
    @@ -1760,13 +1762,13 @@
         }
     
         /// Returns a unique id for the [`SatisfiableItem`]
    -    pub fn id(&self) -> String {
    +    pub fn id(&self) -> String {
             get_checksum(&serde_json::to_string(self).expect("Failed to serialize a SatisfiableItem"))
                 .expect("Failed to compute a SatisfiableItem id")
         }
     }
     
    -fn combinations(vec: &[usize], size: usize) -> Vec<Vec<usize>> {
    +fn combinations(vec: &[usize], size: usize) -> Vec<Vec<usize>> {
         assert!(vec.len() >= size);
     
         let mut answer = Vec::new();
    @@ -1793,7 +1795,7 @@
         answer
     }
     
    -fn mix<T: Clone>(vec: Vec<Vec<T>>) -> Vec<Vec<T>> {
    +fn mix<T: Clone>(vec: Vec<Vec<T>>) -> Vec<Vec<T>> {
         if vec.is_empty() || vec.iter().any(Vec::is_empty) {
             return vec![];
         }
    @@ -1832,7 +1834,7 @@
     fn serialize_folded_cond_map<S>(
         input_map: &FoldedConditionMap,
         serializer: S,
    -) -> Result<S::Ok, S::Error>
    +) -> Result<S::Ok, S::Error>
     where
         S: Serializer,
     {
    @@ -1893,39 +1895,39 @@
     
     impl Satisfaction {
         /// Returns whether the [`Satisfaction`] is a leaf item
    -    pub fn is_leaf(&self) -> bool {
    +    pub fn is_leaf(&self) -> bool {
             match self {
    -            Satisfaction::None | Satisfaction::Complete { .. } => true,
    -            Satisfaction::PartialComplete { .. } | Satisfaction::Partial { .. } => false,
    +            Satisfaction::None | Satisfaction::Complete { .. } => true,
    +            Satisfaction::PartialComplete { .. } | Satisfaction::Partial { .. } => false,
             }
         }
     
         // add `inner` as one of self's partial items. this only makes sense on partials
    -    fn add(&mut self, inner: &Satisfaction, inner_index: usize) -> Result<(), PolicyError> {
    +    fn add(&mut self, inner: &Satisfaction, inner_index: usize) -> Result<(), PolicyError> {
             match self {
    -            Satisfaction::None | Satisfaction::Complete { .. } => Err(PolicyError::AddOnLeaf),
    -            Satisfaction::PartialComplete { .. } => Err(PolicyError::AddOnPartialComplete),
    +            Satisfaction::None | Satisfaction::Complete { .. } => Err(PolicyError::AddOnLeaf),
    +            Satisfaction::PartialComplete { .. } => Err(PolicyError::AddOnPartialComplete),
                 Satisfaction::Partial {
                     n,
                     ref mut conditions,
                     ref mut items,
                     ..
    -            } => {
    +            } => {
                     if inner_index >= *n || items.contains(&inner_index) {
                         return Err(PolicyError::IndexOutOfRange(inner_index));
                     }
     
                     match inner {
                         // not relevant if not completed yet
    -                    Satisfaction::None | Satisfaction::Partial { .. } => return Ok(()),
    -                    Satisfaction::Complete { condition } => {
    +                    Satisfaction::None | Satisfaction::Partial { .. } => return Ok(()),
    +                    Satisfaction::Complete { condition } => {
                             items.push(inner_index);
                             conditions.insert(inner_index, vec![*condition].into_iter().collect());
                         }
                         Satisfaction::PartialComplete {
                             conditions: other_conditions,
                             ..
    -                    } => {
    +                    } => {
                             items.push(inner_index);
                             let conditions_set = other_conditions
                                 .values()
    @@ -1939,7 +1941,7 @@
             }
         }
     
    -    fn finalize(&mut self) {
    +    fn finalize(&mut self) {
             // if partial try to bump it to a partialcomplete
             if let Satisfaction::Partial {
                 n,
    @@ -1956,9 +1958,9 @@
                     indexes
                         .into_iter()
                         // .inspect(|x| println!("--- orig --- {:?}", x))
    -                    // we map each of the combinations of elements into a tuple of ([choosen items], [conditions]). unfortunately, those items have potentially more than one
    +                    // we map each of the combinations of elements into a tuple of ([chosen items], [conditions]). unfortunately, those items have potentially more than one
                         // condition (think about ORs), so we also use `mix` to expand those, i.e. [[0], [1, 2]] becomes [[0, 1], [0, 2]]. This is necessary to make sure that we
    -                    // consider every possibile options and check whether or not they are compatible.
    +                    // consider every possible options and check whether or not they are compatible.
                         .map(|i_vec| {
                             mix(i_vec
                                 .iter()
    @@ -2009,7 +2011,7 @@
     }
     
     impl From<bool> for Satisfaction {
    -    fn from(other: bool) -> Self {
    +    fn from(other: bool) -> Self {
             if other {
                 Satisfaction::Complete {
                     condition: Default::default(),
    @@ -2047,7 +2049,7 @@
     }
     
     impl Condition {
    -    fn merge_nlocktime(a: u32, b: u32) -> Result<u32, PolicyError> {
    +    fn merge_nlocktime(a: u32, b: u32) -> Result<u32, PolicyError> {
             if (a < utils::BLOCKS_TIMELOCK_THRESHOLD) != (b < utils::BLOCKS_TIMELOCK_THRESHOLD) {
                 Err(PolicyError::MixedTimelockUnits)
             } else {
    @@ -2055,7 +2057,7 @@
             }
         }
     
    -    fn merge_nsequence(a: u32, b: u32) -> Result<u32, PolicyError> {
    +    fn merge_nsequence(a: u32, b: u32) -> Result<u32, PolicyError> {
             let mask = utils::SEQUENCE_LOCKTIME_TYPE_FLAG | utils::SEQUENCE_LOCKTIME_MASK;
     
             let a = a & mask;
    @@ -2068,24 +2070,24 @@
             }
         }
     
    -    pub(crate) fn merge(mut self, other: &Condition) -> Result<Self, PolicyError> {
    +    pub(crate) fn merge(mut self, other: &Condition) -> Result<Self, PolicyError> {
             match (self.csv, other.csv) {
    -            (Some(a), Some(b)) => self.csv = Some(Self::merge_nsequence(a, b)?),
    -            (None, any) => self.csv = any,
    -            _ => {}
    +            (Some(a), Some(b)) => self.csv = Some(Self::merge_nsequence(a, b)?),
    +            (None, any) => self.csv = any,
    +            _ => {}
             }
     
             match (self.timelock, other.timelock) {
    -            (Some(a), Some(b)) => self.timelock = Some(Self::merge_nlocktime(a, b)?),
    -            (None, any) => self.timelock = any,
    -            _ => {}
    +            (Some(a), Some(b)) => self.timelock = Some(Self::merge_nlocktime(a, b)?),
    +            (None, any) => self.timelock = any,
    +            _ => {}
             }
     
             Ok(self)
         }
     
         /// Returns `true` if there are no extra conditions to verify
    -    pub fn is_null(&self) -> bool {
    +    pub fn is_null(&self) -> bool {
             self.csv.is_none() && self.timelock.is_none()
         }
     }
    @@ -2108,7 +2110,7 @@
     }
     
     impl fmt::Display for PolicyError {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -2116,7 +2118,7 @@
     impl std::error::Error for PolicyError {}
     
     impl Policy {
    -    fn new(item: SatisfiableItem) -> Self {
    +    fn new(item: SatisfiableItem) -> Self {
             Policy {
                 id: item.id(),
                 item,
    @@ -2125,24 +2127,24 @@
             }
         }
     
    -    fn make_and(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> {
    +    fn make_and(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> {
             match (a, b) {
    -            (None, None) => Ok(None),
    -            (Some(x), None) | (None, Some(x)) => Ok(Some(x)),
    -            (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 2),
    +            (None, None) => Ok(None),
    +            (Some(x), None) | (None, Some(x)) => Ok(Some(x)),
    +            (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 2),
             }
         }
     
    -    fn make_or(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> {
    +    fn make_or(a: Option<Policy>, b: Option<Policy>) -> Result<Option<Policy>, PolicyError> {
             match (a, b) {
    -            (None, None) => Ok(None),
    -            (Some(x), None) | (None, Some(x)) => Ok(Some(x)),
    -            (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 1),
    +            (None, None) => Ok(None),
    +            (Some(x), None) | (None, Some(x)) => Ok(Some(x)),
    +            (Some(a), Some(b)) => Self::make_thresh(vec![a, b], 1),
             }
         }
     
    -    fn make_thresh(items: Vec<Policy>, threshold: usize) -> Result<Option<Policy>, PolicyError> {
    -        if threshold == 0 {
    +    fn make_thresh(items: Vec<Policy>, threshold: usize) -> Result<Option<Policy>, PolicyError> {
    +        if threshold == 0 {
                 return Ok(None);
             }
     
    @@ -2176,8 +2178,8 @@
             threshold: usize,
             sorted: bool,
             secp: &SecpCtx,
    -    ) -> Result<Option<Policy>, PolicyError> {
    -        if threshold == 0 {
    +    ) -> Result<Option<Policy>, PolicyError> {
    +        if threshold == 0 {
                 return Ok(None);
             }
     
    @@ -2233,7 +2235,7 @@
         /// What this means is that for some spending policies the user should select which paths in
         /// the tree it intends to satisfy while signing, because the transaction must be created differently based
         /// on that.
    -    pub fn requires_path(&self) -> bool {
    +    pub fn requires_path(&self) -> bool {
             self.get_condition(&BTreeMap::new()).is_err()
         }
     
    @@ -2242,22 +2244,22 @@
         pub fn get_condition(
             &self,
             path: &BTreeMap<String, Vec<usize>>,
    -    ) -> Result<Condition, PolicyError> {
    +    ) -> Result<Condition, PolicyError> {
             // if items.len() == threshold, selected can be omitted and we take all of them by default
             let default = match &self.item {
    -            SatisfiableItem::Thresh { items, threshold } if items.len() == *threshold => {
    +            SatisfiableItem::Thresh { items, threshold } if items.len() == *threshold => {
                     (0..*threshold).collect()
                 }
    -            SatisfiableItem::Multisig { keys, .. } => (0..keys.len()).collect(),
    -            _ => vec![],
    +            SatisfiableItem::Multisig { keys, .. } => (0..keys.len()).collect(),
    +            _ => vec![],
             };
             let selected = match path.get(&self.id) {
    -            Some(arr) => arr,
    -            _ => &default,
    +            Some(arr) => arr,
    +            _ => &default,
             };
     
             match &self.item {
    -            SatisfiableItem::Thresh { items, threshold } => {
    +            SatisfiableItem::Thresh { items, threshold } => {
                     let mapped_req = items
                         .iter()
                         .map(|i| i.get_condition(path))
    @@ -2288,7 +2290,7 @@
     
                     Ok(requirements)
                 }
    -            SatisfiableItem::Multisig { keys, threshold } => {
    +            SatisfiableItem::Multisig { keys, threshold } => {
                     if selected.len() < *threshold {
                         return Err(PolicyError::NotEnoughItemsSelected(self.id.clone()));
                     }
    @@ -2298,29 +2300,29 @@
     
                     Ok(Condition::default())
                 }
    -            SatisfiableItem::AbsoluteTimelock { value } => Ok(Condition {
    +            SatisfiableItem::AbsoluteTimelock { value } => Ok(Condition {
                     csv: None,
                     timelock: Some(*value),
                 }),
    -            SatisfiableItem::RelativeTimelock { value } => Ok(Condition {
    +            SatisfiableItem::RelativeTimelock { value } => Ok(Condition {
                     csv: Some(*value),
                     timelock: None,
                 }),
    -            _ => Ok(Condition::default()),
    +            _ => Ok(Condition::default()),
             }
         }
     }
     
     impl From<SatisfiableItem> for Policy {
    -    fn from(other: SatisfiableItem) -> Self {
    +    fn from(other: SatisfiableItem) -> Self {
             Self::new(other)
         }
     }
     
    -fn signer_id(key: &DescriptorPublicKey, secp: &SecpCtx) -> SignerId {
    +fn signer_id(key: &DescriptorPublicKey, secp: &SecpCtx) -> SignerId {
         match key {
    -        DescriptorPublicKey::SinglePub(pubkey) => pubkey.key.to_pubkeyhash().into(),
    -        DescriptorPublicKey::XPub(xpub) => xpub.root_fingerprint(secp).into(),
    +        DescriptorPublicKey::SinglePub(pubkey) => pubkey.key.to_pubkeyhash().into(),
    +        DescriptorPublicKey::XPub(xpub) => xpub.root_fingerprint(secp).into(),
         }
     }
     
    @@ -2329,7 +2331,7 @@
         signers: &SignersContainer,
         build_sat: BuildSatisfaction,
         secp: &SecpCtx,
    -) -> Policy {
    +) -> Policy {
         let mut policy: Policy = SatisfiableItem::Signature(PkOrF::from_key(key, secp)).into();
     
         policy.contribution = if signers.find(signer_id(key, secp)).is_some() {
    @@ -2353,20 +2355,20 @@
         policy
     }
     
    -fn signature_in_psbt(psbt: &Psbt, key: &DescriptorPublicKey, secp: &SecpCtx) -> bool {
    +fn signature_in_psbt(psbt: &Psbt, key: &DescriptorPublicKey, secp: &SecpCtx) -> bool {
         //TODO check signature validity
         psbt.inputs.iter().all(|input| match key {
    -        DescriptorPublicKey::SinglePub(key) => input.partial_sigs.contains_key(&key.key),
    -        DescriptorPublicKey::XPub(xpub) => {
    +        DescriptorPublicKey::SinglePub(key) => input.partial_sigs.contains_key(&key.key),
    +        DescriptorPublicKey::XPub(xpub) => {
                 let pubkey = input
                     .bip32_derivation
                     .iter()
    -                .find(|(_, (f, _))| *f == xpub.root_fingerprint(secp))
    +                .find(|(_, (f, _))| *f == xpub.root_fingerprint(secp))
                     .map(|(p, _)| p);
                 //TODO check actual derivation matches
                 match pubkey {
    -                Some(pubkey) => input.partial_sigs.contains_key(pubkey),
    -                None => false,
    +                Some(pubkey) => input.partial_sigs.contains_key(pubkey),
    +                None => false,
                 }
             }
         })
    @@ -2378,13 +2380,13 @@
             signers: &SignersContainer,
             build_sat: BuildSatisfaction,
             secp: &SecpCtx,
    -    ) -> Result<Option<Policy>, Error> {
    +    ) -> Result<Option<Policy>, Error> {
             Ok(match &self.node {
                 // Leaves
    -            Terminal::True | Terminal::False => None,
    -            Terminal::PkK(pubkey) => Some(signature(pubkey, signers, build_sat, secp)),
    -            Terminal::PkH(pubkey_hash) => Some(signature(pubkey_hash, signers, build_sat, secp)),
    -            Terminal::After(value) => {
    +            Terminal::True | Terminal::False => None,
    +            Terminal::PkK(pubkey) => Some(signature(pubkey, signers, build_sat, secp)),
    +            Terminal::PkH(pubkey_hash) => Some(signature(pubkey_hash, signers, build_sat, secp)),
    +            Terminal::After(value) => {
                     let mut policy: Policy = SatisfiableItem::AbsoluteTimelock { value: *value }.into();
                     policy.contribution = Satisfaction::Complete {
                         condition: Condition {
    @@ -2409,7 +2411,7 @@
     
                     Some(policy)
                 }
    -            Terminal::Older(value) => {
    +            Terminal::Older(value) => {
                     let mut policy: Policy = SatisfiableItem::RelativeTimelock { value: *value }.into();
                     policy.contribution = Satisfaction::Complete {
                         condition: Condition {
    @@ -2434,17 +2436,17 @@
     
                     Some(policy)
                 }
    -            Terminal::Sha256(hash) => Some(SatisfiableItem::Sha256Preimage { hash: *hash }.into()),
    -            Terminal::Hash256(hash) => {
    +            Terminal::Sha256(hash) => Some(SatisfiableItem::Sha256Preimage { hash: *hash }.into()),
    +            Terminal::Hash256(hash) => {
                     Some(SatisfiableItem::Hash256Preimage { hash: *hash }.into())
                 }
    -            Terminal::Ripemd160(hash) => {
    +            Terminal::Ripemd160(hash) => {
                     Some(SatisfiableItem::Ripemd160Preimage { hash: *hash }.into())
                 }
    -            Terminal::Hash160(hash) => {
    +            Terminal::Hash160(hash) => {
                     Some(SatisfiableItem::Hash160Preimage { hash: *hash }.into())
                 }
    -            Terminal::Multi(k, pks) => {
    +            Terminal::Multi(k, pks) => {
                     Policy::make_multisig(pks, signers, build_sat, *k, false, secp)?
                 }
                 // Identities
    @@ -2454,13 +2456,13 @@
                 | Terminal::DupIf(inner)
                 | Terminal::Verify(inner)
                 | Terminal::NonZero(inner)
    -            | Terminal::ZeroNotEqual(inner) => inner.extract_policy(signers, build_sat, secp)?,
    +            | Terminal::ZeroNotEqual(inner) => inner.extract_policy(signers, build_sat, secp)?,
                 // Complex policies
    -            Terminal::AndV(a, b) | Terminal::AndB(a, b) => Policy::make_and(
    +            Terminal::AndV(a, b) | Terminal::AndB(a, b) => Policy::make_and(
                     a.extract_policy(signers, build_sat, secp)?,
                     b.extract_policy(signers, build_sat, secp)?,
                 )?,
    -            Terminal::AndOr(x, y, z) => Policy::make_or(
    +            Terminal::AndOr(x, y, z) => Policy::make_or(
                     Policy::make_and(
                         x.extract_policy(signers, build_sat, secp)?,
                         y.extract_policy(signers, build_sat, secp)?,
    @@ -2470,11 +2472,11 @@
                 Terminal::OrB(a, b)
                 | Terminal::OrD(a, b)
                 | Terminal::OrC(a, b)
    -            | Terminal::OrI(a, b) => Policy::make_or(
    +            | Terminal::OrI(a, b) => Policy::make_or(
                     a.extract_policy(signers, build_sat, secp)?,
                     b.extract_policy(signers, build_sat, secp)?,
                 )?,
    -            Terminal::Thresh(k, nodes) => {
    +            Terminal::Thresh(k, nodes) => {
                     let mut threshold = *k;
                     let mapped: Vec<_> = nodes
                         .iter()
    @@ -2486,8 +2488,8 @@
     
                     if mapped.len() < nodes.len() {
                         threshold = match threshold.checked_sub(nodes.len() - mapped.len()) {
    -                        None => return Ok(None),
    -                        Some(x) => x,
    +                        None => return Ok(None),
    +                        Some(x) => x,
                         };
                     }
     
    @@ -2497,7 +2499,7 @@
         }
     }
     
    -fn psbt_inputs_sat(psbt: &Psbt) -> impl Iterator<Item = PsbtInputSatisfier> {
    +fn psbt_inputs_sat(psbt: &Psbt) -> impl Iterator<Item = PsbtInputSatisfier> {
         (0..psbt.inputs.len()).map(move |i| PsbtInputSatisfier::new(psbt, i))
     }
     
    @@ -2520,11 +2522,11 @@
         },
     }
     impl<'a> BuildSatisfaction<'a> {
    -    fn psbt(&self) -> Option<&'a Psbt> {
    +    fn psbt(&self) -> Option<&'a Psbt> {
             match self {
    -            BuildSatisfaction::None => None,
    -            BuildSatisfaction::Psbt(psbt) => Some(psbt),
    -            BuildSatisfaction::PsbtTimelocks { psbt, .. } => Some(psbt),
    +            BuildSatisfaction::None => None,
    +            BuildSatisfaction::Psbt(psbt) => Some(psbt),
    +            BuildSatisfaction::PsbtTimelocks { psbt, .. } => Some(psbt),
             }
         }
     }
    @@ -2535,13 +2537,13 @@
             signers: &SignersContainer,
             build_sat: BuildSatisfaction,
             secp: &SecpCtx,
    -    ) -> Result<Option<Policy>, Error> {
    +    ) -> Result<Option<Policy>, Error> {
             fn make_sortedmulti<Ctx: ScriptContext>(
                 keys: &SortedMultiVec<DescriptorPublicKey, Ctx>,
                 signers: &SignersContainer,
                 build_sat: BuildSatisfaction,
                 secp: &SecpCtx,
    -        ) -> Result<Option<Policy>, Error> {
    +        ) -> Result<Option<Policy>, Error> {
                 Ok(Policy::make_multisig(
                     keys.pks.as_ref(),
                     signers,
    @@ -2553,24 +2555,24 @@
             }
     
             match self {
    -            Descriptor::Pkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))),
    -            Descriptor::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))),
    -            Descriptor::Sh(sh) => match sh.as_inner() {
    -                ShInner::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))),
    -                ShInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?),
    -                ShInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp),
    -                ShInner::Wsh(wsh) => match wsh.as_inner() {
    -                    WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?),
    -                    WshInner::SortedMulti(ref keys) => {
    +            Descriptor::Pkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))),
    +            Descriptor::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))),
    +            Descriptor::Sh(sh) => match sh.as_inner() {
    +                ShInner::Wpkh(pk) => Ok(Some(signature(pk.as_inner(), signers, build_sat, secp))),
    +                ShInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?),
    +                ShInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp),
    +                ShInner::Wsh(wsh) => match wsh.as_inner() {
    +                    WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?),
    +                    WshInner::SortedMulti(ref keys) => {
                             make_sortedmulti(keys, signers, build_sat, secp)
                         }
                     },
                 },
    -            Descriptor::Wsh(wsh) => match wsh.as_inner() {
    -                WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?),
    -                WshInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp),
    +            Descriptor::Wsh(wsh) => match wsh.as_inner() {
    +                WshInner::Ms(ms) => Ok(ms.extract_policy(signers, build_sat, secp)?),
    +                WshInner::SortedMulti(ref keys) => make_sortedmulti(keys, signers, build_sat, secp),
                 },
    -            Descriptor::Bare(ms) => Ok(ms.as_inner().extract_policy(signers, build_sat, secp)?),
    +            Descriptor::Bare(ms) => Ok(ms.as_inner().extract_policy(signers, build_sat, secp)?),
             }
         }
     }
    @@ -2601,7 +2603,7 @@
             tprv: &str,
             path: &str,
             secp: &SecpCtx,
    -    ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) {
    +    ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) {
             let path = bip32::DerivationPath::from_str(path).unwrap();
             let tprv = bip32::ExtendedPrivKey::from_str(tprv).unwrap();
             let tpub = bip32::ExtendedPubKey::from_private(secp, &tprv);
    @@ -2630,7 +2632,7 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
    +            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
             );
             assert!(matches!(&policy.contribution, Satisfaction::None));
     
    @@ -2645,10 +2647,10 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
    +            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
             );
             assert!(
    -            matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None)
    +            matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None)
             );
         }
     
    @@ -2669,15 +2671,15 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize
    -            && keys[0].fingerprint.unwrap() == fingerprint0
    -            && keys[1].fingerprint.unwrap() == fingerprint1)
    +            matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize
    +            && keys[0].fingerprint.unwrap() == fingerprint0
    +            && keys[1].fingerprint.unwrap() == fingerprint1)
             );
             // TODO should this be "Satisfaction::None" since we have no prv keys?
             // TODO should items and conditions not be empty?
             assert!(
    -            matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize
    -            && m == &2usize
    +            matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize
    +            && m == &2usize
                 && items.is_empty()
                 && conditions.is_empty()
                 )
    @@ -2700,15 +2702,15 @@
                 .unwrap()
                 .unwrap();
             assert!(
    -            matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize
    -            && keys[0].fingerprint.unwrap() == fingerprint0
    -            && keys[1].fingerprint.unwrap() == fingerprint1)
    +            matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize
    +            && keys[0].fingerprint.unwrap() == fingerprint0
    +            && keys[1].fingerprint.unwrap() == fingerprint1)
             );
     
             assert!(
    -            matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize
    -             && m == &2usize
    -             && items.len() == 1
    +            matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize
    +             && m == &2usize
    +             && items.len() == 1
                  && conditions.contains_key(&0)
                 )
             );
    @@ -2733,14 +2735,14 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Multisig { keys, threshold } if threshold == &1
    -            && keys[0].fingerprint.unwrap() == fingerprint0
    -            && keys[1].fingerprint.unwrap() == fingerprint1)
    +            matches!(&policy.item, Multisig { keys, threshold } if threshold == &1
    +            && keys[0].fingerprint.unwrap() == fingerprint0
    +            && keys[1].fingerprint.unwrap() == fingerprint1)
             );
             assert!(
    -            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
    -             && m == &1
    -             && items.len() == 2
    +            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
    +             && m == &1
    +             && items.len() == 2
                  && conditions.contains_key(&vec![0])
                  && conditions.contains_key(&vec![1])
                 )
    @@ -2765,15 +2767,15 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Multisig { keys, threshold } if threshold == &2
    -            && keys[0].fingerprint.unwrap() == fingerprint0
    -            && keys[1].fingerprint.unwrap() == fingerprint1)
    +            matches!(&policy.item, Multisig { keys, threshold } if threshold == &2
    +            && keys[0].fingerprint.unwrap() == fingerprint0
    +            && keys[1].fingerprint.unwrap() == fingerprint1)
             );
     
             assert!(
    -            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
    -             && m == &2
    -             && items.len() == 2
    +            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
    +             && m == &2
    +             && items.len() == 2
                  && conditions.contains_key(&vec![0,1])
                 )
             );
    @@ -2798,7 +2800,7 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
    +            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
             );
             assert!(matches!(&policy.contribution, Satisfaction::None));
     
    @@ -2814,10 +2816,10 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
    +            matches!(&policy.item, Signature(pk_or_f) if pk_or_f.fingerprint.unwrap() == fingerprint)
             );
             assert!(
    -            matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None)
    +            matches!(&policy.contribution, Satisfaction::Complete {condition} if condition.csv == None && condition.timelock == None)
             );
         }
     
    @@ -2841,14 +2843,14 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Multisig { keys, threshold } if threshold == &1
    -            && keys[0].fingerprint.unwrap() == fingerprint0
    -            && keys[1].fingerprint.unwrap() == fingerprint1)
    +            matches!(&policy.item, Multisig { keys, threshold } if threshold == &1
    +            && keys[0].fingerprint.unwrap() == fingerprint0
    +            && keys[1].fingerprint.unwrap() == fingerprint1)
             );
             assert!(
    -            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
    -             && m == &1
    -             && items.len() == 2
    +            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &2
    +             && m == &1
    +             && items.len() == 2
                  && conditions.contains_key(&vec![0])
                  && conditions.contains_key(&vec![1])
                 )
    @@ -2884,16 +2886,16 @@
                 .unwrap();
     
             assert!(
    -            matches!(&policy.item, Thresh { items, threshold } if items.len() == 3 && threshold == &2)
    +            matches!(&policy.item, Thresh { items, threshold } if items.len() == 3 && threshold == &2)
             );
     
             assert!(
    -            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &3
    -             && m == &2
    -             && items.len() == 3
    +            matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions, .. } if n == &3
    +             && m == &2
    +             && items.len() == 3
                  && conditions.get(&vec![0,1]).unwrap().iter().next().unwrap().csv.is_none()
    -             && conditions.get(&vec![0,2]).unwrap().iter().next().unwrap().csv == Some(sequence)
    -             && conditions.get(&vec![1,2]).unwrap().iter().next().unwrap().csv == Some(sequence)
    +             && conditions.get(&vec![0,2]).unwrap().iter().next().unwrap().csv == Some(sequence)
    +             && conditions.get(&vec![1,2]).unwrap().iter().next().unwrap().csv == Some(sequence)
                 )
             );
         }
    @@ -3058,9 +3060,9 @@
             //println!("{}", serde_json::to_string(&policy_alice_psbt).unwrap());
     
             assert!(
    -            matches!(&policy_alice_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2
    -             && m == &2
    -             && items == &vec![0]
    +            matches!(&policy_alice_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2
    +             && m == &2
    +             && items == &vec![0]
                 )
             );
     
    @@ -3072,9 +3074,9 @@
             //println!("{}", serde_json::to_string(&policy_bob_psbt).unwrap());
     
             assert!(
    -            matches!(&policy_bob_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2
    -             && m == &2
    -             && items == &vec![1]
    +            matches!(&policy_bob_psbt.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &2
    +             && m == &2
    +             && items == &vec![1]
                 )
             );
     
    @@ -3084,9 +3086,9 @@
                 .unwrap()
                 .unwrap();
             assert!(
    -            matches!(&policy_alice_bob_psbt.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &2
    -             && m == &2
    -             && items == &vec![0, 1]
    +            matches!(&policy_alice_bob_psbt.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &2
    +             && m == &2
    +             && items == &vec![0, 1]
                 )
             );
         }
    @@ -3132,8 +3134,8 @@
                 .unwrap()
                 .unwrap();
             assert!(
    -            matches!(&policy.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3
    -             && m == &2
    +            matches!(&policy.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3
    +             && m == &2
                  && items.is_empty()
                 )
             );
    @@ -3150,9 +3152,9 @@
                 .unwrap()
                 .unwrap();
             assert!(
    -            matches!(&policy_expired.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3
    -             && m == &2
    -             && items == &vec![0]
    +            matches!(&policy_expired.satisfaction, Satisfaction::Partial { n, m, items, .. } if n == &3
    +             && m == &2
    +             && items == &vec![0]
                 )
             );
             //println!("{}", serde_json::to_string(&policy_expired).unwrap());
    @@ -3170,9 +3172,9 @@
                 .unwrap()
                 .unwrap();
             assert!(
    -            matches!(&policy_expired_signed.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &3
    -             && m == &2
    -             && items == &vec![0, 1]
    +            matches!(&policy_expired_signed.satisfaction, Satisfaction::PartialComplete { n, m, items, .. } if n == &3
    +             && m == &2
    +             && items == &vec![0, 1]
                 )
             );
             //println!("{}", serde_json::to_string(&policy_expired_signed).unwrap());
    @@ -3203,6 +3205,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html index 31d6c7edbe..0988411021 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/descriptor/template.rs.html @@ -1,4 +1,6 @@ -template.rs - source
      1
    +template.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -777,7 +779,7 @@
     /// ```
     pub trait DescriptorTemplate {
         /// Build the complete descriptor
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError>;
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError>;
     }
     
     /// Turns a [`DescriptorTemplate`] into a valid wallet descriptor by calling its
    @@ -787,7 +789,7 @@
             self,
             secp: &SecpCtx,
             network: Network,
    -    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
    +    ) -> Result<(ExtendedDescriptor, KeyMap), DescriptorError> {
             self.build()?.into_wallet_descriptor(secp, network)
         }
     }
    @@ -821,7 +823,7 @@
     pub struct P2Pkh<K: IntoDescriptorKey<Legacy>>(pub K);
     
     impl<K: IntoDescriptorKey<Legacy>> DescriptorTemplate for P2Pkh<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             descriptor!(pkh(self.0))
         }
     }
    @@ -856,7 +858,7 @@
     pub struct P2Wpkh_P2Sh<K: IntoDescriptorKey<Segwitv0>>(pub K);
     
     impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh_P2Sh<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             descriptor!(sh(wpkh(self.0)))
         }
     }
    @@ -890,7 +892,7 @@
     pub struct P2Wpkh<K: IntoDescriptorKey<Segwitv0>>(pub K);
     
     impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             descriptor!(wpkh(self.0))
         }
     }
    @@ -926,7 +928,7 @@
     pub struct Bip44<K: DerivableKey<Legacy>>(pub K, pub KeychainKind);
     
     impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             P2Pkh(legacy::make_bipxx_private(44, self.0, self.1)?).build()
         }
     }
    @@ -966,7 +968,7 @@
     pub struct Bip44Public<K: DerivableKey<Legacy>>(pub K, pub bip32::Fingerprint, pub KeychainKind);
     
     impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44Public<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             P2Pkh(legacy::make_bipxx_public(44, self.0, self.1, self.2)?).build()
         }
     }
    @@ -1002,7 +1004,7 @@
     pub struct Bip49<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
     
     impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             P2Wpkh_P2Sh(segwit_v0::make_bipxx_private(49, self.0, self.1)?).build()
         }
     }
    @@ -1042,7 +1044,7 @@
     pub struct Bip49Public<K: DerivableKey<Segwitv0>>(pub K, pub bip32::Fingerprint, pub KeychainKind);
     
     impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49Public<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             P2Wpkh_P2Sh(segwit_v0::make_bipxx_public(49, self.0, self.1, self.2)?).build()
         }
     }
    @@ -1078,7 +1080,7 @@
     pub struct Bip84<K: DerivableKey<Segwitv0>>(pub K, pub KeychainKind);
     
     impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             P2Wpkh(segwit_v0::make_bipxx_private(84, self.0, self.1)?).build()
         }
     }
    @@ -1118,13 +1120,13 @@
     pub struct Bip84Public<K: DerivableKey<Segwitv0>>(pub K, pub bip32::Fingerprint, pub KeychainKind);
     
     impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84Public<K> {
    -    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
    +    fn build(self) -> Result<DescriptorTemplateOut, DescriptorError> {
             P2Wpkh(segwit_v0::make_bipxx_public(84, self.0, self.1, self.2)?).build()
         }
     }
     
     macro_rules! expand_make_bipxx {
    -    ( $mod_name:ident, $ctx:ty ) => {
    +    ( $mod_name:ident, $ctx:ty ) => {
             mod $mod_name {
                 use super::*;
     
    @@ -1132,17 +1134,17 @@
                     bip: u32,
                     key: K,
                     keychain: KeychainKind,
    -            ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> {
    +            ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> {
                     let mut derivation_path = Vec::with_capacity(4);
                     derivation_path.push(bip32::ChildNumber::from_hardened_idx(bip)?);
                     derivation_path.push(bip32::ChildNumber::from_hardened_idx(0)?);
                     derivation_path.push(bip32::ChildNumber::from_hardened_idx(0)?);
     
                     match keychain {
    -                    KeychainKind::External => {
    +                    KeychainKind::External => {
                             derivation_path.push(bip32::ChildNumber::from_normal_idx(0)?)
                         }
    -                    KeychainKind::Internal => {
    +                    KeychainKind::Internal => {
                             derivation_path.push(bip32::ChildNumber::from_normal_idx(1)?)
                         }
                     };
    @@ -1156,10 +1158,10 @@
                     key: K,
                     parent_fingerprint: bip32::Fingerprint,
                     keychain: KeychainKind,
    -            ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> {
    +            ) -> Result<impl IntoDescriptorKey<$ctx>, DescriptorError> {
                     let derivation_path: bip32::DerivationPath = match keychain {
    -                    KeychainKind::External => vec![bip32::ChildNumber::from_normal_idx(0)?].into(),
    -                    KeychainKind::Internal => vec![bip32::ChildNumber::from_normal_idx(1)?].into(),
    +                    KeychainKind::External => vec![bip32::ChildNumber::from_normal_idx(0)?].into(),
    +                    KeychainKind::Internal => vec![bip32::ChildNumber::from_normal_idx(1)?].into(),
                     };
     
                     let source_path = bip32::DerivationPath::from(vec![
    @@ -1451,6 +1453,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html index d6c5f36fbc..6afb717d0c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/error.rs.html @@ -1,4 +1,6 @@ -error.rs - source
      1
    +error.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -343,7 +345,7 @@
         Hex(bitcoin::hashes::hex::Error),
         /// Partially signed bitcoin transaction error
         Psbt(bitcoin::util::psbt::Error),
    -    /// Partially signed bitcoin transaction parseerror
    +    /// Partially signed bitcoin transaction parse error
         PsbtParse(bitcoin::util::psbt::PsbtParseError),
     
         //KeyMismatch(bitcoin::secp256k1::PublicKey, bitcoin::secp256k1::PublicKey),
    @@ -367,14 +369,14 @@
         Sled(sled::Error),
         #[cfg(feature = "rpc")]
         /// Rpc client error
    -    Rpc(core_rpc::Error),
    +    Rpc(bitcoincore_rpc::Error),
         #[cfg(feature = "sqlite")]
         /// Rusqlite client error
         Rusqlite(rusqlite::Error),
     }
     
     impl fmt::Display for Error {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -382,12 +384,12 @@
     impl std::error::Error for Error {}
     
     macro_rules! impl_error {
    -    ( $from:ty, $to:ident ) => {
    +    ( $from:ty, $to:ident ) => {
             impl_error!($from, $to, Error);
         };
    -    ( $from:ty, $to:ident, $impl_for:ty ) => {
    +    ( $from:ty, $to:ident, $impl_for:ty ) => {
             impl std::convert::From<$from> for $impl_for {
    -            fn from(err: $from) -> Self {
    +            fn from(err: $from) -> Self {
                     <$impl_for>::$to(err)
                 }
             }
    @@ -400,12 +402,12 @@
     impl_error!(wallet::signer::SignerError, Signer);
     
     impl From<crate::keys::KeyError> for Error {
    -    fn from(key_error: crate::keys::KeyError) -> Error {
    +    fn from(key_error: crate::keys::KeyError) -> Error {
             match key_error {
    -            crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner),
    -            crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner),
    -            crate::keys::KeyError::InvalidChecksum => Error::ChecksumMismatch,
    -            e => Error::Key(e),
    +            crate::keys::KeyError::Miniscript(inner) => Error::Miniscript(inner),
    +            crate::keys::KeyError::Bip32(inner) => Error::Bip32(inner),
    +            crate::keys::KeyError::InvalidChecksum => Error::ChecksumMismatch,
    +            e => Error::Key(e),
             }
         }
     }
    @@ -424,37 +426,36 @@
     #[cfg(feature = "key-value-db")]
     impl_error!(sled::Error, Sled);
     #[cfg(feature = "rpc")]
    -impl_error!(core_rpc::Error, Rpc);
    +impl_error!(bitcoincore_rpc::Error, Rpc);
     #[cfg(feature = "sqlite")]
     impl_error!(rusqlite::Error, Rusqlite);
     
     #[cfg(feature = "compact_filters")]
     impl From<crate::blockchain::compact_filters::CompactFiltersError> for Error {
    -    fn from(other: crate::blockchain::compact_filters::CompactFiltersError) -> Self {
    +    fn from(other: crate::blockchain::compact_filters::CompactFiltersError) -> Self {
             match other {
    -            crate::blockchain::compact_filters::CompactFiltersError::Global(e) => *e,
    -            err => Error::CompactFilters(err),
    +            crate::blockchain::compact_filters::CompactFiltersError::Global(e) => *e,
    +            err => Error::CompactFilters(err),
             }
         }
     }
     
     #[cfg(feature = "verify")]
     impl From<crate::wallet::verify::VerifyError> for Error {
    -    fn from(other: crate::wallet::verify::VerifyError) -> Self {
    +    fn from(other: crate::wallet::verify::VerifyError) -> Self {
             match other {
    -            crate::wallet::verify::VerifyError::Global(inner) => *inner,
    -            err => Error::Verification(err),
    +            crate::wallet::verify::VerifyError::Global(inner) => *inner,
    +            err => Error::Verification(err),
             }
         }
     }
     
     #[cfg(feature = "esplora")]
     impl From<crate::blockchain::esplora::EsploraError> for Error {
    -    fn from(other: crate::blockchain::esplora::EsploraError) -> Self {
    +    fn from(other: crate::blockchain::esplora::EsploraError) -> Self {
             Error::Esplora(Box::new(other))
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html index 3cf8935dbd..b0257554bc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/bip39.rs.html @@ -1,4 +1,6 @@ -bip39.rs - source
      1
    +bip39.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -188,6 +190,24 @@
     188
     189
     190
    +191
    +192
    +193
    +194
    +195
    +196
    +197
    +198
    +199
    +200
    +201
    +202
    +203
    +204
    +205
    +206
    +207
    +208
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -209,7 +229,23 @@
     
     use miniscript::ScriptContext;
     
    -pub use bip39::{Language, Mnemonic, MnemonicType, Seed};
    +pub use bip39::{Language, Mnemonic};
    +
    +type Seed = [u8; 64];
    +
    +/// Type describing entropy length (aka word count) in the mnemonic
    +pub enum WordCount {
    +    /// 12 words mnemonic (128 bits entropy)
    +    Words12 = 128,
    +    /// 15 words mnemonic (160 bits entropy)
    +    Words15 = 160,
    +    /// 18 words mnemonic (192 bits entropy)
    +    Words18 = 192,
    +    /// 21 words mnemonic (224 bits entropy)
    +    Words21 = 224,
    +    /// 24 words mnemonic (256 bits entropy)
    +    Words24 = 256,
    +}
     
     use super::{
         any_network, DerivableKey, DescriptorKey, ExtendedKey, GeneratableKey, GeneratedKey, KeyError,
    @@ -217,7 +253,7 @@
     
     fn set_valid_on_any_network<Ctx: ScriptContext>(
         descriptor_key: DescriptorKey<Ctx>,
    -) -> DescriptorKey<Ctx> {
    +) -> DescriptorKey<Ctx> {
         // We have to pick one network to build the xprv, but since the bip39 standard doesn't
         // encode the network, the xprv we create is actually valid everywhere. So we override the
         // valid networks with `any_network()`.
    @@ -229,15 +265,15 @@
     
     #[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))]
     impl<Ctx: ScriptContext> DerivableKey<Ctx> for Seed {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    -        Ok(bip32::ExtendedPrivKey::new_master(Network::Bitcoin, &self.as_bytes())?.into())
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +        Ok(bip32::ExtendedPrivKey::new_master(Network::Bitcoin, &self[..])?.into())
         }
     
         fn into_descriptor_key(
             self,
             source: Option<bip32::KeySource>,
             derivation_path: bip32::DerivationPath,
    -    ) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    ) -> Result<DescriptorKey<Ctx>, KeyError> {
             let descriptor_key = self
                 .into_extended_key()?
                 .into_descriptor_key(source, derivation_path)?;
    @@ -248,9 +284,9 @@
     
     #[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))]
     impl<Ctx: ScriptContext> DerivableKey<Ctx> for MnemonicWithPassphrase {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
             let (mnemonic, passphrase) = self;
    -        let seed = Seed::new(&mnemonic, passphrase.as_deref().unwrap_or(""));
    +        let seed: Seed = mnemonic.to_seed(passphrase.as_deref().unwrap_or(""));
     
             seed.into_extended_key()
         }
    @@ -259,7 +295,7 @@
             self,
             source: Option<bip32::KeySource>,
             derivation_path: bip32::DerivationPath,
    -    ) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    ) -> Result<DescriptorKey<Ctx>, KeyError> {
             let descriptor_key = self
                 .into_extended_key()?
                 .into_descriptor_key(source, derivation_path)?;
    @@ -270,7 +306,7 @@
     
     #[cfg_attr(docsrs, doc(cfg(feature = "keys-bip39")))]
     impl<Ctx: ScriptContext> DerivableKey<Ctx> for Mnemonic {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
             (self, None).into_extended_key()
         }
     
    @@ -278,7 +314,7 @@
             self,
             source: Option<bip32::KeySource>,
             derivation_path: bip32::DerivationPath,
    -    ) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    ) -> Result<DescriptorKey<Ctx>, KeyError> {
             let descriptor_key = self
                 .into_extended_key()?
                 .into_descriptor_key(source, derivation_path)?;
    @@ -291,15 +327,15 @@
     impl<Ctx: ScriptContext> GeneratableKey<Ctx> for Mnemonic {
         type Entropy = [u8; 32];
     
    -    type Options = (MnemonicType, Language);
    -    type Error = Option<bip39::ErrorKind>;
    +    type Options = (WordCount, Language);
    +    type Error = Option<bip39::Error>;
     
         fn generate_with_entropy(
    -        (mnemonic_type, language): Self::Options,
    +        (word_count, language): Self::Options,
             entropy: Self::Entropy,
    -    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    -        let entropy = &entropy.as_ref()[..(mnemonic_type.entropy_bits() / 8)];
    -        let mnemonic = Mnemonic::from_entropy(entropy, language).map_err(|e| e.downcast().ok())?;
    +    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    +        let entropy = &entropy.as_ref()[..(word_count as usize / 8)];
    +        let mnemonic = Mnemonic::from_entropy_in(language, entropy)?;
     
             Ok(GeneratedKey::new(mnemonic, any_network()))
         }
    @@ -311,15 +347,17 @@
     
         use bitcoin::util::bip32;
     
    -    use bip39::{Language, Mnemonic, MnemonicType};
    +    use bip39::{Language, Mnemonic};
     
         use crate::keys::{any_network, GeneratableKey, GeneratedKey};
     
    +    use super::WordCount;
    +
         #[test]
         fn test_keys_bip39_mnemonic() {
             let mnemonic =
                 "aim bunker wash balance finish force paper analyst cabin spoon stable organ";
    -        let mnemonic = Mnemonic::from_phrase(mnemonic, Language::English).unwrap();
    +        let mnemonic = Mnemonic::parse_in(Language::English, mnemonic).unwrap();
             let path = bip32::DerivationPath::from_str("m/44'/0'/0'/0").unwrap();
     
             let key = (mnemonic, path);
    @@ -333,7 +371,7 @@
         fn test_keys_bip39_mnemonic_passphrase() {
             let mnemonic =
                 "aim bunker wash balance finish force paper analyst cabin spoon stable organ";
    -        let mnemonic = Mnemonic::from_phrase(mnemonic, Language::English).unwrap();
    +        let mnemonic = Mnemonic::parse_in(Language::English, mnemonic).unwrap();
             let path = bip32::DerivationPath::from_str("m/44'/0'/0'/0").unwrap();
     
             let key = ((mnemonic, Some("passphrase".into())), path);
    @@ -347,7 +385,7 @@
         fn test_keys_generate_bip39() {
             let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
                 Mnemonic::generate_with_entropy(
    -                (MnemonicType::Words12, Language::English),
    +                (WordCount::Words12, Language::English),
                     crate::keys::test::TEST_ENTROPY,
                 )
                 .unwrap();
    @@ -359,7 +397,7 @@
     
             let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
                 Mnemonic::generate_with_entropy(
    -                (MnemonicType::Words24, Language::English),
    +                (WordCount::Words24, Language::English),
                     crate::keys::test::TEST_ENTROPY,
                 )
                 .unwrap();
    @@ -370,15 +408,14 @@
         #[test]
         fn test_keys_generate_bip39_random() {
             let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
    -            Mnemonic::generate((MnemonicType::Words12, Language::English)).unwrap();
    +            Mnemonic::generate((WordCount::Words12, Language::English)).unwrap();
             assert_eq!(generated_mnemonic.valid_networks, any_network());
     
             let generated_mnemonic: GeneratedKey<_, miniscript::Segwitv0> =
    -            Mnemonic::generate((MnemonicType::Words24, Language::English)).unwrap();
    +            Mnemonic::generate((WordCount::Words24, Language::English)).unwrap();
             assert_eq!(generated_mnemonic.valid_networks, any_network());
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html index 7dc8e48126..7056fdb442 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/keys/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -932,6 +934,46 @@
     932
     933
     934
    +935
    +936
    +937
    +938
    +939
    +940
    +941
    +942
    +943
    +944
    +945
    +946
    +947
    +948
    +949
    +950
    +951
    +952
    +953
    +954
    +955
    +956
    +957
    +958
    +959
    +960
    +961
    +962
    +963
    +964
    +965
    +966
    +967
    +968
    +969
    +970
    +971
    +972
    +973
    +974
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -975,7 +1017,7 @@
     pub type ValidNetworks = HashSet<Network>;
     
     /// Create a set containing mainnet, testnet and regtest
    -pub fn any_network() -> ValidNetworks {
    +pub fn any_network() -> ValidNetworks {
         vec![
             Network::Bitcoin,
             Network::Testnet,
    @@ -986,17 +1028,17 @@
         .collect()
     }
     /// Create a set only containing mainnet
    -pub fn mainnet_network() -> ValidNetworks {
    +pub fn mainnet_network() -> ValidNetworks {
         vec![Network::Bitcoin].into_iter().collect()
     }
     /// Create a set containing testnet and regtest
    -pub fn test_networks() -> ValidNetworks {
    +pub fn test_networks() -> ValidNetworks {
         vec![Network::Testnet, Network::Regtest, Network::Signet]
             .into_iter()
             .collect()
     }
     /// Compute the intersection of two sets
    -pub fn merge_networks(a: &ValidNetworks, b: &ValidNetworks) -> ValidNetworks {
    +pub fn merge_networks(a: &ValidNetworks, b: &ValidNetworks) -> ValidNetworks {
         a.intersection(b).cloned().collect()
     }
     
    @@ -1011,20 +1053,20 @@
     
     impl<Ctx: ScriptContext> DescriptorKey<Ctx> {
         /// Create an instance given a public key and a set of valid networks
    -    pub fn from_public(public: DescriptorPublicKey, networks: ValidNetworks) -> Self {
    +    pub fn from_public(public: DescriptorPublicKey, networks: ValidNetworks) -> Self {
             DescriptorKey::Public(public, networks, PhantomData)
         }
     
         /// Create an instance given a secret key and a set of valid networks
    -    pub fn from_secret(secret: DescriptorSecretKey, networks: ValidNetworks) -> Self {
    +    pub fn from_secret(secret: DescriptorSecretKey, networks: ValidNetworks) -> Self {
             DescriptorKey::Secret(secret, networks, PhantomData)
         }
     
         /// Override the computed set of valid networks
    -    pub fn override_valid_networks(self, networks: ValidNetworks) -> Self {
    +    pub fn override_valid_networks(self, networks: ValidNetworks) -> Self {
             match self {
    -            DescriptorKey::Public(key, _, _) => DescriptorKey::Public(key, networks, PhantomData),
    -            DescriptorKey::Secret(key, _, _) => DescriptorKey::Secret(key, networks, PhantomData),
    +            DescriptorKey::Public(key, _, _) => DescriptorKey::Public(key, networks, PhantomData),
    +            DescriptorKey::Secret(key, _, _) => DescriptorKey::Secret(key, networks, PhantomData),
             }
         }
     
    @@ -1035,12 +1077,12 @@
         pub fn extract(
             self,
             secp: &SecpCtx,
    -    ) -> Result<(DescriptorPublicKey, KeyMap, ValidNetworks), KeyError> {
    +    ) -> Result<(DescriptorPublicKey, KeyMap, ValidNetworks), KeyError> {
             match self {
    -            DescriptorKey::Public(public, valid_networks, _) => {
    +            DescriptorKey::Public(public, valid_networks, _) => {
                     Ok((public, KeyMap::default(), valid_networks))
                 }
    -            DescriptorKey::Secret(secret, valid_networks, _) => {
    +            DescriptorKey::Secret(secret, valid_networks, _) => {
                     let mut key_map = KeyMap::with_capacity(1);
     
                     let public = secret
    @@ -1065,38 +1107,38 @@
     
     impl ScriptContextEnum {
         /// Returns whether the script context is [`ScriptContextEnum::Legacy`]
    -    pub fn is_legacy(&self) -> bool {
    -        self == &ScriptContextEnum::Legacy
    +    pub fn is_legacy(&self) -> bool {
    +        self == &ScriptContextEnum::Legacy
         }
     
         /// Returns whether the script context is [`ScriptContextEnum::Segwitv0`]
    -    pub fn is_segwit_v0(&self) -> bool {
    -        self == &ScriptContextEnum::Segwitv0
    +    pub fn is_segwit_v0(&self) -> bool {
    +        self == &ScriptContextEnum::Segwitv0
         }
     }
     
     /// Trait that adds extra useful methods to [`ScriptContext`]s
     pub trait ExtScriptContext: ScriptContext {
         /// Returns the [`ScriptContext`] as a [`ScriptContextEnum`]
    -    fn as_enum() -> ScriptContextEnum;
    +    fn as_enum() -> ScriptContextEnum;
     
         /// Returns whether the script context is [`Legacy`](miniscript::Legacy)
    -    fn is_legacy() -> bool {
    +    fn is_legacy() -> bool {
             Self::as_enum().is_legacy()
         }
     
         /// Returns whether the script context is [`Segwitv0`](miniscript::Segwitv0)
    -    fn is_segwit_v0() -> bool {
    +    fn is_segwit_v0() -> bool {
             Self::as_enum().is_segwit_v0()
         }
     }
     
     impl<Ctx: ScriptContext + 'static> ExtScriptContext for Ctx {
    -    fn as_enum() -> ScriptContextEnum {
    +    fn as_enum() -> ScriptContextEnum {
             match TypeId::of::<Ctx>() {
    -            t if t == TypeId::of::<miniscript::Legacy>() => ScriptContextEnum::Legacy,
    -            t if t == TypeId::of::<miniscript::Segwitv0>() => ScriptContextEnum::Segwitv0,
    -            _ => unimplemented!("Unknown ScriptContext type"),
    +            t if t == TypeId::of::<miniscript::Legacy>() => ScriptContextEnum::Legacy,
    +            t if t == TypeId::of::<miniscript::Segwitv0>() => ScriptContextEnum::Segwitv0,
    +            _ => unimplemented!("Unknown ScriptContext type"),
             }
         }
     }
    @@ -1222,7 +1264,7 @@
     /// ```
     pub trait IntoDescriptorKey<Ctx: ScriptContext>: Sized {
         /// Turn the key into a [`DescriptorKey`] within the requested [`ScriptContext`]
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>;
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>;
     }
     
     /// Enum for extended keys that can be either `xprv` or `xpub`
    @@ -1240,22 +1282,23 @@
     
     impl<Ctx: ScriptContext> ExtendedKey<Ctx> {
         /// Return whether or not the key contains the private data
    -    pub fn has_secret(&self) -> bool {
    +    pub fn has_secret(&self) -> bool {
             match self {
    -            ExtendedKey::Private(_) => true,
    -            ExtendedKey::Public(_) => false,
    +            ExtendedKey::Private(_) => true,
    +            ExtendedKey::Public(_) => false,
             }
         }
     
         /// Transform the [`ExtendedKey`] into an [`ExtendedPrivKey`](bip32::ExtendedPrivKey) for the
         /// given [`Network`], if the key contains the private data
    -    pub fn into_xprv(self, network: Network) -> Option<bip32::ExtendedPrivKey> {
    +    pub fn into_xprv(self, network: Network) -> Option<bip32::ExtendedPrivKey> {
             match self {
    -            ExtendedKey::Private((mut xprv, _)) => {
    +            ExtendedKey::Private((mut xprv, _)) => {
                     xprv.network = network;
    +                xprv.private_key.network = network;
                     Some(xprv)
                 }
    -            ExtendedKey::Public(_) => None,
    +            ExtendedKey::Public(_) => None,
             }
         }
     
    @@ -1265,10 +1308,10 @@
             self,
             network: bitcoin::Network,
             secp: &Secp256k1<C>,
    -    ) -> bip32::ExtendedPubKey {
    +    ) -> bip32::ExtendedPubKey {
             let mut xpub = match self {
    -            ExtendedKey::Private((xprv, _)) => bip32::ExtendedPubKey::from_private(secp, &xprv),
    -            ExtendedKey::Public((xpub, _)) => xpub,
    +            ExtendedKey::Private((xprv, _)) => bip32::ExtendedPubKey::from_private(secp, &xprv),
    +            ExtendedKey::Public((xpub, _)) => xpub,
             };
     
             xpub.network = network;
    @@ -1277,20 +1320,20 @@
     }
     
     impl<Ctx: ScriptContext> From<bip32::ExtendedPubKey> for ExtendedKey<Ctx> {
    -    fn from(xpub: bip32::ExtendedPubKey) -> Self {
    +    fn from(xpub: bip32::ExtendedPubKey) -> Self {
             ExtendedKey::Public((xpub, PhantomData))
         }
     }
     
     impl<Ctx: ScriptContext> From<bip32::ExtendedPrivKey> for ExtendedKey<Ctx> {
    -    fn from(xprv: bip32::ExtendedPrivKey) -> Self {
    +    fn from(xprv: bip32::ExtendedPrivKey) -> Self {
             ExtendedKey::Private((xprv, PhantomData))
         }
     }
     
     /// Trait for keys that can be derived.
     ///
    -/// When extra metadata are provided, a [`DerivableKey`] can be transofrmed into a
    +/// When extra metadata are provided, a [`DerivableKey`] can be transformed into a
     /// [`DescriptorKey`]: the trait [`IntoDescriptorKey`] is automatically implemented
     /// for `(DerivableKey, DerivationPath)` and
     /// `(DerivableKey, KeySource, DerivationPath)` tuples.
    @@ -1394,9 +1437,9 @@ use bdk::keys::bip39::{Mnemonic, Language};
     
     # fn main() -> Result<(), Box<dyn std::error::Error>> {
     let xkey: ExtendedKey =
    -    Mnemonic::from_phrase(
    +    Mnemonic::parse_in(
    +        Language::English,
             "jelly crash boy whisper mouse ecology tuna soccer memory million news short",
    -        Language::English
         )?
         .into_extended_key()?;
     let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
    @@ -1404,7 +1447,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     ```
     "##
         )]
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>;
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>;
     
         /// Consume `self` and turn it into a [`DescriptorKey`] by adding the extra metadata, such as
         /// key origin and derivation path
    @@ -1412,16 +1455,16 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
             self,
             origin: Option<bip32::KeySource>,
             derivation_path: bip32::DerivationPath,
    -    ) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    ) -> Result<DescriptorKey<Ctx>, KeyError> {
             match self.into_extended_key()? {
    -            ExtendedKey::Private((xprv, _)) => DescriptorSecretKey::XPrv(DescriptorXKey {
    +            ExtendedKey::Private((xprv, _)) => DescriptorSecretKey::XPrv(DescriptorXKey {
                     origin,
                     xkey: xprv,
                     derivation_path,
                     wildcard: Wildcard::Unhardened,
                 })
                 .into_descriptor_key(),
    -            ExtendedKey::Public((xpub, _)) => DescriptorPublicKey::XPub(DescriptorXKey {
    +            ExtendedKey::Public((xpub, _)) => DescriptorPublicKey::XPub(DescriptorXKey {
                     origin,
                     xkey: xpub,
                     derivation_path,
    @@ -1434,19 +1477,19 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     
     /// Identity conversion
     impl<Ctx: ScriptContext> DerivableKey<Ctx> for ExtendedKey<Ctx> {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
             Ok(self)
         }
     }
     
     impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPubKey {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
             Ok(self.into())
         }
     }
     
     impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPrivKey {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
             Ok(self.into())
         }
     }
    @@ -1459,7 +1502,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     }
     
     impl<K, Ctx: ScriptContext> GeneratedKey<K, Ctx> {
    -    fn new(key: K, valid_networks: ValidNetworks) -> Self {
    +    fn new(key: K, valid_networks: ValidNetworks) -> Self {
             GeneratedKey {
                 key,
                 valid_networks,
    @@ -1468,7 +1511,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         }
     
         /// Consumes `self` and returns the key
    -    pub fn into_key(self) -> K {
    +    pub fn into_key(self) -> K {
             self.key
         }
     }
    @@ -1476,7 +1519,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     impl<K, Ctx: ScriptContext> Deref for GeneratedKey<K, Ctx> {
         type Target = K;
     
    -    fn deref(&self) -> &Self::Target {
    +    fn deref(&self) -> &Self::Target {
             &self.key
         }
     }
    @@ -1488,7 +1531,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         Ctx: ScriptContext,
         K: DerivableKey<Ctx>,
     {
    -    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
    +    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError> {
             self.key.into_extended_key()
         }
     
    @@ -1496,7 +1539,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
             self,
             origin: Option<bip32::KeySource>,
             derivation_path: bip32::DerivationPath,
    -    ) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    ) -> Result<DescriptorKey<Ctx>, KeyError> {
             let descriptor_key = self.key.into_descriptor_key(origin, derivation_path)?;
             Ok(descriptor_key.override_valid_networks(self.valid_networks))
         }
    @@ -1509,7 +1552,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         Ctx: ScriptContext,
         K: IntoDescriptorKey<Ctx>,
     {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             let desc_key = self.key.into_descriptor_key()?;
             Ok(desc_key.override_valid_networks(self.valid_networks))
         }
    @@ -1536,10 +1579,10 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         fn generate_with_entropy(
             options: Self::Options,
             entropy: Self::Entropy,
    -    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error>;
    +    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error>;
     
         /// Generate a key given the options with a random entropy
    -    fn generate(options: Self::Options) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    +    fn generate(options: Self::Options) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
             use rand::{thread_rng, Rng};
     
             let mut entropy = Self::Entropy::default();
    @@ -1559,12 +1602,12 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         /// Generate a key with the default options and a given entropy
         fn generate_with_entropy_default(
             entropy: Self::Entropy,
    -    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    +    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
             Self::generate_with_entropy(Default::default(), entropy)
         }
     
         /// Generate a key with the default options and a random entropy
    -    fn generate_default() -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    +    fn generate_default() -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
             Self::generate(Default::default())
         }
     }
    @@ -1588,7 +1631,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         fn generate_with_entropy(
             _: Self::Options,
             entropy: Self::Entropy,
    -    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    +    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
             // pick a arbitrary network here, but say that we support all of them
             let xprv = bip32::ExtendedPrivKey::new_master(Network::Bitcoin, entropy.as_ref())?;
             Ok(GeneratedKey::new(xprv, any_network()))
    @@ -1605,7 +1648,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     }
     
     impl Default for PrivateKeyGenerateOptions {
    -    fn default() -> Self {
    +    fn default() -> Self {
             PrivateKeyGenerateOptions { compressed: true }
         }
     }
    @@ -1619,7 +1662,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         fn generate_with_entropy(
             options: Self::Options,
             entropy: Self::Entropy,
    -    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
    +    ) -> Result<GeneratedKey<Self, Ctx>, Self::Error> {
             // pick a arbitrary network here, but say that we support all of them
             let key = secp256k1::SecretKey::from_slice(&entropy)?;
             let private_key = PrivateKey {
    @@ -1635,7 +1678,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx>
         for (T, bip32::DerivationPath)
     {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             self.0.into_descriptor_key(None, self.1)
         }
     }
    @@ -1643,7 +1686,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx>
         for (T, bip32::KeySource, bip32::DerivationPath)
     {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             self.0.into_descriptor_key(Some(self.1), self.2)
         }
     }
    @@ -1651,7 +1694,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     fn expand_multi_keys<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>(
         pks: Vec<Pk>,
         secp: &SecpCtx,
    -) -> Result<(Vec<DescriptorPublicKey>, KeyMap, ValidNetworks), KeyError> {
    +) -> Result<(Vec<DescriptorPublicKey>, KeyMap, ValidNetworks), KeyError> {
         let (pks, key_maps_networks): (Vec<_>, Vec<_>) = pks
             .into_iter()
             .map(|key| key.into_descriptor_key()?.extract(secp))
    @@ -1678,11 +1721,11 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     pub fn make_pk<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>(
         descriptor_key: Pk,
         secp: &SecpCtx,
    -) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
    +) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
         let (key, key_map, valid_networks) = descriptor_key.into_descriptor_key()?.extract(secp)?;
         let minisc = Miniscript::from_ast(Terminal::PkK(key))?;
     
    -    minisc.check_minsicript()?;
    +    minisc.check_miniscript()?;
     
         Ok((minisc, key_map, valid_networks))
     }
    @@ -1692,11 +1735,11 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     pub fn make_pkh<Pk: IntoDescriptorKey<Ctx>, Ctx: ScriptContext>(
         descriptor_key: Pk,
         secp: &SecpCtx,
    -) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
    +) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
         let (key, key_map, valid_networks) = descriptor_key.into_descriptor_key()?.extract(secp)?;
         let minisc = Miniscript::from_ast(Terminal::PkH(key))?;
     
    -    minisc.check_minsicript()?;
    +    minisc.check_miniscript()?;
     
         Ok((minisc, key_map, valid_networks))
     }
    @@ -1707,11 +1750,11 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         thresh: usize,
         pks: Vec<Pk>,
         secp: &SecpCtx,
    -) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
    +) -> Result<(Miniscript<DescriptorPublicKey, Ctx>, KeyMap, ValidNetworks), DescriptorError> {
         let (pks, key_map, valid_networks) = expand_multi_keys(pks, secp)?;
         let minisc = Miniscript::from_ast(Terminal::Multi(thresh, pks))?;
     
    -    minisc.check_minsicript()?;
    +    minisc.check_miniscript()?;
     
         Ok((minisc, key_map, valid_networks))
     }
    @@ -1723,14 +1766,14 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
         pks: Vec<Pk>,
         build_desc: F,
         secp: &SecpCtx,
    -) -> Result<(Descriptor<DescriptorPublicKey>, KeyMap, ValidNetworks), DescriptorError>
    +) -> Result<(Descriptor<DescriptorPublicKey>, KeyMap, ValidNetworks), DescriptorError>
     where
         Pk: IntoDescriptorKey<Ctx>,
         Ctx: ScriptContext,
         F: Fn(
             usize,
             Vec<DescriptorPublicKey>,
    -    ) -> Result<(Descriptor<DescriptorPublicKey>, PhantomData<Ctx>), DescriptorError>,
    +    ) -> Result<(Descriptor<DescriptorPublicKey>, PhantomData<Ctx>), DescriptorError>,
     {
         let (pks, key_map, valid_networks) = expand_multi_keys(pks, secp)?;
         let descriptor = build_desc(thresh, pks)?.0;
    @@ -1740,21 +1783,21 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     
     /// The "identity" conversion is used internally by some `bdk::fragment`s
     impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorKey<Ctx> {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             Ok(self)
         }
     }
     
     impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorPublicKey {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             let networks = match self {
    -            DescriptorPublicKey::SinglePub(_) => any_network(),
    +            DescriptorPublicKey::SinglePub(_) => any_network(),
                 DescriptorPublicKey::XPub(DescriptorXKey { xkey, .. })
    -                if xkey.network == Network::Bitcoin =>
    +                if xkey.network == Network::Bitcoin =>
                 {
                     mainnet_network()
                 }
    -            _ => test_networks(),
    +            _ => test_networks(),
             };
     
             Ok(DescriptorKey::from_public(self, networks))
    @@ -1762,7 +1805,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     }
     
     impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PublicKey {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             DescriptorPublicKey::SinglePub(DescriptorSinglePub {
                 key: self,
                 origin: None,
    @@ -1772,17 +1815,17 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     }
     
     impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorSecretKey {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             let networks = match &self {
    -            DescriptorSecretKey::SinglePriv(sk) if sk.key.network == Network::Bitcoin => {
    +            DescriptorSecretKey::SinglePriv(sk) if sk.key.network == Network::Bitcoin => {
                     mainnet_network()
                 }
                 DescriptorSecretKey::XPrv(DescriptorXKey { xkey, .. })
    -                if xkey.network == Network::Bitcoin =>
    +                if xkey.network == Network::Bitcoin =>
                 {
                     mainnet_network()
                 }
    -            _ => test_networks(),
    +            _ => test_networks(),
             };
     
             Ok(DescriptorKey::from_secret(self, networks))
    @@ -1790,7 +1833,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     }
     
     impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for &'_ str {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             DescriptorSecretKey::from_str(self)
                 .map_err(|e| KeyError::Message(e.to_string()))?
                 .into_descriptor_key()
    @@ -1798,7 +1841,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     }
     
     impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PrivateKey {
    -    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
    +    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
             DescriptorSecretKey::SinglePriv(DescriptorSinglePriv {
                 key: self,
                 origin: None,
    @@ -1830,7 +1873,7 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
     impl_error!(bitcoin::util::bip32::Error, Bip32, KeyError);
     
     impl std::fmt::Display for KeyError {
    -    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    +    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -1865,8 +1908,46 @@ let xprv = xkey.into_xprv(Network::Bitcoin).unwrap();
                 "L2wTu6hQrnDMiFNWA5na6jB12ErGQqtXwqpSL7aWquJaZG8Ai3ch"
             );
         }
    +
    +    #[test]
    +    fn test_keys_wif_network() {
    +        // test mainnet wif
    +        let generated_xprv: GeneratedKey<_, miniscript::Segwitv0> =
    +            bip32::ExtendedPrivKey::generate_with_entropy_default(TEST_ENTROPY).unwrap();
    +        let xkey = generated_xprv.into_extended_key().unwrap();
    +
    +        let network = Network::Bitcoin;
    +        let xprv = xkey.into_xprv(network).unwrap();
    +        let wif = PrivateKey::from_wif(&xprv.private_key.to_wif()).unwrap();
    +        assert_eq!(wif.network, network);
    +
    +        // test testnet wif
    +        let generated_xprv: GeneratedKey<_, miniscript::Segwitv0> =
    +            bip32::ExtendedPrivKey::generate_with_entropy_default(TEST_ENTROPY).unwrap();
    +        let xkey = generated_xprv.into_extended_key().unwrap();
    +
    +        let network = Network::Testnet;
    +        let xprv = xkey.into_xprv(network).unwrap();
    +        let wif = PrivateKey::from_wif(&xprv.private_key.to_wif()).unwrap();
    +        assert_eq!(wif.network, network);
    +    }
    +
    +    #[cfg(feature = "keys-bip39")]
    +    #[test]
    +    fn test_keys_wif_network_bip39() {
    +        let xkey: ExtendedKey = bip39::Mnemonic::parse_in(
    +            bip39::Language::English,
    +            "jelly crash boy whisper mouse ecology tuna soccer memory million news short",
    +        )
    +        .unwrap()
    +        .into_extended_key()
    +        .unwrap();
    +        let xprv = xkey.into_xprv(Network::Testnet).unwrap();
    +        let wif = PrivateKey::from_wif(&xprv.private_key.to_wif()).unwrap();
    +
    +        assert_eq!(wif.network, Network::Testnet);
    +    }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html index 5b66f7a5df..d79695c209 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/lib.rs.html @@ -1,4 +1,6 @@ -lib.rs - source
      1
    +lib.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -281,6 +283,10 @@
     281
     282
     283
    +284
    +285
    +286
    +287
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -297,6 +303,10 @@
     // only enables the `doc_cfg` feature when
     // the `docsrs` configuration attribute is defined
     #![cfg_attr(docsrs, feature(doc_cfg))]
    +#![cfg_attr(
    +    docsrs,
    +    doc(html_logo_url = "https://github.com/bitcoindevkit/bdk/raw/master/static/bdk.png")
    +)]
     
     //! A modern, lightweight, descriptor-based wallet library written in Rust.
     //!
    @@ -323,7 +333,7 @@
     //! interact with the bitcoin P2P network.
     //!
     //! ```toml
    -//! bdk = "0.11.0"
    +//! bdk = "0.14.0"
     //! ```
     #![cfg_attr(
         feature = "electrum",
    @@ -519,7 +529,7 @@ fn main() -> Result<(), bdk::Error> {
     extern crate lazy_static;
     
     #[cfg(feature = "rpc")]
    -pub extern crate core_rpc;
    +pub extern crate bitcoincore_rpc;
     
     #[cfg(feature = "electrum")]
     pub extern crate electrum_client;
    @@ -554,17 +564,16 @@ fn main() -> Result<(), bdk::Error> {
     pub use wallet::Wallet;
     
     /// Get the version of BDK at runtime
    -pub fn version() -> &'static str {
    +pub fn version() -> &'static str {
         env!("CARGO_PKG_VERSION", "unknown")
     }
     
    -// We should consider putting this under a feature flag but we need the macro in doctets so we need
    +// We should consider putting this under a feature flag but we need the macro in doctests so we need
     // to wait until https://github.com/rust-lang/rust/issues/67295 is fixed.
     //
     // Stuff in here is too rough to document atm
     #[doc(hidden)]
     pub mod testutils;
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html index ca046b7b88..13392d3d83 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/psbt/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -135,12 +137,12 @@
     use bitcoin::TxOut;
     
     pub trait PsbtUtils {
    -    fn get_utxo_for(&self, input_index: usize) -> Option<TxOut>;
    +    fn get_utxo_for(&self, input_index: usize) -> Option<TxOut>;
     }
     
     impl PsbtUtils for Psbt {
         #[allow(clippy::all)] // We want to allow `manual_map` but it is too new.
    -    fn get_utxo_for(&self, input_index: usize) -> Option<TxOut> {
    +    fn get_utxo_for(&self, input_index: usize) -> Option<TxOut> {
             let tx = &self.global.unsigned_tx;
     
             if input_index >= tx.input.len() {
    @@ -187,7 +189,7 @@
                 trust_witness_utxo: true,
                 ..Default::default()
             };
    -        let _ = wallet.sign(&mut psbt, options).unwrap();
    +        let _ = wallet.sign(&mut psbt, options).unwrap();
         }
     
         #[test]
    @@ -204,7 +206,7 @@
                 trust_witness_utxo: true,
                 ..Default::default()
             };
    -        let _ = wallet.sign(&mut psbt, options).unwrap();
    +        let _ = wallet.sign(&mut psbt, options).unwrap();
         }
     
         #[test]
    @@ -220,7 +222,7 @@
                 trust_witness_utxo: true,
                 ..Default::default()
             };
    -        let _ = wallet.sign(&mut psbt, options).unwrap();
    +        let _ = wallet.sign(&mut psbt, options).unwrap();
         }
     
         #[test]
    @@ -239,10 +241,9 @@
                 .input
                 .push(psbt_bip.global.unsigned_tx.input[0].clone());
     
    -        let _ = wallet.sign(&mut psbt, SignOptions::default()).unwrap();
    +        let _ = wallet.sign(&mut psbt, SignOptions::default()).unwrap();
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html index a673857c4e..63fc2e7730 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/testutils/mod.rs.html @@ -1,4 +1,6 @@ -mod.rs - source
      1
    +mod.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -258,7 +260,7 @@
     }
     
     impl TestIncomingOutput {
    -    pub fn new(value: u64, to_address: Address) -> Self {
    +    pub fn new(value: u64, to_address: Address) -> Self {
             Self {
                 value,
                 to_address: to_address.to_string(),
    @@ -280,7 +282,7 @@
             min_confirmations: Option<u64>,
             locktime: Option<i64>,
             replaceable: Option<bool>,
    -    ) -> Self {
    +    ) -> Self {
             Self {
                 output,
                 min_confirmations,
    @@ -289,7 +291,7 @@
             }
         }
     
    -    pub fn add_output(&mut self, output: TestIncomingOutput) {
    +    pub fn add_output(&mut self, output: TestIncomingOutput) {
             self.output.push(output);
         }
     }
    @@ -301,7 +303,7 @@
             &self,
             secp: &Secp256k1<C>,
             index: u32,
    -    ) -> Descriptor<PublicKey>;
    +    ) -> Descriptor<PublicKey>;
     }
     
     impl TranslateDescriptor for Descriptor<DescriptorPublicKey> {
    @@ -309,16 +311,16 @@
             &self,
             secp: &Secp256k1<C>,
             index: u32,
    -    ) -> Descriptor<PublicKey> {
    -        let translate = |key: &DescriptorPublicKey| -> PublicKey {
    +    ) -> Descriptor<PublicKey> {
    +        let translate = |key: &DescriptorPublicKey| -> PublicKey {
                 match key {
    -                DescriptorPublicKey::XPub(xpub) => {
    +                DescriptorPublicKey::XPub(xpub) => {
                         xpub.xkey
                             .derive_pub(secp, &xpub.derivation_path)
                             .expect("hardened derivation steps")
                             .public_key
                     }
    -                DescriptorPublicKey::SinglePub(key) => key.key,
    +                DescriptorPublicKey::SinglePub(key) => key.key,
                 }
             };
     
    @@ -330,7 +332,7 @@
     #[doc(hidden)]
     #[macro_export]
     macro_rules! testutils {
    -    ( @external $descriptors:expr, $child:expr ) => ({
    +    ( @external $descriptors:expr, $child:expr ) => ({
             use $crate::bitcoin::secp256k1::Secp256k1;
             use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey, DescriptorTrait};
     
    @@ -341,7 +343,7 @@
             let parsed = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, &$descriptors.0).expect("Failed to parse descriptor in `testutils!(@external)`").0;
             parsed.derive_translated(&secp, $child).address(bitcoin::Network::Regtest).expect("No address form")
         });
    -    ( @internal $descriptors:expr, $child:expr ) => ({
    +    ( @internal $descriptors:expr, $child:expr ) => ({
             use $crate::bitcoin::secp256k1::Secp256k1;
             use $crate::miniscript::descriptor::{Descriptor, DescriptorPublicKey, DescriptorTrait};
     
    @@ -352,10 +354,10 @@
             let parsed = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, &$descriptors.1.expect("Missing internal descriptor")).expect("Failed to parse descriptor in `testutils!(@internal)`").0;
             parsed.derive_translated(&secp, $child).address($crate::bitcoin::Network::Regtest).expect("No address form")
         });
    -    ( @e $descriptors:expr, $child:expr ) => ({ testutils!(@external $descriptors, $child) });
    -    ( @i $descriptors:expr, $child:expr ) => ({ testutils!(@internal $descriptors, $child) });
    +    ( @e $descriptors:expr, $child:expr ) => ({ testutils!(@external $descriptors, $child) });
    +    ( @i $descriptors:expr, $child:expr ) => ({ testutils!(@internal $descriptors, $child) });
     
    -    ( @tx ( $( ( $( $addr:tt )* ) => $amount:expr ),+ ) $( ( @locktime $locktime:expr ) )? $( ( @confirmations $confirmations:expr ) )? $( ( @replaceable $replaceable:expr ) )? ) => ({
    +    ( @tx ( $( ( $( $addr:tt )* ) => $amount:expr ),+ ) $( ( @locktime $locktime:expr ) )? $( ( @confirmations $confirmations:expr ) )? $( ( @replaceable $replaceable:expr ) )? ) => ({
             let outs = vec![$( $crate::testutils::TestIncomingOutput::new($amount, testutils!( $($addr)* ))),+];
     
             let locktime = None::<i64>$(.or(Some($locktime)))?;
    @@ -366,15 +368,15 @@
             $crate::testutils::TestIncomingTx::new(outs, min_confirmations, locktime, replaceable)
         });
     
    -    ( @literal $key:expr ) => ({
    +    ( @literal $key:expr ) => ({
             let key = $key.to_string();
             (key, None::<String>, None::<String>)
         });
    -    ( @generate_xprv $( $external_path:expr )? $( ,$internal_path:expr )? ) => ({
    +    ( @generate_xprv $( $external_path:expr )? $( ,$internal_path:expr )? ) => ({
             use rand::Rng;
     
             let mut seed = [0u8; 32];
    -        rand::thread_rng().fill(&mut seed[..]);
    +        rand::thread_rng().fill(&mut seed[..]);
     
             let key = $crate::bitcoin::util::bip32::ExtendedPrivKey::new_master(
                 $crate::bitcoin::Network::Testnet,
    @@ -386,11 +388,11 @@
     
             (key.unwrap().to_string(), external_path, internal_path)
         });
    -    ( @generate_wif ) => ({
    +    ( @generate_wif ) => ({
             use rand::Rng;
     
             let mut key = [0u8; $crate::bitcoin::secp256k1::constants::SECRET_KEY_SIZE];
    -        rand::thread_rng().fill(&mut key[..]);
    +        rand::thread_rng().fill(&mut key[..]);
     
             ($crate::bitcoin::PrivateKey {
                 compressed: true,
    @@ -399,7 +401,7 @@
             }.to_string(), None::<String>, None::<String>)
         });
     
    -    ( @keys ( $( $alias:expr => ( $( $key_type:tt )* ) ),+ ) ) => ({
    +    ( @keys ( $( $alias:expr => ( $( $key_type:tt )* ) ),+ ) ) => ({
             let mut map = std::collections::HashMap::new();
             $(
                 let alias: &str = $alias;
    @@ -409,7 +411,7 @@
             map
         });
     
    -    ( @descriptors ( $external_descriptor:expr ) $( ( $internal_descriptor:expr ) )? $( ( @keys $( $keys:tt )* ) )* ) => ({
    +    ( @descriptors ( $external_descriptor:expr ) $( ( $internal_descriptor:expr ) )? $( ( @keys $( $keys:tt )* ) )* ) => ({
             use std::str::FromStr;
             use std::collections::HashMap;
             use $crate::miniscript::descriptor::Descriptor;
    @@ -461,6 +463,5 @@
         })
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html index a5f9e76a88..dfe709fdc9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/types.rs.html @@ -1,4 +1,6 @@ -types.rs - source
      1
    +types.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -251,6 +253,12 @@
     251
     252
     253
    +254
    +255
    +256
    +257
    +258
    +259
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -281,19 +289,19 @@
     
     impl KeychainKind {
         /// Return [`KeychainKind`] as a byte
    -    pub fn as_byte(&self) -> u8 {
    +    pub fn as_byte(&self) -> u8 {
             match self {
    -            KeychainKind::External => b'e',
    -            KeychainKind::Internal => b'i',
    +            KeychainKind::External => b'e',
    +            KeychainKind::Internal => b'i',
             }
         }
     }
     
     impl AsRef<[u8]> for KeychainKind {
    -    fn as_ref(&self) -> &[u8] {
    +    fn as_ref(&self) -> &[u8] {
             match self {
    -            KeychainKind::External => b"e",
    -            KeychainKind::Internal => b"i",
    +            KeychainKind::External => b"e",
    +            KeychainKind::Internal => b"i",
             }
         }
     }
    @@ -305,49 +313,49 @@
     
     impl FeeRate {
         /// Create a new instance of [`FeeRate`] given a float fee rate in btc/kvbytes
    -    pub fn from_btc_per_kvb(btc_per_kvb: f32) -> Self {
    +    pub fn from_btc_per_kvb(btc_per_kvb: f32) -> Self {
             FeeRate(btc_per_kvb * 1e5)
         }
     
         /// Create a new instance of [`FeeRate`] given a float fee rate in satoshi/vbyte
    -    pub const fn from_sat_per_vb(sat_per_vb: f32) -> Self {
    +    pub const fn from_sat_per_vb(sat_per_vb: f32) -> Self {
             FeeRate(sat_per_vb)
         }
     
         /// Create a new [`FeeRate`] with the default min relay fee value
    -    pub const fn default_min_relay_fee() -> Self {
    +    pub const fn default_min_relay_fee() -> Self {
             FeeRate(1.0)
         }
     
         /// Calculate fee rate from `fee` and weight units (`wu`).
    -    pub fn from_wu(fee: u64, wu: usize) -> FeeRate {
    +    pub fn from_wu(fee: u64, wu: usize) -> FeeRate {
             Self::from_vb(fee, wu.vbytes())
         }
     
         /// Calculate fee rate from `fee` and `vbytes`.
    -    pub fn from_vb(fee: u64, vbytes: usize) -> FeeRate {
    +    pub fn from_vb(fee: u64, vbytes: usize) -> FeeRate {
             let rate = fee as f32 / vbytes as f32;
             Self::from_sat_per_vb(rate)
         }
     
         /// Return the value as satoshi/vbyte
    -    pub fn as_sat_vb(&self) -> f32 {
    +    pub fn as_sat_vb(&self) -> f32 {
             self.0
         }
     
         /// Calculate absolute fee in Satoshis using size in weight units.
    -    pub fn fee_wu(&self, wu: usize) -> u64 {
    +    pub fn fee_wu(&self, wu: usize) -> u64 {
             self.fee_vb(wu.vbytes())
         }
     
         /// Calculate absolute fee in Satoshis using size in virtual bytes.
    -    pub fn fee_vb(&self, vbytes: usize) -> u64 {
    +    pub fn fee_vb(&self, vbytes: usize) -> u64 {
             (self.as_sat_vb() * vbytes as f32).ceil() as u64
         }
     }
     
     impl std::default::Default for FeeRate {
    -    fn default() -> Self {
    +    fn default() -> Self {
             FeeRate::default_min_relay_fee()
         }
     }
    @@ -355,7 +363,7 @@
     impl Sub for FeeRate {
         type Output = Self;
     
    -    fn sub(self, other: FeeRate) -> Self::Output {
    +    fn sub(self, other: FeeRate) -> Self::Output {
             FeeRate(self.0 - other.0)
         }
     }
    @@ -363,11 +371,11 @@
     /// Trait implemented by types that can be used to measure weight units.
     pub trait Vbytes {
         /// Convert weight units to virtual bytes.
    -    fn vbytes(self) -> usize;
    +    fn vbytes(self) -> usize;
     }
     
     impl Vbytes for usize {
    -    fn vbytes(self) -> usize {
    +    fn vbytes(self) -> usize {
             // ref: https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#transaction-size-calculations
             (self as f32 / 4.0).ceil() as usize
         }
    @@ -415,21 +423,21 @@
     
     impl Utxo {
         /// Get the location of the UTXO
    -    pub fn outpoint(&self) -> OutPoint {
    +    pub fn outpoint(&self) -> OutPoint {
             match &self {
    -            Utxo::Local(local) => local.outpoint,
    -            Utxo::Foreign { outpoint, .. } => *outpoint,
    +            Utxo::Local(local) => local.outpoint,
    +            Utxo::Foreign { outpoint, .. } => *outpoint,
             }
         }
     
         /// Get the `TxOut` of the UTXO
    -    pub fn txout(&self) -> &TxOut {
    +    pub fn txout(&self) -> &TxOut {
             match &self {
    -            Utxo::Local(local) => &local.txout,
    +            Utxo::Local(local) => &local.txout,
                 Utxo::Foreign {
                     outpoint,
                     psbt_input,
    -            } => {
    +            } => {
                     if let Some(prev_tx) = &psbt_input.non_witness_utxo {
                         return &prev_tx.output[outpoint.vout as usize];
                     }
    @@ -463,33 +471,39 @@
         pub fee: Option<u64>,
         /// If the transaction is confirmed, contains height and timestamp of the block containing the
         /// transaction, unconfirmed transaction contains `None`.
    -    pub confirmation_time: Option<ConfirmationTime>,
    +    pub confirmation_time: Option<BlockTime>,
         /// Whether the tx has been verified against the consensus rules
         ///
         /// Confirmed txs are considered "verified" by default, while unconfirmed txs are checked to
         /// ensure an unstrusted [`Blockchain`](crate::blockchain::Blockchain) backend can't trick the
         /// wallet into using an invalid tx as an RBF template.
         ///
    -    /// The check is only perfomed when the `verify` feature is enabled.
    +    /// The check is only performed when the `verify` feature is enabled.
         #[serde(default = "bool::default")] // default to `false` if not specified
         pub verified: bool,
     }
     
    -/// Block height and timestamp of the block containing the confirmed transaction
    +/// Block height and timestamp of a block
     #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Default)]
    -pub struct ConfirmationTime {
    +pub struct BlockTime {
         /// confirmation block height
         pub height: u32,
         /// confirmation block timestamp
         pub timestamp: u64,
     }
     
    -impl ConfirmationTime {
    -    /// Returns `Some` `ConfirmationTime` if both `height` and `timestamp` are `Some`
    -    pub fn new(height: Option<u32>, timestamp: Option<u64>) -> Option<Self> {
    +/// **DEPRECATED**: Confirmation time of a transaction
    +///
    +/// The structure has been renamed to `BlockTime`
    +#[deprecated(note = "This structure has been renamed to `BlockTime`")]
    +pub type ConfirmationTime = BlockTime;
    +
    +impl BlockTime {
    +    /// Returns `Some` `BlockTime` if both `height` and `timestamp` are `Some`
    +    pub fn new(height: Option<u32>, timestamp: Option<u64>) -> Option<Self> {
             match (height, timestamp) {
    -            (Some(height), Some(timestamp)) => Some(ConfirmationTime { height, timestamp }),
    -            _ => None,
    +            (Some(height), Some(timestamp)) => Some(BlockTime { height, timestamp }),
    +            _ => None,
             }
         }
     }
    @@ -505,6 +519,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html index b4b1b942ac..96ce914fe3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/address_validator.rs.html @@ -1,4 +1,6 @@ -address_validator.rs - source
      1
    +address_validator.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -240,7 +242,7 @@
     }
     
     impl fmt::Display for AddressValidatorError {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -261,7 +263,7 @@
             keychain: KeychainKind,
             hd_keypaths: &HdKeyPaths,
             script: &Script,
    -    ) -> Result<(), AddressValidatorError>;
    +    ) -> Result<(), AddressValidatorError>;
     }
     
     #[cfg(test)]
    @@ -280,7 +282,7 @@
                 _keychain: KeychainKind,
                 _hd_keypaths: &HdKeyPaths,
                 _script: &bitcoin::Script,
    -        ) -> Result<(), AddressValidatorError> {
    +        ) -> Result<(), AddressValidatorError> {
                 Err(AddressValidatorError::InvalidScript)
             }
         }
    @@ -307,6 +309,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html index dc5c9f14b7..032d48b8f4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/coin_selection.rs.html @@ -1,4 +1,6 @@ -coin_selection.rs - source
       1
    +coin_selection.rs - source
    +    
    logo
       1
        2
        3
        4
    @@ -1180,17 +1182,17 @@
     
     impl CoinSelectionResult {
         /// The total value of the inputs selected.
    -    pub fn selected_amount(&self) -> u64 {
    +    pub fn selected_amount(&self) -> u64 {
             self.selected.iter().map(|u| u.txout().value).sum()
         }
     
         /// The total value of the inputs selected from the local wallet.
    -    pub fn local_selected_amount(&self) -> u64 {
    +    pub fn local_selected_amount(&self) -> u64 {
             self.selected
                 .iter()
                 .filter_map(|u| match u {
    -                Utxo::Local(_) => Some(u.txout().value),
    -                _ => None,
    +                Utxo::Local(_) => Some(u.txout().value),
    +                _ => None,
                 })
                 .sum()
         }
    @@ -1223,7 +1225,7 @@
             fee_rate: FeeRate,
             amount_needed: u64,
             fee_amount: u64,
    -    ) -> Result<CoinSelectionResult, Error>;
    +    ) -> Result<CoinSelectionResult, Error>;
     }
     
     /// Simple and dumb coin selection
    @@ -1242,7 +1244,7 @@
             fee_rate: FeeRate,
             amount_needed: u64,
             mut fee_amount: u64,
    -    ) -> Result<CoinSelectionResult, Error> {
    +    ) -> Result<CoinSelectionResult, Error> {
             log::debug!(
                 "amount_needed = `{}`, fee_amount = `{}`, fee_rate = `{:?}`",
                 amount_needed,
    @@ -1265,7 +1267,7 @@
             let mut selected_amount = 0;
             let selected = utxos
                 .scan(
    -                (&mut selected_amount, &mut fee_amount),
    +                (&mut selected_amount, &mut fee_amount),
                     |(selected_amount, fee_amount), (must_use, weighted_utxo)| {
                         if must_use || **selected_amount < amount_needed + **fee_amount {
                             **fee_amount +=
    @@ -1312,7 +1314,7 @@
     }
     
     impl OutputGroup {
    -    fn new(weighted_utxo: WeightedUtxo, fee_rate: FeeRate) -> Self {
    +    fn new(weighted_utxo: WeightedUtxo, fee_rate: FeeRate) -> Self {
             let fee = fee_rate.fee_wu(TXIN_BASE_WEIGHT + weighted_utxo.satisfaction_weight);
             let effective_value = weighted_utxo.utxo.txout().value as i64 - fee as i64;
             OutputGroup {
    @@ -1332,7 +1334,7 @@
     }
     
     impl Default for BranchAndBoundCoinSelection {
    -    fn default() -> Self {
    +    fn default() -> Self {
             Self {
                 // P2WPKH cost of change -> value (8 bytes) + script len (1 bytes) + script (22 bytes)
                 size_of_change: 8 + 1 + 22,
    @@ -1342,7 +1344,7 @@
     
     impl BranchAndBoundCoinSelection {
         /// Create new instance with target size for change output
    -    pub fn new(size_of_change: u64) -> Self {
    +    pub fn new(size_of_change: u64) -> Self {
             Self { size_of_change }
         }
     }
    @@ -1358,7 +1360,7 @@
             fee_rate: FeeRate,
             amount_needed: u64,
             fee_amount: u64,
    -    ) -> Result<CoinSelectionResult, Error> {
    +    ) -> Result<CoinSelectionResult, Error> {
             // Mapping every (UTXO, usize) to an output group
             let required_utxos: Vec<OutputGroup> = required_utxos
                 .into_iter()
    @@ -1431,7 +1433,7 @@
     
     impl BranchAndBoundCoinSelection {
         // TODO: make this more Rust-onic :)
    -    // (And perhpaps refactor with less arguments?)
    +    // (And perhaps refactor with less arguments?)
         #[allow(clippy::too_many_arguments)]
         fn bnb(
             &self,
    @@ -1442,7 +1444,7 @@
             actual_target: i64,
             fee_amount: u64,
             cost_of_change: f32,
    -    ) -> Result<CoinSelectionResult, Error> {
    +    ) -> Result<CoinSelectionResult, Error> {
             // current_selection[i] will contain true if we are using optional_utxos[i],
             // false otherwise. Note that current_selection.len() could be less than
             // optional_utxos.len(), it just means that we still haven't decided if we should keep
    @@ -1481,7 +1483,7 @@
                     }
     
                     // If we found a perfect match, break here
    -                if curr_value == actual_target {
    +                if curr_value == actual_target {
                         break;
                     }
                 }
    @@ -1549,14 +1551,14 @@
             curr_value: i64,
             actual_target: i64,
             fee_amount: u64,
    -    ) -> CoinSelectionResult {
    +    ) -> CoinSelectionResult {
             #[cfg(not(test))]
    -        optional_utxos.shuffle(&mut thread_rng());
    +        optional_utxos.shuffle(&mut thread_rng());
             #[cfg(test)]
             {
                 let seed = [0; 32];
                 let mut rng: StdRng = SeedableRng::from_seed(seed);
    -            optional_utxos.shuffle(&mut rng);
    +            optional_utxos.shuffle(&mut rng);
             }
     
             let selected_utxos = optional_utxos
    @@ -1578,8 +1580,8 @@
             mut selected_utxos: Vec<OutputGroup>,
             mut required_utxos: Vec<OutputGroup>,
             mut fee_amount: u64,
    -    ) -> CoinSelectionResult {
    -        selected_utxos.append(&mut required_utxos);
    +    ) -> CoinSelectionResult {
    +        selected_utxos.append(&mut required_utxos);
             fee_amount += selected_utxos.iter().map(|u| u.fee).sum::<u64>();
             let selected = selected_utxos
                 .into_iter()
    @@ -1612,7 +1614,7 @@
     
         const FEE_AMOUNT: u64 = 50;
     
    -    fn utxo(value: u64, index: u32) -> WeightedUtxo {
    +    fn utxo(value: u64, index: u32) -> WeightedUtxo {
             assert!(index < 10);
             let outpoint = OutPoint::from_str(&format!(
                 "000000000000000000000000000000000000000000000000000000000000000{}:0",
    @@ -1632,7 +1634,7 @@
             }
         }
     
    -    fn get_test_utxos() -> Vec<WeightedUtxo> {
    +    fn get_test_utxos() -> Vec<WeightedUtxo> {
             vec![
                 utxo(100_000, 0),
                 utxo(FEE_AMOUNT as u64 - 40, 1),
    @@ -1640,7 +1642,7 @@
             ]
         }
     
    -    fn generate_random_utxos(rng: &mut StdRng, utxos_number: usize) -> Vec<WeightedUtxo> {
    +    fn generate_random_utxos(rng: &mut StdRng, utxos_number: usize) -> Vec<WeightedUtxo> {
             let mut res = Vec::new();
             for _ in 0..utxos_number {
                 res.push(WeightedUtxo {
    @@ -1661,7 +1663,7 @@
             res
         }
     
    -    fn generate_same_value_utxos(utxos_value: u64, utxos_number: usize) -> Vec<WeightedUtxo> {
    +    fn generate_same_value_utxos(utxos_value: u64, utxos_number: usize) -> Vec<WeightedUtxo> {
             let utxo = WeightedUtxo {
                 satisfaction_weight: P2WPKH_WITNESS_SIZE,
                 utxo: Utxo::Local(LocalUtxo {
    @@ -1679,9 +1681,9 @@
             vec![utxo; utxos_number]
         }
     
    -    fn sum_random_utxos(mut rng: &mut StdRng, utxos: &mut Vec<WeightedUtxo>) -> u64 {
    +    fn sum_random_utxos(mut rng: &mut StdRng, utxos: &mut Vec<WeightedUtxo>) -> u64 {
             let utxos_picked_len = rng.gen_range(2, utxos.len() / 2);
    -        utxos.shuffle(&mut rng);
    +        utxos.shuffle(&mut rng);
             utxos[..utxos_picked_len]
                 .iter()
                 .map(|u| u.utxo.txout().value)
    @@ -1950,8 +1952,8 @@
             let database = MemoryDatabase::default();
     
             for _i in 0..200 {
    -            let mut optional_utxos = generate_random_utxos(&mut rng, 16);
    -            let target_amount = sum_random_utxos(&mut rng, &mut optional_utxos);
    +            let mut optional_utxos = generate_random_utxos(&mut rng, 16);
    +            let target_amount = sum_random_utxos(&mut rng, &mut optional_utxos);
                 let result = BranchAndBoundCoinSelection::new(0)
                     .coin_select(
                         &database,
    @@ -2062,7 +2064,7 @@
             let fee_rate = FeeRate::from_sat_per_vb(0.0);
     
             for _ in 0..200 {
    -            let optional_utxos: Vec<_> = generate_random_utxos(&mut rng, 40)
    +            let optional_utxos: Vec<_> = generate_random_utxos(&mut rng, 40)
                     .into_iter()
                     .map(|u| OutputGroup::new(u, fee_rate))
                     .collect();
    @@ -2095,8 +2097,8 @@
         fn test_single_random_draw_function_success() {
             let seed = [0; 32];
             let mut rng: StdRng = SeedableRng::from_seed(seed);
    -        let mut utxos = generate_random_utxos(&mut rng, 300);
    -        let target_amount = sum_random_utxos(&mut rng, &mut utxos);
    +        let mut utxos = generate_random_utxos(&mut rng, 300);
    +        let target_amount = sum_random_utxos(&mut rng, &mut utxos);
     
             let fee_rate = FeeRate::from_sat_per_vb(1.0);
             let utxos: Vec<OutputGroup> = utxos
    @@ -2117,6 +2119,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html index a78d0d922f..b9fc2cd53e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/export.rs.html @@ -1,4 +1,6 @@ -export.rs - source
      1
    +export.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -433,7 +435,7 @@
     }
     
     impl ToString for WalletExport {
    -    fn to_string(&self) -> String {
    +    fn to_string(&self) -> String {
             serde_json::to_string(self).unwrap()
         }
     }
    @@ -441,12 +443,12 @@
     impl FromStr for WalletExport {
         type Err = serde_json::Error;
     
    -    fn from_str(s: &str) -> Result<Self, Self::Err> {
    +    fn from_str(s: &str) -> Result<Self, Self::Err> {
             serde_json::from_str(s)
         }
     }
     
    -fn remove_checksum(s: String) -> String {
    +fn remove_checksum(s: String) -> String {
         s.splitn(2, '#').next().map(String::from).unwrap()
     }
     
    @@ -466,7 +468,7 @@
             wallet: &Wallet<B, D>,
             label: &str,
             include_blockheight: bool,
    -    ) -> Result<Self, &'static str> {
    +    ) -> Result<Self, &'static str> {
             let descriptor = wallet
                 .descriptor
                 .to_string_with_secret(&wallet.signers.as_key_map(wallet.secp_ctx()));
    @@ -474,9 +476,9 @@
             Self::is_compatible_with_core(&descriptor)?;
     
             let blockheight = match wallet.database.borrow().iter_txs(false) {
    -            _ if !include_blockheight => 0,
    -            Err(_) => 0,
    -            Ok(txs) => {
    +            _ if !include_blockheight => 0,
    +            Err(_) => 0,
    +            Ok(txs) => {
                     let mut heights = txs
                         .into_iter()
                         .map(|tx| tx.confirmation_time.map(|c| c.height).unwrap_or(0))
    @@ -505,10 +507,10 @@
             Ok(export)
         }
     
    -    fn is_compatible_with_core(descriptor: &str) -> Result<(), &'static str> {
    +    fn is_compatible_with_core(descriptor: &str) -> Result<(), &'static str> {
             fn check_ms<Ctx: ScriptContext>(
                 terminal: &Terminal<String, Ctx>,
    -        ) -> Result<(), &'static str> {
    +        ) -> Result<(), &'static str> {
                 if let Terminal::Multi(_, _) = terminal {
                     Ok(())
                 } else {
    @@ -518,31 +520,31 @@
     
             // pkh(), wpkh(), sh(wpkh()) are always fine, as well as multi() and sortedmulti()
             match Descriptor::<String>::from_str(descriptor).map_err(|_| "Invalid descriptor")? {
    -            Descriptor::Pkh(_) | Descriptor::Wpkh(_) => Ok(()),
    -            Descriptor::Sh(sh) => match sh.as_inner() {
    -                ShInner::Wpkh(_) => Ok(()),
    -                ShInner::SortedMulti(_) => Ok(()),
    -                ShInner::Wsh(wsh) => match wsh.as_inner() {
    -                    WshInner::SortedMulti(_) => Ok(()),
    -                    WshInner::Ms(ms) => check_ms(&ms.node),
    +            Descriptor::Pkh(_) | Descriptor::Wpkh(_) => Ok(()),
    +            Descriptor::Sh(sh) => match sh.as_inner() {
    +                ShInner::Wpkh(_) => Ok(()),
    +                ShInner::SortedMulti(_) => Ok(()),
    +                ShInner::Wsh(wsh) => match wsh.as_inner() {
    +                    WshInner::SortedMulti(_) => Ok(()),
    +                    WshInner::Ms(ms) => check_ms(&ms.node),
                     },
    -                ShInner::Ms(ms) => check_ms(&ms.node),
    +                ShInner::Ms(ms) => check_ms(&ms.node),
                 },
    -            Descriptor::Wsh(wsh) => match wsh.as_inner() {
    -                WshInner::SortedMulti(_) => Ok(()),
    -                WshInner::Ms(ms) => check_ms(&ms.node),
    +            Descriptor::Wsh(wsh) => match wsh.as_inner() {
    +                WshInner::SortedMulti(_) => Ok(()),
    +                WshInner::Ms(ms) => check_ms(&ms.node),
                 },
    -            _ => Err("The descriptor is not compatible with Bitcoin Core"),
    +            _ => Err("The descriptor is not compatible with Bitcoin Core"),
             }
         }
     
         /// Return the external descriptor
    -    pub fn descriptor(&self) -> String {
    +    pub fn descriptor(&self) -> String {
             self.descriptor.clone()
         }
     
         /// Return the internal descriptor, if present
    -    pub fn change_descriptor(&self) -> Option<String> {
    +    pub fn change_descriptor(&self) -> Option<String> {
             let replaced = self.descriptor.replace("/0/*", "/1/*");
     
             if replaced != self.descriptor {
    @@ -563,9 +565,9 @@
         use crate::database::{memory::MemoryDatabase, BatchOperations};
         use crate::types::TransactionDetails;
         use crate::wallet::Wallet;
    -    use crate::ConfirmationTime;
    +    use crate::BlockTime;
     
    -    fn get_test_db() -> MemoryDatabase {
    +    fn get_test_db() -> MemoryDatabase {
             let mut db = MemoryDatabase::new();
             db.set_tx(&TransactionDetails {
                 transaction: None,
    @@ -577,7 +579,7 @@
                 received: 100_000,
                 sent: 0,
                 fee: Some(500),
    -            confirmation_time: Some(ConfirmationTime {
    +            confirmation_time: Some(BlockTime {
                     timestamp: 12345678,
                     height: 5000,
                 }),
    @@ -701,6 +703,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file 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 e4602b959b..7d6625b993 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 @@ -1,4 +1,6 @@ -mod.rs - source
       1
    +mod.rs - source
    +    
    logo
       1
        2
        3
        4
    @@ -3966,6 +3968,75 @@
     3966
     3967
     3968
    +3969
    +3970
    +3971
    +3972
    +3973
    +3974
    +3975
    +3976
    +3977
    +3978
    +3979
    +3980
    +3981
    +3982
    +3983
    +3984
    +3985
    +3986
    +3987
    +3988
    +3989
    +3990
    +3991
    +3992
    +3993
    +3994
    +3995
    +3996
    +3997
    +3998
    +3999
    +4000
    +4001
    +4002
    +4003
    +4004
    +4005
    +4006
    +4007
    +4008
    +4009
    +4010
    +4011
    +4012
    +4013
    +4014
    +4015
    +4016
    +4017
    +4018
    +4019
    +4020
    +4021
    +4022
    +4023
    +4024
    +4025
    +4026
    +4027
    +4028
    +4029
    +4030
    +4031
    +4032
    +4033
    +4034
    +4035
    +4036
    +4037
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -4025,7 +4096,7 @@
     
     use crate::blockchain::{Blockchain, Progress};
     use crate::database::memory::MemoryDatabase;
    -use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils};
    +use crate::database::{BatchDatabase, BatchOperations, DatabaseUtils, SyncTime};
     use crate::descriptor::derived::AsDerived;
     use crate::descriptor::policy::BuildSatisfaction;
     use crate::descriptor::{
    @@ -4081,7 +4152,7 @@
             change_descriptor: Option<E>,
             network: Network,
             database: D,
    -    ) -> Result<Self, Error> {
    +    ) -> Result<Self, Error> {
             Self::_new(descriptor, change_descriptor, network, database, (), None)
         }
     }
    @@ -4097,7 +4168,7 @@
             mut database: D,
             client: B,
             current_height: Option<u32>,
    -    ) -> Result<Self, Error> {
    +    ) -> Result<Self, Error> {
             let secp = Secp256k1::new();
     
             let (descriptor, keymap) = into_wallet_descriptor_checked(descriptor, &secp, network)?;
    @@ -4107,7 +4178,7 @@
             )?;
             let signers = Arc::new(SignersContainer::from(keymap));
             let (change_descriptor, change_signers) = match change_descriptor {
    -            Some(desc) => {
    +            Some(desc) => {
                     let (change_descriptor, change_keymap) =
                         into_wallet_descriptor_checked(desc, &secp, network)?;
                     database.check_descriptor_checksum(
    @@ -4122,7 +4193,7 @@
     
                     (Some(change_descriptor), change_signers)
                 }
    -            None => (None, Arc::new(SignersContainer::new())),
    +            None => (None, Arc::new(SignersContainer::new())),
             };
     
             Ok(Wallet {
    @@ -4140,7 +4211,7 @@
         }
     
         /// Get the Bitcoin network the wallet is using.
    -    pub fn network(&self) -> Network {
    +    pub fn network(&self) -> Network {
             self.network
         }
     }
    @@ -4189,13 +4260,13 @@
     impl Deref for AddressInfo {
         type Target = Address;
     
    -    fn deref(&self) -> &Self::Target {
    +    fn deref(&self) -> &Self::Target {
             &self.address
         }
     }
     
     impl fmt::Display for AddressInfo {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{}", self.address)
         }
     }
    @@ -4206,7 +4277,7 @@
         D: BatchDatabase,
     {
         // Return a newly derived address using the external descriptor
    -    fn get_new_address(&self) -> Result<AddressInfo, Error> {
    +    fn get_new_address(&self) -> Result<AddressInfo, Error> {
             let incremented_index = self.fetch_and_increment_index(KeychainKind::External)?;
     
             let address_result = self
    @@ -4224,7 +4295,7 @@
     
         // Return the the last previously derived address if it has not been used in a received
         // transaction. Otherwise return a new address using [`Wallet::get_new_address`].
    -    fn get_unused_address(&self) -> Result<AddressInfo, Error> {
    +    fn get_unused_address(&self) -> Result<AddressInfo, Error> {
             let current_index = self.fetch_index(KeychainKind::External)?;
     
             let derived_key = self.descriptor.as_derived(current_index, &self.secp);
    @@ -4236,7 +4307,7 @@
                 .iter()
                 .flat_map(|tx_details| tx_details.transaction.as_ref())
                 .flat_map(|tx| tx.output.iter())
    -            .any(|o| o.script_pubkey == script_pubkey);
    +            .any(|o| o.script_pubkey == script_pubkey);
     
             if found_used {
                 self.get_new_address()
    @@ -4252,7 +4323,7 @@
         }
     
         // Return derived address for the external descriptor at a specific index
    -    fn peek_address(&self, index: u32) -> Result<AddressInfo, Error> {
    +    fn peek_address(&self, index: u32) -> Result<AddressInfo, Error> {
             self.descriptor
                 .as_derived(index, &self.secp)
                 .address(self.network)
    @@ -4262,7 +4333,7 @@
     
         // Return derived address for the external descriptor at a specific index and reset current
         // address index
    -    fn reset_address(&self, index: u32) -> Result<AddressInfo, Error> {
    +    fn reset_address(&self, index: u32) -> Result<AddressInfo, Error> {
             self.set_index(KeychainKind::External, index)?;
     
             self.descriptor
    @@ -4275,34 +4346,49 @@
         /// Return a derived address using the external descriptor, see [`AddressIndex`] for
         /// available address index selection strategies. If none of the keys in the descriptor are derivable
         /// (ie. does not end with /*) then the same address will always be returned for any [`AddressIndex`].
    -    pub fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, Error> {
    +    pub fn get_address(&self, address_index: AddressIndex) -> Result<AddressInfo, Error> {
             match address_index {
    -            AddressIndex::New => self.get_new_address(),
    -            AddressIndex::LastUnused => self.get_unused_address(),
    -            AddressIndex::Peek(index) => self.peek_address(index),
    -            AddressIndex::Reset(index) => self.reset_address(index),
    +            AddressIndex::New => self.get_new_address(),
    +            AddressIndex::LastUnused => self.get_unused_address(),
    +            AddressIndex::Peek(index) => self.peek_address(index),
    +            AddressIndex::Reset(index) => self.reset_address(index),
             }
         }
     
         /// Return whether or not a `script` is part of this wallet (either internal or external)
    -    pub fn is_mine(&self, script: &Script) -> Result<bool, Error> {
    +    pub fn is_mine(&self, script: &Script) -> Result<bool, Error> {
             self.database.borrow().is_mine(script)
         }
     
         /// Return the list of unspent outputs of this wallet
         ///
    -    /// Note that this methods only operate on the internal database, which first needs to be
    +    /// Note that this method only operates on the internal database, which first needs to be
         /// [`Wallet::sync`] manually.
    -    pub fn list_unspent(&self) -> Result<Vec<LocalUtxo>, Error> {
    +    pub fn list_unspent(&self) -> Result<Vec<LocalUtxo>, Error> {
             self.database.borrow().iter_utxos()
         }
     
         /// Returns the `UTXO` owned by this wallet corresponding to `outpoint` if it exists in the
         /// wallet's database.
    -    pub fn get_utxo(&self, outpoint: OutPoint) -> Result<Option<LocalUtxo>, Error> {
    +    pub fn get_utxo(&self, outpoint: OutPoint) -> Result<Option<LocalUtxo>, Error> {
             self.database.borrow().get_utxo(&outpoint)
         }
     
    +    /// 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`.
    +    ///
    +    /// Note that this method only operates on the internal database, which first needs to be
    +    /// [`Wallet::sync`] manually.
    +    pub fn get_tx(
    +        &self,
    +        txid: &Txid,
    +        include_raw: bool,
    +    ) -> Result<Option<TransactionDetails>, Error> {
    +        self.database.borrow().get_tx(txid, include_raw)
    +    }
    +
         /// Return the list of transactions made and received by the wallet
         ///
         /// Optionally fill the [`TransactionDetails::transaction`] field with the raw transaction if
    @@ -4310,7 +4396,7 @@
         ///
         /// Note that this methods only operate on the internal database, which first needs to be
         /// [`Wallet::sync`] manually.
    -    pub fn list_transactions(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
    +    pub fn list_transactions(&self, include_raw: bool) -> Result<Vec<TransactionDetails>, Error> {
             self.database.borrow().iter_txs(include_raw)
         }
     
    @@ -4318,7 +4404,7 @@
         ///
         /// Note that this methods only operate on the internal database, which first needs to be
         /// [`Wallet::sync`] manually.
    -    pub fn get_balance(&self) -> Result<u64, Error> {
    +    pub fn get_balance(&self) -> Result<u64, Error> {
             Ok(self
                 .list_unspent()?
                 .iter()
    @@ -4329,14 +4415,14 @@
         ///
         /// See [the `signer` module](signer) for an example.
         pub fn add_signer(
    -        &mut self,
    +        &mut self,
             keychain: KeychainKind,
             ordering: SignerOrdering,
             signer: Arc<dyn Signer>,
         ) {
             let signers = match keychain {
    -            KeychainKind::External => Arc::make_mut(&mut self.signers),
    -            KeychainKind::Internal => Arc::make_mut(&mut self.change_signers),
    +            KeychainKind::External => Arc::make_mut(&mut self.signers),
    +            KeychainKind::Internal => Arc::make_mut(&mut self.change_signers),
             };
     
             signers.add_external(signer.id(&self.secp), ordering, signer);
    @@ -4345,7 +4431,7 @@
         /// Add an address validator
         ///
         /// See [the `address_validator` module](address_validator) for an example.
    -    pub fn add_address_validator(&mut self, validator: Arc<dyn AddressValidator>) {
    +    pub fn add_address_validator(&mut self, validator: Arc<dyn AddressValidator>) {
             self.address_validators.push(validator);
         }
     
    @@ -4375,7 +4461,7 @@
         /// ```
         ///
         /// [`TxBuilder`]: crate::TxBuilder
    -    pub fn build_tx(&self) -> TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, CreateTx> {
    +    pub fn build_tx(&self) -> TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, CreateTx> {
             TxBuilder {
                 wallet: self,
                 params: TxParams::default(),
    @@ -4388,7 +4474,7 @@
             &self,
             coin_selection: Cs,
             params: TxParams,
    -    ) -> Result<(Psbt, TransactionDetails), Error> {
    +    ) -> Result<(Psbt, TransactionDetails), Error> {
             let external_policy = self
                 .descriptor
                 .extract_policy(&self.signers, BuildSatisfaction::None, &self.secp)?
    @@ -4446,51 +4532,51 @@
             debug!("Policy requirements: {:?}", requirements);
     
             let version = match params.version {
    -            Some(tx_builder::Version(0)) => {
    +            Some(tx_builder::Version(0)) => {
                     return Err(Error::Generic("Invalid version `0`".into()))
                 }
    -            Some(tx_builder::Version(1)) if requirements.csv.is_some() => {
    +            Some(tx_builder::Version(1)) if requirements.csv.is_some() => {
                     return Err(Error::Generic(
                         "TxBuilder requested version `1`, but at least `2` is needed to use OP_CSV"
                             .into(),
                     ))
                 }
    -            Some(tx_builder::Version(x)) => x,
    -            None if requirements.csv.is_some() => 2,
    -            _ => 1,
    +            Some(tx_builder::Version(x)) => x,
    +            None if requirements.csv.is_some() => 2,
    +            _ => 1,
             };
     
             let lock_time = match params.locktime {
                 // No nLockTime, default to 0
    -            None => requirements.timelock.unwrap_or(0),
    +            None => requirements.timelock.unwrap_or(0),
                 // Specific nLockTime required and we have no constraints, so just set to that value
    -            Some(x) if requirements.timelock.is_none() => x,
    +            Some(x) if requirements.timelock.is_none() => x,
                 // Specific nLockTime required and it's compatible with the constraints
    -            Some(x) if check_nlocktime(x, requirements.timelock.unwrap()) => x,
    +            Some(x) if check_nlocktime(x, requirements.timelock.unwrap()) => x,
                 // Invalid nLockTime required
    -            Some(x) => return Err(Error::Generic(format!("TxBuilder requested timelock of `{}`, but at least `{}` is required to spend from this script", x, requirements.timelock.unwrap())))
    +            Some(x) => return Err(Error::Generic(format!("TxBuilder requested timelock of `{}`, but at least `{}` is required to spend from this script", x, requirements.timelock.unwrap())))
             };
     
             let n_sequence = match (params.rbf, requirements.csv) {
                 // No RBF or CSV but there's an nLockTime, so the nSequence cannot be final
    -            (None, None) if lock_time != 0 => 0xFFFFFFFE,
    +            (None, None) if lock_time != 0 => 0xFFFFFFFE,
                 // No RBF, CSV or nLockTime, make the transaction final
    -            (None, None) => 0xFFFFFFFF,
    +            (None, None) => 0xFFFFFFFF,
     
                 // No RBF requested, use the value from CSV. Note that this value is by definition
                 // non-final, so even if a timelock is enabled this nSequence is fine, hence why we
                 // don't bother checking for it here. The same is true for all the other branches below
    -            (None, Some(csv)) => csv,
    +            (None, Some(csv)) => csv,
     
                 // RBF with a specific value but that value is too high
    -            (Some(tx_builder::RbfValue::Value(rbf)), _) if rbf >= 0xFFFFFFFE => {
    +            (Some(tx_builder::RbfValue::Value(rbf)), _) if rbf >= 0xFFFFFFFE => {
                     return Err(Error::Generic(
                         "Cannot enable RBF with a nSequence >= 0xFFFFFFFE".into(),
                     ))
                 }
                 // RBF with a specific value requested, but the value is incompatible with CSV
                 (Some(tx_builder::RbfValue::Value(rbf)), Some(csv))
    -                if !check_nsequence_rbf(rbf, csv) =>
    +                if !check_nsequence_rbf(rbf, csv) =>
                 {
                     return Err(Error::Generic(format!(
                         "Cannot enable RBF with nSequence `{}` given a required OP_CSV of `{}`",
    @@ -4499,10 +4585,10 @@
                 }
     
                 // RBF enabled with the default value with CSV also enabled. CSV takes precedence
    -            (Some(tx_builder::RbfValue::Default), Some(csv)) => csv,
    +            (Some(tx_builder::RbfValue::Default), Some(csv)) => csv,
                 // Valid RBF, either default or with a specific value. We ignore the `CSV` value
                 // because we've already checked it before
    -            (Some(rbf), _) => rbf.get_value(),
    +            (Some(rbf), _) => rbf.get_value(),
             };
     
             let (fee_rate, mut fee_amount) = match params
    @@ -4511,7 +4597,7 @@
                 .unwrap_or(&FeePolicy::FeeRate(FeeRate::default()))
             {
                 //FIXME: see https://github.com/bitcoindevkit/bdk/issues/256
    -            FeePolicy::FeeAmount(fee) => {
    +            FeePolicy::FeeAmount(fee) => {
                     if let Some(previous_fee) = params.bumping_fee {
                         if *fee < previous_fee.absolute {
                             return Err(Error::FeeTooLow {
    @@ -4521,7 +4607,7 @@
                     }
                     (FeeRate::from_sat_per_vb(0.0), *fee)
                 }
    -            FeePolicy::FeeRate(rate) => {
    +            FeePolicy::FeeRate(rate) => {
                     if let Some(previous_fee) = params.bumping_fee {
                         let required_feerate = FeeRate::from_sat_per_vb(previous_fee.rate + 1.0);
                         if *rate < required_feerate {
    @@ -4554,7 +4640,7 @@
             let recipients = params.recipients.iter().map(|(r, v)| (r, *v));
     
             for (index, (script_pubkey, value)) in recipients.enumerate() {
    -            if value.is_dust() {
    +            if value.is_dust() && !script_pubkey.is_provably_unspendable() {
                     return Err(Error::OutputBelowDustLimit(index));
                 }
     
    @@ -4614,8 +4700,8 @@
             // prepare the drain output
             let mut drain_output = {
                 let script_pubkey = match params.drain_to {
    -                Some(ref drain_recipient) => drain_recipient.clone(),
    -                None => self.get_change_address()?,
    +                Some(ref drain_recipient) => drain_recipient.clone(),
    +                None => self.get_change_address()?,
                 };
     
                 TxOut {
    @@ -4652,7 +4738,7 @@
             }
     
             // sort input/outputs according to the chosen algorithm
    -        params.ordering.sort_tx(&mut tx);
    +        params.ordering.sort_tx(&mut tx);
     
             let txid = tx.txid();
             let sent = coin_selection.local_selected_amount();
    @@ -4674,7 +4760,7 @@
         /// Bump the fee of a transaction previously created with this wallet.
         ///
         /// Returns an error if the transaction is already confirmed or doesn't explicitly signal
    -    /// *repalce by fee* (RBF). If the transaction can be fee bumped then it returns a [`TxBuilder`]
    +    /// *replace by fee* (RBF). If the transaction can be fee bumped then it returns a [`TxBuilder`]
         /// pre-populated with the inputs and outputs of the original transaction.
         ///
         /// ## Example
    @@ -4716,12 +4802,12 @@
         pub fn build_fee_bump(
             &self,
             txid: Txid,
    -    ) -> Result<TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, BumpFee>, Error> {
    +    ) -> Result<TxBuilder<'_, B, D, DefaultCoinSelectionAlgorithm, BumpFee>, Error> {
             let mut details = match self.database.borrow().get_tx(&txid, true)? {
    -            None => return Err(Error::TransactionNotFound),
    -            Some(tx) if tx.transaction.is_none() => return Err(Error::TransactionNotFound),
    -            Some(tx) if tx.confirmation_time.is_some() => return Err(Error::TransactionConfirmed),
    -            Some(tx) => tx,
    +            None => return Err(Error::TransactionNotFound),
    +            Some(tx) if tx.transaction.is_none() => return Err(Error::TransactionNotFound),
    +            Some(tx) if tx.confirmation_time.is_some() => return Err(Error::TransactionConfirmed),
    +            Some(tx) => tx,
             };
             let mut tx = details.transaction.take().unwrap();
             if !tx.input.iter().any(|txin| txin.sequence <= 0xFFFFFFFD) {
    @@ -4737,7 +4823,7 @@
             let original_txin = tx.input.drain(..).collect::<Vec<_>>();
             let original_utxos = original_txin
                 .iter()
    -            .map(|txin| -> Result<_, Error> {
    +            .map(|txin| -> Result<_, Error> {
                     let txout = self
                         .database
                         .borrow()
    @@ -4749,14 +4835,14 @@
                         .borrow()
                         .get_path_from_script_pubkey(&txout.script_pubkey)?
                     {
    -                    Some((keychain, _)) => (
    +                    Some((keychain, _)) => (
                             self._get_descriptor_for_keychain(keychain)
                                 .0
                                 .max_satisfaction_weight()
                                 .unwrap(),
                             keychain,
                         ),
    -                    None => {
    +                    None => {
                             // estimate the weight based on the scriptsig/witness size present in the
                             // original transaction
                             let weight =
    @@ -4787,8 +4873,8 @@
                         .borrow()
                         .get_path_from_script_pubkey(&txout.script_pubkey)?
                     {
    -                    Some((keychain, _)) if keychain == change_type => change_index = Some(index),
    -                    _ => {}
    +                    Some((keychain, _)) if keychain == change_type => change_index = Some(index),
    +                    _ => {}
                     }
                 }
     
    @@ -4847,7 +4933,7 @@
         /// let  finalized = wallet.sign(&mut psbt, SignOptions::default())?;
         /// assert!(finalized, "we should have signed all the inputs");
         /// # Ok::<(), bdk::Error>(())
    -    pub fn sign(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> {
    +    pub fn sign(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> {
             // this helps us doing our job later
             self.add_input_hd_keypaths(psbt)?;
     
    @@ -4869,7 +4955,7 @@
                 && !psbt
                     .inputs
                     .iter()
    -                .all(|i| i.sighash_type.is_none() || i.sighash_type == Some(SigHashType::All))
    +                .all(|i| i.sighash_type.is_none() || i.sighash_type == Some(SigHashType::All))
             {
                 return Err(Error::Signer(signer::SignerError::NonStandardSighash));
             }
    @@ -4894,15 +4980,15 @@
         }
     
         /// Return the spending policies for the wallet's descriptor
    -    pub fn policies(&self, keychain: KeychainKind) -> Result<Option<Policy>, Error> {
    +    pub fn policies(&self, keychain: KeychainKind) -> Result<Option<Policy>, Error> {
             match (keychain, self.change_descriptor.as_ref()) {
    -            (KeychainKind::External, _) => Ok(self.descriptor.extract_policy(
    +            (KeychainKind::External, _) => Ok(self.descriptor.extract_policy(
                     &self.signers,
                     BuildSatisfaction::None,
                     &self.secp,
                 )?),
    -            (KeychainKind::Internal, None) => Ok(None),
    -            (KeychainKind::Internal, Some(desc)) => Ok(desc.extract_policy(
    +            (KeychainKind::Internal, None) => Ok(None),
    +            (KeychainKind::Internal, Some(desc)) => Ok(desc.extract_policy(
                     &self.change_signers,
                     BuildSatisfaction::None,
                     &self.secp,
    @@ -4917,18 +5003,18 @@
         pub fn public_descriptor(
             &self,
             keychain: KeychainKind,
    -    ) -> Result<Option<ExtendedDescriptor>, Error> {
    +    ) -> Result<Option<ExtendedDescriptor>, Error> {
             match (keychain, self.change_descriptor.as_ref()) {
    -            (KeychainKind::External, _) => Ok(Some(self.descriptor.clone())),
    -            (KeychainKind::Internal, None) => Ok(None),
    -            (KeychainKind::Internal, Some(desc)) => Ok(Some(desc.clone())),
    +            (KeychainKind::External, _) => Ok(Some(self.descriptor.clone())),
    +            (KeychainKind::Internal, None) => Ok(None),
    +            (KeychainKind::Internal, Some(desc)) => Ok(Some(desc.clone())),
             }
         }
     
         /// Try to finalize a PSBT
         ///
         /// The [`SignOptions`] can be used to tweak the behavior of the finalizer.
    -    pub fn finalize_psbt(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> {
    +    pub fn finalize_psbt(&self, psbt: &mut Psbt, sign_options: SignOptions) -> Result<bool, Error> {
             let tx = &psbt.global.unsigned_tx;
             let mut finished = true;
     
    @@ -4979,28 +5065,28 @@
                     });
     
                 match desc {
    -                Some(desc) => {
    +                Some(desc) => {
                         let mut tmp_input = bitcoin::TxIn::default();
                         match desc.satisfy(
    -                        &mut tmp_input,
    +                        &mut tmp_input,
                             (
                                 PsbtInputSatisfier::new(psbt, n),
                                 After::new(current_height, false),
                                 Older::new(current_height, create_height, false),
                             ),
                         ) {
    -                        Ok(_) => {
    -                            let psbt_input = &mut psbt.inputs[n];
    +                        Ok(_) => {
    +                            let psbt_input = &mut psbt.inputs[n];
                                 psbt_input.final_script_sig = Some(tmp_input.script_sig);
                                 psbt_input.final_script_witness = Some(tmp_input.witness);
                             }
    -                        Err(e) => {
    +                        Err(e) => {
                                 debug!("satisfy error {:?} for input {}", e, n);
                                 finished = false
                             }
                         }
                     }
    -                None => finished = false,
    +                None => finished = false,
                 }
             }
     
    @@ -5008,12 +5094,12 @@
         }
     
         /// Return the secp256k1 context used for all signing operations
    -    pub fn secp_ctx(&self) -> &SecpCtx {
    +    pub fn secp_ctx(&self) -> &SecpCtx {
             &self.secp
         }
     
    -    /// Returns the descriptor used to create adddresses for a particular `keychain`.
    -    pub fn get_descriptor_for_keychain(&self, keychain: KeychainKind) -> &ExtendedDescriptor {
    +    /// Returns the descriptor used to create addresses for a particular `keychain`.
    +    pub fn get_descriptor_for_keychain(&self, keychain: KeychainKind) -> &ExtendedDescriptor {
             let (descriptor, _) = self._get_descriptor_for_keychain(keychain);
             descriptor
         }
    @@ -5023,20 +5109,20 @@
         fn _get_descriptor_for_keychain(
             &self,
             keychain: KeychainKind,
    -    ) -> (&ExtendedDescriptor, KeychainKind) {
    +    ) -> (&ExtendedDescriptor, KeychainKind) {
             match keychain {
    -            KeychainKind::Internal if self.change_descriptor.is_some() => (
    +            KeychainKind::Internal if self.change_descriptor.is_some() => (
                     self.change_descriptor.as_ref().unwrap(),
                     KeychainKind::Internal,
                 ),
    -            _ => (&self.descriptor, KeychainKind::External),
    +            _ => (&self.descriptor, KeychainKind::External),
             }
         }
     
         fn get_descriptor_for_txout(
             &self,
             txout: &TxOut,
    -    ) -> Result<Option<DerivedDescriptor<'_>>, Error> {
    +    ) -> Result<Option<DerivedDescriptor<'_>>, Error> {
             Ok(self
                 .database
                 .borrow()
    @@ -5045,18 +5131,18 @@
                 .map(|(desc, child)| desc.as_derived(child, &self.secp)))
         }
     
    -    fn get_change_address(&self) -> Result<Script, Error> {
    +    fn get_change_address(&self) -> Result<Script, Error> {
             let (desc, keychain) = self._get_descriptor_for_keychain(KeychainKind::Internal);
             let index = self.fetch_and_increment_index(keychain)?;
     
             Ok(desc.as_derived(index, &self.secp).script_pubkey())
         }
     
    -    fn fetch_and_increment_index(&self, keychain: KeychainKind) -> Result<u32, Error> {
    +    fn fetch_and_increment_index(&self, keychain: KeychainKind) -> Result<u32, Error> {
             let (descriptor, keychain) = self._get_descriptor_for_keychain(keychain);
             let index = match descriptor.is_deriveable() {
    -            false => 0,
    -            true => self.database.borrow_mut().increment_last_index(keychain)?,
    +            false => 0,
    +            true => self.database.borrow_mut().increment_last_index(keychain)?,
             };
     
             if self
    @@ -5080,11 +5166,11 @@
             Ok(index)
         }
     
    -    fn fetch_index(&self, keychain: KeychainKind) -> Result<u32, Error> {
    +    fn fetch_index(&self, keychain: KeychainKind) -> Result<u32, Error> {
             let (descriptor, keychain) = self._get_descriptor_for_keychain(keychain);
             let index = match descriptor.is_deriveable() {
    -            false => Some(0),
    -            true => self.database.borrow_mut().get_last_index(keychain)?,
    +            false => Some(0),
    +            true => self.database.borrow_mut().get_last_index(keychain)?,
             };
     
             if let Some(i) = index {
    @@ -5094,7 +5180,7 @@
             }
         }
     
    -    fn set_index(&self, keychain: KeychainKind, index: u32) -> Result<(), Error> {
    +    fn set_index(&self, keychain: KeychainKind, index: u32) -> Result<(), Error> {
             self.database.borrow_mut().set_last_index(keychain, index)?;
             Ok(())
         }
    @@ -5104,7 +5190,7 @@
             keychain: KeychainKind,
             from: u32,
             mut count: u32,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             let (descriptor, keychain) = self._get_descriptor_for_keychain(keychain);
             if !descriptor.is_deriveable() {
                 if from > 0 {
    @@ -5137,7 +5223,7 @@
             Ok(())
         }
     
    -    fn get_available_utxos(&self) -> Result<Vec<(LocalUtxo, usize)>, Error> {
    +    fn get_available_utxos(&self) -> Result<Vec<(LocalUtxo, usize)>, Error> {
             Ok(self
                 .list_unspent()?
                 .into_iter()
    @@ -5164,7 +5250,7 @@
             must_use_all_available: bool,
             manual_only: bool,
             must_only_use_confirmed_tx: bool,
    -    ) -> Result<(Vec<WeightedUtxo>, Vec<WeightedUtxo>), Error> {
    +    ) -> Result<(Vec<WeightedUtxo>, Vec<WeightedUtxo>), Error> {
             //    must_spend <- manually selected utxos
             //    may_spend  <- all other available utxos
             let mut may_spend = self.get_available_utxos()?;
    @@ -5172,7 +5258,7 @@
             may_spend.retain(|may_spend| {
                 !manually_selected
                     .iter()
    -                .any(|manually_selected| manually_selected.utxo.outpoint() == may_spend.0.outpoint)
    +                .any(|manually_selected| manually_selected.utxo.outpoint() == may_spend.0.outpoint)
             });
             let mut must_spend = manually_selected;
     
    @@ -5183,7 +5269,7 @@
             }
     
             let satisfies_confirmed = match must_only_use_confirmed_tx {
    -            true => {
    +            true => {
                     let database = self.database.borrow();
                     may_spend
                         .iter()
    @@ -5191,13 +5277,13 @@
                             database
                                 .get_tx(&u.0.outpoint.txid, true)
                                 .map(|tx| match tx {
    -                                None => false,
    -                                Some(tx) => tx.confirmation_time.is_some(),
    +                                None => false,
    +                                Some(tx) => tx.confirmation_time.is_some(),
                                 })
                         })
                         .collect::<Result<Vec<_>, _>>()?
                 }
    -            false => vec![true; may_spend.len()],
    +            false => vec![true; may_spend.len()],
             };
     
             let mut i = 0;
    @@ -5218,7 +5304,7 @@
                 .collect();
     
             if must_use_all_available {
    -            must_spend.append(&mut may_spend);
    +            must_spend.append(&mut may_spend);
             }
     
             Ok((must_spend, may_spend))
    @@ -5229,7 +5315,7 @@
             tx: Transaction,
             selected: Vec<Utxo>,
             params: TxParams,
    -    ) -> Result<Psbt, Error> {
    +    ) -> Result<Psbt, Error> {
             use bitcoin::util::psbt::serialize::Serialize;
     
             let mut psbt = Psbt::from_unsigned_tx(tx)?;
    @@ -5249,11 +5335,11 @@
                     };
     
                     let origin = match xpub.origin {
    -                    Some(origin) => origin,
    -                    None if xpub.xkey.depth == 0 => {
    +                    Some(origin) => origin,
    +                    None if xpub.xkey.depth == 0 => {
                             (xpub.root_fingerprint(&self.secp), vec![].into())
                         }
    -                    _ => return Err(Error::MissingKeyOrigin(xpub.xkey.to_string())),
    +                    _ => return Err(Error::MissingKeyOrigin(xpub.xkey.to_string())),
                     };
     
                     psbt.global.unknown.insert(key, origin.serialize());
    @@ -5272,28 +5358,28 @@
                 .zip(psbt.global.unsigned_tx.input.iter())
             {
                 let utxo = match lookup_output.remove(&input.previous_output) {
    -                Some(utxo) => utxo,
    -                None => continue,
    +                Some(utxo) => utxo,
    +                None => continue,
                 };
     
                 match utxo {
    -                Utxo::Local(utxo) => {
    +                Utxo::Local(utxo) => {
                         *psbt_input =
                             match self.get_psbt_input(utxo, params.sighash, params.only_witness_utxo) {
    -                            Ok(psbt_input) => psbt_input,
    -                            Err(e) => match e {
    -                                Error::UnknownUtxo => Input {
    +                            Ok(psbt_input) => psbt_input,
    +                            Err(e) => match e {
    +                                Error::UnknownUtxo => Input {
                                         sighash_type: params.sighash,
                                         ..Input::default()
                                     },
    -                                _ => return Err(e),
    +                                _ => return Err(e),
                                 },
                             }
                     }
                     Utxo::Foreign {
                         psbt_input: foreign_psbt_input,
                         outpoint,
    -                } => {
    +                } => {
                         if !params.only_witness_utxo && foreign_psbt_input.non_witness_utxo.is_none() {
                             return Err(Error::Generic(format!(
                                 "Missing non_witness_utxo on foreign utxo {}",
    @@ -5306,7 +5392,7 @@
             }
     
             // probably redundant but it doesn't hurt...
    -        self.add_input_hd_keypaths(&mut psbt)?;
    +        self.add_input_hd_keypaths(&mut psbt)?;
     
             // add metadata for the outputs
             for (psbt_output, tx_output) in psbt
    @@ -5339,7 +5425,7 @@
             utxo: LocalUtxo,
             sighash_type: Option<SigHashType>,
             only_witness_utxo: bool,
    -    ) -> Result<Input, Error> {
    +    ) -> Result<Input, Error> {
             // Try to find the prev_script in our db to figure out if this is internal or external,
             // and the derivation index
             let (keychain, child) = self
    @@ -5372,7 +5458,7 @@
             Ok(psbt_input)
         }
     
    -    fn add_input_hd_keypaths(&self, psbt: &mut Psbt) -> Result<(), Error> {
    +    fn add_input_hd_keypaths(&self, psbt: &mut Psbt) -> Result<(), Error> {
             let mut input_utxos = Vec::with_capacity(psbt.inputs.len());
             for n in 0..psbt.inputs.len() {
                 input_utxos.push(psbt.get_utxo_for(n).clone());
    @@ -5393,13 +5479,18 @@
                         let mut hd_keypaths = desc
                             .as_derived(child, &self.secp)
                             .get_hd_keypaths(&self.secp)?;
    -                    psbt_input.bip32_derivation.append(&mut hd_keypaths);
    +                    psbt_input.bip32_derivation.append(&mut hd_keypaths);
                     }
                 }
             }
     
             Ok(())
         }
    +
    +    /// Return an immutable reference to the internal database
    +    pub fn database(&self) -> impl std::ops::Deref<Target = D> + '_ {
    +        self.database.borrow()
    +    }
     }
     
     impl<B, D> Wallet<B, D>
    @@ -5415,7 +5506,7 @@
             network: Network,
             database: D,
             client: B,
    -    ) -> Result<Self, Error> {
    +    ) -> Result<Self, Error> {
             let current_height = Some(maybe_await!(client.get_height())? as u32);
             Self::_new(
                 descriptor,
    @@ -5433,14 +5524,14 @@
             &self,
             progress_update: P,
             max_address_param: Option<u32>,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             debug!("Begin sync...");
     
             let mut run_setup = false;
     
             let max_address = match self.descriptor.is_deriveable() {
    -            false => 0,
    -            true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE),
    +            false => 0,
    +            true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE),
             };
             debug!("max_address {}", max_address);
             if self
    @@ -5456,8 +5547,8 @@
     
             if let Some(change_descriptor) = &self.change_descriptor {
                 let max_address = match change_descriptor.is_deriveable() {
    -                false => 0,
    -                true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE),
    +                false => 0,
    +                true => max_address_param.unwrap_or(CACHE_ADDR_BATCH_SIZE),
                 };
     
                 if self
    @@ -5502,18 +5593,27 @@
                 }
             }
     
    +        let sync_time = SyncTime {
    +            block_time: BlockTime {
    +                height: maybe_await!(self.client.get_height())?,
    +                timestamp: time::get_timestamp(),
    +            },
    +        };
    +        debug!("Saving `sync_time` = {:?}", sync_time);
    +        self.database.borrow_mut().set_sync_time(sync_time)?;
    +
             Ok(())
         }
     
         /// Return a reference to the internal blockchain client
    -    pub fn client(&self) -> &B {
    +    pub fn client(&self) -> &B {
             &self.client
         }
     
         /// Broadcast a transaction to the network
         #[maybe_async]
    -    pub fn broadcast(&self, tx: Transaction) -> Result<Txid, Error> {
    -        maybe_await!(self.client.broadcast(&tx))?;
    +    pub fn broadcast(&self, tx: &Transaction) -> Result<Txid, Error> {
    +        maybe_await!(self.client.broadcast(tx))?;
     
             Ok(tx.txid())
         }
    @@ -5522,7 +5622,7 @@
     /// Return a fake wallet that appears to be funded for testing.
     pub fn get_funded_wallet(
         descriptor: &str,
    -) -> (
    +) -> (
         Wallet<(), MemoryDatabase>,
         (String, Option<String>),
         bitcoin::Txid,
    @@ -5539,7 +5639,7 @@
         let funding_address_kix = 0;
     
         let tx_meta = testutils! {
    -            @tx ( (@external descriptors, funding_address_kix) => 50_000 ) (@confirmations 1)
    +            @tx ( (@external descriptors, funding_address_kix) => 50_000 ) (@confirmations 1)
         };
     
         wallet
    @@ -5665,31 +5765,31 @@
                 .is_some());
         }
     
    -    pub(crate) fn get_test_wpkh() -> &'static str {
    +    pub(crate) fn get_test_wpkh() -> &'static str {
             "wpkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)"
         }
     
    -    pub(crate) fn get_test_single_sig_csv() -> &'static str {
    +    pub(crate) fn get_test_single_sig_csv() -> &'static str {
             // and(pk(Alice),older(6))
             "wsh(and_v(v:pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW),older(6)))"
         }
     
    -    pub(crate) fn get_test_a_or_b_plus_csv() -> &'static str {
    +    pub(crate) fn get_test_a_or_b_plus_csv() -> &'static str {
             // or(pk(Alice),and(pk(Bob),older(144)))
             "wsh(or_d(pk(cRjo6jqfVNP33HhSS76UhXETZsGTZYx8FMFvR9kpbtCSV1PmdZdu),and_v(v:pk(cMnkdebixpXMPfkcNEjjGin7s94hiehAH4mLbYkZoh9KSiNNmqC8),older(144))))"
         }
     
    -    pub(crate) fn get_test_single_sig_cltv() -> &'static str {
    +    pub(crate) fn get_test_single_sig_cltv() -> &'static str {
             // and(pk(Alice),after(100000))
             "wsh(and_v(v:pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW),after(100000)))"
         }
     
         macro_rules! assert_fee_rate {
    -        ($tx:expr, $fees:expr, $fee_rate:expr $( ,@dust_change $( $dust_change:expr )* )* $( ,@add_signature $( $add_signature:expr )* )* ) => ({
    +        ($tx:expr, $fees:expr, $fee_rate:expr $( ,@dust_change $( $dust_change:expr )* )* $( ,@add_signature $( $add_signature:expr )* )* ) => ({
                 let mut tx = $tx.clone();
                 $(
                     $( $add_signature )*
    -                for txin in &mut tx.input {
    +                for txin in &mut tx.input {
                         txin.witness.push([0x00; 108].to_vec()); // fake signature
                     }
                 )*
    @@ -5965,11 +6065,11 @@
             assert_eq!(outputs.len(), 2);
             let main_output = outputs
                 .iter()
    -            .find(|x| x.script_pubkey == addr.script_pubkey())
    +            .find(|x| x.script_pubkey == addr.script_pubkey())
                 .unwrap();
             let drain_output = outputs
                 .iter()
    -            .find(|x| x.script_pubkey == drain_addr.script_pubkey())
    +            .find(|x| x.script_pubkey == drain_addr.script_pubkey())
                 .unwrap();
             assert_eq!(main_output.value, 20_000,);
             assert_eq!(drain_output.value, 30_000 - details.fee.unwrap_or(0));
    @@ -6316,7 +6416,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             let small_output_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -6345,7 +6445,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             let small_output_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -6474,13 +6574,13 @@
                     .unsigned_tx
                     .input
                     .iter()
    -                .any(|input| input.previous_output == utxo.outpoint),
    +                .any(|input| input.previous_output == utxo.outpoint),
                 "foreign_utxo should be in there"
             );
     
             let finished = wallet1
                 .sign(
    -                &mut psbt,
    +                &mut psbt,
                     SignOptions {
                         trust_witness_utxo: true,
                         ..Default::default()
    @@ -6495,7 +6595,7 @@
     
             let finished = wallet2
                 .sign(
    -                &mut psbt,
    +                &mut psbt,
                     SignOptions {
                         trust_witness_utxo: true,
                         ..Default::default()
    @@ -6731,7 +6831,7 @@
             let txid = tx.txid();
             // skip saving the utxos, we know they can't be used anyways
             details.transaction = Some(tx);
    -        details.confirmation_time = Some(ConfirmationTime {
    +        details.confirmation_time = Some(BlockTime {
                 timestamp: 12345678,
                 height: 42,
             });
    @@ -6818,7 +6918,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -6849,7 +6949,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 25_000
    @@ -6878,7 +6978,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -6915,7 +7015,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 25_000
    @@ -6944,7 +7044,7 @@
             let (psbt, mut original_details) = builder.finish().unwrap();
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -6988,7 +7088,7 @@
             let (psbt, mut original_details) = builder.finish().unwrap();
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7026,7 +7126,7 @@
             // receive an extra tx so that our wallet has two utxos.
             let incoming_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
             let outpoint = OutPoint {
    @@ -7044,7 +7144,7 @@
             let (psbt, mut original_details) = builder.finish().unwrap();
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7083,7 +7183,7 @@
             // unless you've also set "allow_shrinking" OR there is a change output.
             let incoming_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
             let outpoint = OutPoint {
    @@ -7101,7 +7201,7 @@
             let (psbt, mut original_details) = builder.finish().unwrap();
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7129,7 +7229,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7142,7 +7242,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7170,7 +7270,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 45_000
    @@ -7192,7 +7292,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7205,7 +7305,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7233,7 +7333,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 45_000
    @@ -7255,7 +7355,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             let incoming_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7276,7 +7376,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7310,7 +7410,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 original_send_all_amount
    @@ -7332,7 +7432,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7347,7 +7447,7 @@
             assert_eq!(tx.output.len(), 2);
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7381,7 +7481,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 45_000
    @@ -7395,7 +7495,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             let incoming_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7408,7 +7508,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7444,7 +7544,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 45_000
    @@ -7466,7 +7566,7 @@
             let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh());
             let incoming_txid = crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7479,7 +7579,7 @@
             let mut tx = psbt.extract_tx();
             let txid = tx.txid();
             // skip saving the new utxos, we know they can't be used anyways
    -        for txin in &mut tx.input {
    +        for txin in &mut tx.input {
                 txin.witness.push([0x00; 108].to_vec()); // fake signature
                 wallet
                     .database
    @@ -7515,7 +7615,7 @@
             assert_eq!(
                 tx.output
                     .iter()
    -                .find(|txout| txout.script_pubkey == addr.script_pubkey())
    +                .find(|txout| txout.script_pubkey == addr.script_pubkey())
                     .unwrap()
                     .value,
                 45_000
    @@ -7540,7 +7640,7 @@
             builder.drain_to(addr.script_pubkey()).drain_wallet();
             let (mut psbt, _) = builder.finish().unwrap();
     
    -        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
    +        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
             assert!(finalized);
     
             let extracted = psbt.extract_tx();
    @@ -7555,7 +7655,7 @@
             builder.drain_to(addr.script_pubkey()).drain_wallet();
             let (mut psbt, _) = builder.finish().unwrap();
     
    -        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
    +        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
             assert!(finalized);
     
             let extracted = psbt.extract_tx();
    @@ -7570,7 +7670,7 @@
             builder.drain_to(addr.script_pubkey()).drain_wallet();
             let (mut psbt, _) = builder.finish().unwrap();
     
    -        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
    +        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
             assert!(finalized);
     
             let extracted = psbt.extract_tx();
    @@ -7585,7 +7685,7 @@
             builder.drain_to(addr.script_pubkey()).drain_wallet();
             let (mut psbt, _) = builder.finish().unwrap();
     
    -        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
    +        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
             assert!(finalized);
     
             let extracted = psbt.extract_tx();
    @@ -7601,7 +7701,7 @@
             builder.drain_to(addr.script_pubkey()).drain_wallet();
             let (mut psbt, _) = builder.finish().unwrap();
     
    -        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
    +        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
             assert!(finalized);
     
             let extracted = psbt.extract_tx();
    @@ -7619,7 +7719,7 @@
             psbt.inputs[0].bip32_derivation.clear();
             assert_eq!(psbt.inputs[0].bip32_derivation.len(), 0);
     
    -        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
    +        let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
             assert!(finalized);
     
             let extracted = psbt.extract_tx();
    @@ -7670,7 +7770,7 @@
             psbt.global.unsigned_tx.input.push(bitcoin::TxIn::default());
             let is_final = wallet
                 .sign(
    -                &mut psbt,
    +                &mut psbt,
                     SignOptions {
                         trust_witness_utxo: true,
                         ..Default::default()
    @@ -7700,7 +7800,7 @@
                 .drain_wallet();
             let (mut psbt, _) = builder.finish().unwrap();
     
    -        let result = wallet.sign(&mut psbt, Default::default());
    +        let result = wallet.sign(&mut psbt, Default::default());
             assert!(
                 result.is_err(),
                 "Signing should have failed because the TX uses non-standard sighashes"
    @@ -7715,7 +7815,7 @@
     
             // try again after opting-in
             let result = wallet.sign(
    -            &mut psbt,
    +            &mut psbt,
                 SignOptions {
                     allow_all_sighashes: true,
                     ..Default::default()
    @@ -7771,7 +7871,7 @@
             // use the above address
             crate::populate_test_db!(
                 wallet.database.borrow_mut(),
    -            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
    +            testutils! (@tx ( (@external descriptors, 0) => 25_000 ) (@confirmations 1)),
                 Some(100),
             );
     
    @@ -7933,8 +8033,47 @@
                 }
             );
         }
    +
    +    #[test]
    +    fn test_sending_to_bip350_bech32m_address() {
    +        let (wallet, _, _) = get_funded_wallet(get_test_wpkh());
    +        let addr =
    +            Address::from_str("tb1pqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesf3hn0c")
    +                .unwrap();
    +        let mut builder = wallet.build_tx();
    +        builder.add_recipient(addr.script_pubkey(), 45_000);
    +        builder.finish().unwrap();
    +    }
    +}
    +
    +/// Deterministically generate a unique name given the descriptors defining the wallet
    +pub fn wallet_name_from_descriptor<T>(
    +    descriptor: T,
    +    change_descriptor: Option<T>,
    +    network: Network,
    +    secp: &SecpCtx,
    +) -> Result<String, Error>
    +where
    +    T: IntoWalletDescriptor,
    +{
    +    //TODO check descriptors contains only public keys
    +    let descriptor = descriptor
    +        .into_wallet_descriptor(secp, network)?
    +        .0
    +        .to_string();
    +    let mut wallet_name = get_checksum(&descriptor[..descriptor.find('#').unwrap()])?;
    +    if let Some(change_descriptor) = change_descriptor {
    +        let change_descriptor = change_descriptor
    +            .into_wallet_descriptor(secp, network)?
    +            .0
    +            .to_string();
    +        wallet_name.push_str(
    +            get_checksum(&change_descriptor[..change_descriptor.find('#').unwrap()])?.as_str(),
    +        );
    +    }
    +
    +    Ok(wallet_name)
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html index 77838e7d8e..28a606c35b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/signer.rs.html @@ -1,4 +1,6 @@ -signer.rs - source
      1
    +signer.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -881,13 +883,13 @@
     }
     
     impl From<hash160::Hash> for SignerId {
    -    fn from(hash: hash160::Hash) -> SignerId {
    +    fn from(hash: hash160::Hash) -> SignerId {
             SignerId::PkHash(hash)
         }
     }
     
     impl From<Fingerprint> for SignerId {
    -    fn from(fing: Fingerprint) -> SignerId {
    +    fn from(fing: Fingerprint) -> SignerId {
             SignerId::Fingerprint(fing)
         }
     }
    @@ -909,7 +911,7 @@
         InvalidNonWitnessUtxo,
         /// The `witness_utxo` field of the transaction is required to sign this input
         MissingWitnessUtxo,
    -    /// The `witness_script` field of the transaction is requied to sign this input
    +    /// The `witness_script` field of the transaction is required to sign this input
         MissingWitnessScript,
         /// The fingerprint and derivation path are missing from the psbt input
         MissingHdKeypath,
    @@ -922,7 +924,7 @@
     }
     
     impl fmt::Display for SignerError {
    -    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
             write!(f, "{:?}", self)
         }
     }
    @@ -941,27 +943,27 @@
         /// can be ignored.
         fn sign(
             &self,
    -        psbt: &mut psbt::PartiallySignedTransaction,
    +        psbt: &mut psbt::PartiallySignedTransaction,
             input_index: Option<usize>,
             secp: &SecpCtx,
    -    ) -> Result<(), SignerError>;
    +    ) -> Result<(), SignerError>;
     
         /// Return whether or not the signer signs the whole transaction in one go instead of every
         /// input individually
    -    fn sign_whole_tx(&self) -> bool;
    +    fn sign_whole_tx(&self) -> bool;
     
         /// Return the [`SignerId`] for this signer
         ///
         /// The [`SignerId`] can be used to lookup a signer in the [`Wallet`](crate::Wallet)'s signers map or to
         /// compare two signers.
    -    fn id(&self, secp: &SecpCtx) -> SignerId;
    +    fn id(&self, secp: &SecpCtx) -> SignerId;
     
         /// Return the secret key for the signer
         ///
         /// This is used internally to reconstruct the original descriptor that may contain secrets.
         /// External signers that are meant to keep key isolated should just return `None` here (which
         /// is the default for this method, if not overridden).
    -    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
    +    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
             None
         }
     }
    @@ -969,10 +971,10 @@
     impl Signer for DescriptorXKey<ExtendedPrivKey> {
         fn sign(
             &self,
    -        psbt: &mut psbt::PartiallySignedTransaction,
    +        psbt: &mut psbt::PartiallySignedTransaction,
             input_index: Option<usize>,
             secp: &SecpCtx,
    -    ) -> Result<(), SignerError> {
    +    ) -> Result<(), SignerError> {
             let input_index = input_index.unwrap();
             if input_index >= psbt.inputs.len() {
                 return Err(SignerError::InputIndexOutOfRange);
    @@ -996,19 +998,19 @@
                 })
                 .next()
             {
    -            Some((pk, full_path)) => (pk, full_path.clone()),
    -            None => return Ok(()),
    +            Some((pk, full_path)) => (pk, full_path.clone()),
    +            None => return Ok(()),
             };
     
             let derived_key = match self.origin.clone() {
    -            Some((_fingerprint, origin_path)) => {
    +            Some((_fingerprint, origin_path)) => {
                     let deriv_path = DerivationPath::from(
                         &full_path.into_iter().cloned().collect::<Vec<ChildNumber>>()
                             [origin_path.len()..],
                     );
                     self.xkey.derive_priv(secp, &deriv_path).unwrap()
                 }
    -            None => self.xkey.derive_priv(secp, &full_path).unwrap(),
    +            None => self.xkey.derive_priv(secp, &full_path).unwrap(),
             };
     
             if &derived_key.private_key.public_key(secp) != public_key {
    @@ -1018,15 +1020,15 @@
             }
         }
     
    -    fn sign_whole_tx(&self) -> bool {
    +    fn sign_whole_tx(&self) -> bool {
             false
         }
     
    -    fn id(&self, secp: &SecpCtx) -> SignerId {
    +    fn id(&self, secp: &SecpCtx) -> SignerId {
             SignerId::from(self.root_fingerprint(secp))
         }
     
    -    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
    +    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
             Some(DescriptorSecretKey::XPrv(self.clone()))
         }
     }
    @@ -1034,10 +1036,10 @@
     impl Signer for PrivateKey {
         fn sign(
             &self,
    -        psbt: &mut psbt::PartiallySignedTransaction,
    +        psbt: &mut psbt::PartiallySignedTransaction,
             input_index: Option<usize>,
             secp: &SecpCtx,
    -    ) -> Result<(), SignerError> {
    +    ) -> Result<(), SignerError> {
             let input_index = input_index.unwrap();
             if input_index >= psbt.inputs.len() || input_index >= psbt.global.unsigned_tx.input.len() {
                 return Err(SignerError::InputIndexOutOfRange);
    @@ -1055,12 +1057,12 @@
             }
     
             // FIXME: use the presence of `witness_utxo` as an indication that we should make a bip143
    -        // sig. Does this make sense? Should we add an extra argument to explicitly swith between
    +        // sig. Does this make sense? Should we add an extra argument to explicitly switch between
             // these? The original idea was to declare sign() as sign<Ctx: ScriptContex>() and use Ctx,
             // but that violates the rules for trait-objects, so we can't do it.
             let (hash, sighash) = match psbt.inputs[input_index].witness_utxo {
    -            Some(_) => Segwitv0::sighash(psbt, input_index)?,
    -            None => Legacy::sighash(psbt, input_index)?,
    +            Some(_) => Segwitv0::sighash(psbt, input_index)?,
    +            None => Legacy::sighash(psbt, input_index)?,
             };
     
             let signature = secp.sign(
    @@ -1079,15 +1081,15 @@
             Ok(())
         }
     
    -    fn sign_whole_tx(&self) -> bool {
    +    fn sign_whole_tx(&self) -> bool {
             false
         }
     
    -    fn id(&self, secp: &SecpCtx) -> SignerId {
    +    fn id(&self, secp: &SecpCtx) -> SignerId {
             SignerId::from(self.public_key(secp).to_pubkeyhash())
         }
     
    -    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
    +    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
             Some(DescriptorSecretKey::SinglePriv(DescriptorSinglePriv {
                 key: *self,
                 origin: None,
    @@ -1104,7 +1106,7 @@
     pub struct SignerOrdering(pub usize);
     
     impl std::default::Default for SignerOrdering {
    -    fn default() -> Self {
    +    fn default() -> Self {
             SignerOrdering(100)
         }
     }
    @@ -1116,7 +1118,7 @@
     }
     
     impl From<(SignerId, SignerOrdering)> for SignersContainerKey {
    -    fn from(tuple: (SignerId, SignerOrdering)) -> Self {
    +    fn from(tuple: (SignerId, SignerOrdering)) -> Self {
             SignersContainerKey {
                 id: tuple.0,
                 ordering: tuple.1,
    @@ -1130,7 +1132,7 @@
     
     impl SignersContainer {
         /// Create a map of public keys to secret keys
    -    pub fn as_key_map(&self, secp: &SecpCtx) -> KeyMap {
    +    pub fn as_key_map(&self, secp: &SecpCtx) -> KeyMap {
             self.0
                 .values()
                 .filter_map(|signer| signer.descriptor_secret_key())
    @@ -1140,18 +1142,18 @@
     }
     
     impl From<KeyMap> for SignersContainer {
    -    fn from(keymap: KeyMap) -> SignersContainer {
    +    fn from(keymap: KeyMap) -> SignersContainer {
             let secp = Secp256k1::new();
             let mut container = SignersContainer::new();
     
             for (_, secret) in keymap {
                 match secret {
    -                DescriptorSecretKey::SinglePriv(private_key) => container.add_external(
    +                DescriptorSecretKey::SinglePriv(private_key) => container.add_external(
                         SignerId::from(private_key.key.public_key(&secp).to_pubkeyhash()),
                         SignerOrdering::default(),
                         Arc::new(private_key.key),
                     ),
    -                DescriptorSecretKey::XPrv(xprv) => container.add_external(
    +                DescriptorSecretKey::XPrv(xprv) => container.add_external(
                         SignerId::from(xprv.root_fingerprint(&secp)),
                         SignerOrdering::default(),
                         Arc::new(xprv),
    @@ -1165,28 +1167,28 @@
     
     impl SignersContainer {
         /// Default constructor
    -    pub fn new() -> Self {
    +    pub fn new() -> Self {
             SignersContainer(Default::default())
         }
     
         /// Adds an external signer to the container for the specified id. Optionally returns the
         /// signer that was previously in the container, if any
         pub fn add_external(
    -        &mut self,
    +        &mut self,
             id: SignerId,
             ordering: SignerOrdering,
             signer: Arc<dyn Signer>,
    -    ) -> Option<Arc<dyn Signer>> {
    +    ) -> Option<Arc<dyn Signer>> {
             self.0.insert((id, ordering).into(), signer)
         }
     
         /// Removes a signer from the container and returns it
    -    pub fn remove(&mut self, id: SignerId, ordering: SignerOrdering) -> Option<Arc<dyn Signer>> {
    +    pub fn remove(&mut self, id: SignerId, ordering: SignerOrdering) -> Option<Arc<dyn Signer>> {
             self.0.remove(&(id, ordering).into())
         }
     
         /// Returns the list of identifiers of all the signers in the container
    -    pub fn ids(&self) -> Vec<&SignerId> {
    +    pub fn ids(&self) -> Vec<&SignerId> {
             self.0
                 .keys()
                 .map(|SignersContainerKey { id, .. }| id)
    @@ -1194,18 +1196,18 @@
         }
     
         /// Returns the list of signers in the container, sorted by lowest to highest `ordering`
    -    pub fn signers(&self) -> Vec<&Arc<dyn Signer>> {
    +    pub fn signers(&self) -> Vec<&Arc<dyn Signer>> {
             self.0.values().collect()
         }
     
         /// Finds the signer with lowest ordering for a given id in the container.
    -    pub fn find(&self, id: SignerId) -> Option<&Arc<dyn Signer>> {
    +    pub fn find(&self, id: SignerId) -> Option<&Arc<dyn Signer>> {
             self.0
                 .range((
                     Included(&(id.clone(), SignerOrdering(0)).into()),
                     Included(&(id.clone(), SignerOrdering(usize::MAX)).into()),
                 ))
    -            .filter(|(k, _)| k.id == id)
    +            .filter(|(k, _)| k.id == id)
                 .map(|(_, v)| v)
                 .next()
         }
    @@ -1246,7 +1248,7 @@
     }
     
     impl Default for SignOptions {
    -    fn default() -> Self {
    +    fn default() -> Self {
             SignOptions {
                 trust_witness_utxo: false,
                 assume_height: None,
    @@ -1259,14 +1261,14 @@
         fn sighash(
             psbt: &psbt::PartiallySignedTransaction,
             input_index: usize,
    -    ) -> Result<(SigHash, SigHashType), SignerError>;
    +    ) -> Result<(SigHash, SigHashType), SignerError>;
     }
     
     impl ComputeSighash for Legacy {
         fn sighash(
             psbt: &psbt::PartiallySignedTransaction,
             input_index: usize,
    -    ) -> Result<(SigHash, SigHashType), SignerError> {
    +    ) -> Result<(SigHash, SigHashType), SignerError> {
             if input_index >= psbt.inputs.len() || input_index >= psbt.global.unsigned_tx.input.len() {
                 return Err(SignerError::InputIndexOutOfRange);
             }
    @@ -1276,8 +1278,8 @@
     
             let sighash = psbt_input.sighash_type.unwrap_or(SigHashType::All);
             let script = match psbt_input.redeem_script {
    -            Some(ref redeem_script) => redeem_script.clone(),
    -            None => {
    +            Some(ref redeem_script) => redeem_script.clone(),
    +            None => {
                     let non_witness_utxo = psbt_input
                         .non_witness_utxo
                         .as_ref()
    @@ -1300,7 +1302,7 @@
         }
     }
     
    -fn p2wpkh_script_code(script: &Script) -> Script {
    +fn p2wpkh_script_code(script: &Script) -> Script {
         ScriptBuilder::new()
             .push_opcode(opcodes::all::OP_DUP)
             .push_opcode(opcodes::all::OP_HASH160)
    @@ -1314,7 +1316,7 @@
         fn sighash(
             psbt: &psbt::PartiallySignedTransaction,
             input_index: usize,
    -    ) -> Result<(SigHash, SigHashType), SignerError> {
    +    ) -> Result<(SigHash, SigHashType), SignerError> {
             if input_index >= psbt.inputs.len() || input_index >= psbt.global.unsigned_tx.input.len() {
                 return Err(SignerError::InputIndexOutOfRange);
             }
    @@ -1347,8 +1349,8 @@
             let value = utxo.value;
     
             let script = match psbt_input.witness_script {
    -            Some(ref witness_script) => witness_script.clone(),
    -            None => {
    +            Some(ref witness_script) => witness_script.clone(),
    +            None => {
                     if utxo.script_pubkey.is_v0_p2wpkh() {
                         p2wpkh_script_code(&utxo.script_pubkey)
                     } else if psbt_input
    @@ -1377,13 +1379,13 @@
     }
     
     impl PartialOrd for SignersContainerKey {
    -    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
    +    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
             Some(self.cmp(other))
         }
     }
     
     impl Ord for SignersContainerKey {
    -    fn cmp(&self, other: &Self) -> Ordering {
    +    fn cmp(&self, other: &Self) -> Ordering {
             self.ordering
                 .cmp(&other.ordering)
                 .then(self.id.cmp(&other.id))
    @@ -1391,8 +1393,8 @@
     }
     
     impl PartialEq for SignersContainerKey {
    -    fn eq(&self, other: &Self) -> bool {
    -        self.id == other.id && self.ordering == other.ordering
    +    fn eq(&self, other: &Self) -> bool {
    +        self.id == other.id && self.ordering == other.ordering
         }
     }
     
    @@ -1411,9 +1413,9 @@
         use miniscript::ScriptContext;
         use std::str::FromStr;
     
    -    fn is_equal(this: &Arc<dyn Signer>, that: &Arc<DummySigner>) -> bool {
    +    fn is_equal(this: &Arc<dyn Signer>, that: &Arc<DummySigner>) -> bool {
             let secp = Secp256k1::new();
    -        this.id(&secp) == that.id(&secp)
    +        this.id(&secp) == that.id(&secp)
         }
     
         // Signers added with the same ordering (like `Ordering::default`) created from `KeyMap`
    @@ -1495,18 +1497,18 @@
         impl Signer for DummySigner {
             fn sign(
                 &self,
    -            _psbt: &mut PartiallySignedTransaction,
    +            _psbt: &mut PartiallySignedTransaction,
                 _input_index: Option<usize>,
                 _secp: &SecpCtx,
    -        ) -> Result<(), SignerError> {
    +        ) -> Result<(), SignerError> {
                 Ok(())
             }
     
    -        fn id(&self, _secp: &SecpCtx) -> SignerId {
    +        fn id(&self, _secp: &SecpCtx) -> SignerId {
                 SignerId::Dummy(self.number)
             }
     
    -        fn sign_whole_tx(&self) -> bool {
    +        fn sign_whole_tx(&self) -> bool {
                 true
             }
         }
    @@ -1518,7 +1520,7 @@
     
         fn setup_keys<Ctx: ScriptContext>(
             tprv: &str,
    -    ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) {
    +    ) -> (DescriptorKey<Ctx>, DescriptorKey<Ctx>, Fingerprint) {
             let secp: Secp256k1<All> = Secp256k1::new();
             let path = bip32::DerivationPath::from_str(PATH).unwrap();
             let tprv = bip32::ExtendedPrivKey::from_str(tprv).unwrap();
    @@ -1531,6 +1533,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html index 48832d0f43..b98a60a3e4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/time.rs.html @@ -1,4 +1,6 @@ -time.rs - source
     1
    +time.rs - source
    +    
    logo
     1
      2
      3
      4
    @@ -99,7 +101,7 @@
     
     /// Return the current timestamp in seconds
     #[cfg(not(target_arch = "wasm32"))]
    -pub fn get_timestamp() -> u64 {
    +pub fn get_timestamp() -> u64 {
         SystemTime::now()
             .duration_since(UNIX_EPOCH)
             .unwrap()
    @@ -107,7 +109,7 @@
     }
     /// Return the current timestamp in seconds
     #[cfg(target_arch = "wasm32")]
    -pub fn get_timestamp() -> u64 {
    +pub fn get_timestamp() -> u64 {
         let millis = Date::now();
     
         (millis / 1000.0) as u64
    @@ -120,11 +122,11 @@
     
     impl Instant {
         #[cfg(not(target_arch = "wasm32"))]
    -    pub fn new() -> Self {
    +    pub fn new() -> Self {
             Instant(SystemInstant::now())
         }
         #[cfg(target_arch = "wasm32")]
    -    pub fn new() -> Self {
    +    pub fn new() -> Self {
             let millis = Date::now();
     
             let secs = millis / 1000.0;
    @@ -134,17 +136,16 @@
         }
     
         #[cfg(not(target_arch = "wasm32"))]
    -    pub fn elapsed(&self) -> Duration {
    +    pub fn elapsed(&self) -> Duration {
             self.0.elapsed()
         }
         #[cfg(target_arch = "wasm32")]
    -    pub fn elapsed(&self) -> Duration {
    +    pub fn elapsed(&self) -> Duration {
             let now = Instant::new();
     
             now.0.checked_sub(self.0).unwrap_or(Duration::new(0, 0))
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html index 732238dba1..d8a37cfce1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/tx_builder.rs.html @@ -1,4 +1,6 @@ -tx_builder.rs - source
      1
    +tx_builder.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -884,6 +886,13 @@
     884
     885
     886
    +887
    +888
    +889
    +890
    +891
    +892
    +893
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -1051,13 +1060,13 @@
     }
     
     impl std::default::Default for FeePolicy {
    -    fn default() -> Self {
    +    fn default() -> Self {
             FeePolicy::FeeRate(FeeRate::default_min_relay_fee())
         }
     }
     
     impl<'a, Cs: Clone, Ctx, B, D> Clone for TxBuilder<'a, B, D, Cs, Ctx> {
    -    fn clone(&self) -> Self {
    +    fn clone(&self) -> Self {
             TxBuilder {
                 wallet: self.wallet,
                 params: self.params.clone(),
    @@ -1072,13 +1081,13 @@
         TxBuilder<'a, B, D, Cs, Ctx>
     {
         /// Set a custom fee rate
    -    pub fn fee_rate(&mut self, fee_rate: FeeRate) -> &mut Self {
    +    pub fn fee_rate(&mut self, fee_rate: FeeRate) -> &mut Self {
             self.params.fee_policy = Some(FeePolicy::FeeRate(fee_rate));
             self
         }
     
         /// Set an absolute fee
    -    pub fn fee_absolute(&mut self, fee_amount: u64) -> &mut Self {
    +    pub fn fee_absolute(&mut self, fee_amount: u64) -> &mut Self {
             self.params.fee_policy = Some(FeePolicy::FeeAmount(fee_amount));
             self
         }
    @@ -1143,13 +1152,13 @@
         /// # Ok::<(), bdk::Error>(())
         /// ```
         pub fn policy_path(
    -        &mut self,
    +        &mut self,
             policy_path: BTreeMap<String, Vec<usize>>,
             keychain: KeychainKind,
    -    ) -> &mut Self {
    +    ) -> &mut Self {
             let to_update = match keychain {
    -            KeychainKind::Internal => &mut self.params.internal_policy_path,
    -            KeychainKind::External => &mut self.params.external_policy_path,
    +            KeychainKind::Internal => &mut self.params.internal_policy_path,
    +            KeychainKind::External => &mut self.params.external_policy_path,
             };
     
             *to_update = Some(policy_path);
    @@ -1162,7 +1171,7 @@
         ///
         /// These have priority over the "unspendable" utxos, meaning that if a utxo is present both in
         /// the "utxos" and the "unspendable" list, it will be spent.
    -    pub fn add_utxos(&mut self, outpoints: &[OutPoint]) -> Result<&mut Self, Error> {
    +    pub fn add_utxos(&mut self, outpoints: &[OutPoint]) -> Result<&mut Self, Error> {
             let utxos = outpoints
                 .iter()
                 .map(|outpoint| self.wallet.get_utxo(*outpoint)?.ok_or(Error::UnknownUtxo))
    @@ -1184,7 +1193,7 @@
         ///
         /// These have priority over the "unspendable" utxos, meaning that if a utxo is present both in
         /// the "utxos" and the "unspendable" list, it will be spent.
    -    pub fn add_utxo(&mut self, outpoint: OutPoint) -> Result<&mut Self, Error> {
    +    pub fn add_utxo(&mut self, outpoint: OutPoint) -> Result<&mut Self, Error> {
             self.add_utxos(&[outpoint])
         }
     
    @@ -1196,7 +1205,7 @@
         /// 2. `psbt_input`: To know the value.
         /// 3. `satisfaction_weight`: To know how much weight/vbytes the input will add to the transaction for fee calculation.
         ///
    -    /// There are several security concerns about adding foregin UTXOs that application
    +    /// There are several security concerns about adding foreign UTXOs that application
         /// developers should consider. First, how do you know the value of the input is correct? If a
         /// `non_witness_utxo` is provided in the `psbt_input` then this method implicitly verifies the
         /// value by checking it against the transaction. If only a `witness_utxo` is provided then this
    @@ -1230,14 +1239,14 @@
         /// [`finish`]: Self::finish
         /// [`max_satisfaction_weight`]: miniscript::Descriptor::max_satisfaction_weight
         pub fn add_foreign_utxo(
    -        &mut self,
    +        &mut self,
             outpoint: OutPoint,
             psbt_input: psbt::Input,
             satisfaction_weight: usize,
    -    ) -> Result<&mut Self, Error> {
    +    ) -> Result<&mut Self, Error> {
             if psbt_input.witness_utxo.is_none() {
                 match psbt_input.non_witness_utxo.as_ref() {
    -                Some(tx) => {
    +                Some(tx) => {
                         if tx.txid() != outpoint.txid {
                             return Err(Error::Generic(
                                 "Foreign utxo outpoint does not match PSBT input".into(),
    @@ -1247,7 +1256,7 @@
                             return Err(Error::InvalidOutpoint(outpoint));
                         }
                     }
    -                None => {
    +                None => {
                         return Err(Error::Generic(
                             "Foreign utxo missing witness_utxo or non_witness_utxo".into(),
                         ))
    @@ -1272,7 +1281,7 @@
         /// make the transaction valid.
         ///
         /// [`add_utxo`]: Self::add_utxo
    -    pub fn manually_selected_only(&mut self) -> &mut Self {
    +    pub fn manually_selected_only(&mut self) -> &mut Self {
             self.params.manually_selected_only = true;
             self
         }
    @@ -1281,7 +1290,7 @@
         ///
         /// It's important to note that the "must-be-spent" utxos added with [`TxBuilder::add_utxo`]
         /// have priority over these. See the docs of the two linked methods for more details.
    -    pub fn unspendable(&mut self, unspendable: Vec<OutPoint>) -> &mut Self {
    +    pub fn unspendable(&mut self, unspendable: Vec<OutPoint>) -> &mut Self {
             self.params.unspendable = unspendable.into_iter().collect();
             self
         }
    @@ -1290,7 +1299,7 @@
         ///
         /// It's important to note that the "must-be-spent" utxos added with [`TxBuilder::add_utxo`]
         /// have priority over this. See the docs of the two linked methods for more details.
    -    pub fn add_unspendable(&mut self, unspendable: OutPoint) -> &mut Self {
    +    pub fn add_unspendable(&mut self, unspendable: OutPoint) -> &mut Self {
             self.params.unspendable.insert(unspendable);
             self
         }
    @@ -1298,13 +1307,13 @@
         /// Sign with a specific sig hash
         ///
         /// **Use this option very carefully**
    -    pub fn sighash(&mut self, sighash: SigHashType) -> &mut Self {
    +    pub fn sighash(&mut self, sighash: SigHashType) -> &mut Self {
             self.params.sighash = Some(sighash);
             self
         }
     
         /// Choose the ordering for inputs and outputs of the transaction
    -    pub fn ordering(&mut self, ordering: TxOrdering) -> &mut Self {
    +    pub fn ordering(&mut self, ordering: TxOrdering) -> &mut Self {
             self.params.ordering = ordering;
             self
         }
    @@ -1312,7 +1321,7 @@
         /// Use a specific nLockTime while creating the transaction
         ///
         /// This can cause conflicts if the wallet's descriptors contain an "after" (OP_CLTV) operator.
    -    pub fn nlocktime(&mut self, locktime: u32) -> &mut Self {
    +    pub fn nlocktime(&mut self, locktime: u32) -> &mut Self {
             self.params.locktime = Some(locktime);
             self
         }
    @@ -1321,7 +1330,7 @@
         ///
         /// The `version` should always be greater than `0` and greater than `1` if the wallet's
         /// descriptors contain an "older" (OP_CSV) operator.
    -    pub fn version(&mut self, version: i32) -> &mut Self {
    +    pub fn version(&mut self, version: i32) -> &mut Self {
             self.params.version = Some(Version(version));
             self
         }
    @@ -1330,7 +1339,7 @@
         ///
         /// This effectively adds all the change outputs to the "unspendable" list. See
         /// [`TxBuilder::unspendable`].
    -    pub fn do_not_spend_change(&mut self) -> &mut Self {
    +    pub fn do_not_spend_change(&mut self) -> &mut Self {
             self.params.change_policy = ChangeSpendPolicy::ChangeForbidden;
             self
         }
    @@ -1339,14 +1348,14 @@
         ///
         /// This effectively adds all the non-change outputs to the "unspendable" list. See
         /// [`TxBuilder::unspendable`].
    -    pub fn only_spend_change(&mut self) -> &mut Self {
    +    pub fn only_spend_change(&mut self) -> &mut Self {
             self.params.change_policy = ChangeSpendPolicy::OnlyChange;
             self
         }
     
         /// Set a specific [`ChangeSpendPolicy`]. See [`TxBuilder::do_not_spend_change`] and
         /// [`TxBuilder::only_spend_change`] for some shortcuts.
    -    pub fn change_policy(&mut self, change_policy: ChangeSpendPolicy) -> &mut Self {
    +    pub fn change_policy(&mut self, change_policy: ChangeSpendPolicy) -> &mut Self {
             self.params.change_policy = change_policy;
             self
         }
    @@ -1356,7 +1365,7 @@
         ///
         /// This reduces the size of the PSBT, but some signers might reject them due to the lack of
         /// the `non_witness_utxo`.
    -    pub fn only_witness_utxo(&mut self) -> &mut Self {
    +    pub fn only_witness_utxo(&mut self) -> &mut Self {
             self.params.only_witness_utxo = true;
             self
         }
    @@ -1365,7 +1374,7 @@
         /// [`psbt::Output::witness_script`](bitcoin::util::psbt::Output::witness_script) fields.
         ///
         /// This is useful for signers which always require it, like ColdCard hardware wallets.
    -    pub fn include_output_redeem_witness_script(&mut self) -> &mut Self {
    +    pub fn include_output_redeem_witness_script(&mut self) -> &mut Self {
             self.params.include_output_redeem_witness_script = true;
             self
         }
    @@ -1375,13 +1384,13 @@
         ///
         /// This is useful for offline signers that take part to a multisig. Some hardware wallets like
         /// BitBox and ColdCard are known to require this.
    -    pub fn add_global_xpubs(&mut self) -> &mut Self {
    +    pub fn add_global_xpubs(&mut self) -> &mut Self {
             self.params.add_global_xpubs = true;
             self
         }
     
         /// Spend all the available inputs. This respects filters like [`TxBuilder::unspendable`] and the change policy.
    -    pub fn drain_wallet(&mut self) -> &mut Self {
    +    pub fn drain_wallet(&mut self) -> &mut Self {
             self.params.drain_wallet = true;
             self
         }
    @@ -1394,7 +1403,7 @@
         pub fn coin_selection<P: CoinSelectionAlgorithm<D>>(
             self,
             coin_selection: P,
    -    ) -> TxBuilder<'a, B, D, P, Ctx> {
    +    ) -> TxBuilder<'a, B, D, P, Ctx> {
             TxBuilder {
                 wallet: self.wallet,
                 params: self.params,
    @@ -1408,14 +1417,14 @@
         /// Returns the [`BIP174`] "PSBT" and summary details about the transaction.
         ///
         /// [`BIP174`]: https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki
    -    pub fn finish(self) -> Result<(Psbt, TransactionDetails), Error> {
    +    pub fn finish(self) -> Result<(Psbt, TransactionDetails), Error> {
             self.wallet.create_tx(self.coin_selection, self.params)
         }
     
         /// Enable signaling RBF
         ///
         /// This will use the default nSequence value of `0xFFFFFFFD`.
    -    pub fn enable_rbf(&mut self) -> &mut Self {
    +    pub fn enable_rbf(&mut self) -> &mut Self {
             self.params.rbf = Some(RbfValue::Default);
             self
         }
    @@ -1427,7 +1436,7 @@
         ///
         /// If the `nsequence` is higher than `0xFFFFFFFD` an error will be thrown, since it would not
         /// be a valid nSequence to signal RBF.
    -    pub fn enable_rbf_with_sequence(&mut self, nsequence: u32) -> &mut Self {
    +    pub fn enable_rbf_with_sequence(&mut self, nsequence: u32) -> &mut Self {
             self.params.rbf = Some(RbfValue::Value(nsequence));
             self
         }
    @@ -1435,17 +1444,24 @@
     
     impl<'a, B, D: BatchDatabase, Cs: CoinSelectionAlgorithm<D>> TxBuilder<'a, B, D, Cs, CreateTx> {
         /// Replace the recipients already added with a new list
    -    pub fn set_recipients(&mut self, recipients: Vec<(Script, u64)>) -> &mut Self {
    +    pub fn set_recipients(&mut self, recipients: Vec<(Script, u64)>) -> &mut Self {
             self.params.recipients = recipients;
             self
         }
     
         /// Add a recipient to the internal list
    -    pub fn add_recipient(&mut self, script_pubkey: Script, amount: u64) -> &mut Self {
    +    pub fn add_recipient(&mut self, script_pubkey: Script, amount: u64) -> &mut Self {
             self.params.recipients.push((script_pubkey, amount));
             self
         }
     
    +    /// Add data as an output, using OP_RETURN
    +    pub fn add_data(&mut self, data: &[u8]) -> &mut Self {
    +        let script = Script::new_op_return(data);
    +        self.add_recipient(script, 0u64);
    +        self
    +    }
    +
         /// Sets the address to *drain* excess coins to.
         ///
         /// Usually, when there are excess coins they are sent to a change address generated by the
    @@ -1486,7 +1502,7 @@
         /// [`allow_shrinking`]: Self::allow_shrinking
         /// [`add_recipient`]: Self::add_recipient
         /// [`drain_wallet`]: Self::drain_wallet
    -    pub fn drain_to(&mut self, script_pubkey: Script) -> &mut Self {
    +    pub fn drain_to(&mut self, script_pubkey: Script) -> &mut Self {
             self.params.drain_to = Some(script_pubkey);
             self
         }
    @@ -1504,19 +1520,19 @@
         ///
         /// Returns an `Err` if `script_pubkey` can't be found among the recipients of the
         /// transaction we are bumping.
    -    pub fn allow_shrinking(&mut self, script_pubkey: Script) -> Result<&mut Self, Error> {
    +    pub fn allow_shrinking(&mut self, script_pubkey: Script) -> Result<&mut Self, Error> {
             match self
                 .params
                 .recipients
                 .iter()
    -            .position(|(recipient_script, _)| *recipient_script == script_pubkey)
    +            .position(|(recipient_script, _)| *recipient_script == script_pubkey)
             {
    -            Some(position) => {
    +            Some(position) => {
                     self.params.recipients.remove(position);
                     self.params.drain_to = Some(script_pubkey);
                     Ok(self)
                 }
    -            None => Err(Error::Generic(format!(
    +            None => Err(Error::Generic(format!(
                     "{} was not in the original transaction",
                     script_pubkey
                 ))),
    @@ -1536,17 +1552,17 @@
     }
     
     impl Default for TxOrdering {
    -    fn default() -> Self {
    +    fn default() -> Self {
             TxOrdering::Shuffle
         }
     }
     
     impl TxOrdering {
         /// Sort transaction inputs and outputs by [`TxOrdering`] variant
    -    pub fn sort_tx(&self, tx: &mut Transaction) {
    +    pub fn sort_tx(&self, tx: &mut Transaction) {
             match self {
    -            TxOrdering::Untouched => {}
    -            TxOrdering::Shuffle => {
    +            TxOrdering::Untouched => {}
    +            TxOrdering::Shuffle => {
                     use rand::seq::SliceRandom;
                     #[cfg(test)]
                     use rand::SeedableRng;
    @@ -1556,9 +1572,9 @@
                     #[cfg(test)]
                     let mut rng = rand::rngs::StdRng::seed_from_u64(0);
     
    -                tx.output.shuffle(&mut rng);
    +                tx.output.shuffle(&mut rng);
                 }
    -            TxOrdering::Bip69Lexicographic => {
    +            TxOrdering::Bip69Lexicographic => {
                     tx.input.sort_unstable_by_key(|txin| {
                         (txin.previous_output.txid, txin.previous_output.vout)
                     });
    @@ -1576,7 +1592,7 @@
     pub(crate) struct Version(pub(crate) i32);
     
     impl Default for Version {
    -    fn default() -> Self {
    +    fn default() -> Self {
             Version(1)
         }
     }
    @@ -1591,10 +1607,10 @@
     }
     
     impl RbfValue {
    -    pub(crate) fn get_value(&self) -> u32 {
    +    pub(crate) fn get_value(&self) -> u32 {
             match self {
    -            RbfValue::Default => 0xFFFFFFFD,
    -            RbfValue::Value(v) => *v,
    +            RbfValue::Default => 0xFFFFFFFD,
    +            RbfValue::Value(v) => *v,
             }
         }
     }
    @@ -1611,17 +1627,17 @@
     }
     
     impl Default for ChangeSpendPolicy {
    -    fn default() -> Self {
    +    fn default() -> Self {
             ChangeSpendPolicy::ChangeAllowed
         }
     }
     
     impl ChangeSpendPolicy {
    -    pub(crate) fn is_satisfied_by(&self, utxo: &LocalUtxo) -> bool {
    +    pub(crate) fn is_satisfied_by(&self, utxo: &LocalUtxo) -> bool {
             match self {
    -            ChangeSpendPolicy::ChangeAllowed => true,
    -            ChangeSpendPolicy::OnlyChange => utxo.keychain == KeychainKind::Internal,
    -            ChangeSpendPolicy::ChangeForbidden => utxo.keychain == KeychainKind::External,
    +            ChangeSpendPolicy::ChangeAllowed => true,
    +            ChangeSpendPolicy::OnlyChange => utxo.keychain == KeychainKind::Internal,
    +            ChangeSpendPolicy::ChangeForbidden => utxo.keychain == KeychainKind::External,
             }
         }
     }
    @@ -1635,7 +1651,7 @@
                                         03e80300000000000002aaeee80300000000000001aa200300000000000001ff\
                                         00000000";
         macro_rules! ordering_test_tx {
    -        () => {
    +        () => {
                 deserialize::<bitcoin::Transaction>(&Vec::<u8>::from_hex(ORDERING_TEST_TX).unwrap())
                     .unwrap()
             };
    @@ -1656,7 +1672,7 @@
             let original_tx = ordering_test_tx!();
             let mut tx = original_tx.clone();
     
    -        TxOrdering::Untouched.sort_tx(&mut tx);
    +        TxOrdering::Untouched.sort_tx(&mut tx);
     
             assert_eq!(original_tx, tx);
         }
    @@ -1666,7 +1682,7 @@
             let original_tx = ordering_test_tx!();
             let mut tx = original_tx.clone();
     
    -        TxOrdering::Shuffle.sort_tx(&mut tx);
    +        TxOrdering::Shuffle.sort_tx(&mut tx);
     
             assert_eq!(original_tx.input, tx.input);
             assert_ne!(original_tx.output, tx.output);
    @@ -1679,7 +1695,7 @@
             let original_tx = ordering_test_tx!();
             let mut tx = original_tx;
     
    -        TxOrdering::Bip69Lexicographic.sort_tx(&mut tx);
    +        TxOrdering::Bip69Lexicographic.sort_tx(&mut tx);
     
             assert_eq!(
                 tx.input[0].previous_output,
    @@ -1708,7 +1724,7 @@
             assert_eq!(tx.output[2].script_pubkey, From::from(vec![0xAA, 0xEE]));
         }
     
    -    fn get_test_utxos() -> Vec<LocalUtxo> {
    +    fn get_test_utxos() -> Vec<LocalUtxo> {
             vec![
                 LocalUtxo {
                     outpoint: OutPoint {
    @@ -1771,6 +1787,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html index 5154e583bb..eff1d29dbf 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk/wallet/utils.rs.html @@ -1,4 +1,6 @@ -utils.rs - source
      1
    +utils.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -230,40 +232,6 @@
     230
     231
     232
    -233
    -234
    -235
    -236
    -237
    -238
    -239
    -240
    -241
    -242
    -243
    -244
    -245
    -246
    -247
    -248
    -249
    -250
    -251
    -252
    -253
    -254
    -255
    -256
    -257
    -258
    -259
    -260
    -261
    -262
    -263
    -264
    -265
    -266
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -300,11 +268,11 @@
     // encourage the usage of this trait.
     pub trait IsDust {
         /// Check whether or not a value is below dust limit
    -    fn is_dust(&self) -> bool;
    +    fn is_dust(&self) -> bool;
     }
     
     impl IsDust for u64 {
    -    fn is_dust(&self) -> bool {
    +    fn is_dust(&self) -> bool {
             *self <= DUST_LIMIT_SATOSHI
         }
     }
    @@ -315,7 +283,7 @@
     }
     
     impl After {
    -    pub(crate) fn new(current_height: Option<u32>, assume_height_reached: bool) -> After {
    +    pub(crate) fn new(current_height: Option<u32>, assume_height_reached: bool) -> After {
             After {
                 current_height,
                 assume_height_reached,
    @@ -323,7 +291,7 @@
         }
     }
     
    -pub(crate) fn check_nsequence_rbf(rbf: u32, csv: u32) -> bool {
    +pub(crate) fn check_nsequence_rbf(rbf: u32, csv: u32) -> bool {
         // This flag cannot be set in the nSequence when spending using OP_CSV
         if rbf & SEQUENCE_LOCKTIME_DISABLE_FLAG != 0 {
             return false;
    @@ -347,7 +315,7 @@
         true
     }
     
    -pub(crate) fn check_nlocktime(nlocktime: u32, required: u32) -> bool {
    +pub(crate) fn check_nlocktime(nlocktime: u32, required: u32) -> bool {
         // Both values should be expressed in the same unit
         if (nlocktime < BLOCKS_TIMELOCK_THRESHOLD) != (required < BLOCKS_TIMELOCK_THRESHOLD) {
             return false;
    @@ -362,7 +330,7 @@
     }
     
     impl<Pk: MiniscriptKey + ToPublicKey> Satisfier<Pk> for After {
    -    fn check_after(&self, n: u32) -> bool {
    +    fn check_after(&self, n: u32) -> bool {
             if let Some(current_height) = self.current_height {
                 current_height >= n
             } else {
    @@ -382,7 +350,7 @@
             current_height: Option<u32>,
             create_height: Option<u32>,
             assume_height_reached: bool,
    -    ) -> Older {
    +    ) -> Older {
             Older {
                 current_height,
                 create_height,
    @@ -392,7 +360,7 @@
     }
     
     impl<Pk: MiniscriptKey + ToPublicKey> Satisfier<Pk> for Older {
    -    fn check_older(&self, n: u32) -> bool {
    +    fn check_older(&self, n: u32) -> bool {
             if let Some(current_height) = self.current_height {
                 // TODO: test >= / >
                 current_height as u64 >= self.create_height.unwrap_or(0) as u64 + n as u64
    @@ -404,40 +372,6 @@
     
     pub(crate) type SecpCtx = Secp256k1<All>;
     
    -pub struct ChunksIterator<I: Iterator> {
    -    iter: I,
    -    size: usize,
    -}
    -
    -#[cfg(any(feature = "electrum", feature = "esplora"))]
    -impl<I: Iterator> ChunksIterator<I> {
    -    pub fn new(iter: I, size: usize) -> Self {
    -        ChunksIterator { iter, size }
    -    }
    -}
    -
    -impl<I: Iterator> Iterator for ChunksIterator<I> {
    -    type Item = Vec<<I as std::iter::Iterator>::Item>;
    -
    -    fn next(&mut self) -> Option<Self::Item> {
    -        let mut v = Vec::new();
    -        for _ in 0..self.size {
    -            let e = self.iter.next();
    -
    -            match e {
    -                None => break,
    -                Some(val) => v.push(val),
    -            }
    -        }
    -
    -        if v.is_empty() {
    -            return None;
    -        }
    -
    -        Some(v)
    -    }
    -}
    -
     #[cfg(test)]
     mod test {
         use super::{
    @@ -531,6 +465,5 @@
         }
     }
     
    -
    - +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/storage.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/storage.js index 6b16cbd83c..dd18db8a72 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/storage.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/storage.js @@ -1 +1 @@ -var resourcesSuffix="";var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue('rustdoc-'+settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("rustdoc-preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)} \ No newline at end of file +var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue('rustdoc-'+settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("rustdoc-preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)} \ No newline at end of file -- 2.49.0
      1
    +any.rs - source
    +    
    logo
      1
       2
       3
       4
    @@ -331,10 +333,10 @@
     use super::*;
     
     macro_rules! impl_from {
    -    ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
    +    ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => {
             $( $cfg )*
             impl From<$from> for $to {
    -            fn from(inner: $from) -> Self {
    +            fn from(inner: $from) -> Self {
                     <$to>::$variant(inner)
                 }
             }
    @@ -342,16 +344,16 @@
     }
     
     macro_rules! impl_inner_method {
    -    ( $self:expr, $name:ident $(, $args:expr)* ) => {
    +    ( $self:expr, $name:ident $(, $args:expr)* ) => {
             match $self {
                 #[cfg(feature = "electrum")]
    -            AnyBlockchain::Electrum(inner) => inner.$name( $($args, )* ),
    +            AnyBlockchain::Electrum(inner) => inner.$name( $($args, )* ),
                 #[cfg(feature = "esplora")]
    -            AnyBlockchain::Esplora(inner) => inner.$name( $($args, )* ),
    +            AnyBlockchain::Esplora(inner) => inner.$name( $($args, )* ),
                 #[cfg(feature = "compact_filters")]
    -            AnyBlockchain::CompactFilters(inner) => inner.$name( $($args, )* ),
    +            AnyBlockchain::CompactFilters(inner) => inner.$name( $($args, )* ),
                 #[cfg(feature = "rpc")]
    -            AnyBlockchain::Rpc(inner) => inner.$name( $($args, )* ),
    +            AnyBlockchain::Rpc(inner) => inner.$name( $($args, )* ),
             }
         }
     }
    @@ -382,36 +384,36 @@
     
     #[maybe_async]
     impl Blockchain for AnyBlockchain {
    -    fn get_capabilities(&self) -> HashSet<Capability> {
    +    fn get_capabilities(&self) -> HashSet<Capability> {
             maybe_await!(impl_inner_method!(self, get_capabilities))
         }
     
         fn setup<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             maybe_await!(impl_inner_method!(self, setup, database, progress_update))
         }
         fn sync<D: BatchDatabase, P: 'static + Progress>(
             &self,
    -        database: &mut D,
    +        database: &mut D,
             progress_update: P,
    -    ) -> Result<(), Error> {
    +    ) -> Result<(), Error> {
             maybe_await!(impl_inner_method!(self, sync, database, progress_update))
         }
     
    -    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
    +    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
             maybe_await!(impl_inner_method!(self, get_tx, txid))
         }
    -    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
    +    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
             maybe_await!(impl_inner_method!(self, broadcast, tx))
         }
     
    -    fn get_height(&self) -> Result<u32, Error> {
    +    fn get_height(&self) -> Result<u32, Error> {
             maybe_await!(impl_inner_method!(self, get_height))
         }
    -    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
    +    fn estimate_fee(&self, target: usize) -> Result<FeeRate, Error> {
             maybe_await!(impl_inner_method!(self, estimate_fee, target))
         }
     }
    @@ -478,22 +480,22 @@
     impl ConfigurableBlockchain for AnyBlockchain {
         type Config = AnyBlockchainConfig;
     
    -    fn from_config(config: &Self::Config) -> Result<Self, Error> {
    +    fn from_config(config: &Self::Config) -> Result<Self, Error> {
             Ok(match config {
                 #[cfg(feature = "electrum")]
    -            AnyBlockchainConfig::Electrum(inner) => {
    +            AnyBlockchainConfig::Electrum(inner) => {
                     AnyBlockchain::Electrum(electrum::ElectrumBlockchain::from_config(inner)?)
                 }
                 #[cfg(feature = "esplora")]
    -            AnyBlockchainConfig::Esplora(inner) => {
    +            AnyBlockchainConfig::Esplora(inner) => {
                     AnyBlockchain::Esplora(esplora::EsploraBlockchain::from_config(inner)?)
                 }
                 #[cfg(feature = "compact_filters")]
    -            AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters(
    +            AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters(
                     compact_filters::CompactFiltersBlockchain::from_config(inner)?,
                 ),
                 #[cfg(feature = "rpc")]
    -            AnyBlockchainConfig::Rpc(inner) => {
    +            AnyBlockchainConfig::Rpc(inner) => {
                     AnyBlockchain::Rpc(rpc::RpcBlockchain::from_config(inner)?)
                 }
             })
    @@ -505,6 +507,5 @@
     impl_from!(compact_filters::CompactFiltersBlockchainConfig, AnyBlockchainConfig, CompactFilters, #[cfg(feature = "compact_filters")]);
     impl_from!(rpc::RpcConfig, AnyBlockchainConfig, Rpc, #[cfg(feature = "rpc")]);
     
    -
    - +
  • >-kQ74AgZ0ejFujFSLpB3A)#rNjv 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