diff --git a/404.html b/404.html index 3086c6f516..1ac5e582ef 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@ Blog GitHub - (opens new window)

404 - Not Found

That's a Four-Oh-Four.
+ (opens new window)

404 - Not Found

How did we get here?
Take me home.
- + diff --git a/adoption/all/index.html b/adoption/all/index.html index 739571670b..2cd403c203 100644 --- a/adoption/all/index.html +++ b/adoption/all/index.html @@ -29,7 +29,7 @@ - + @@ -82,6 +82,6 @@
BDK Foundation
- + diff --git a/adoption/custodial/index.html b/adoption/custodial/index.html index 605b71b5f8..f7a17e06f0 100644 --- a/adoption/custodial/index.html +++ b/adoption/custodial/index.html @@ -29,7 +29,7 @@ - + @@ -82,6 +82,6 @@
BDK Foundation
- + diff --git a/adoption/desktop/index.html b/adoption/desktop/index.html index 07858b1542..5998df9884 100644 --- a/adoption/desktop/index.html +++ b/adoption/desktop/index.html @@ -29,7 +29,7 @@ - + @@ -82,6 +82,6 @@
BDK Foundation
- + diff --git a/adoption/exchange/index.html b/adoption/exchange/index.html index ad592bf453..4de1c0cc28 100644 --- a/adoption/exchange/index.html +++ b/adoption/exchange/index.html @@ -29,7 +29,7 @@ - + @@ -82,6 +82,6 @@
BDK Foundation
- + diff --git a/adoption/hardware/index.html b/adoption/hardware/index.html index 08332d8851..ec9f02657b 100644 --- a/adoption/hardware/index.html +++ b/adoption/hardware/index.html @@ -29,7 +29,7 @@ - + @@ -84,6 +84,6 @@
BDK Foundation
- + diff --git a/adoption/infrastructure/index.html b/adoption/infrastructure/index.html index 799014c604..7105141879 100644 --- a/adoption/infrastructure/index.html +++ b/adoption/infrastructure/index.html @@ -29,7 +29,7 @@ - + @@ -78,6 +78,6 @@
BDK Foundation
- + diff --git a/adoption/mobile/index.html b/adoption/mobile/index.html index 4f3f457129..468e53fe2a 100644 --- a/adoption/mobile/index.html +++ b/adoption/mobile/index.html @@ -29,7 +29,7 @@ - + @@ -84,6 +84,6 @@
BDK Foundation
- + diff --git a/adoption/web/index.html b/adoption/web/index.html index 2b902e1888..81d1fcb2d0 100644 --- a/adoption/web/index.html +++ b/adoption/web/index.html @@ -29,7 +29,7 @@ - + @@ -82,6 +82,6 @@
BDK Foundation
- + diff --git a/assets/js/21.87c145fc.js b/assets/js/21.f3ba63c9.js similarity index 99% rename from assets/js/21.87c145fc.js rename to assets/js/21.f3ba63c9.js index baa9ea683d..2e56193bee 100644 --- a/assets/js/21.87c145fc.js +++ b/assets/js/21.f3ba63c9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{365:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_complete_app.e382f61c.png"},366:function(t,a,s){t.exports=s.p+"assets/img/default_rn_app.9e60b4fb.png"},367:function(t,a,s){t.exports=s.p+"assets/img/folder_structure.d1c95bd6.png"},368:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_title.289f266d.png"},369:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_tutorial_screen_mnemonic.9963c418.png"},370:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_tutorial_screen_createwallet.916f2610.png"},371:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_get_balance.75af17bf.png"},372:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_get_address.4f570fb2.png"},373:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_get_restore.134b3681.png"},374:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_send.4e9dbc4a.png"},414:function(t,a,s){"use strict";s.r(a);var n=s(7),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" is the "),a("strong",[t._v("Bitcoin Dev kit")]),t._v("'s "),a("strong",[t._v("React Native")]),t._v(" library which enables building bitcoin applications for Android and iOS mobile platforms. Using "),a("code",[t._v("bdk-rn")]),t._v(" does not require knowledge of the underlying bitcoin or BDK API. Using "),a("code",[t._v("bdk-rn")]),t._v(" is similar to using any other RN module. Just do "),a("code",[t._v("yarn add bdk-rn")]),t._v(" and you are ready to code! This is the first tutorial on how to use "),a("code",[t._v("bdk-rn")]),t._v(", more coming soon, make sure to "),a("a",{attrs:{href:"https://twitter.com/BitcoinZavior?ref_src=twsrc%5Etfw",target:"_blank",rel:"noopener noreferrer"}},[t._v("follow"),a("OutboundLink")],1),t._v(" to be notified of new ones. In case you missed it, there is a recorded "),a("code",[t._v("bdk-rn")]),t._v(" focused Twitch Livestream available on the "),a("a",{attrs:{href:"https://www.youtube.com/watch?v=gMpWA875go4",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Developers"),a("OutboundLink")],1),t._v(" YouTube channel which covers most of this article, make sure to subscribe to Bitcoin Developers "),a("a",{attrs:{href:"https://www.youtube.com/channel/UCUq_ZdezVWKPvkWRicAYxLA/videos",target:"_blank",rel:"noopener noreferrer"}},[t._v("YouTube Channel"),a("OutboundLink")],1),t._v(" for more bitcoin development videos.")]),t._v(" "),a("p",[t._v("In this tutorial, we will explore "),a("code",[t._v("bdk-rn")]),t._v(" usage and the API it provides. This guide will walk through the development process and code for making a bitcoin application. The bitcoin application we create will be a non-custodial HD Wallet. The application will have the functionality to create a new wallet or restore from a known mnemonic seed phrase. This application will also be able to interact with the bitcoin network to sync UTXOs from new blocks and broadcast transactions.")]),t._v(" "),a("p",[t._v("The tutorial will focus on bitcoin and "),a("code",[t._v("bdk-rn")]),t._v(" concepts and API. So it will gloss over React Native aspects. The code for this tutorial is available on the "),a("a",{attrs:{href:"https://github.com/LtbLightning/BdkRnQuickStart",target:"_blank",rel:"noopener noreferrer"}},[t._v("LtbLightning GitHub"),a("OutboundLink")],1)]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(365),alt:"BDK RN Quick Start"}}),t._v(" "),a("h3",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("p",[t._v("In order to use "),a("code",[t._v("bdk-rn")]),t._v(" in a React Native App, a React Native development environment is required. Please refer to resources out there on the internet if you need to set this up, here is one of many good resources to guide you on "),a("a",{attrs:{href:"https://reactnative.dev/docs/environment-setup",target:"_blank",rel:"noopener noreferrer"}},[t._v("environment setup"),a("OutboundLink")],1)]),t._v(" "),a("h3",{attrs:{id:"bitcoin-basics"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-basics"}},[t._v("#")]),t._v(" Bitcoin Basics")]),t._v(" "),a("p",[t._v("The bitcoin concepts used in this blog post are detailed and explained very well in external bitcoin resources. Here are some links for reference:")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mastering Bitcoin(HD Wallet chapter)"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Output Descriptors from bitcoin GitHub"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Now let's jump into Bitcoin Dev Kit")]),t._v(" "),a("h2",{attrs:{id:"bitcoin-dev-kit-and-bdk-rn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-dev-kit-and-bdk-rn"}},[t._v("#")]),t._v(" Bitcoin Dev Kit and bdk-rn")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" is a React Native library of Bitcoin Dev Kit(BDK) for building React Native Apps.\nIt encapsulates all of the low-level APIs and methods for BDK and exposes them in a react native context. To use BDK in React Native(RN) apps only the "),a("code",[t._v("bdk-rn")]),t._v(" module is required. "),a("code",[t._v("Bdk-rn")]),t._v(" can be used like any other react native library and is available on "),a("a",{attrs:{href:"https://www.npmjs.com/package/bdk-rn",target:"_blank",rel:"noopener noreferrer"}},[t._v("public package managers(npm and yarn)"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[t._v("#")]),t._v(" Getting Started")]),t._v(" "),a("p",[t._v("Although we won't delve deep into RN we will focus more on bitcoin and bdk-rn, however, some rudimentary RN setup is required, especially a basic RN app to add our code.")]),t._v(" "),a("p",[t._v("start by creating a new RN project.")]),t._v(" "),a("p",[a("code",[t._v("npx react-native init BdkRnQuickStart")])]),t._v(" "),a("p",[t._v("If this fails in an error on an M1/M2 Mac please use\n"),a("code",[t._v("arch -x86_64 pod install --repo-update")])]),t._v(" "),a("p",[t._v("Once done "),a("code",[t._v("cd")]),t._v(" into the new project directory and run the basic RN app that's created")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" BdkRnQuickStart\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" ios\n")])])]),a("p",[t._v("This should start building the app and launch the app in a simulator. So far we have created a basic RN project if this doesn't work then refer to the React Native development setup guide to troubleshoot.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"25%"},attrs:{src:s(366)}}),t._v(" "),a("h2",{attrs:{id:"setting-up-styles-and-rn-app-structure"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-styles-and-rn-app-structure"}},[t._v("#")]),t._v(" Setting up styles and RN app structure")]),t._v(" "),a("p",[t._v("Let's set up a very basic app structure and some RN scaffolding. Let's create an "),a("code",[t._v("src")]),t._v(" folder in the project root and inside it add new folders for "),a("code",[t._v("assets")]),t._v(", "),a("code",[t._v("elements")]),t._v(", "),a("code",[t._v("screens")]),t._v(" and "),a("code",[t._v("styles")])]),t._v(" "),a("p",[t._v("To make this quick you can download the styles and images used in the tutorial from the repository. The image assets, "),a("code",[t._v("Button.tsx")]),t._v(" and "),a("code",[t._v("styles.js")]),t._v(" can be taken from "),a("a",{attrs:{href:"https://github.com/LtbLightning/BdkRnQuickStart/tree/master/src",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(" and moved to the folders as shown. Alternatively, you can write your own styles and use your own images if you intend to style the app in a different way.")]),t._v(" "),a("p",[t._v("Create a "),a("code",[t._v("home.js")]),t._v(" file under "),a("code",[t._v("screens")]),t._v(" folder, this will be where we will be adding most of the code.")]),t._v(" "),a("p",[t._v("Once done the project structure should look like this:")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"67%"},attrs:{src:s(367)}}),t._v(" "),a("p",[t._v("Locate "),a("code",[t._v("App.js")]),t._v(" in the project root, this will have the default code added by "),a("code",[t._v("react-native init")]),t._v(", let's delete all contents of "),a("code",[t._v("App.js")]),t._v(" and replace it with code to import "),a("code",[t._v("home.js")]),t._v(" as our main screen.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// App.js ")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" React "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'react'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Home "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./src/screens/home'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("App")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Home "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" App"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("This will probably crash your app in the simulator but that's fine, it will be fixed in the next step.")]),t._v(" "),a("h2",{attrs:{id:"installing-bdk-rn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-bdk-rn"}},[t._v("#")]),t._v(" Installing "),a("code",[t._v("bdk-rn")])]),t._v(" "),a("p",[t._v("With the RN app project in place, we can now add "),a("code",[t._v("bdk-rn")]),t._v(" using either npm or yarn.")]),t._v(" "),a("p",[t._v("Using npm:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--save")]),t._v(" bdk-rn\n")])])]),a("p",[t._v("Using yarn:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" bdk-rn\n")])])]),a("p",[t._v("[iOS Only] Install pods:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("npx pod-install\nor\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" ios "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" pod "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("\n")])])]),a("p",[t._v("Verify that "),a("code",[t._v("bdk-rn")]),t._v(" has been added to "),a("code",[t._v("package.json")]),t._v(", once done "),a("code",[t._v("bdk-rn")]),t._v(" is installed and ready to be used in our "),a("strong",[t._v("BdkRnQuickStart")]),t._v(" App.")]),t._v(" "),a("h2",{attrs:{id:"importing-bdk-rn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#importing-bdk-rn"}},[t._v("#")]),t._v(" Importing "),a("code",[t._v("bdk-rn")])]),t._v(" "),a("p",[t._v("Locate "),a("code",[t._v("home.js")]),t._v(" which we added in the setup section and import "),a("code",[t._v("bdk-rn")]),t._v(" and also create an RN functional component.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" BdkRn "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bdk-rn'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" Home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Before we start using "),a("code",[t._v("bdk-rn")]),t._v(" let's add some additional RN component imports, as well as import styles, a button and image assets to create a basic layout to build our home screen.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" BdkRn "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bdk-rn'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" React"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Fragment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" useState "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'react'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ActivityIndicator"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n SafeAreaView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ScrollView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n StatusBar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TextInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n View"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Image"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'react-native'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Button "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../elements/Button'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" styles "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../styles/styles'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" bitcoinLogo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../assets/bitcoin_logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" bdkLogo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../assets/bdk_logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SafeAreaView")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusBar")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ScrollView")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentInsetAdjustmentBehavior")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("automatic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentContainerStyle")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("container"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Header */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'stretch'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bitcoinLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("BDK-RN Tutorial")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'center'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("40")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bdkLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Balance */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* buttons for method calls */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" Home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("We now have an app title section and a structure to hold the rest of our app components.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"33%"},attrs:{src:s(368)}}),t._v(" "),a("h2",{attrs:{id:"calling-bdk-rn-methods"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#calling-bdk-rn-methods"}},[t._v("#")]),t._v(" Calling "),a("code",[t._v("bdk-rn")]),t._v(" methods")]),t._v(" "),a("p",[t._v("All "),a("code",[t._v("bdk-rn")]),t._v(" methods return a JSON response with data and error properties. All methods return a response as follows:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("Promise"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Response"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// success returns true else false.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("data")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" string "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" object "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" any"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// output data for the method call.")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The first step in creating a non-custodial bitcoin app is creating a mnemonic seed phrase for the wallet.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" provides "),a("code",[t._v("generateMnemonic()")]),t._v(" method to create a default 12 word length mnemonic.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" BdkRn "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bdk-rn'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mnemonic "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("We can specify a longer length or we can also specify the bits of entropy we need by passing the length or entropy arguments.")]),t._v(" "),a("p",[t._v("To create a mnemonic with an entropy of 256 bits, which will be a 24-word length mnemonic sentence, we can use "),a("code",[t._v("{ entropy: 256 }")]),t._v(".\nRefer to the readme file on "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#generatemnemomic",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),a("OutboundLink")],1),t._v(" for more details.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("data")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("entropy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("256")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// here data is destructured and saved as 'mnemonic'")]),t._v("\n")])])]),a("p",[t._v("In order to use this in our RN app let's create a state variable to store the mnemonic and internal "),a("code",[t._v("generateMnemonic")]),t._v(" method which we can invoke when a button is clicked. We will also need a button which will invoke generateMnemonic when clicked. Adding the following code achieves all of this.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// state variable to store and set mnemonic")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// internal method to call bdk-rn to generate mnemonic")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getMnemonic")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// call bdk-rn to generate mnemonic")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("length")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// save generated mnemonic to state variable")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SafeAreaView")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusBar")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ScrollView")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentInsetAdjustmentBehavior")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("automatic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentContainerStyle")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("container"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Header */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'stretch'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bitcoinLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("BDK-RN Tutorial")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'center'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("40")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bdkLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Balance */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* buttons for method calls */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Generate Mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Now we need to add a component to display the output of our method calls and this will also need a state variable to track our method call response. To achieve this add the following code.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add this as another state variable under mnemonic")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setDisplayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// modify the generateMnenomic method to also set mnemonic as displayText")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getMnemonic")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("length")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("network")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'testnet'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("and finally, let's add the component to display the output under "),a("code",[t._v("{/* method call result */}")])]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// display the component only if displayText has a value")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("displayText "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("responseSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("responseText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n Response:\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v('We should now have a working" Generate Mnemonic" button which displays the new mnemonic')]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(369)}}),t._v(" "),a("p",[t._v("A quick recap, we added a button to trigger a call to a method. We created a button click event handler to call bdk-rn. Set the display state variable to display the output of the call in the display section. We will follow this pattern for the remaining calls to bdk-rn.")]),t._v(" "),a("h2",{attrs:{id:"creating-a-wallet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-wallet"}},[t._v("#")]),t._v(" Creating a wallet")]),t._v(" "),a("p",[t._v("Before moving on to creating a wallet, let's add a section at the top to display the balance of the wallet.")]),t._v(" "),a("p",[t._v("To display the balance we will need a state variable to store the balance and a display section to display it.")]),t._v(" "),a("p",[t._v("Under the "),a("code",[t._v("mnemonic")]),t._v(" and "),a("code",[t._v("displayText")]),t._v(" variables, let's add one for "),a("code",[t._v("balance")]),t._v(" as well")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setDisplayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("balance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setBalance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("And we will shortly need a "),a("code",[t._v("wallet")]),t._v(" and "),a("code",[t._v("syncResponse")]),t._v(" as well so add these too.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setDisplayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("balance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setBalance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("wallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("syncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setSyncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Now we need some "),a("code",[t._v("jsx")]),t._v(" code to display the balance.")]),t._v(" "),a("p",[t._v("Just below "),a("code",[t._v("{/* Balance */}")]),t._v(" and above "),a("code",[t._v("{*/ method call result */}")]),t._v(" add the following UI components to display the balance. We only want to show the balance when it has a value so we will use a tertiary operator for a quick check.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Balance */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("balanceSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("balanceText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Balance: '")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("balance "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" balance "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'0'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v(" Sats")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("We will next add code to create a wallet.")]),t._v(" "),a("p",[t._v("To create a wallet the simple approach is to call "),a("code",[t._v("createWallet()")]),t._v(" method with "),a("code",[t._v("mnemonic")]),t._v(" , "),a("code",[t._v("password")]),t._v(" and "),a("code",[t._v("network")]),t._v(".\nLet's add another click event handler below where we have the "),a("code",[t._v("getMnemonic()")]),t._v(" method\nWe want to see the response to this call so let's use "),a("code",[t._v("setDisplayText()")]),t._v(" to see the output")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("createWallet")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("mnemonic")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("password")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'password'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("network")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'testnet'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("A new button will be required to trigger "),a("code",[t._v("createWallet")])]),t._v(" "),a("p",[t._v("Let's add a new button just above "),a("code",[t._v("{/* input boxes and send transaction button */}")])]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Create Wallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("createWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The response returned by "),a("code",[t._v("createWallet")]),t._v(" is a new address for the created wallet.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"address"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tb1qxg8g8cdzgs09cttu3y7lc33udqc4wsesunjnhe"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"error"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The App should now be creating a wallet when we click "),a("strong",[t._v("Create Mnemonic")]),t._v(" followed by "),a("strong",[t._v("Create Wallet")]),t._v(".")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(370)}}),t._v(" "),a("p",[t._v("The wallet created is a HD wallet and the address displayed is the 0 index address for the wallet. The path used by default is 84'/1'/0'/0/* for addresses and 84'/1'/0'/1/* for change.")]),t._v(" "),a("p",[t._v("As we specified "),a("code",[t._v("testnet")]),t._v(" and did not specify "),a("code",[t._v("blockChainName")]),t._v(" and "),a("code",[t._v("blockChainConfigUrl")]),t._v(" a default testnet server will be used as the bitcoin node, "),a("code",[t._v("ssl://electrum.blockstream.info")]),t._v(" is the default url used for testnet.")]),t._v(" "),a("p",[t._v("Using "),a("code",[t._v("mnemonic")]),t._v(" is a quick way to create a new wallet with "),a("code",[t._v("bdk-rn")]),t._v(". The "),a("code",[t._v("createWallet()")]),t._v(" method in "),a("code",[t._v("bdk-rn")]),t._v(" has many optional arguments to configure the wallet. In addition to mnemonic, a wallet can also be created with a descriptor. If a descriptor is passed as an argument the wallet will be created using the descriptor. When using a descriptor, arguments for network, password and mnemonic are not required. "),a("code",[t._v("bdk-rn")]),t._v(" has a "),a("code",[t._v("createDescriptor()")]),t._v(" method to create a descriptor. More about output descriptors "),a("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(". Refer to the "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#createdescriptor",target:"_blank",rel:"noopener noreferrer"}},[t._v("readme"),a("OutboundLink")],1),t._v(" for all options available when creating output descriptors with "),a("code",[t._v("bdk-rn")])]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// using a descriptor to create wallet ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("descriptor")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'tprv8ZgxMBicQKsPd3G66kPkZEuJZgUK9QXJRYCwnCtYLJjEZmw8xFjCxGoyx533AL83XFcSQeuVmVeJbZai5RTBxDp71Abd2FPSyQumRL79BKw'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Other arguments for "),a("code",[t._v("createWallet()")]),t._v(" are:")]),t._v(" "),a("p",[a("strong",[t._v("blockChainName")]),t._v(": Blockchain backend to use, like "),a("a",{attrs:{href:"https://github.com/romanz/electrs",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("electrum")]),a("OutboundLink")],1),t._v(", "),a("a",{attrs:{href:"https://github.com/Blockstream/esplora",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("esplora")]),a("OutboundLink")],1),t._v(", "),a("code",[t._v("compact-filters")]),t._v(" ("),a("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP157"),a("OutboundLink")],1),t._v(") and Bitcoin Core. "),a("code",[t._v("bdk-rn")]),t._v(" at the moment doesn't support compact-filters and Bitcoin Core, this will be added shortly in a future release.")]),t._v(" "),a("p",[a("strong",[t._v("blockChainConfigUrl")]),t._v(": This is the url of the specified bitcoin node this should match the chain and the type of blockchain specified as "),a("strong",[t._v("blockChainName")])]),t._v(" "),a("p",[t._v("Refer to "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#createwallet",target:"_blank",rel:"noopener noreferrer"}},[t._v("readme"),a("OutboundLink")],1),t._v(" for a complete list of options for "),a("code",[t._v("createWallet")])]),t._v(" "),a("h2",{attrs:{id:"utxos-and-balance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#utxos-and-balance"}},[t._v("#")]),t._v(" UTXOs and balance")]),t._v(" "),a("p",[t._v("With the wallet created, we can now add methods to sync UTXOs compute balance.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" has a "),a("code",[t._v("syncWallet")]),t._v(" method to sync all UTXOs belonging to the wallet with the bitcoin network, the specified "),a("code",[t._v("blockChainName")]),t._v(" and "),a("code",[t._v("blockChainConfigUrl")]),t._v(" is used to sync. Once the wallet sync is complete balance is computed and "),a("code",[t._v("getBalance")]),t._v(" can fetch the balance.")]),t._v(" "),a("p",[t._v("Earlier we have aleady added state variables for"),a("code",[t._v("syncResponse")]),t._v("and "),a("code",[t._v("balance")]),t._v(". Now we will add buttons to call "),a("code",[t._v("syncWallet")]),t._v(" and "),a("code",[t._v("getBalance")]),t._v(". Just below the Create Wallet button lets add two buttons as follows:")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Sync Wallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("syncWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Get Balance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getBalance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("p",[t._v("And two click handlers below createWallet:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("syncWallet")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("syncWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSyncResponse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getBalance")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBalance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),a("p",[t._v("We should now be able to create a wallet, sync UTXOs and get balance")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(371)}}),t._v(" "),a("p",[t._v("We can use a public testnet faucet to send testnet coins to the wallet and check that the UTXO sync and balance fetch are working correctly. Before we do that add one more method to generate a new address we can then use this address to get testnet coins from a faucet.")]),t._v(" "),a("p",[t._v("Let's add a state variable for "),a("code",[t._v("address")]),t._v(", a button for "),a("strong",[t._v("Get Address")]),t._v(" and a click event handler to call "),a("code",[t._v("bdk-rn")]),t._v(" and create a new address. Let's do the following")]),t._v(" "),a("p",[t._v("Add "),a("code",[t._v("address")]),t._v(" and "),a("code",[t._v("setAddress")]),t._v(" state variables below balance and "),a("code",[t._v("setBalance")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setAddress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("A new "),a("code",[t._v("getAddress")]),t._v(" click event handler below "),a("code",[t._v("getBalance")]),t._v(" click event handler:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getAddress")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getNewAddress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAddress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("And a Get Address button below the existing Get Balance button:")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Get Address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getAddress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n")])])]),a("p",[t._v("We should now have the following, and Get Address will be able to display a new address.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"50%"},attrs:{src:s(372)}}),t._v(" "),a("p",[t._v("Now that we are able to generate a receive address we can get some testnet bitcoin from one of the public "),a("a",{attrs:{href:"https://coinfaucet.eu/en/btc-testnet/",target:"_blank",rel:"noopener noreferrer"}},[t._v("testnet faucets"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("After we send and after the transaction is confirmed we will need to sync the wallet before we can see the new balance from the received transaction.")]),t._v(" "),a("h2",{attrs:{id:"restoring-wallet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#restoring-wallet"}},[t._v("#")]),t._v(" Restoring wallet")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("createWallet")]),t._v(" method creates a wallet using a "),a("code",[t._v("mnemonic")]),t._v(", in order to restore we can use the same method, we won't need to call "),a("code",[t._v("generateMnemonic")]),t._v(" as we will already have a "),a("code",[t._v("mnemonic")]),t._v(" to restore with.")]),t._v(" "),a("p",[t._v("Let's add an input box to enter our own "),a("code",[t._v("mnemonic")]),t._v(", we will use the "),a("code",[t._v("mnemonic")]),t._v(" entered in the input box to create a wallet.")]),t._v(" "),a("p",[t._v("Let's add an input box for "),a("code",[t._v("mnemonic")]),t._v(" below the Generate Mnemonic button.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TextInput")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("multiline")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onChangeText")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("textAlignVertical")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("top"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n")])])]),a("p",[t._v("This code will also display the mnemonic state variable in the input box, if we click Generate Mnemonic the generated mnemonic will show up in the input box. We can overwrite it with our own mnemonic and doing so will also overwrite the mnemonic state variable. This way the mnemonic displayed will be the one used to create the wallet.")]),t._v(" "),a("p",[t._v("we are already using the mnemonic state variable in the "),a("code",[t._v("createWallet")]),t._v(" Method so no other changes are required.")]),t._v(" "),a("p",[t._v("We can now use our own mnemonic and use it to restore a wallet. This will come in handy if we have a wallet with testnet bitcoin as these are hard to come by.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"50%"},attrs:{src:s(373)}}),t._v(" "),a("h2",{attrs:{id:"sending-bitcoin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sending-bitcoin"}},[t._v("#")]),t._v(" Sending bitcoin")]),t._v(" "),a("p",[t._v("We are now able to receive bitcoin, time to add functionality to send as well.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" has a number of transaction-related methods to enable varied use cases. A new send transaction can be created and broadcast using "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#quicksend",target:"_blank",rel:"noopener noreferrer"}},[t._v("quickSend()"),a("OutboundLink")],1),t._v(". If required an unsigned transaction can be created using "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#createtransaction",target:"_blank",rel:"noopener noreferrer"}},[t._v("createTransaction()"),a("OutboundLink")],1),t._v(" , this can be signed later with "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#signtransaction",target:"_blank",rel:"noopener noreferrer"}},[t._v("signTransactioin()"),a("OutboundLink")],1),t._v(" method and broadcast using "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#broadcasttransaction",target:"_blank",rel:"noopener noreferrer"}},[t._v("broadcastTransaction()"),a("OutboundLink")],1),t._v(". There are also methods to query transactions by pending or confirmed status and all transactions. Please refer to "),a("code",[t._v("bdk-rn")]),t._v(" "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn/blob/main/README.md#gettransactions",target:"_blank",rel:"noopener noreferrer"}},[t._v("readme"),a("OutboundLink")],1),t._v(" for more details on all the methods.")]),t._v(" "),a("p",[t._v("We will need state variables for recipient address and amount as well as for transaction, these can be added below our existing variables for syncResponse and address")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("syncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setSyncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setAddress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("transaction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setTransaction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("recipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setRecipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("amount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setAmount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("A click event handler for send button, we will use the "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#quicksend",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("quickSend()")]),a("OutboundLink")],1),t._v(" method to send specified amount in sats to address.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("sendTx")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSend")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("address")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" recipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("amount")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" amount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setTransaction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Add a new section for send transaction functionality. We will need an input box for the receiver address and an input box for the amount to send. We will also need a button to trigger the transaction.")]),t._v(" "),a("p",[t._v("Let's add the send transaction section and UI components below "),a("code",[t._v("{/* input boxes and send transaction button */}")])]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sendSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Fragment")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TextInput")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Recipient Address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onChangeText")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("setRecipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TextInput")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Amount (in sats)"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onChangeText")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("e")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAmount")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("parseInt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Send Transaction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("sendTx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("p",[t._v("We should now be able to send a transaction as long as there is sufficient balance.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"50%"},attrs:{src:s(374)}}),t._v(" "),a("h2",{attrs:{id:"conclusion"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[t._v("#")]),t._v(" Conclusion")]),t._v(" "),a("p",[t._v("The App we created can be built and distributed for both iOS and Android thus sharing a code base and reducing development time. The development and coding focused on application-level code for use cases and we did not have to code intricate internal bitcoin protocol-level code or bitcoin node interactions, and transactions. UTXOs and sync-related functionalities were also not required. All this was managed by "),a("code",[t._v("bdk-rn")]),t._v(" allowing us to focus on the product, functionality and user journey. This is how "),a("code",[t._v("bdk")]),t._v(" and "),a("code",[t._v("bdk-rn")]),t._v(" intend to make Rapid Bitcoin Application Development possible by allowing product and application developers to focus on what they know best while "),a("code",[t._v("bdk")]),t._v(" handles bitcoin complexity.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" intends to expose functionality and APIs from "),a("code",[t._v("bdk")]),t._v(" which has a wide variety of API with granular details allowing for many interesting use cases to be implemented. "),a("code",[t._v("bdk-rn")]),t._v(" and "),a("code",[t._v("bdk")]),t._v(" are constantly updated and enhanced based on feedback from product teams and developers in the bitcoin community.")]),t._v(" "),a("p",[t._v("Stay tuned for more APIs and enhancements coming to "),a("code",[t._v("bdk-rn")]),t._v(" in the near future. Feature and API requests are most welcome. New blogs and tutorials will be published soon for a more in-depth exploration of bdk-rn.")]),t._v(" "),a("p",[t._v("In the meantime keep in touch with the project by following on "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://twitter.com/BitcoinZavior",target:"_blank",rel:"noopener noreferrer"}},[t._v("Twitter"),a("OutboundLink")],1)]),t._v(" "),a("h4",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/bitcoindevkit",target:"_blank",rel:"noopener noreferrer"}},[t._v("bdk"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn",target:"_blank",rel:"noopener noreferrer"}},[t._v("bdk-rn"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://www.youtube.com/watch?v=gMpWA875go4",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Developers YouTube"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/LtbLightning/BdkRnQuickStart",target:"_blank",rel:"noopener noreferrer"}},[t._v("BdkRnQuickStart App GitHub Repository"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://reactnative.dev/docs/environment-setup",target:"_blank",rel:"noopener noreferrer"}},[t._v("Setup React Native Development Environment"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mastering Bitcoin(HD Wallet chapter)"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Output Descriptors from bitcoin GitHub"),a("OutboundLink")],1)]),t._v(" "),a("li",[t._v("Testnet Faucet: "),a("a",{attrs:{href:"https://coinfaucet.eu/en/btc-testnet/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://coinfaucet.eu/en/btc-testnet/"),a("OutboundLink")],1),t._v(" or "),a("a",{attrs:{href:"https://bitcoinfaucet.uo1.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://bitcoinfaucet.uo1.net"),a("OutboundLink")],1)])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{365:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_complete_app.e382f61c.png"},366:function(t,a,s){t.exports=s.p+"assets/img/default_rn_app.9e60b4fb.png"},367:function(t,a,s){t.exports=s.p+"assets/img/folder_structure.d1c95bd6.png"},368:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_title.289f266d.png"},369:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_tutorial_screen_mnemonic.9963c418.png"},370:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_tutorial_screen_createwallet.916f2610.png"},371:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_get_balance.75af17bf.png"},372:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_get_address.4f570fb2.png"},373:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_get_restore.134b3681.png"},374:function(t,a,s){t.exports=s.p+"assets/img/bdk_rn_send.4e9dbc4a.png"},416:function(t,a,s){"use strict";s.r(a);var n=s(7),e=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" is the "),a("strong",[t._v("Bitcoin Dev kit")]),t._v("'s "),a("strong",[t._v("React Native")]),t._v(" library which enables building bitcoin applications for Android and iOS mobile platforms. Using "),a("code",[t._v("bdk-rn")]),t._v(" does not require knowledge of the underlying bitcoin or BDK API. Using "),a("code",[t._v("bdk-rn")]),t._v(" is similar to using any other RN module. Just do "),a("code",[t._v("yarn add bdk-rn")]),t._v(" and you are ready to code! This is the first tutorial on how to use "),a("code",[t._v("bdk-rn")]),t._v(", more coming soon, make sure to "),a("a",{attrs:{href:"https://twitter.com/BitcoinZavior?ref_src=twsrc%5Etfw",target:"_blank",rel:"noopener noreferrer"}},[t._v("follow"),a("OutboundLink")],1),t._v(" to be notified of new ones. In case you missed it, there is a recorded "),a("code",[t._v("bdk-rn")]),t._v(" focused Twitch Livestream available on the "),a("a",{attrs:{href:"https://www.youtube.com/watch?v=gMpWA875go4",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Developers"),a("OutboundLink")],1),t._v(" YouTube channel which covers most of this article, make sure to subscribe to Bitcoin Developers "),a("a",{attrs:{href:"https://www.youtube.com/channel/UCUq_ZdezVWKPvkWRicAYxLA/videos",target:"_blank",rel:"noopener noreferrer"}},[t._v("YouTube Channel"),a("OutboundLink")],1),t._v(" for more bitcoin development videos.")]),t._v(" "),a("p",[t._v("In this tutorial, we will explore "),a("code",[t._v("bdk-rn")]),t._v(" usage and the API it provides. This guide will walk through the development process and code for making a bitcoin application. The bitcoin application we create will be a non-custodial HD Wallet. The application will have the functionality to create a new wallet or restore from a known mnemonic seed phrase. This application will also be able to interact with the bitcoin network to sync UTXOs from new blocks and broadcast transactions.")]),t._v(" "),a("p",[t._v("The tutorial will focus on bitcoin and "),a("code",[t._v("bdk-rn")]),t._v(" concepts and API. So it will gloss over React Native aspects. The code for this tutorial is available on the "),a("a",{attrs:{href:"https://github.com/LtbLightning/BdkRnQuickStart",target:"_blank",rel:"noopener noreferrer"}},[t._v("LtbLightning GitHub"),a("OutboundLink")],1)]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(365),alt:"BDK RN Quick Start"}}),t._v(" "),a("h3",{attrs:{id:"prerequisites"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[t._v("#")]),t._v(" Prerequisites")]),t._v(" "),a("p",[t._v("In order to use "),a("code",[t._v("bdk-rn")]),t._v(" in a React Native App, a React Native development environment is required. Please refer to resources out there on the internet if you need to set this up, here is one of many good resources to guide you on "),a("a",{attrs:{href:"https://reactnative.dev/docs/environment-setup",target:"_blank",rel:"noopener noreferrer"}},[t._v("environment setup"),a("OutboundLink")],1)]),t._v(" "),a("h3",{attrs:{id:"bitcoin-basics"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-basics"}},[t._v("#")]),t._v(" Bitcoin Basics")]),t._v(" "),a("p",[t._v("The bitcoin concepts used in this blog post are detailed and explained very well in external bitcoin resources. Here are some links for reference:")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mastering Bitcoin(HD Wallet chapter)"),a("OutboundLink")],1)]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Output Descriptors from bitcoin GitHub"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("Now let's jump into Bitcoin Dev Kit")]),t._v(" "),a("h2",{attrs:{id:"bitcoin-dev-kit-and-bdk-rn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-dev-kit-and-bdk-rn"}},[t._v("#")]),t._v(" Bitcoin Dev Kit and bdk-rn")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" is a React Native library of Bitcoin Dev Kit(BDK) for building React Native Apps.\nIt encapsulates all of the low-level APIs and methods for BDK and exposes them in a react native context. To use BDK in React Native(RN) apps only the "),a("code",[t._v("bdk-rn")]),t._v(" module is required. "),a("code",[t._v("Bdk-rn")]),t._v(" can be used like any other react native library and is available on "),a("a",{attrs:{href:"https://www.npmjs.com/package/bdk-rn",target:"_blank",rel:"noopener noreferrer"}},[t._v("public package managers(npm and yarn)"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[t._v("#")]),t._v(" Getting Started")]),t._v(" "),a("p",[t._v("Although we won't delve deep into RN we will focus more on bitcoin and bdk-rn, however, some rudimentary RN setup is required, especially a basic RN app to add our code.")]),t._v(" "),a("p",[t._v("start by creating a new RN project.")]),t._v(" "),a("p",[a("code",[t._v("npx react-native init BdkRnQuickStart")])]),t._v(" "),a("p",[t._v("If this fails in an error on an M1/M2 Mac please use\n"),a("code",[t._v("arch -x86_64 pod install --repo-update")])]),t._v(" "),a("p",[t._v("Once done "),a("code",[t._v("cd")]),t._v(" into the new project directory and run the basic RN app that's created")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" BdkRnQuickStart\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" ios\n")])])]),a("p",[t._v("This should start building the app and launch the app in a simulator. So far we have created a basic RN project if this doesn't work then refer to the React Native development setup guide to troubleshoot.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"25%"},attrs:{src:s(366)}}),t._v(" "),a("h2",{attrs:{id:"setting-up-styles-and-rn-app-structure"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-styles-and-rn-app-structure"}},[t._v("#")]),t._v(" Setting up styles and RN app structure")]),t._v(" "),a("p",[t._v("Let's set up a very basic app structure and some RN scaffolding. Let's create an "),a("code",[t._v("src")]),t._v(" folder in the project root and inside it add new folders for "),a("code",[t._v("assets")]),t._v(", "),a("code",[t._v("elements")]),t._v(", "),a("code",[t._v("screens")]),t._v(" and "),a("code",[t._v("styles")])]),t._v(" "),a("p",[t._v("To make this quick you can download the styles and images used in the tutorial from the repository. The image assets, "),a("code",[t._v("Button.tsx")]),t._v(" and "),a("code",[t._v("styles.js")]),t._v(" can be taken from "),a("a",{attrs:{href:"https://github.com/LtbLightning/BdkRnQuickStart/tree/master/src",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(" and moved to the folders as shown. Alternatively, you can write your own styles and use your own images if you intend to style the app in a different way.")]),t._v(" "),a("p",[t._v("Create a "),a("code",[t._v("home.js")]),t._v(" file under "),a("code",[t._v("screens")]),t._v(" folder, this will be where we will be adding most of the code.")]),t._v(" "),a("p",[t._v("Once done the project structure should look like this:")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"67%"},attrs:{src:s(367)}}),t._v(" "),a("p",[t._v("Locate "),a("code",[t._v("App.js")]),t._v(" in the project root, this will have the default code added by "),a("code",[t._v("react-native init")]),t._v(", let's delete all contents of "),a("code",[t._v("App.js")]),t._v(" and replace it with code to import "),a("code",[t._v("home.js")]),t._v(" as our main screen.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// App.js ")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" React "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'react'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Home "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'./src/screens/home'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("App")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Home "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" App"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("This will probably crash your app in the simulator but that's fine, it will be fixed in the next step.")]),t._v(" "),a("h2",{attrs:{id:"installing-bdk-rn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-bdk-rn"}},[t._v("#")]),t._v(" Installing "),a("code",[t._v("bdk-rn")])]),t._v(" "),a("p",[t._v("With the RN app project in place, we can now add "),a("code",[t._v("bdk-rn")]),t._v(" using either npm or yarn.")]),t._v(" "),a("p",[t._v("Using npm:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--save")]),t._v(" bdk-rn\n")])])]),a("p",[t._v("Using yarn:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("yarn")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" bdk-rn\n")])])]),a("p",[t._v("[iOS Only] Install pods:")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("npx pod-install\nor\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" ios "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" pod "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("\n")])])]),a("p",[t._v("Verify that "),a("code",[t._v("bdk-rn")]),t._v(" has been added to "),a("code",[t._v("package.json")]),t._v(", once done "),a("code",[t._v("bdk-rn")]),t._v(" is installed and ready to be used in our "),a("strong",[t._v("BdkRnQuickStart")]),t._v(" App.")]),t._v(" "),a("h2",{attrs:{id:"importing-bdk-rn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#importing-bdk-rn"}},[t._v("#")]),t._v(" Importing "),a("code",[t._v("bdk-rn")])]),t._v(" "),a("p",[t._v("Locate "),a("code",[t._v("home.js")]),t._v(" which we added in the setup section and import "),a("code",[t._v("bdk-rn")]),t._v(" and also create an RN functional component.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" BdkRn "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bdk-rn'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" Home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Before we start using "),a("code",[t._v("bdk-rn")]),t._v(" let's add some additional RN component imports, as well as import styles, a button and image assets to create a basic layout to build our home screen.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" BdkRn "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bdk-rn'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" React"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Fragment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" useState "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'react'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ActivityIndicator"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n SafeAreaView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ScrollView"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n StatusBar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TextInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n View"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Image"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'react-native'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Button "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../elements/Button'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" styles "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../styles/styles'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" bitcoinLogo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../assets/bitcoin_logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" bdkLogo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("require")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'../assets/bdk_logo.png'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SafeAreaView")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusBar")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ScrollView")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentInsetAdjustmentBehavior")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("automatic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentContainerStyle")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("container"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Header */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'stretch'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bitcoinLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("BDK-RN Tutorial")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'center'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("40")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bdkLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Balance */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* buttons for method calls */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("export")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" Home"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("We now have an app title section and a structure to hold the rest of our app components.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"33%"},attrs:{src:s(368)}}),t._v(" "),a("h2",{attrs:{id:"calling-bdk-rn-methods"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#calling-bdk-rn-methods"}},[t._v("#")]),t._v(" Calling "),a("code",[t._v("bdk-rn")]),t._v(" methods")]),t._v(" "),a("p",[t._v("All "),a("code",[t._v("bdk-rn")]),t._v(" methods return a JSON response with data and error properties. All methods return a response as follows:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("Promise"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Response"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// success returns true else false.")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("data")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" string "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" object "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" any"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// output data for the method call.")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The first step in creating a non-custodial bitcoin app is creating a mnemonic seed phrase for the wallet.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" provides "),a("code",[t._v("generateMnemonic()")]),t._v(" method to create a default 12 word length mnemonic.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" BdkRn "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'bdk-rn'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" mnemonic "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" response"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("We can specify a longer length or we can also specify the bits of entropy we need by passing the length or entropy arguments.")]),t._v(" "),a("p",[t._v("To create a mnemonic with an entropy of 256 bits, which will be a 24-word length mnemonic sentence, we can use "),a("code",[t._v("{ entropy: 256 }")]),t._v(".\nRefer to the readme file on "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#generatemnemomic",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),a("OutboundLink")],1),t._v(" for more details.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("data")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("entropy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("256")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// here data is destructured and saved as 'mnemonic'")]),t._v("\n")])])]),a("p",[t._v("In order to use this in our RN app let's create a state variable to store the mnemonic and internal "),a("code",[t._v("generateMnemonic")]),t._v(" method which we can invoke when a button is clicked. We will also need a button which will invoke generateMnemonic when clicked. Adding the following code achieves all of this.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// state variable to store and set mnemonic")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// internal method to call bdk-rn to generate mnemonic")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getMnemonic")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// call bdk-rn to generate mnemonic")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("length")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// save generated mnemonic to state variable")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SafeAreaView")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatusBar")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ScrollView")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentInsetAdjustmentBehavior")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("automatic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("contentContainerStyle")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("container"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Header */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'stretch'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("36")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bitcoinLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("headerText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("BDK-RN Tutorial")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Image")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("resizeMode")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'center'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("height")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("40")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("width")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("source")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("bdkLogo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Balance */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* buttons for method calls */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Generate Mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Now we need to add a component to display the output of our method calls and this will also need a state variable to track our method call response. To achieve this add the following code.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add this as another state variable under mnemonic")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setDisplayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// modify the generateMnenomic method to also set mnemonic as displayText")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getMnemonic")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("generateMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("length")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("network")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'testnet'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setMnemonic")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("and finally, let's add the component to display the output under "),a("code",[t._v("{/* method call result */}")])]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// screens/home.js")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// display the component only if displayText has a value")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("displayText "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("responseSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("responseText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n Response:\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v('We should now have a working" Generate Mnemonic" button which displays the new mnemonic')]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(369)}}),t._v(" "),a("p",[t._v("A quick recap, we added a button to trigger a call to a method. We created a button click event handler to call bdk-rn. Set the display state variable to display the output of the call in the display section. We will follow this pattern for the remaining calls to bdk-rn.")]),t._v(" "),a("h2",{attrs:{id:"creating-a-wallet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-wallet"}},[t._v("#")]),t._v(" Creating a wallet")]),t._v(" "),a("p",[t._v("Before moving on to creating a wallet, let's add a section at the top to display the balance of the wallet.")]),t._v(" "),a("p",[t._v("To display the balance we will need a state variable to store the balance and a display section to display it.")]),t._v(" "),a("p",[t._v("Under the "),a("code",[t._v("mnemonic")]),t._v(" and "),a("code",[t._v("displayText")]),t._v(" variables, let's add one for "),a("code",[t._v("balance")]),t._v(" as well")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setDisplayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("balance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setBalance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("And we will shortly need a "),a("code",[t._v("wallet")]),t._v(" and "),a("code",[t._v("syncResponse")]),t._v(" as well so add these too.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("Home")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// BDK-RN method calls and state variables will be added here")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("displayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setDisplayText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("balance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setBalance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("wallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("syncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setSyncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Now we need some "),a("code",[t._v("jsx")]),t._v(" code to display the balance.")]),t._v(" "),a("p",[t._v("Just below "),a("code",[t._v("{/* Balance */}")]),t._v(" and above "),a("code",[t._v("{*/ method call result */}")]),t._v(" add the following UI components to display the balance. We only want to show the balance when it has a value so we will use a tertiary operator for a quick check.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* Balance */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("balanceSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("balanceText"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Balance: '")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Text")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selectable")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("balance "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" balance "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'0'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v(" Sats")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* method call result */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("We will next add code to create a wallet.")]),t._v(" "),a("p",[t._v("To create a wallet the simple approach is to call "),a("code",[t._v("createWallet()")]),t._v(" method with "),a("code",[t._v("mnemonic")]),t._v(" , "),a("code",[t._v("password")]),t._v(" and "),a("code",[t._v("network")]),t._v(".\nLet's add another click event handler below where we have the "),a("code",[t._v("getMnemonic()")]),t._v(" method\nWe want to see the response to this call so let's use "),a("code",[t._v("setDisplayText()")]),t._v(" to see the output")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("createWallet")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("mnemonic")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("password")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'password'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("network")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'testnet'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("A new button will be required to trigger "),a("code",[t._v("createWallet")])]),t._v(" "),a("p",[t._v("Let's add a new button just above "),a("code",[t._v("{/* input boxes and send transaction button */}")])]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v("\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Create Wallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("createWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The response returned by "),a("code",[t._v("createWallet")]),t._v(" is a new address for the created wallet.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"data"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"address"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tb1qxg8g8cdzgs09cttu3y7lc33udqc4wsesunjnhe"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string-property property"}},[t._v('"error"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The App should now be creating a wallet when we click "),a("strong",[t._v("Create Mnemonic")]),t._v(" followed by "),a("strong",[t._v("Create Wallet")]),t._v(".")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(370)}}),t._v(" "),a("p",[t._v("The wallet created is a HD wallet and the address displayed is the 0 index address for the wallet. The path used by default is 84'/1'/0'/0/* for addresses and 84'/1'/0'/1/* for change.")]),t._v(" "),a("p",[t._v("As we specified "),a("code",[t._v("testnet")]),t._v(" and did not specify "),a("code",[t._v("blockChainName")]),t._v(" and "),a("code",[t._v("blockChainConfigUrl")]),t._v(" a default testnet server will be used as the bitcoin node, "),a("code",[t._v("ssl://electrum.blockstream.info")]),t._v(" is the default url used for testnet.")]),t._v(" "),a("p",[t._v("Using "),a("code",[t._v("mnemonic")]),t._v(" is a quick way to create a new wallet with "),a("code",[t._v("bdk-rn")]),t._v(". The "),a("code",[t._v("createWallet()")]),t._v(" method in "),a("code",[t._v("bdk-rn")]),t._v(" has many optional arguments to configure the wallet. In addition to mnemonic, a wallet can also be created with a descriptor. If a descriptor is passed as an argument the wallet will be created using the descriptor. When using a descriptor, arguments for network, password and mnemonic are not required. "),a("code",[t._v("bdk-rn")]),t._v(" has a "),a("code",[t._v("createDescriptor()")]),t._v(" method to create a descriptor. More about output descriptors "),a("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),a("OutboundLink")],1),t._v(". Refer to the "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#createdescriptor",target:"_blank",rel:"noopener noreferrer"}},[t._v("readme"),a("OutboundLink")],1),t._v(" for all options available when creating output descriptors with "),a("code",[t._v("bdk-rn")])]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// using a descriptor to create wallet ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" response "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("createWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("descriptor")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'tprv8ZgxMBicQKsPd3G66kPkZEuJZgUK9QXJRYCwnCtYLJjEZmw8xFjCxGoyx533AL83XFcSQeuVmVeJbZai5RTBxDp71Abd2FPSyQumRL79BKw'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Other arguments for "),a("code",[t._v("createWallet()")]),t._v(" are:")]),t._v(" "),a("p",[a("strong",[t._v("blockChainName")]),t._v(": Blockchain backend to use, like "),a("a",{attrs:{href:"https://github.com/romanz/electrs",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("electrum")]),a("OutboundLink")],1),t._v(", "),a("a",{attrs:{href:"https://github.com/Blockstream/esplora",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("esplora")]),a("OutboundLink")],1),t._v(", "),a("code",[t._v("compact-filters")]),t._v(" ("),a("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP157"),a("OutboundLink")],1),t._v(") and Bitcoin Core. "),a("code",[t._v("bdk-rn")]),t._v(" at the moment doesn't support compact-filters and Bitcoin Core, this will be added shortly in a future release.")]),t._v(" "),a("p",[a("strong",[t._v("blockChainConfigUrl")]),t._v(": This is the url of the specified bitcoin node this should match the chain and the type of blockchain specified as "),a("strong",[t._v("blockChainName")])]),t._v(" "),a("p",[t._v("Refer to "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#createwallet",target:"_blank",rel:"noopener noreferrer"}},[t._v("readme"),a("OutboundLink")],1),t._v(" for a complete list of options for "),a("code",[t._v("createWallet")])]),t._v(" "),a("h2",{attrs:{id:"utxos-and-balance"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#utxos-and-balance"}},[t._v("#")]),t._v(" UTXOs and balance")]),t._v(" "),a("p",[t._v("With the wallet created, we can now add methods to sync UTXOs compute balance.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" has a "),a("code",[t._v("syncWallet")]),t._v(" method to sync all UTXOs belonging to the wallet with the bitcoin network, the specified "),a("code",[t._v("blockChainName")]),t._v(" and "),a("code",[t._v("blockChainConfigUrl")]),t._v(" is used to sync. Once the wallet sync is complete balance is computed and "),a("code",[t._v("getBalance")]),t._v(" can fetch the balance.")]),t._v(" "),a("p",[t._v("Earlier we have aleady added state variables for"),a("code",[t._v("syncResponse")]),t._v("and "),a("code",[t._v("balance")]),t._v(". Now we will add buttons to call "),a("code",[t._v("syncWallet")]),t._v(" and "),a("code",[t._v("getBalance")]),t._v(". Just below the Create Wallet button lets add two buttons as follows:")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Sync Wallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("syncWallet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Get Balance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getBalance"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("p",[t._v("And two click handlers below createWallet:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("syncWallet")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("syncWallet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSyncResponse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getBalance")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getBalance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBalance")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),a("p",[t._v("We should now be able to create a wallet, sync UTXOs and get balance")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0 auto",zoom:"50%"},attrs:{src:s(371)}}),t._v(" "),a("p",[t._v("We can use a public testnet faucet to send testnet coins to the wallet and check that the UTXO sync and balance fetch are working correctly. Before we do that add one more method to generate a new address we can then use this address to get testnet coins from a faucet.")]),t._v(" "),a("p",[t._v("Let's add a state variable for "),a("code",[t._v("address")]),t._v(", a button for "),a("strong",[t._v("Get Address")]),t._v(" and a click event handler to call "),a("code",[t._v("bdk-rn")]),t._v(" and create a new address. Let's do the following")]),t._v(" "),a("p",[t._v("Add "),a("code",[t._v("address")]),t._v(" and "),a("code",[t._v("setAddress")]),t._v(" state variables below balance and "),a("code",[t._v("setBalance")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setAddress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("A new "),a("code",[t._v("getAddress")]),t._v(" click event handler below "),a("code",[t._v("getBalance")]),t._v(" click event handler:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("getAddress")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getNewAddress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAddress")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("And a Get Address button below the existing Get Balance button:")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Get Address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("getAddress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n")])])]),a("p",[t._v("We should now have the following, and Get Address will be able to display a new address.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"50%"},attrs:{src:s(372)}}),t._v(" "),a("p",[t._v("Now that we are able to generate a receive address we can get some testnet bitcoin from one of the public "),a("a",{attrs:{href:"https://coinfaucet.eu/en/btc-testnet/",target:"_blank",rel:"noopener noreferrer"}},[t._v("testnet faucets"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("After we send and after the transaction is confirmed we will need to sync the wallet before we can see the new balance from the received transaction.")]),t._v(" "),a("h2",{attrs:{id:"restoring-wallet"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#restoring-wallet"}},[t._v("#")]),t._v(" Restoring wallet")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("createWallet")]),t._v(" method creates a wallet using a "),a("code",[t._v("mnemonic")]),t._v(", in order to restore we can use the same method, we won't need to call "),a("code",[t._v("generateMnemonic")]),t._v(" as we will already have a "),a("code",[t._v("mnemonic")]),t._v(" to restore with.")]),t._v(" "),a("p",[t._v("Let's add an input box to enter our own "),a("code",[t._v("mnemonic")]),t._v(", we will use the "),a("code",[t._v("mnemonic")]),t._v(" entered in the input box to create a wallet.")]),t._v(" "),a("p",[t._v("Let's add an input box for "),a("code",[t._v("mnemonic")]),t._v(" below the Generate Mnemonic button.")]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TextInput")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("multiline")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("mnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onChangeText")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("setMnemonic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("textAlignVertical")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("top"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n")])])]),a("p",[t._v("This code will also display the mnemonic state variable in the input box, if we click Generate Mnemonic the generated mnemonic will show up in the input box. We can overwrite it with our own mnemonic and doing so will also overwrite the mnemonic state variable. This way the mnemonic displayed will be the one used to create the wallet.")]),t._v(" "),a("p",[t._v("we are already using the mnemonic state variable in the "),a("code",[t._v("createWallet")]),t._v(" Method so no other changes are required.")]),t._v(" "),a("p",[t._v("We can now use our own mnemonic and use it to restore a wallet. This will come in handy if we have a wallet with testnet bitcoin as these are hard to come by.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"50%"},attrs:{src:s(373)}}),t._v(" "),a("h2",{attrs:{id:"sending-bitcoin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sending-bitcoin"}},[t._v("#")]),t._v(" Sending bitcoin")]),t._v(" "),a("p",[t._v("We are now able to receive bitcoin, time to add functionality to send as well.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" has a number of transaction-related methods to enable varied use cases. A new send transaction can be created and broadcast using "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#quicksend",target:"_blank",rel:"noopener noreferrer"}},[t._v("quickSend()"),a("OutboundLink")],1),t._v(". If required an unsigned transaction can be created using "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#createtransaction",target:"_blank",rel:"noopener noreferrer"}},[t._v("createTransaction()"),a("OutboundLink")],1),t._v(" , this can be signed later with "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#signtransaction",target:"_blank",rel:"noopener noreferrer"}},[t._v("signTransactioin()"),a("OutboundLink")],1),t._v(" method and broadcast using "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#broadcasttransaction",target:"_blank",rel:"noopener noreferrer"}},[t._v("broadcastTransaction()"),a("OutboundLink")],1),t._v(". There are also methods to query transactions by pending or confirmed status and all transactions. Please refer to "),a("code",[t._v("bdk-rn")]),t._v(" "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn/blob/main/README.md#gettransactions",target:"_blank",rel:"noopener noreferrer"}},[t._v("readme"),a("OutboundLink")],1),t._v(" for more details on all the methods.")]),t._v(" "),a("p",[t._v("We will need state variables for recipient address and amount as well as for transaction, these can be added below our existing variables for syncResponse and address")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("syncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setSyncResponse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setAddress"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("transaction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setTransaction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("recipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setRecipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("amount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" setAmount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("useState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("A click event handler for send button, we will use the "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn#quicksend",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v("quickSend()")]),a("OutboundLink")],1),t._v(" method to send specified amount in sats to address.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-variable function"}},[t._v("sendTx")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("async")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),t._v(" BdkRn"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("quickSend")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("address")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" recipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("amount")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" amount"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setTransaction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDisplayText")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("JSON")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stringify")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("p",[t._v("Add a new section for send transaction functionality. We will need an input box for the receiver address and an input box for the amount to send. We will also need a button to trigger the transaction.")]),t._v(" "),a("p",[t._v("Let's add the send transaction section and UI components below "),a("code",[t._v("{/* input boxes and send transaction button */}")])]),t._v(" "),a("div",{staticClass:"language-jsx extra-class"},[a("pre",{pre:!0,attrs:{class:"language-jsx"}},[a("code",[t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* input boxes and send transaction button */")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("View")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sendSection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Fragment")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TextInput")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Recipient Address"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onChangeText")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("setRecipient"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TextInput")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("placeholder")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Amount (in sats)"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onChangeText")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("e")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setAmount")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("parseInt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Button")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Send Transaction"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("style")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("styles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("methodButton"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("onPress")]),a("span",{pre:!0,attrs:{class:"token script language-javascript"}},[a("span",{pre:!0,attrs:{class:"token script-punctuation punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("sendTx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),a("span",{pre:!0,attrs:{class:"token plain-text"}},[t._v("\n ")]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("p",[t._v("We should now be able to send a transaction as long as there is sufficient balance.")]),t._v(" "),a("img",{staticStyle:{display:"block",margin:"0px auto",zoom:"50%"},attrs:{src:s(374)}}),t._v(" "),a("h2",{attrs:{id:"conclusion"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[t._v("#")]),t._v(" Conclusion")]),t._v(" "),a("p",[t._v("The App we created can be built and distributed for both iOS and Android thus sharing a code base and reducing development time. The development and coding focused on application-level code for use cases and we did not have to code intricate internal bitcoin protocol-level code or bitcoin node interactions, and transactions. UTXOs and sync-related functionalities were also not required. All this was managed by "),a("code",[t._v("bdk-rn")]),t._v(" allowing us to focus on the product, functionality and user journey. This is how "),a("code",[t._v("bdk")]),t._v(" and "),a("code",[t._v("bdk-rn")]),t._v(" intend to make Rapid Bitcoin Application Development possible by allowing product and application developers to focus on what they know best while "),a("code",[t._v("bdk")]),t._v(" handles bitcoin complexity.")]),t._v(" "),a("p",[a("code",[t._v("bdk-rn")]),t._v(" intends to expose functionality and APIs from "),a("code",[t._v("bdk")]),t._v(" which has a wide variety of API with granular details allowing for many interesting use cases to be implemented. "),a("code",[t._v("bdk-rn")]),t._v(" and "),a("code",[t._v("bdk")]),t._v(" are constantly updated and enhanced based on feedback from product teams and developers in the bitcoin community.")]),t._v(" "),a("p",[t._v("Stay tuned for more APIs and enhancements coming to "),a("code",[t._v("bdk-rn")]),t._v(" in the near future. Feature and API requests are most welcome. New blogs and tutorials will be published soon for a more in-depth exploration of bdk-rn.")]),t._v(" "),a("p",[t._v("In the meantime keep in touch with the project by following on "),a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),a("OutboundLink")],1),t._v(" and "),a("a",{attrs:{href:"https://twitter.com/BitcoinZavior",target:"_blank",rel:"noopener noreferrer"}},[t._v("Twitter"),a("OutboundLink")],1)]),t._v(" "),a("h4",{attrs:{id:"references"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#references"}},[t._v("#")]),t._v(" References:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/bitcoindevkit",target:"_blank",rel:"noopener noreferrer"}},[t._v("bdk"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/LtbLightning/bdk-rn",target:"_blank",rel:"noopener noreferrer"}},[t._v("bdk-rn"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://www.youtube.com/watch?v=gMpWA875go4",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Developers YouTube"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/LtbLightning/BdkRnQuickStart",target:"_blank",rel:"noopener noreferrer"}},[t._v("BdkRnQuickStart App GitHub Repository"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://reactnative.dev/docs/environment-setup",target:"_blank",rel:"noopener noreferrer"}},[t._v("Setup React Native Development Environment"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mastering Bitcoin(HD Wallet chapter)"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Output Descriptors from bitcoin GitHub"),a("OutboundLink")],1)]),t._v(" "),a("li",[t._v("Testnet Faucet: "),a("a",{attrs:{href:"https://coinfaucet.eu/en/btc-testnet/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://coinfaucet.eu/en/btc-testnet/"),a("OutboundLink")],1),t._v(" or "),a("a",{attrs:{href:"https://bitcoinfaucet.uo1.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://bitcoinfaucet.uo1.net"),a("OutboundLink")],1)])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/34.1eea5d0b.js b/assets/js/34.842dbe3a.js similarity index 99% rename from assets/js/34.1eea5d0b.js rename to assets/js/34.842dbe3a.js index f327bacaa5..e11a33e2f3 100644 --- a/assets/js/34.1eea5d0b.js +++ b/assets/js/34.842dbe3a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{349:function(t,e,a){t.exports=a.p+"assets/img/descriptor-tracker.5942c853.jpg"},350:function(t,e,a){t.exports=a.p+"assets/img/checkpoints.a4179787.jpg"},405:function(t,e,a){"use strict";a.r(e);var s=a(7),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("p",[t._v("The Bitcoin Devkit (BDK) lets you do a lot of useful things through convenient high level\nabstractions. It works great when these abstractions map nicely onto what you are trying to do. My\ngoal is to develop a new "),e("code",[t._v("bdk_core")]),t._v(" library for when they don't. I want "),e("code",[t._v("bdk_core")]),t._v(" to expose all the\nuseful "),e("em",[t._v("mechanisms")]),t._v(" that BDK has inside it without them being tied to any particular usage "),e("em",[t._v("policy")]),t._v("\nand with very minimal dependencies.")]),t._v(" "),e("p",[t._v("The "),e("code",[t._v("bdk_core")]),t._v(' idea is still "in the lab". We\'re not sure yet whether '),e("code",[t._v("bdk_core")]),t._v(" will just be what's\nleft of "),e("code",[t._v("bdk")]),t._v(" once we spin off all the components that have extra dependencies into their own crates\nand refine it a bit. In that case "),e("code",[t._v("bdk_core")]),t._v(" will just be called "),e("code",[t._v("bdk v1.0.0")]),t._v(" or something. Or it might\nbe that "),e("code",[t._v("bdk")]),t._v(" lives on with its current APIs and uses stuff "),e("code",[t._v("bdk_core")]),t._v(" to implement it internally.")]),t._v(" "),e("h2",{attrs:{id:"the-separation-of-policy-and-mechanism"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-separation-of-policy-and-mechanism"}},[t._v("#")]),t._v(" The separation of policy and mechanism")]),t._v(" "),e("p",[t._v("My guiding principle for "),e("code",[t._v("bdk_core")]),t._v(" is the "),e("em",[t._v("separation of policy and mechanism")]),t._v(". This is\nwhat I mean by these terms:")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("mechanism")]),t._v(": How you do a particular thing. Mechanism code is functional and doesn't change much.")]),t._v(" "),e("li",[e("em",[t._v("policy")]),t._v(": What you want to do. Policy code composes mechanisms to achieve something in\nan application.")])]),t._v(" "),e("p",[t._v("Here's a nice passage about why the designers of the "),e("a",{attrs:{href:"https://en.wikipedia.org/wiki/X_Window_System",target:"_blank",rel:"noopener noreferrer"}},[t._v("X window system"),e("OutboundLink")],1),t._v(" applied this principle. X has\nbeen around since 1984 and doesn't look like it's going anywhere so it probably has a lot to teach us.\nFrom "),e("em",[e("a",{attrs:{href:"https://en.wikipedia.org/wiki/The_Art_of_Unix_Programming",target:"_blank",rel:"noopener noreferrer"}},[t._v("The Art of UNIX Programming"),e("OutboundLink")],1)]),t._v(":")]),t._v(" "),e("blockquote",[e("p",[t._v("...we observed that the designers of X made a basic decision to implement “mechanism, not policy”—to\nmake X a generic graphics engine and leave decisions about user-interface style to toolkits and\nother levels of the system. We justified this by pointing out that policy and mechanism tend to\nmutate on different timescales, with policy changing much faster than mechanism. Fashions in the\nlook and feel of GUI toolkits may come and go, but raster operations and compositing are forever.")])]),t._v(" "),e("blockquote",[e("p",[t._v("Thus, hardwiring policy and mechanism together has two bad effects: It makes policy rigid and\nharder to change in response to user requirements, and it means that trying to change policy has a\nstrong tendency to destabilize the mechanisms.")])]),t._v(" "),e("blockquote",[e("p",[t._v("On the other hand, by separating the two we make it\npossible to experiment with new policy without breaking mechanisms. We also make it much easier to\nwrite good tests for the mechanism (policy, because it ages so quickly, often does not justify the\ninvestment).")])]),t._v(" "),e("ul",[e("li",[t._v("[ ] > This design rule has wide application outside the GUI context. In general, it implies that we")])]),t._v(" "),e("blockquote",[e("p",[t._v("should look for ways to separate interfaces from engines.")])]),t._v(" "),e("p",[t._v("You'll notice we have a similar situation in Bitcoin engineering. We have mechanism code like\nsigning algorithms, key derivation, transaction construction logic, etc., that don't change much. But\nhow these compose together in applications changes quickly over time and between applications.")]),t._v(" "),e("p",[t._v("The main culprit of policy and mechanism conflation in "),e("code",[t._v("bdk")]),t._v(" is the main "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/struct.Wallet.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Wallet")]),e("OutboundLink")],1),t._v(" type.\nWallets do all of the following:")]),t._v(" "),e("ol",[e("li",[t._v("Store one or two descriptors (external and optional internal).")]),t._v(" "),e("li",[t._v("Keep track of which addresses you've given out so you only give out fresh ones from each descriptor.")]),t._v(" "),e("li",[t._v("Keep a list of transactions associated with the addresses in the wallet.")]),t._v(" "),e("li",[t._v("Given a source of blockchain data it can update its internal list of transactions.")]),t._v(" "),e("li",[t._v("Given some parameters it can build a PSBT from transaction outputs.")]),t._v(" "),e("li",[t._v("Given a PSBT it can sign it with its "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/signer/index.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Signers")]),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("p",[t._v("All of that is very useful but it is bound together with the particular policies and opinions of "),e("code",[t._v("Wallet")]),t._v(".\nIf "),e("code",[t._v("Wallet")]),t._v("'s policy is not your policy it's going to be tricky to get it to do what you want.\nHere are some examples:")]),t._v(" "),e("ol",[e("li",[t._v("In order to control how the "),e("code",[t._v("Wallet")]),t._v(" will select coins for a transaction internally you have to\npass in something implementing the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/coin_selection/trait.CoinSelectionAlgorithm.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("CoinSelectionAlgorithm")]),e("OutboundLink")],1),t._v(" trait. A coin selection algorithm\nis clearly mechanism code but the policy of "),e("code",[t._v("Wallet")]),t._v(" restricts that mechanism's interface. We\nhave "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/281",target:"_blank",rel:"noopener noreferrer"}},[t._v("very old issues"),e("OutboundLink")],1),t._v(" related to what the\ninterface of this trait should be and we don't have a clear way forward. In "),e("code",[t._v("bdk_core")]),t._v(" I want to\npurely provide the coin selection mechanisms for figuring out whether you need to select more\nUTXOs or whether you need a change output etc. How you use that mechanism will be up to you.")]),t._v(" "),e("li",[t._v("Another trait that has a similar structure is the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/signer/index.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Signer")]),e("OutboundLink")],1),t._v(" trait. You have to pass in signers\nso your wallet can sign PSBTs but you have little control over how the wallet chooses which\nsigners to use in any given situation. Right now the wallet will just iterate through all the\nsigners and ask them to sign. This is not always appropriate. In "),e("code",[t._v("bdk_core")]),t._v(" I want to provide\nfunctions for populating PSBTs given something that can sign. You'll be in control of when they\nget called.")])]),t._v(" "),e("h2",{attrs:{id:"a-syncing-mechansim-without-the-policy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#a-syncing-mechansim-without-the-policy"}},[t._v("#")]),t._v(" A syncing mechansim without the policy")]),t._v(" "),e("p",[t._v("Syncing in "),e("code",[t._v("bdk")]),t._v(" is the place where the design of "),e("code",[t._v("Wallet")]),t._v(" is most restrictive. The "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/blockchain/trait.WalletSync.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("WalletSync")]),e("OutboundLink")],1),t._v("\ntrait forces you to sync all addresses in a wallet in one big batch. But this is not always what you\nwant to do. I spoke to a developer who wanted to sync his wallet slowly over time with each address\nbeing queried over a different Tor connection. It would be really difficult to implement\n"),e("code",[t._v("WalletSync")]),t._v(" with such a strategy. Another example where "),e("code",[t._v("WalletSync")]),t._v(" isn't the right fit is the\n"),e("a",{attrs:{href:"https://l2.technology/sensei",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sensei"),e("OutboundLink")],1),t._v(" project which uses BDK but incrementally updates the database whenever new information\ncomes in from the blockchain.")]),t._v(" "),e("p",[t._v("Even if syncing all addresses at the same time is roughly what you want to do "),e("code",[t._v("WalletSync")]),t._v(" still\ngets in the way since it defines whether you do it synchronously or asynchrononusly. Applications\ncan control this through "),e("code",[t._v("bdk")]),t._v("'s "),e("code",[t._v("async-interface")]),t._v(" feature flag which internally changes the trait\ndefinition through macros. Another annoyance is that when using "),e("code",[t._v("async-interface")]),t._v(" the future that\ngets returned from "),e("code",[t._v("WalletSync")]),t._v(" "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/165",target:"_blank",rel:"noopener noreferrer"}},[t._v("cannot be "),e("code",[t._v("Send")]),e("OutboundLink")],1),t._v("\nbecause of how "),e("code",[t._v("Wallet")]),t._v(" handles database mutability internally, meaning you can't spawn the future\ninto a new thread.")]),t._v(" "),e("h3",{attrs:{id:"a-general-syncing-mechanism"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#a-general-syncing-mechanism"}},[t._v("#")]),t._v(" A general syncing mechanism")]),t._v(" "),e("p",[t._v("So what is the most general syncing mechanism that solves these problems? These are the things I\nthink it has to do regardless of where the blockchain data comes from or how it's stored:")]),t._v(" "),e("ol",[e("li",[t._v("Generate and store addresses.")]),t._v(" "),e("li",[t._v("Index transaction data, e.g. transaction outputs we own, when/if they were spent, etc.")]),t._v(" "),e("li",[t._v("Keep track of which addresses have been given out and which have been used.")]),t._v(" "),e("li",[t._v('Be able to "roll back" our view of the above data if a reorg makes some of it stale.')]),t._v(" "),e("li",[t._v("Keep track of transactions related our addresses in our mempool.")])]),t._v(" "),e("p",[t._v("Let's talk about how to implement a mechanism that does all that.")]),t._v(" "),e("h3",{attrs:{id:"how-to-store-and-index-transactions"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#how-to-store-and-index-transactions"}},[t._v("#")]),t._v(" How to store and index transactions")]),t._v(" "),e("p",[t._v("Different persistent storage backends have different APIs and their own indexing strategies. That's\nwhy the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/database/trait.Database.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Database")]),e("OutboundLink")],1),t._v(" trait exists in BDK, to make a clean API to the different storage engines. It's\nimportant to note that the database in BDK only holds public data that could always be retrieved\nfrom the chain. It's just a cache. Despite this we support different backends. Right now it is a\nlot of work to add a new index to the data since you have to add it to every backend and you might have\nto apply schema changes (we still "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/359",target:"_blank",rel:"noopener noreferrer"}},[t._v("don't have a standard approach to\nthis"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("p",[t._v("Thomas Eizinger "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/165#issuecomment-1047483895",target:"_blank",rel:"noopener noreferrer"}},[t._v("suggested"),e("OutboundLink")],1),t._v("\ndoing everything in memory and only writing to persistent storage when it was convenient. It took me\nsome time but I came around to this idea. It would allow us to get rid of the "),e("code",[t._v("Database")]),t._v(" trait (at\nleast at the "),e("code",[t._v("bdk_core")]),t._v(" level) and greatly simplify what the persistent storage layer has to do.\nWhenever the data is loaded from persistent storage we can just do the indexing in memory and\npresent it to the application.")]),t._v(" "),e("p",[e("em",[t._v("But wait! Wouldn't this mean we'd use way more memory than we need to?")]),t._v(" Yes but memory is cheap.\nConsider that if we say the average transaction size is 300 bytes then with all our indexes each\ntransaction might cost 1kb of memory (pessimistically). This means we could index one thousand\ntransactions in a single megabyte! My iPhone has 4gb of memory so it could index a million\ntransactions with plenty of memory to spare. "),e("em",[t._v("But what if some users can't afford an iPhone?")]),t._v(" Then\nthey also couldn't have afforded to have made a million Bitcoin transactions! "),e("em",[t._v("But what about memory\nconstrained devices like hardware wallets!?")]),t._v(" Those devices typically don't store and retrieve\ntransactions. They're usually just signing devices. Perhaps one day someone will build a memory\nconstrained device that needs to do this work but until then I think this is a fine approach to\ntake.")]),t._v(" "),e("p",[t._v("For now I'm calling this thing that does the in-memory indexing of transactions related to a single\ndescriptor a "),e("code",[t._v("DescriptorTracker")]),t._v(". Here's a diagram that communicates how I imagine it relates to the\nother components.")]),t._v(" "),e("figure",[e("img",{attrs:{src:a(349),alt:""}})]),t._v(" "),e("h3",{attrs:{id:"rolling-back-rolling-forward-and-syncing-to-disk"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rolling-back-rolling-forward-and-syncing-to-disk"}},[t._v("#")]),t._v(" Rolling back, rolling forward and syncing to disk")]),t._v(" "),e("p",[t._v("State changes in blockchains are clearly delineated. They all happen in blocks! Every view of the\nblockchain, whether you're getting it through compact block filters, an electrum server or something\nwacky like a utreexo bridge will have a concept of blocks and transactions in them. For a wallet we\nonly need a very sparse view of the blockchain that includes at which block a set of transactions\nexisted. That way, if a block disappears we know that all those transactions might disappear too.")]),t._v(" "),e("p",[t._v("With "),e("code",[t._v("bdk_core")]),t._v(" I want to introduce the concept of a "),e("em",[t._v("checkpoint")]),t._v(", which is a block height and hash and\na set of txids that were present at that height "),e("strong",[t._v("but not present in the previous checkpoint")]),t._v(". In\nthis way we create an append-only data structure that can easily be rolled back to a previous height\nif there is a reorg. After rolling back we can then roll forward and apply the new blocks.")]),t._v(" "),e("p",[t._v("Here's an example of how this idea works:")]),t._v(" "),e("figure",[e("img",{attrs:{src:a(350),alt:""}})]),t._v(" "),e("p",[t._v("There are a few edge cases I'd like to cover:")]),t._v(" "),e("ol",[e("li",[t._v("What if when gathering new data from the chain to update a "),e("code",[t._v("DescriptorTracker")]),t._v(" we find an old transaction that belongs to an earlier checkpoint that we had missed form our earlier syncs?")]),t._v(" "),e("li",[t._v("What if when we go to write to persistent storage from a "),e("code",[t._v("DescriptorTracker")]),t._v(" we find that it has some transactions the tracker doesn't? Should we try and reconcile the two sets of transactions?")])]),t._v(" "),e("p",[t._v("I think the correct approach is to treat the chain data as the source of truth for the\n"),e("code",[t._v("DescriptorTracker")]),t._v(" and the "),e("code",[t._v("DescriptorTracker")]),t._v(" as the source of truth for persistent storage. That\nis in the case of (1) we should just rollback the "),e("code",[t._v("DescriptorTracker")]),t._v(" and insert the old but\nrecently discovered transaction in the right place. In the case of (2) we should roll back the\npersistent storage to the point where it differs and apply changes from there. This implies that you\nshould only keep one instance of a "),e("code",[t._v("DescriptorTracker")]),t._v(" for a descriptor in your application and only\nupdate persistent storage by first applying the changes to the tracker.")]),t._v(" "),e("h2",{attrs:{id:"examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),e("p",[t._v("Here are some examples of what I think this may end up looking like in code. Keep in mind that if\nthis looks complicated it will probably be more complicated in practice! This doesn't mean that we\ncan't create simplifying abstractions and tools around these primitives to cover common policies. I hope we can implement "),e("code",[t._v("Wallet")]),t._v(" with "),e("code",[t._v("DescriptorTracker")]),t._v("s internally.")]),t._v(" "),e("h3",{attrs:{id:"doing-an-initial-sync-of-a-descriptor-that-may-already-contain-coins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#doing-an-initial-sync-of-a-descriptor-that-may-already-contain-coins"}},[t._v("#")]),t._v(" Doing an initial sync of a descriptor that may already contain coins")]),t._v(" "),e("p",[t._v("When we first sync a descriptor that may already contain coins we want to iterate over all the\nscripts of the wallet and then stop if there's a big enough gap (e.g. 20). In this example we use an\nstateless "),e("a",{attrs:{href:"https://mempool.space/docs/api/rest",target:"_blank",rel:"noopener noreferrer"}},[t._v("esplora-like API"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("div",{staticClass:"language-rust extra-class"},[e("pre",{pre:!0,attrs:{class:"language-rust"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a descriptor tracker the external addresses of a BIP86 key")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tracker "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorTracker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"tr([73c5da0a/86'/0'/0']xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\"")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" esplora "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("fetch_related_transactions")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// iterate over all addresses in a descriptor")]),t._v("\n scripts"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("iter_scripts")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// stop if you find a gap of 20 unused addresses")]),t._v("\n stop_gap"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\ntracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// now we want to persist this disk")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n start_checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Note that the db_update type is the same as the `update` above.")]),t._v("\nmy_db"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("db_update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h3",{attrs:{id:"doing-a-sync-of-a-wallet-after-you-already-have-syncd"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#doing-a-sync-of-a-wallet-after-you-already-have-syncd"}},[t._v("#")]),t._v(" Doing a sync of a wallet after you already have sync'd")]),t._v(" "),e("p",[t._v("Now imagine you just want to check if any UTXOs in your wallet have been spent. In this case we've\nalready sync'd before so we need to load that data into the tracker from disk first (rather than\ngoing straight to the blockchain). Then we just ask esplora for transactions related to these\ntransaction outputs.")]),t._v(" "),e("div",{staticClass:"language-rust extra-class"},[e("pre",{pre:!0,attrs:{class:"language-rust"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a descriptor tracker the external addresses of a BIP86 key")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tracker "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorTracker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"tr([73c5da0a/86'/0'/0']xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\"")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" init_update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" my_db"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get up to speed with what was on disk.")]),t._v("\ntracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("init_update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the latest checkpoint")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" checkpoint "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_checkpoint")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" esplora "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch transactions spending any utxos we have")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("fetch_related_transactions")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n tx_outs"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("iter_unspent")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" update "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ok")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// now we want to persist this disk")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this call could fail if tracker no longer has this checkpoint.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// In this case we'd ask persistent_storage for an earlier checkpoint and try again.")]),t._v("\n start_checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" persistent_storage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_checkpoint")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n persistent_storage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("db_update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Err")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Error")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StaleCheckpoint")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// here we should call fetch related transactions with an earlier checkpoint.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// In practice this logic will be called in a loop")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h3",{attrs:{id:"updating-state-when-you-get-the-data-in-real-time"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#updating-state-when-you-get-the-data-in-real-time"}},[t._v("#")]),t._v(" Updating state when you get the data in real time")]),t._v(" "),e("p",[t._v("If you have an event based view of the blockchain that feeds you block connected or block\ndisconnected events then I imagine the API would look something like this.\nThere's quite a bit left out here but I hope you get the idea.")]),t._v(" "),e("div",{staticClass:"language-rust extra-class"},[e("pre",{pre:!0,attrs:{class:"language-rust"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a descriptor tracker the external addresses of a BIP86 key")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tracker "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorTracker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"tr([73c5da0a/86'/0'/0']xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\"")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain_events "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* get a Stream of blockchain block connected/disconnected events */")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("loop")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain_event "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" blockchain_events"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" blockchain_event "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BlockChainEvent")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Connected")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("new_block"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_block")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("new_block"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ok")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("modified"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" modified "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update persistent storage from tracker")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Err")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ApplyBlockError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OutOfOrder")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the block event we got was not the next block we expected.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// How to recover from this will depend on the application and block source")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BlockchainEvent")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Disconnected")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("disconnected_height"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" disconnected_hash"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this might invalidate a checkpoint")]),t._v("\n tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("disconnect_block")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("disconnected_height"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" disconnected_hash"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Now apply to persistent storage")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"feedback"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#feedback"}},[t._v("#")]),t._v(" Feedback")]),t._v(" "),e("p",[t._v("The best way to give feedback on this would be to comment on the "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bitcoindevkit.org/pull/100",target:"_blank",rel:"noopener noreferrer"}},[t._v("pull request"),e("OutboundLink")],1),t._v(" for this blog post.\nThanks in advance.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{349:function(t,e,a){t.exports=a.p+"assets/img/descriptor-tracker.5942c853.jpg"},350:function(t,e,a){t.exports=a.p+"assets/img/checkpoints.a4179787.jpg"},406:function(t,e,a){"use strict";a.r(e);var s=a(7),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("p",[t._v("The Bitcoin Devkit (BDK) lets you do a lot of useful things through convenient high level\nabstractions. It works great when these abstractions map nicely onto what you are trying to do. My\ngoal is to develop a new "),e("code",[t._v("bdk_core")]),t._v(" library for when they don't. I want "),e("code",[t._v("bdk_core")]),t._v(" to expose all the\nuseful "),e("em",[t._v("mechanisms")]),t._v(" that BDK has inside it without them being tied to any particular usage "),e("em",[t._v("policy")]),t._v("\nand with very minimal dependencies.")]),t._v(" "),e("p",[t._v("The "),e("code",[t._v("bdk_core")]),t._v(' idea is still "in the lab". We\'re not sure yet whether '),e("code",[t._v("bdk_core")]),t._v(" will just be what's\nleft of "),e("code",[t._v("bdk")]),t._v(" once we spin off all the components that have extra dependencies into their own crates\nand refine it a bit. In that case "),e("code",[t._v("bdk_core")]),t._v(" will just be called "),e("code",[t._v("bdk v1.0.0")]),t._v(" or something. Or it might\nbe that "),e("code",[t._v("bdk")]),t._v(" lives on with its current APIs and uses stuff "),e("code",[t._v("bdk_core")]),t._v(" to implement it internally.")]),t._v(" "),e("h2",{attrs:{id:"the-separation-of-policy-and-mechanism"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#the-separation-of-policy-and-mechanism"}},[t._v("#")]),t._v(" The separation of policy and mechanism")]),t._v(" "),e("p",[t._v("My guiding principle for "),e("code",[t._v("bdk_core")]),t._v(" is the "),e("em",[t._v("separation of policy and mechanism")]),t._v(". This is\nwhat I mean by these terms:")]),t._v(" "),e("ul",[e("li",[e("em",[t._v("mechanism")]),t._v(": How you do a particular thing. Mechanism code is functional and doesn't change much.")]),t._v(" "),e("li",[e("em",[t._v("policy")]),t._v(": What you want to do. Policy code composes mechanisms to achieve something in\nan application.")])]),t._v(" "),e("p",[t._v("Here's a nice passage about why the designers of the "),e("a",{attrs:{href:"https://en.wikipedia.org/wiki/X_Window_System",target:"_blank",rel:"noopener noreferrer"}},[t._v("X window system"),e("OutboundLink")],1),t._v(" applied this principle. X has\nbeen around since 1984 and doesn't look like it's going anywhere so it probably has a lot to teach us.\nFrom "),e("em",[e("a",{attrs:{href:"https://en.wikipedia.org/wiki/The_Art_of_Unix_Programming",target:"_blank",rel:"noopener noreferrer"}},[t._v("The Art of UNIX Programming"),e("OutboundLink")],1)]),t._v(":")]),t._v(" "),e("blockquote",[e("p",[t._v("...we observed that the designers of X made a basic decision to implement “mechanism, not policy”—to\nmake X a generic graphics engine and leave decisions about user-interface style to toolkits and\nother levels of the system. We justified this by pointing out that policy and mechanism tend to\nmutate on different timescales, with policy changing much faster than mechanism. Fashions in the\nlook and feel of GUI toolkits may come and go, but raster operations and compositing are forever.")])]),t._v(" "),e("blockquote",[e("p",[t._v("Thus, hardwiring policy and mechanism together has two bad effects: It makes policy rigid and\nharder to change in response to user requirements, and it means that trying to change policy has a\nstrong tendency to destabilize the mechanisms.")])]),t._v(" "),e("blockquote",[e("p",[t._v("On the other hand, by separating the two we make it\npossible to experiment with new policy without breaking mechanisms. We also make it much easier to\nwrite good tests for the mechanism (policy, because it ages so quickly, often does not justify the\ninvestment).")])]),t._v(" "),e("ul",[e("li",[t._v("[ ] > This design rule has wide application outside the GUI context. In general, it implies that we")])]),t._v(" "),e("blockquote",[e("p",[t._v("should look for ways to separate interfaces from engines.")])]),t._v(" "),e("p",[t._v("You'll notice we have a similar situation in Bitcoin engineering. We have mechanism code like\nsigning algorithms, key derivation, transaction construction logic, etc., that don't change much. But\nhow these compose together in applications changes quickly over time and between applications.")]),t._v(" "),e("p",[t._v("The main culprit of policy and mechanism conflation in "),e("code",[t._v("bdk")]),t._v(" is the main "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/struct.Wallet.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Wallet")]),e("OutboundLink")],1),t._v(" type.\nWallets do all of the following:")]),t._v(" "),e("ol",[e("li",[t._v("Store one or two descriptors (external and optional internal).")]),t._v(" "),e("li",[t._v("Keep track of which addresses you've given out so you only give out fresh ones from each descriptor.")]),t._v(" "),e("li",[t._v("Keep a list of transactions associated with the addresses in the wallet.")]),t._v(" "),e("li",[t._v("Given a source of blockchain data it can update its internal list of transactions.")]),t._v(" "),e("li",[t._v("Given some parameters it can build a PSBT from transaction outputs.")]),t._v(" "),e("li",[t._v("Given a PSBT it can sign it with its "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/signer/index.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Signers")]),e("OutboundLink")],1),t._v(".")])]),t._v(" "),e("p",[t._v("All of that is very useful but it is bound together with the particular policies and opinions of "),e("code",[t._v("Wallet")]),t._v(".\nIf "),e("code",[t._v("Wallet")]),t._v("'s policy is not your policy it's going to be tricky to get it to do what you want.\nHere are some examples:")]),t._v(" "),e("ol",[e("li",[t._v("In order to control how the "),e("code",[t._v("Wallet")]),t._v(" will select coins for a transaction internally you have to\npass in something implementing the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/coin_selection/trait.CoinSelectionAlgorithm.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("CoinSelectionAlgorithm")]),e("OutboundLink")],1),t._v(" trait. A coin selection algorithm\nis clearly mechanism code but the policy of "),e("code",[t._v("Wallet")]),t._v(" restricts that mechanism's interface. We\nhave "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/281",target:"_blank",rel:"noopener noreferrer"}},[t._v("very old issues"),e("OutboundLink")],1),t._v(" related to what the\ninterface of this trait should be and we don't have a clear way forward. In "),e("code",[t._v("bdk_core")]),t._v(" I want to\npurely provide the coin selection mechanisms for figuring out whether you need to select more\nUTXOs or whether you need a change output etc. How you use that mechanism will be up to you.")]),t._v(" "),e("li",[t._v("Another trait that has a similar structure is the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/wallet/signer/index.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Signer")]),e("OutboundLink")],1),t._v(" trait. You have to pass in signers\nso your wallet can sign PSBTs but you have little control over how the wallet chooses which\nsigners to use in any given situation. Right now the wallet will just iterate through all the\nsigners and ask them to sign. This is not always appropriate. In "),e("code",[t._v("bdk_core")]),t._v(" I want to provide\nfunctions for populating PSBTs given something that can sign. You'll be in control of when they\nget called.")])]),t._v(" "),e("h2",{attrs:{id:"a-syncing-mechansim-without-the-policy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#a-syncing-mechansim-without-the-policy"}},[t._v("#")]),t._v(" A syncing mechansim without the policy")]),t._v(" "),e("p",[t._v("Syncing in "),e("code",[t._v("bdk")]),t._v(" is the place where the design of "),e("code",[t._v("Wallet")]),t._v(" is most restrictive. The "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/blockchain/trait.WalletSync.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("WalletSync")]),e("OutboundLink")],1),t._v("\ntrait forces you to sync all addresses in a wallet in one big batch. But this is not always what you\nwant to do. I spoke to a developer who wanted to sync his wallet slowly over time with each address\nbeing queried over a different Tor connection. It would be really difficult to implement\n"),e("code",[t._v("WalletSync")]),t._v(" with such a strategy. Another example where "),e("code",[t._v("WalletSync")]),t._v(" isn't the right fit is the\n"),e("a",{attrs:{href:"https://l2.technology/sensei",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sensei"),e("OutboundLink")],1),t._v(" project which uses BDK but incrementally updates the database whenever new information\ncomes in from the blockchain.")]),t._v(" "),e("p",[t._v("Even if syncing all addresses at the same time is roughly what you want to do "),e("code",[t._v("WalletSync")]),t._v(" still\ngets in the way since it defines whether you do it synchronously or asynchrononusly. Applications\ncan control this through "),e("code",[t._v("bdk")]),t._v("'s "),e("code",[t._v("async-interface")]),t._v(" feature flag which internally changes the trait\ndefinition through macros. Another annoyance is that when using "),e("code",[t._v("async-interface")]),t._v(" the future that\ngets returned from "),e("code",[t._v("WalletSync")]),t._v(" "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/165",target:"_blank",rel:"noopener noreferrer"}},[t._v("cannot be "),e("code",[t._v("Send")]),e("OutboundLink")],1),t._v("\nbecause of how "),e("code",[t._v("Wallet")]),t._v(" handles database mutability internally, meaning you can't spawn the future\ninto a new thread.")]),t._v(" "),e("h3",{attrs:{id:"a-general-syncing-mechanism"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#a-general-syncing-mechanism"}},[t._v("#")]),t._v(" A general syncing mechanism")]),t._v(" "),e("p",[t._v("So what is the most general syncing mechanism that solves these problems? These are the things I\nthink it has to do regardless of where the blockchain data comes from or how it's stored:")]),t._v(" "),e("ol",[e("li",[t._v("Generate and store addresses.")]),t._v(" "),e("li",[t._v("Index transaction data, e.g. transaction outputs we own, when/if they were spent, etc.")]),t._v(" "),e("li",[t._v("Keep track of which addresses have been given out and which have been used.")]),t._v(" "),e("li",[t._v('Be able to "roll back" our view of the above data if a reorg makes some of it stale.')]),t._v(" "),e("li",[t._v("Keep track of transactions related our addresses in our mempool.")])]),t._v(" "),e("p",[t._v("Let's talk about how to implement a mechanism that does all that.")]),t._v(" "),e("h3",{attrs:{id:"how-to-store-and-index-transactions"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#how-to-store-and-index-transactions"}},[t._v("#")]),t._v(" How to store and index transactions")]),t._v(" "),e("p",[t._v("Different persistent storage backends have different APIs and their own indexing strategies. That's\nwhy the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/database/trait.Database.html",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("Database")]),e("OutboundLink")],1),t._v(" trait exists in BDK, to make a clean API to the different storage engines. It's\nimportant to note that the database in BDK only holds public data that could always be retrieved\nfrom the chain. It's just a cache. Despite this we support different backends. Right now it is a\nlot of work to add a new index to the data since you have to add it to every backend and you might have\nto apply schema changes (we still "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/359",target:"_blank",rel:"noopener noreferrer"}},[t._v("don't have a standard approach to\nthis"),e("OutboundLink")],1),t._v(").")]),t._v(" "),e("p",[t._v("Thomas Eizinger "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/issues/165#issuecomment-1047483895",target:"_blank",rel:"noopener noreferrer"}},[t._v("suggested"),e("OutboundLink")],1),t._v("\ndoing everything in memory and only writing to persistent storage when it was convenient. It took me\nsome time but I came around to this idea. It would allow us to get rid of the "),e("code",[t._v("Database")]),t._v(" trait (at\nleast at the "),e("code",[t._v("bdk_core")]),t._v(" level) and greatly simplify what the persistent storage layer has to do.\nWhenever the data is loaded from persistent storage we can just do the indexing in memory and\npresent it to the application.")]),t._v(" "),e("p",[e("em",[t._v("But wait! Wouldn't this mean we'd use way more memory than we need to?")]),t._v(" Yes but memory is cheap.\nConsider that if we say the average transaction size is 300 bytes then with all our indexes each\ntransaction might cost 1kb of memory (pessimistically). This means we could index one thousand\ntransactions in a single megabyte! My iPhone has 4gb of memory so it could index a million\ntransactions with plenty of memory to spare. "),e("em",[t._v("But what if some users can't afford an iPhone?")]),t._v(" Then\nthey also couldn't have afforded to have made a million Bitcoin transactions! "),e("em",[t._v("But what about memory\nconstrained devices like hardware wallets!?")]),t._v(" Those devices typically don't store and retrieve\ntransactions. They're usually just signing devices. Perhaps one day someone will build a memory\nconstrained device that needs to do this work but until then I think this is a fine approach to\ntake.")]),t._v(" "),e("p",[t._v("For now I'm calling this thing that does the in-memory indexing of transactions related to a single\ndescriptor a "),e("code",[t._v("DescriptorTracker")]),t._v(". Here's a diagram that communicates how I imagine it relates to the\nother components.")]),t._v(" "),e("figure",[e("img",{attrs:{src:a(349),alt:""}})]),t._v(" "),e("h3",{attrs:{id:"rolling-back-rolling-forward-and-syncing-to-disk"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rolling-back-rolling-forward-and-syncing-to-disk"}},[t._v("#")]),t._v(" Rolling back, rolling forward and syncing to disk")]),t._v(" "),e("p",[t._v("State changes in blockchains are clearly delineated. They all happen in blocks! Every view of the\nblockchain, whether you're getting it through compact block filters, an electrum server or something\nwacky like a utreexo bridge will have a concept of blocks and transactions in them. For a wallet we\nonly need a very sparse view of the blockchain that includes at which block a set of transactions\nexisted. That way, if a block disappears we know that all those transactions might disappear too.")]),t._v(" "),e("p",[t._v("With "),e("code",[t._v("bdk_core")]),t._v(" I want to introduce the concept of a "),e("em",[t._v("checkpoint")]),t._v(", which is a block height and hash and\na set of txids that were present at that height "),e("strong",[t._v("but not present in the previous checkpoint")]),t._v(". In\nthis way we create an append-only data structure that can easily be rolled back to a previous height\nif there is a reorg. After rolling back we can then roll forward and apply the new blocks.")]),t._v(" "),e("p",[t._v("Here's an example of how this idea works:")]),t._v(" "),e("figure",[e("img",{attrs:{src:a(350),alt:""}})]),t._v(" "),e("p",[t._v("There are a few edge cases I'd like to cover:")]),t._v(" "),e("ol",[e("li",[t._v("What if when gathering new data from the chain to update a "),e("code",[t._v("DescriptorTracker")]),t._v(" we find an old transaction that belongs to an earlier checkpoint that we had missed form our earlier syncs?")]),t._v(" "),e("li",[t._v("What if when we go to write to persistent storage from a "),e("code",[t._v("DescriptorTracker")]),t._v(" we find that it has some transactions the tracker doesn't? Should we try and reconcile the two sets of transactions?")])]),t._v(" "),e("p",[t._v("I think the correct approach is to treat the chain data as the source of truth for the\n"),e("code",[t._v("DescriptorTracker")]),t._v(" and the "),e("code",[t._v("DescriptorTracker")]),t._v(" as the source of truth for persistent storage. That\nis in the case of (1) we should just rollback the "),e("code",[t._v("DescriptorTracker")]),t._v(" and insert the old but\nrecently discovered transaction in the right place. In the case of (2) we should roll back the\npersistent storage to the point where it differs and apply changes from there. This implies that you\nshould only keep one instance of a "),e("code",[t._v("DescriptorTracker")]),t._v(" for a descriptor in your application and only\nupdate persistent storage by first applying the changes to the tracker.")]),t._v(" "),e("h2",{attrs:{id:"examples"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),e("p",[t._v("Here are some examples of what I think this may end up looking like in code. Keep in mind that if\nthis looks complicated it will probably be more complicated in practice! This doesn't mean that we\ncan't create simplifying abstractions and tools around these primitives to cover common policies. I hope we can implement "),e("code",[t._v("Wallet")]),t._v(" with "),e("code",[t._v("DescriptorTracker")]),t._v("s internally.")]),t._v(" "),e("h3",{attrs:{id:"doing-an-initial-sync-of-a-descriptor-that-may-already-contain-coins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#doing-an-initial-sync-of-a-descriptor-that-may-already-contain-coins"}},[t._v("#")]),t._v(" Doing an initial sync of a descriptor that may already contain coins")]),t._v(" "),e("p",[t._v("When we first sync a descriptor that may already contain coins we want to iterate over all the\nscripts of the wallet and then stop if there's a big enough gap (e.g. 20). In this example we use an\nstateless "),e("a",{attrs:{href:"https://mempool.space/docs/api/rest",target:"_blank",rel:"noopener noreferrer"}},[t._v("esplora-like API"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("div",{staticClass:"language-rust extra-class"},[e("pre",{pre:!0,attrs:{class:"language-rust"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a descriptor tracker the external addresses of a BIP86 key")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tracker "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorTracker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"tr([73c5da0a/86'/0'/0']xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\"")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" esplora "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("fetch_related_transactions")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// iterate over all addresses in a descriptor")]),t._v("\n scripts"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("iter_scripts")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// stop if you find a gap of 20 unused addresses")]),t._v("\n stop_gap"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\ntracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// now we want to persist this disk")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n start_checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Note that the db_update type is the same as the `update` above.")]),t._v("\nmy_db"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("db_update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h3",{attrs:{id:"doing-a-sync-of-a-wallet-after-you-already-have-syncd"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#doing-a-sync-of-a-wallet-after-you-already-have-syncd"}},[t._v("#")]),t._v(" Doing a sync of a wallet after you already have sync'd")]),t._v(" "),e("p",[t._v("Now imagine you just want to check if any UTXOs in your wallet have been spent. In this case we've\nalready sync'd before so we need to load that data into the tracker from disk first (rather than\ngoing straight to the blockchain). Then we just ask esplora for transactions related to these\ntransaction outputs.")]),t._v(" "),e("div",{staticClass:"language-rust extra-class"},[e("pre",{pre:!0,attrs:{class:"language-rust"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a descriptor tracker the external addresses of a BIP86 key")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tracker "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorTracker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"tr([73c5da0a/86'/0'/0']xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\"")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" init_update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" my_db"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get up to speed with what was on disk.")]),t._v("\ntracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("init_update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// get the latest checkpoint")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" checkpoint "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_checkpoint")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" esplora "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch transactions spending any utxos we have")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("fetch_related_transactions")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n tx_outs"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("iter_unspent")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" update "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ok")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// now we want to persist this disk")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_update "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Params")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this call could fail if tracker no longer has this checkpoint.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// In this case we'd ask persistent_storage for an earlier checkpoint and try again.")]),t._v("\n start_checkpoint"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" persistent_storage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_checkpoint")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n persistent_storage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_update")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("db_update"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Err")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk_esplora"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Error")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StaleCheckpoint")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// here we should call fetch related transactions with an earlier checkpoint.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// In practice this logic will be called in a loop")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h3",{attrs:{id:"updating-state-when-you-get-the-data-in-real-time"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#updating-state-when-you-get-the-data-in-real-time"}},[t._v("#")]),t._v(" Updating state when you get the data in real time")]),t._v(" "),e("p",[t._v("If you have an event based view of the blockchain that feeds you block connected or block\ndisconnected events then I imagine the API would look something like this.\nThere's quite a bit left out here but I hope you get the idea.")]),t._v(" "),e("div",{staticClass:"language-rust extra-class"},[e("pre",{pre:!0,attrs:{class:"language-rust"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a descriptor tracker the external addresses of a BIP86 key")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tracker "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorTracker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"tr([73c5da0a/86'/0'/0']xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\"")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain_events "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* get a Stream of blockchain block connected/disconnected events */")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("loop")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain_event "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" blockchain_events"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("await")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" blockchain_event "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BlockChainEvent")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Connected")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("new_block"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apply_block")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("new_block"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Ok")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("modified"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" modified "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update persistent storage from tracker")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Err")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ApplyBlockError")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("OutOfOrder")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the block event we got was not the next block we expected.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// How to recover from this will depend on the application and block source")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BlockchainEvent")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Disconnected")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("disconnected_height"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" disconnected_hash"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this might invalidate a checkpoint")]),t._v("\n tracker"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("disconnect_block")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("disconnected_height"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" disconnected_hash"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Now apply to persistent storage")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"feedback"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#feedback"}},[t._v("#")]),t._v(" Feedback")]),t._v(" "),e("p",[t._v("The best way to give feedback on this would be to comment on the "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bitcoindevkit.org/pull/100",target:"_blank",rel:"noopener noreferrer"}},[t._v("pull request"),e("OutboundLink")],1),t._v(" for this blog post.\nThanks in advance.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/35.f4fd78b4.js b/assets/js/35.a1e22f3f.js similarity index 99% rename from assets/js/35.f4fd78b4.js rename to assets/js/35.a1e22f3f.js index 8d4128c4d1..5bbb071daf 100644 --- a/assets/js/35.f4fd78b4.js +++ b/assets/js/35.a1e22f3f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{316:function(t,a,s){},375:function(t,a,s){"use strict";s(316)},437:function(t,a,s){"use strict";s.r(a);s(375);var e=s(7),i=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"all"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#all"}},[t._v("#")]),t._v(" All")]),t._v(" "),a("p",[t._v("Explore the ecosystem of projects that are built with the BDK family of libraries.")]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://bitkey.build/",target:"_blank"}},[a("img",{staticStyle:{"max-height":"130px"},attrs:{src:"/img/case-studies-logos/block-logo.gif"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h2",[a("a",{attrs:{href:"https://bitkey.build/",target:"_blank"}},[t._v("Bitkey")])]),t._v(" "),a("p",[t._v("\n Bitkey is the safe, easy way to own and manage bitcoin. It’s a mobile app, hardware device, and a set of recovery tools, for simple, secure self-custody.\n ")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/peach-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h2",[a("a",{attrs:{href:"https://peachbitcoin.com/",target:"_blank"}},[t._v("Peach Bitcoin")])]),t._v(" "),a("p",[t._v("Connecting Bitcoin buyers and sellers directly together. Buy or sell bitcoin peer-to-peer anywhere, at anytime.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.anchorwatch.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/anchorwatch-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.anchorwatch.com/",target:"_blank"}},[t._v("AnchorWatch")])]),t._v(" "),a("p",[t._v("Protect your bitcoin with regulated insurance and enterprise-grade multi-institutional custody.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.mutinywallet.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/mutiny-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.mutinywallet.com/",target:"_blank"}},[t._v("Mutiny Wallet")])]),t._v(" "),a("p",[t._v("Mutiny is a self-custodial lightning wallet that runs in the browser.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://foundationdevices.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/foundation-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://foundationdevices.com/",target:"_blank"}},[t._v("Envoy By Foundation")])]),t._v(" "),a("p",[t._v("A Bitcoin wallet with powerful account management and privacy features. Use alongside your Passport hardware wallet to take true ownership of your Bitcoin.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://mempool.space/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/mempool-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://mempool.space/",target:"_blank"}},[t._v("mempool.space")])]),t._v(" "),a("p",[t._v("Explore the full Bitcoin ecosystem.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.caravanmultisig.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/caravan-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.caravanmultisig.com/#/",target:"_blank"}},[t._v("Caravan")])]),t._v(" "),a("p",[t._v("Caravan is a multi-sig coordinator application, and an Unchained-sponsored open source project.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.bullbitcoin.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/bull-bitcoin-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.bullbitcoin.com/",target:"_blank"}},[t._v("Bull Bitcoin")])]),t._v(" "),a("p",[t._v("A self-custodial Bitcoin Wallet and Exchange app that lets users buy, sell, spend and get paid with Bitcoin. Bitcoins are automatically sent from the exchange to the user's wallet.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.lava.xyz/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/lava-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.lava.xyz/",target:"_blank"}},[t._v("Lava")])]),t._v(" "),a("p",[t._v("The Future of Finance Available Today. Functional, safe and simple.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/lightningdevkit/ldk-node",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/ldk-node-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/lightningdevkit/ldk-node",target:"_blank"}},[t._v("LDK Node")])]),t._v(" "),a("p",[t._v("A ready-to-go Lightning node library built using LDK and BDK.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.goldenraven.padawanwallet",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/padawan-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.goldenraven.padawanwallet",target:"_blank"}},[t._v("Padawan Wallet")])]),t._v(" "),a("p",[t._v("Padawan is a testnet-only bitcoin wallet packed with tutorials to learn how to use bitcoin on mobile.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.seba.swiss/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/seba-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.seba.swiss/",target:"_blank"}},[t._v("Seba Bank")])]),t._v(" "),a("p",[t._v("From everyday banking to crypto custody and trading, get the most out of your assets with a regulated global crypto bank.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://bitmask.app/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/bitmask-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://bitmask.app/",target:"_blank"}},[t._v("BitMask Wallet")])]),t._v(" "),a("p",[t._v("Your Gateway to DeepWeb3 on Bitcoin. A browser extension for decentralized applications on Bitcoin.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.smartvaults.io/",target:"_blank"}},[a("img",{staticStyle:{"max-height":"130px"},attrs:{src:"/img/case-studies-logos/smart-vaults-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.smartvaults.io/",target:"_blank"}},[t._v("Smart Vaults")])]),t._v(" "),a("p",[t._v("Determine who, how, and when your Bitcoin can be accessed.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://galoy.io/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/galoy-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://galoy.io/",target:"_blank"}},[t._v("Galoy")])]),t._v(" "),a("p",[t._v("Bitcoin-native banking infrastructure for organizations.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.iriswallet.testnet",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/iris-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.iriswallet.testnet",target:"_blank"}},[t._v("Iris Wallet")])]),t._v(" "),a("p",[t._v("Open-source wallet for Bitcoin and RGB assets.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/BlockchainCommons/spotbit",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/spotbit-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/BlockchainCommons/spotbit",target:"_blank"}},[t._v("Spotbit")])]),t._v(" "),a("p",[t._v("Spotbit is a portable API for Bitcoin price data and candles.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/StackmateNetwork",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/stackmate-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/StackmateNetwork",target:"_blank"}},[t._v("Stackmate")])]),t._v(" "),a("p",[t._v("A multi-purpose Bitcoin Wallet.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://lipa.swiss/en",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/lipa-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://lipa.swiss/en",target:"_blank"}},[t._v("Lipa")])]),t._v(" "),a("p",[t._v("The Swiss app for cashless payments with Bitcoin.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://lexe.app/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/lexe-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://lexe.app/",target:"_blank"}},[t._v("Lexe Wallet")])]),t._v(" "),a("p",[t._v("Lexe is a self-custodial Bitcoin and Lightning wallet that can receive payments 24/7.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://10101.finance/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/10101-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://10101.finance/",target:"_blank"}},[t._v("10101")])]),t._v(" "),a("p",[t._v("Decentralised finance. For real. BTC trading without counterparty risk in one easy and fast app.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://wizardsardine.com/liana/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/liana-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://wizardsardine.com/liana/",target:"_blank"}},[t._v("Liana")])]),t._v(" "),a("p",[t._v("Never lose your coins. Liana is a simple Bitcoin wallet with built-in loss protection and inheritance.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/utreexo/utreexod",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/utreexod-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/utreexo/utreexod",target:"_blank"}},[t._v("utreexod")])]),t._v(" "),a("p",[t._v("A fully validating Bitcoin node with Utreexo support.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://proton.me/wallet",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/protonwallet-logo-transparent-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://proton.me/wallet",target:"_blank"}},[t._v("Proton Wallet")])]),t._v(" "),a("p",[t._v("A self-custodial Bitcoin wallet from the makers of Proton Mail.")])])]),t._v(" "),a("a",{staticClass:"nav-link external action-button",attrs:{href:"https://github.com/orgs/bitcoindevkit/discussions/64",target:"_blank",rel:"noopener noreferrer"}},[t._v("\n Add your project\n "),a("span",[a("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[a("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),t._v(" "),a("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),t._v(" "),a("span",{staticClass:"sr-only"},[t._v("(opens new window)")])])])])}),[],!1,null,null,null);a.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{316:function(t,a,s){},375:function(t,a,s){"use strict";s(316)},435:function(t,a,s){"use strict";s.r(a);s(375);var e=s(7),i=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"all"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#all"}},[t._v("#")]),t._v(" All")]),t._v(" "),a("p",[t._v("Explore the ecosystem of projects that are built with the BDK family of libraries.")]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://bitkey.build/",target:"_blank"}},[a("img",{staticStyle:{"max-height":"130px"},attrs:{src:"/img/case-studies-logos/block-logo.gif"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h2",[a("a",{attrs:{href:"https://bitkey.build/",target:"_blank"}},[t._v("Bitkey")])]),t._v(" "),a("p",[t._v("\n Bitkey is the safe, easy way to own and manage bitcoin. It’s a mobile app, hardware device, and a set of recovery tools, for simple, secure self-custody.\n ")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/peach-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h2",[a("a",{attrs:{href:"https://peachbitcoin.com/",target:"_blank"}},[t._v("Peach Bitcoin")])]),t._v(" "),a("p",[t._v("Connecting Bitcoin buyers and sellers directly together. Buy or sell bitcoin peer-to-peer anywhere, at anytime.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.anchorwatch.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/anchorwatch-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.anchorwatch.com/",target:"_blank"}},[t._v("AnchorWatch")])]),t._v(" "),a("p",[t._v("Protect your bitcoin with regulated insurance and enterprise-grade multi-institutional custody.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.mutinywallet.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/mutiny-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.mutinywallet.com/",target:"_blank"}},[t._v("Mutiny Wallet")])]),t._v(" "),a("p",[t._v("Mutiny is a self-custodial lightning wallet that runs in the browser.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://foundationdevices.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/foundation-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://foundationdevices.com/",target:"_blank"}},[t._v("Envoy By Foundation")])]),t._v(" "),a("p",[t._v("A Bitcoin wallet with powerful account management and privacy features. Use alongside your Passport hardware wallet to take true ownership of your Bitcoin.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://mempool.space/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/mempool-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://mempool.space/",target:"_blank"}},[t._v("mempool.space")])]),t._v(" "),a("p",[t._v("Explore the full Bitcoin ecosystem.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.caravanmultisig.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/caravan-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.caravanmultisig.com/#/",target:"_blank"}},[t._v("Caravan")])]),t._v(" "),a("p",[t._v("Caravan is a multi-sig coordinator application, and an Unchained-sponsored open source project.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.bullbitcoin.com/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/bull-bitcoin-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.bullbitcoin.com/",target:"_blank"}},[t._v("Bull Bitcoin")])]),t._v(" "),a("p",[t._v("A self-custodial Bitcoin Wallet and Exchange app that lets users buy, sell, spend and get paid with Bitcoin. Bitcoins are automatically sent from the exchange to the user's wallet.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.lava.xyz/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/lava-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.lava.xyz/",target:"_blank"}},[t._v("Lava")])]),t._v(" "),a("p",[t._v("The Future of Finance Available Today. Functional, safe and simple.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/lightningdevkit/ldk-node",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/ldk-node-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/lightningdevkit/ldk-node",target:"_blank"}},[t._v("LDK Node")])]),t._v(" "),a("p",[t._v("A ready-to-go Lightning node library built using LDK and BDK.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.goldenraven.padawanwallet",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/padawan-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.goldenraven.padawanwallet",target:"_blank"}},[t._v("Padawan Wallet")])]),t._v(" "),a("p",[t._v("Padawan is a testnet-only bitcoin wallet packed with tutorials to learn how to use bitcoin on mobile.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.seba.swiss/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/seba-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.seba.swiss/",target:"_blank"}},[t._v("Seba Bank")])]),t._v(" "),a("p",[t._v("From everyday banking to crypto custody and trading, get the most out of your assets with a regulated global crypto bank.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://bitmask.app/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/bitmask-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://bitmask.app/",target:"_blank"}},[t._v("BitMask Wallet")])]),t._v(" "),a("p",[t._v("Your Gateway to DeepWeb3 on Bitcoin. A browser extension for decentralized applications on Bitcoin.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://www.smartvaults.io/",target:"_blank"}},[a("img",{staticStyle:{"max-height":"130px"},attrs:{src:"/img/case-studies-logos/smart-vaults-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://www.smartvaults.io/",target:"_blank"}},[t._v("Smart Vaults")])]),t._v(" "),a("p",[t._v("Determine who, how, and when your Bitcoin can be accessed.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://galoy.io/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/galoy-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://galoy.io/",target:"_blank"}},[t._v("Galoy")])]),t._v(" "),a("p",[t._v("Bitcoin-native banking infrastructure for organizations.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.iriswallet.testnet",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/iris-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.iriswallet.testnet",target:"_blank"}},[t._v("Iris Wallet")])]),t._v(" "),a("p",[t._v("Open-source wallet for Bitcoin and RGB assets.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/BlockchainCommons/spotbit",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/spotbit-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/BlockchainCommons/spotbit",target:"_blank"}},[t._v("Spotbit")])]),t._v(" "),a("p",[t._v("Spotbit is a portable API for Bitcoin price data and candles.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/StackmateNetwork",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/stackmate-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/StackmateNetwork",target:"_blank"}},[t._v("Stackmate")])]),t._v(" "),a("p",[t._v("A multi-purpose Bitcoin Wallet.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://lipa.swiss/en",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/lipa-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://lipa.swiss/en",target:"_blank"}},[t._v("Lipa")])]),t._v(" "),a("p",[t._v("The Swiss app for cashless payments with Bitcoin.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://lexe.app/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/lexe-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://lexe.app/",target:"_blank"}},[t._v("Lexe Wallet")])]),t._v(" "),a("p",[t._v("Lexe is a self-custodial Bitcoin and Lightning wallet that can receive payments 24/7.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://10101.finance/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/10101-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://10101.finance/",target:"_blank"}},[t._v("10101")])]),t._v(" "),a("p",[t._v("Decentralised finance. For real. BTC trading without counterparty risk in one easy and fast app.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://wizardsardine.com/liana/",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/liana-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://wizardsardine.com/liana/",target:"_blank"}},[t._v("Liana")])]),t._v(" "),a("p",[t._v("Never lose your coins. Liana is a simple Bitcoin wallet with built-in loss protection and inheritance.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://github.com/utreexo/utreexod",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/utreexod-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://github.com/utreexo/utreexod",target:"_blank"}},[t._v("utreexod")])]),t._v(" "),a("p",[t._v("A fully validating Bitcoin node with Utreexo support.")])])]),t._v(" "),a("div",{staticClass:"project"},[a("div",{staticClass:"project-logo"},[a("a",{attrs:{href:"https://proton.me/wallet",target:"_blank"}},[a("img",{attrs:{src:"/img/case-studies-logos/protonwallet-logo-transparent-130.png"}})])]),t._v(" "),a("div",{staticClass:"tagline"},[a("h3",[a("a",{attrs:{href:"https://proton.me/wallet",target:"_blank"}},[t._v("Proton Wallet")])]),t._v(" "),a("p",[t._v("A self-custodial Bitcoin wallet from the makers of Proton Mail.")])])]),t._v(" "),a("a",{staticClass:"nav-link external action-button",attrs:{href:"https://github.com/orgs/bitcoindevkit/discussions/64",target:"_blank",rel:"noopener noreferrer"}},[t._v("\n Add your project\n "),a("span",[a("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[a("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),t._v(" "),a("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),t._v(" "),a("span",{staticClass:"sr-only"},[t._v("(opens new window)")])])])])}),[],!1,null,null,null);a.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/50.188dab6f.js b/assets/js/50.af42e37d.js similarity index 99% rename from assets/js/50.188dab6f.js rename to assets/js/50.af42e37d.js index 2d1dc8d403..d9d38fdfd4 100644 --- a/assets/js/50.188dab6f.js +++ b/assets/js/50.af42e37d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{403:function(t,s,a){"use strict";a.r(s);var n=a(7),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("BDK wallet developer library can be used to easily deploy wallets with various kinds of blockchain backend support, like "),s("a",{attrs:{href:"https://github.com/romanz/electrs",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("electrum")]),s("OutboundLink")],1),t._v(", "),s("a",{attrs:{href:"https://github.com/Blockstream/esplora",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("esplora")]),s("OutboundLink")],1),t._v(", "),s("code",[t._v("compact-filters")]),t._v(" ("),s("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP157"),s("OutboundLink")],1),t._v(") etc. With the latest release of BDK "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/releases/tag/v0.10.0",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("v0.10.0")]),s("OutboundLink")],1),t._v(", BDK now supports Bitcoin Core as a blockchain backend. BDK talks with Bitcoin Core using rust-bitcoin's "),s("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoincore-rpc",target:"_blank",rel:"noopener noreferrer"}},[t._v("bitcoincore-rpc"),s("OutboundLink")],1),t._v(" library.")]),t._v(" "),s("p",[t._v("This allows wallet devs to quickly deploy their wallet that can talk to a bitcoin full node (home raspi nodes) out of the box. Wallet devs don't need to worry about connecting to a full node with correct RPC calls, all of that is handled by BDK under the hood. All they need is to identify the full node's RPC IP address and the correct RPC credentials.")]),t._v(" "),s("p",[t._v("In this tutorial we will see how to write a very simplistic wallet code that can connect to a bitcoin core node and maintain its balance and make transactions.")]),t._v(" "),s("p",[t._v("Unlike other tutorials, we will not use "),s("code",[t._v("bdk-cli")]),t._v(" tools, but instead write rust code directly using "),s("code",[t._v("BDK")]),t._v(" devkit. In the end we will end up with our own simple bitcoin wallet.")]),t._v(" "),s("h2",{attrs:{id:"prerequisite"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisite"}},[t._v("#")]),t._v(" Prerequisite")]),t._v(" "),s("p",[t._v("To run with this tutorial you would need to have a bitcoin core node running in regtest mode. Get the bitcoin core binary either from the "),s("a",{attrs:{href:"https://bitcoincore.org/bin/bitcoin-core-0.21.1/",target:"_blank",rel:"noopener noreferrer"}},[t._v("bitcoin core repo"),s("OutboundLink")],1),t._v(" or "),s("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/v0.21.1/doc/build-unix.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("build from source"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Then configure the node with a following "),s("code",[t._v("bitcoin.conf")]),t._v(" file")]),t._v(" "),s("div",{staticClass:"language-txt extra-class"},[s("pre",{pre:!0,attrs:{class:"language-txt"}},[s("code",[t._v("regtest=1\nfallbackfee=0.0001\nserver=1\ntxindex=1\nrpcuser=admin\nrpcpassword=password\n")])])]),s("p",[t._v("Apart from that, you would need to install rust in your system. Grab the installation one-liner from "),s("a",{attrs:{href:"https://www.rust-lang.org/tools/install",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"setting-up"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up"}},[t._v("#")]),t._v(" Setting Up")]),t._v(" "),s("p",[t._v("Create a new cargo binary repository.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mkdir")]),t._v(" ~/tutorial\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" tutorial\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" new bdk-example\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" bdk-example\n")])])]),s("p",[t._v("This will create a new project folder named "),s("code",[t._v("bdk-example")]),t._v(" with "),s("code",[t._v("src/main.rs")]),t._v(" and a "),s("code",[t._v("cargo.toml")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ tree "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n├── Cargo.toml\n└── src\n └── main.rs\n\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" directory, "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" files\n")])])]),s("p",[t._v("Opening "),s("code",[t._v("main.rs")]),t._v(" you will see some predefined code like this")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello, world!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Try running "),s("code",[t._v("cargo run")]),t._v(' and if everything is set, you should see "Hello, world!" printed in your terminal')]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n Compiling bdk-example v0.1.0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("/home/raj/github-repo/tutorial/bdk-example"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n Finished dev "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("unoptimized + debuginfo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(".95s\n Running "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("target/debug/bdk-example"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v("\nHello, world"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("\n")])])]),s("p",[t._v("Of course we will not use the given "),s("code",[t._v("println!()")]),t._v(" statement, but we will put our main code in the "),s("code",[t._v("main()")]),t._v(" function.")]),t._v(" "),s("p",[s("code",[t._v("cargo new")]),t._v(" will also produce a skeleton "),s("code",[t._v("Cargo.toml")]),t._v(" file like this")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("package")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("name")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk-example"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.1.0"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("edition")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2018"')]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("h2",{attrs:{id:"setting-dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-dependencies"}},[t._v("#")]),t._v(" Setting dependencies")]),t._v(" "),s("p",[t._v("Once the rust binary is compiled and running, we now need to specify the dependencies we need to work on our library.")]),t._v(" "),s("p",[t._v("Remember that BDK provides almost everything we would need to build a wallet out of the box. So we don't need any more dependencies apart from BDK. We will use another small rust crate called "),s("a",{attrs:{href:"https://crates.io/crates/dirs-next",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("dirs_next")]),s("OutboundLink")],1),t._v(" to find our home directory and store wallet files in a subfolder there.")]),t._v(" "),s("p",[t._v("Add the dependencies into "),s("code",[t._v("Cargo.toml")]),t._v(" like below")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("package")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("name")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk-example"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.1.0"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("edition")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2018"')]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.10"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"all-keys"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key-value-db"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rpc"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("dirs-next")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2.0"')]),t._v("\n")])])]),s("p",[t._v("We disabled the default BDK feature (which specifies blockchain backend as an electrum server) and we requested the following features:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("all-keys")]),t._v(": Adds BIP39 key derivation capabilities")]),t._v(" "),s("li",[s("strong",[t._v("key-value-db")]),t._v(": Adds a persistence storage capability")]),t._v(" "),s("li",[s("strong",[t._v("rpc")]),t._v(": Adds the RPC blockchain backend capability.")])]),t._v(" "),s("p",[t._v("Now that we have the dependencies added, we can import them in the "),s("code",[t._v("main.rs")]),t._v(" file to use in our code.\nAdd the following imports at the start of "),s("code",[t._v("main.rs")])]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("secp256k1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoincore_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcApi")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wallet_name_from_descriptor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip39"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FromStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("With this we are now ready to add our wallet code.")]),t._v(" "),s("h2",{attrs:{id:"getting-descriptors"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getting-descriptors"}},[t._v("#")]),t._v(" Getting Descriptors")]),t._v(" "),s("p",[t._v("BDK is a descriptor based wallet library. That means when we specify our wallet key-chain we need to tell BDK about it in the format of a descriptor. You can read up on descriptors more "),s("a",{attrs:{href:"https://bitcoindevkit.org/descriptors/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(". A descriptor string looks like this\n"),s("code",[t._v("\"wpkh([b8b575c2/84'/1'/0'/0]tprv8icWtRzy9CWgFxpGMLSdAeE4wWyz39XGc6SwykeTo13tYm14JkVVQAf7jz8WDDarCgNJrG3aEPJEqchDWeJdiaWpS3FwbLB9SzsN57V7qxB/*)\"")]),t._v(".")]),t._v(" "),s("p",[t._v("This describes a SegwitV0 descriptor of a key derived at path "),s("code",[t._v("m/84'/1'/0'/0")]),t._v(". If you already have a descriptor from other sources, you can use that. Otherwise, BDK has your back. BDK can be used to generate a fresh master key with mnemonic, and then derive child keys from it given a specific path. Putting the key in a descriptor is as simple as wrapping it with a "),s("code",[t._v("wpkh()")]),t._v(" string.")]),t._v(" "),s("p",[t._v("We will use a dedicated function that will create fresh receive and change descriptors from BDK for our purpose. It will also generate the mnemonic word list for later regenerating the wallet. But we will ignore that for our scope.")]),t._v(" "),s("p",[t._v("Add a function named "),s("code",[t._v("get-descriptor()")]),t._v(" below the "),s("code",[t._v("main()")]),t._v(" function as shown")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// generate fresh descriptor strings and return them via (receive, change) tuple")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a new secp context")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" secp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You can also set a password to unlock the mnemonic")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" password "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"random password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate a fresh mnemonic, and from there a privatekey")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Words12")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("English")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_extended_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_xprv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create derived privkey from the above master privkey")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// We use the following derivation paths for receive and change keys")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// receive: "m/84h/1h/0h/0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// change: "m/84h/1h/0h/1" ')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" keys "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Vec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("derive_priv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("fingerprint")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv_desc_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n derived_xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_descriptor_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap the derived key with the wpkh() string to produce a descriptor string")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" derived_xprv_desc_key "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" desc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wpkh("')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('")"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Return the keys as a tuple")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("To check that the above added function is working as expected, call it in the main function and print the descriptors")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"recv: {:#?}, \\nchng: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Running the binary should produce the following result")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\nrecv: "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"wpkh([89df6a67/84'/1'/0'/0]tprv8iSRXyLtTKJN9qt1jyPVqwhDMEaYztXunPaRQznaH1z8gj8e2g7RnF2ZoHP56VEXwMn76AiV1Je6nJmZbFistwAQCrRGmSrsoKfdqfTDNA1/*)\"")]),t._v(", \nchng: "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"wpkh([89df6a67/84'/1'/0'/1]tprv8iSRXyLtTKJNCECQxBJ19cgx2ueS7mC7GNq7VqTWY3RNPMBY7DfTb9HUnXpJqa14jCJNRmi4yGxfoTVS4WLBXDkvTLq4vujeAD9NfDtSxGP/*)\"")]),t._v("\n")])])]),s("p",[t._v("Voila! Now we have nice descriptors strings handy to use for our BDK wallet construction.")]),t._v(" "),s("h2",{attrs:{id:"talking-to-bitcoin-core-programmatically"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#talking-to-bitcoin-core-programmatically"}},[t._v("#")]),t._v(" Talking to Bitcoin Core Programmatically")]),t._v(" "),s("p",[t._v("Like all other tutorials we will use two wallets to send coins back and forth. A Bitcoin Core wallet accessible via "),s("code",[t._v("bitcoin-cli")]),t._v(" command line tools, and a BDK wallet maintained by BDK library.")]),t._v(" "),s("p",[t._v("But unlike other tutorials, we won't be using "),s("code",[t._v("bitcoin-cli")]),t._v(" to talk to the Core wallet (we can, but let's spice things up). Instead, we will use the "),s("code",[t._v("bitcoin-rpc")]),t._v(" library, to talk with our core node listening at "),s("code",[t._v("127.0.0.1:18443")]),t._v(", from inside our main function. This will allow us to write code, that will handle both the core and BDK wallet, from inside of the same function, and we won't have to switch terminals!")]),t._v(" "),s("p",[t._v("Remember we imported "),s("code",[t._v("use bdk::bitcoincore_rpc::{Auth as rpc_auth, Client, RpcApi};")]),t._v("? Thats exactly for this purpose.")]),t._v(" "),s("p",[t._v("Start the "),s("code",[t._v("bitcoind")]),t._v(" node.")]),t._v(" "),s("p",[t._v("you should see bitcoind listening at port 18443")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("netstat")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-nptl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("grep")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("18443")]),t._v(" \ntcp "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0:18443 "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0:* LISTEN "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("135532")]),t._v("/bitcoind \n")])])]),s("p",[t._v("Lets create a core rpc interface in our main function.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a RPC interface")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_rpc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:18443/wallet/test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_blockchain_info")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("We have provided our RPC authentication "),s("code",[t._v("username")]),t._v(" and "),s("code",[t._v("password")]),t._v(" (same as provided in "),s("code",[t._v("bitcoin.conf")]),t._v(" file).\nWe have provided the RPC address of our local bitcoin node, with the path to a wallet file, named "),s("code",[t._v("test")]),t._v(". And then asked the rpc client to give us the current blockchain info.\nIf everything goes well, running "),s("code",[t._v("cargo run")]),t._v(" you should see an output like below:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\nGetBlockchainInfoResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n chain: "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"regtest"')]),t._v(",\n blocks: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n headers: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n best_block_hash: 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206,\n difficulty: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00000000046565423739069247")]),t._v(",\n median_time: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1296688602")]),t._v(",\n verification_progress: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.0")]),t._v(",\n initial_block_download: true,\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\n")])])]),s("p",[t._v("Thats it. Now we can programmatically talk to our core node.")]),t._v(" "),s("h2",{attrs:{id:"get-some-balance-in-core-wallet"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-some-balance-in-core-wallet"}},[t._v("#")]),t._v(" Get some balance in core wallet.")]),t._v(" "),s("p",[t._v("We have told our rpc client that we would use a wallet named "),s("code",[t._v("test")]),t._v(". But currently, our core node doesn't have such a wallet. So let's create the wallet and fund it with some test coins.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the test wallet ")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get a new address")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_new_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate 101 blocks and use the above address as coinbase")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch the new balance")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Show balance")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"core balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("This will create a wallet in bitcoin core named "),s("code",[t._v("test")]),t._v(". generate 101 blocks and use a new address from the wallet as coinbase wallet. Because required coinbase maturity in bitcoin is 100 blocks, by generating 101 blocks, we will have the balance of the first coinbase block reward available for use.\nThe last "),s("code",[t._v("println!()")]),t._v(" statement will show the new updated balance as 50 BTC.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\ncore balance: Amount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("50.00000000")]),t._v(" BTC"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n")])])]),s("p",[t._v("Great! We now have 50 regtest BTC to play with.")]),t._v(" "),s("h2",{attrs:{id:"setup-the-bdk-wallet"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-the-bdk-wallet"}},[t._v("#")]),t._v(" Setup the BDK wallet")]),t._v(" "),s("p",[t._v("Now that we are done setting up the core wallet. The last remaining step is to setup the BDK wallet. For this we will use the previous descriptor generation function and write code as below.")]),t._v(" "),s("p",[s("strong",[t._v("Note")]),t._v(": You might want to comment out the previous code in "),s("code",[t._v("main()")]),t._v(", as running them again will create more coins in core, which isn't an issue, but might be confusing.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get receive and change descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use deterministic wallet name derived from descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet_name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wallet_name_from_descriptor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the datadir to store wallet data")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" datadir "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("dirs_next"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("home_dir")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('".bdk-example"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" database "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_tree "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open_tree")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set RPC username, password and url")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n username"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" rpc_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:18443"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Setup the RPC configuration")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n skip_blocks"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use the above configuration to create a RPC blockchain backend")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("rpc_config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Combine everything and finally create the BDK wallet structure")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" db_tree"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch a fresh address to receive coins")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("New")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk address: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("That's a lot of code. They are divided into logical sections. Let's discuss each step one by one.")]),t._v(" "),s("ul",[s("li",[t._v("First we used our previous "),s("code",[t._v("get_descriptors()")]),t._v(" function to generate two descriptor strings. One for generating receive addresses and one for change addresses.")]),t._v(" "),s("li",[t._v("Then we used a special function from BDK called "),s("code",[t._v("wallet_name_from_descriptor()")]),t._v(" to derive a name of the wallet from our descriptors. This allows us to have wallet names deterministically linked with descriptors. So in future if we use a different descriptor, the wallet will automatically have a different name. This allows us to not mix wallet names with same descriptor, and given the descriptors we can always determine what was the name we used. It is recommended to derive wallet names like this while using a core backend. Note that this wallet will be created inside the core node. So just like we accessed the "),s("code",[t._v("test")]),t._v(" wallet, we could also access this wallet.")]),t._v(" "),s("li",[t._v("Then we created a data directory at path "),s("code",[t._v("/home/username/.bdk-example")]),t._v(". We use "),s("code",[t._v("dirs_next")]),t._v(" to find our home path, and then appended that with "),s("code",[t._v(".bdk-example")]),t._v(". All the BDK wallet files will be created and maintained in that directory. In the Database we instructed BDK to create a new "),s("code",[t._v("Tree")]),t._v(" with "),s("code",[t._v("wallet_name")]),t._v(", so given a descriptor, BDK will always know which DB Tree to refer ("),s("code",[t._v("Tree")]),t._v(" is a "),s("code",[t._v("sled")]),t._v(" specific term).")]),t._v(" "),s("li",[t._v("Then like we did previously, we created the rpc username/password authentication, and specified the rpc url. Note that we cannot use the same "),s("code",[t._v("rpc_auth")]),t._v(" we used before for "),s("code",[t._v("core_rpc")]),t._v(" as BDK auth and bitcoin-rpc auth are slightly separate structures.")]),t._v(" "),s("li",[t._v("We combined all this information and created an "),s("code",[t._v("RpcConfig")]),t._v(" structure.")]),t._v(" "),s("li",[t._v("We used the rpc configuration to create a "),s("code",[t._v("RpcBlockchain")]),t._v(" structure.")]),t._v(" "),s("li",[t._v("Finally we used the Descriptors, Database, and Blockchain to create our final BDK "),s("code",[t._v("wallet")]),t._v(" structure.")])]),t._v(" "),s("p",[t._v("Now that we have our wallet cooked, in the end, we instructed it to sync with the bitcoin core backend, and fetch us a new address.")]),t._v(" "),s("p",[t._v("If all goes well, you should see an address printed in the terminal.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n Finished dev "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("unoptimized + debuginfo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(".99s\n Running "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("target/debug/bdk-example"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v("\nbdk address: bcrt1q9vkmujggvzs0rd4z6069v3v0jucje7ua7ap308\n")])])]),s("h2",{attrs:{id:"sending-sats-around"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sending-sats-around"}},[t._v("#")]),t._v(" Sending Sats Around")]),t._v(" "),s("p",[t._v("Now that we have covered all the groundwork, we have all we need to send coins back and forth between core and BDK wallet.")]),t._v(" "),s("p",[t._v("We will keep things simple here and make the following actions")]),t._v(" "),s("ul",[s("li",[t._v("Send 10 BTC from Core to BDK")]),t._v(" "),s("li",[t._v("Send back 5 BTC from BDK to Core")]),t._v(" "),s("li",[t._v("Display balance of two wallets")])]),t._v(" "),s("p",[t._v("In the last line of previous section we got a new address from BDK wallet. We will start from there. Without further discussion lets jump straight into code.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch a fresh address to receive coins")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("New")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Send 10 BTC from Core to BDK")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("send_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_btc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a transaction builder")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tx_builder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set recipient of the transaction")]),t._v("\n tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set_recipients")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("vec!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("script_pubkey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("500000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Finalise the transaction and extract PSBT")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("finish")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set signing option")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" signopt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n assume_height"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sign the above psbt with signing option")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sign")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" signopt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Extract the final transaction")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" tx "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("extract_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Broadcast the transaction")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("broadcast")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch and display wallet balances")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" bdk_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_sat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"core wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BDK wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bdk_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The above code segment is mostly straightforward. The only new thing added is "),s("code",[t._v("wallet.build_tx()")]),t._v(" which returns a "),s("code",[t._v("TxBuilder")]),t._v(". BDK allows us to have very fine grained control of cooking up transactions. Almost everything that is possible to do with a Bitcoin transaction can be done in BDK. Here we have a very simple vanilla transaction with no added magic. To get full list of capabilities that "),s("code",[t._v("TxBuilder")]),t._v(" supports scour its implementation "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/blob/38d1d0b0e29d38cd370c740d798d96a3c9fcaa1f/src/wallet/tx_builder.rs#L123-L153",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Finally to step through what we did above:")]),t._v(" "),s("ul",[s("li",[t._v("We asked core wallet to send 10 BTC to bdk wallet address.")]),t._v(" "),s("li",[t._v("We confirmed the transaction, and synced the wallet.")]),t._v(" "),s("li",[t._v("We asked BDK to create a transaction sending 5 BTC to core wallet address.")]),t._v(" "),s("li",[t._v("We signed and broadcast the transaction. BDK will use the same core node to broadcast the transaction to network.")]),t._v(" "),s("li",[t._v("We confirmed the transaction by mining a block, and synced the wallet.")]),t._v(" "),s("li",[t._v("We fetched and displayed balance of both core and BDK wallet.")])]),t._v(" "),s("p",[t._v("If all goes well, you should see the final updated balance as below:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n Compiling bdk-example v0.1.0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("/home/raj/github-repo/bdk-example/bdk-example"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n Finished dev "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("unoptimized + debuginfo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(".57s\n Running "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("target/debug/bdk-example"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v("\ncore wallet balance: Amount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("144.99998590")]),t._v(" BTC"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nBDK wallet balance: Amount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.99999859")]),t._v(" BTC"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("Voila! We have ~145 BTC (150 - 5) in core wallet and 5 BTC (10 - 5) in BDK wallet. The slight deficiency in the amount are due to transaction fees. Because we are using regtest, the fee is some standard value hardcoded in core node.")]),t._v(" "),s("p",[t._v("Check out the data directory where BDK has created the wallet data files.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ls")]),t._v(" ~/.bdk-example/\nblobs conf db snap.0000000000023CAB\n")])])]),s("p",[t._v("And finally, this is what the final "),s("code",[t._v("main.rs")]),t._v(" file looks like.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("secp256k1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoincore_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcApi")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wallet_name_from_descriptor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip39"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FromStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a RPC interface")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_rpc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:18443/wallet/test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the test wallet ")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get a new address")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_new_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate 101 blocks and use the above address as coinbase")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get receive and change descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use deterministic wallet name derived from descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet_name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wallet_name_from_descriptor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the datadir to store wallet data")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" datadir "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("dirs_next"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("home_dir")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('".bdk-example"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" database "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_tree "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open_tree")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set RPC username and password")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n username"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set RPC url")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" rpc_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:18443"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Setup the RPC configuration")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n skip_blocks"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use the above configuration to create a RPC blockchain backend")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("rpc_config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Combine everything and finally create the BDK wallet structure")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" db_tree"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch a fresh address to receive coins")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("New")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Send 10 BTC from Core to BDK")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("send_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_btc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a transaction builder")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tx_builder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set recipient of the transaction")]),t._v("\n tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set_recipients")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("vec!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("script_pubkey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("500000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Finalise the transaction and extract PSBT")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("finish")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set signing option")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" signopt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n assume_height"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sign the above psbt with signing option")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sign")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" signopt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Extract the final transaction")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" tx "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("extract_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Broadcast the transaction")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("broadcast")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch and display wallet balances")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" bdk_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_sat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"core wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BDK wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bdk_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// generate fresh descriptor strings and return them via (receive, change) tupple ")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a new secp context")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" secp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You can also set a password to unlock the mnemonic")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" password "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"random password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate a fresh menmonic, and from their, a fresh private key xprv")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Words12")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("English")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_extended_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_xprv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Derive our descriptors to use")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// We use the following paths for recieve and change descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// recieve: "m/84h/1h/0h/0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// change: "m/84h/1h/0h/1" ')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" keys "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Vec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("derive_priv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("fingerprint")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv_desc_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n derived_xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_descriptor_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap the derived key with the wpkh() string to produce a descriptor string")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" derived_xprv_desc_key "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" desc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wpkh("')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('")"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Return the keys as a tupple")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"conclusion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[t._v("#")]),t._v(" Conclusion")]),t._v(" "),s("p",[t._v("In this tutorial we saw some very basic BDK wallet functionality with a bitcoin core backend as the source and sync of blockchain data. This is just tip of the iceberg of BDK capabilities. BDK allows flexibility in all the dimensions of a bitcoin wallet, that is key chain, blockchain backend and database management. With all that power, we just implemented a trustless, non-custodial, private bitcoin wallet, backed by a bitcoin full node, with less than 200 lines of code (including lots of comments).")]),t._v(" "),s("p",[t._v("BDK thus allows wallet devs, to only focus on stuff that they care about, writing wallet logic. All the backend stuff like blockchain, key management, and databases are abstracted away under the hood.")]),t._v(" "),s("p",[t._v("To find and explore more about the BDK capabilities and how it can fit your development need refer the following resources.")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk",target:"_blank",rel:"noopener noreferrer"}},[t._v("source code"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/",target:"_blank",rel:"noopener noreferrer"}},[t._v("dev docs"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://discord.com/invite/d7NkDKm",target:"_blank",rel:"noopener noreferrer"}},[t._v("community"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{404:function(t,s,a){"use strict";a.r(s);var n=a(7),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("BDK wallet developer library can be used to easily deploy wallets with various kinds of blockchain backend support, like "),s("a",{attrs:{href:"https://github.com/romanz/electrs",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("electrum")]),s("OutboundLink")],1),t._v(", "),s("a",{attrs:{href:"https://github.com/Blockstream/esplora",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("esplora")]),s("OutboundLink")],1),t._v(", "),s("code",[t._v("compact-filters")]),t._v(" ("),s("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP157"),s("OutboundLink")],1),t._v(") etc. With the latest release of BDK "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/releases/tag/v0.10.0",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("v0.10.0")]),s("OutboundLink")],1),t._v(", BDK now supports Bitcoin Core as a blockchain backend. BDK talks with Bitcoin Core using rust-bitcoin's "),s("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoincore-rpc",target:"_blank",rel:"noopener noreferrer"}},[t._v("bitcoincore-rpc"),s("OutboundLink")],1),t._v(" library.")]),t._v(" "),s("p",[t._v("This allows wallet devs to quickly deploy their wallet that can talk to a bitcoin full node (home raspi nodes) out of the box. Wallet devs don't need to worry about connecting to a full node with correct RPC calls, all of that is handled by BDK under the hood. All they need is to identify the full node's RPC IP address and the correct RPC credentials.")]),t._v(" "),s("p",[t._v("In this tutorial we will see how to write a very simplistic wallet code that can connect to a bitcoin core node and maintain its balance and make transactions.")]),t._v(" "),s("p",[t._v("Unlike other tutorials, we will not use "),s("code",[t._v("bdk-cli")]),t._v(" tools, but instead write rust code directly using "),s("code",[t._v("BDK")]),t._v(" devkit. In the end we will end up with our own simple bitcoin wallet.")]),t._v(" "),s("h2",{attrs:{id:"prerequisite"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisite"}},[t._v("#")]),t._v(" Prerequisite")]),t._v(" "),s("p",[t._v("To run with this tutorial you would need to have a bitcoin core node running in regtest mode. Get the bitcoin core binary either from the "),s("a",{attrs:{href:"https://bitcoincore.org/bin/bitcoin-core-0.21.1/",target:"_blank",rel:"noopener noreferrer"}},[t._v("bitcoin core repo"),s("OutboundLink")],1),t._v(" or "),s("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/v0.21.1/doc/build-unix.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("build from source"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Then configure the node with a following "),s("code",[t._v("bitcoin.conf")]),t._v(" file")]),t._v(" "),s("div",{staticClass:"language-txt extra-class"},[s("pre",{pre:!0,attrs:{class:"language-txt"}},[s("code",[t._v("regtest=1\nfallbackfee=0.0001\nserver=1\ntxindex=1\nrpcuser=admin\nrpcpassword=password\n")])])]),s("p",[t._v("Apart from that, you would need to install rust in your system. Grab the installation one-liner from "),s("a",{attrs:{href:"https://www.rust-lang.org/tools/install",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"setting-up"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up"}},[t._v("#")]),t._v(" Setting Up")]),t._v(" "),s("p",[t._v("Create a new cargo binary repository.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mkdir")]),t._v(" ~/tutorial\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" tutorial\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" new bdk-example\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" bdk-example\n")])])]),s("p",[t._v("This will create a new project folder named "),s("code",[t._v("bdk-example")]),t._v(" with "),s("code",[t._v("src/main.rs")]),t._v(" and a "),s("code",[t._v("cargo.toml")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ tree "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v("\n├── Cargo.toml\n└── src\n └── main.rs\n\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" directory, "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" files\n")])])]),s("p",[t._v("Opening "),s("code",[t._v("main.rs")]),t._v(" you will see some predefined code like this")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello, world!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Try running "),s("code",[t._v("cargo run")]),t._v(' and if everything is set, you should see "Hello, world!" printed in your terminal')]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n Compiling bdk-example v0.1.0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("/home/raj/github-repo/tutorial/bdk-example"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n Finished dev "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("unoptimized + debuginfo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(".95s\n Running "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("target/debug/bdk-example"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v("\nHello, world"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("\n")])])]),s("p",[t._v("Of course we will not use the given "),s("code",[t._v("println!()")]),t._v(" statement, but we will put our main code in the "),s("code",[t._v("main()")]),t._v(" function.")]),t._v(" "),s("p",[s("code",[t._v("cargo new")]),t._v(" will also produce a skeleton "),s("code",[t._v("Cargo.toml")]),t._v(" file like this")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("package")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("name")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk-example"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.1.0"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("edition")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2018"')]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("h2",{attrs:{id:"setting-dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-dependencies"}},[t._v("#")]),t._v(" Setting dependencies")]),t._v(" "),s("p",[t._v("Once the rust binary is compiled and running, we now need to specify the dependencies we need to work on our library.")]),t._v(" "),s("p",[t._v("Remember that BDK provides almost everything we would need to build a wallet out of the box. So we don't need any more dependencies apart from BDK. We will use another small rust crate called "),s("a",{attrs:{href:"https://crates.io/crates/dirs-next",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("dirs_next")]),s("OutboundLink")],1),t._v(" to find our home directory and store wallet files in a subfolder there.")]),t._v(" "),s("p",[t._v("Add the dependencies into "),s("code",[t._v("Cargo.toml")]),t._v(" like below")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("package")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("name")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk-example"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.1.0"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("edition")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2018"')]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.10"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"all-keys"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key-value-db"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"rpc"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("dirs-next")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2.0"')]),t._v("\n")])])]),s("p",[t._v("We disabled the default BDK feature (which specifies blockchain backend as an electrum server) and we requested the following features:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("all-keys")]),t._v(": Adds BIP39 key derivation capabilities")]),t._v(" "),s("li",[s("strong",[t._v("key-value-db")]),t._v(": Adds a persistence storage capability")]),t._v(" "),s("li",[s("strong",[t._v("rpc")]),t._v(": Adds the RPC blockchain backend capability.")])]),t._v(" "),s("p",[t._v("Now that we have the dependencies added, we can import them in the "),s("code",[t._v("main.rs")]),t._v(" file to use in our code.\nAdd the following imports at the start of "),s("code",[t._v("main.rs")])]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("secp256k1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoincore_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcApi")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wallet_name_from_descriptor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip39"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FromStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("With this we are now ready to add our wallet code.")]),t._v(" "),s("h2",{attrs:{id:"getting-descriptors"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getting-descriptors"}},[t._v("#")]),t._v(" Getting Descriptors")]),t._v(" "),s("p",[t._v("BDK is a descriptor based wallet library. That means when we specify our wallet key-chain we need to tell BDK about it in the format of a descriptor. You can read up on descriptors more "),s("a",{attrs:{href:"https://bitcoindevkit.org/descriptors/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(". A descriptor string looks like this\n"),s("code",[t._v("\"wpkh([b8b575c2/84'/1'/0'/0]tprv8icWtRzy9CWgFxpGMLSdAeE4wWyz39XGc6SwykeTo13tYm14JkVVQAf7jz8WDDarCgNJrG3aEPJEqchDWeJdiaWpS3FwbLB9SzsN57V7qxB/*)\"")]),t._v(".")]),t._v(" "),s("p",[t._v("This describes a SegwitV0 descriptor of a key derived at path "),s("code",[t._v("m/84'/1'/0'/0")]),t._v(". If you already have a descriptor from other sources, you can use that. Otherwise, BDK has your back. BDK can be used to generate a fresh master key with mnemonic, and then derive child keys from it given a specific path. Putting the key in a descriptor is as simple as wrapping it with a "),s("code",[t._v("wpkh()")]),t._v(" string.")]),t._v(" "),s("p",[t._v("We will use a dedicated function that will create fresh receive and change descriptors from BDK for our purpose. It will also generate the mnemonic word list for later regenerating the wallet. But we will ignore that for our scope.")]),t._v(" "),s("p",[t._v("Add a function named "),s("code",[t._v("get-descriptor()")]),t._v(" below the "),s("code",[t._v("main()")]),t._v(" function as shown")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// generate fresh descriptor strings and return them via (receive, change) tuple")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a new secp context")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" secp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You can also set a password to unlock the mnemonic")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" password "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"random password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate a fresh mnemonic, and from there a privatekey")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Words12")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("English")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_extended_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_xprv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create derived privkey from the above master privkey")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// We use the following derivation paths for receive and change keys")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// receive: "m/84h/1h/0h/0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// change: "m/84h/1h/0h/1" ')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" keys "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Vec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("derive_priv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("fingerprint")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv_desc_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n derived_xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_descriptor_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap the derived key with the wpkh() string to produce a descriptor string")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" derived_xprv_desc_key "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" desc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wpkh("')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('")"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Return the keys as a tuple")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("To check that the above added function is working as expected, call it in the main function and print the descriptors")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"recv: {:#?}, \\nchng: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Running the binary should produce the following result")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\nrecv: "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"wpkh([89df6a67/84'/1'/0'/0]tprv8iSRXyLtTKJN9qt1jyPVqwhDMEaYztXunPaRQznaH1z8gj8e2g7RnF2ZoHP56VEXwMn76AiV1Je6nJmZbFistwAQCrRGmSrsoKfdqfTDNA1/*)\"")]),t._v(", \nchng: "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"wpkh([89df6a67/84'/1'/0'/1]tprv8iSRXyLtTKJNCECQxBJ19cgx2ueS7mC7GNq7VqTWY3RNPMBY7DfTb9HUnXpJqa14jCJNRmi4yGxfoTVS4WLBXDkvTLq4vujeAD9NfDtSxGP/*)\"")]),t._v("\n")])])]),s("p",[t._v("Voila! Now we have nice descriptors strings handy to use for our BDK wallet construction.")]),t._v(" "),s("h2",{attrs:{id:"talking-to-bitcoin-core-programmatically"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#talking-to-bitcoin-core-programmatically"}},[t._v("#")]),t._v(" Talking to Bitcoin Core Programmatically")]),t._v(" "),s("p",[t._v("Like all other tutorials we will use two wallets to send coins back and forth. A Bitcoin Core wallet accessible via "),s("code",[t._v("bitcoin-cli")]),t._v(" command line tools, and a BDK wallet maintained by BDK library.")]),t._v(" "),s("p",[t._v("But unlike other tutorials, we won't be using "),s("code",[t._v("bitcoin-cli")]),t._v(" to talk to the Core wallet (we can, but let's spice things up). Instead, we will use the "),s("code",[t._v("bitcoin-rpc")]),t._v(" library, to talk with our core node listening at "),s("code",[t._v("127.0.0.1:18443")]),t._v(", from inside our main function. This will allow us to write code, that will handle both the core and BDK wallet, from inside of the same function, and we won't have to switch terminals!")]),t._v(" "),s("p",[t._v("Remember we imported "),s("code",[t._v("use bdk::bitcoincore_rpc::{Auth as rpc_auth, Client, RpcApi};")]),t._v("? Thats exactly for this purpose.")]),t._v(" "),s("p",[t._v("Start the "),s("code",[t._v("bitcoind")]),t._v(" node.")]),t._v(" "),s("p",[t._v("you should see bitcoind listening at port 18443")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("netstat")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-nptl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("grep")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("18443")]),t._v(" \ntcp "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0:18443 "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),t._v(".0.0:* LISTEN "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("135532")]),t._v("/bitcoind \n")])])]),s("p",[t._v("Lets create a core rpc interface in our main function.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a RPC interface")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_rpc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:18443/wallet/test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_blockchain_info")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("We have provided our RPC authentication "),s("code",[t._v("username")]),t._v(" and "),s("code",[t._v("password")]),t._v(" (same as provided in "),s("code",[t._v("bitcoin.conf")]),t._v(" file).\nWe have provided the RPC address of our local bitcoin node, with the path to a wallet file, named "),s("code",[t._v("test")]),t._v(". And then asked the rpc client to give us the current blockchain info.\nIf everything goes well, running "),s("code",[t._v("cargo run")]),t._v(" you should see an output like below:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\nGetBlockchainInfoResult "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n chain: "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"regtest"')]),t._v(",\n blocks: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n headers: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n best_block_hash: 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206,\n difficulty: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.00000000046565423739069247")]),t._v(",\n median_time: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1296688602")]),t._v(",\n verification_progress: "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.0")]),t._v(",\n initial_block_download: true,\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\n")])])]),s("p",[t._v("Thats it. Now we can programmatically talk to our core node.")]),t._v(" "),s("h2",{attrs:{id:"get-some-balance-in-core-wallet"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#get-some-balance-in-core-wallet"}},[t._v("#")]),t._v(" Get some balance in core wallet.")]),t._v(" "),s("p",[t._v("We have told our rpc client that we would use a wallet named "),s("code",[t._v("test")]),t._v(". But currently, our core node doesn't have such a wallet. So let's create the wallet and fund it with some test coins.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the test wallet ")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get a new address")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_new_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate 101 blocks and use the above address as coinbase")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fetch the new balance")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Show balance")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"core balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("This will create a wallet in bitcoin core named "),s("code",[t._v("test")]),t._v(". generate 101 blocks and use a new address from the wallet as coinbase wallet. Because required coinbase maturity in bitcoin is 100 blocks, by generating 101 blocks, we will have the balance of the first coinbase block reward available for use.\nThe last "),s("code",[t._v("println!()")]),t._v(" statement will show the new updated balance as 50 BTC.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(".\ncore balance: Amount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("50.00000000")]),t._v(" BTC"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n")])])]),s("p",[t._v("Great! We now have 50 regtest BTC to play with.")]),t._v(" "),s("h2",{attrs:{id:"setup-the-bdk-wallet"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-the-bdk-wallet"}},[t._v("#")]),t._v(" Setup the BDK wallet")]),t._v(" "),s("p",[t._v("Now that we are done setting up the core wallet. The last remaining step is to setup the BDK wallet. For this we will use the previous descriptor generation function and write code as below.")]),t._v(" "),s("p",[s("strong",[t._v("Note")]),t._v(": You might want to comment out the previous code in "),s("code",[t._v("main()")]),t._v(", as running them again will create more coins in core, which isn't an issue, but might be confusing.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get receive and change descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use deterministic wallet name derived from descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet_name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wallet_name_from_descriptor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the datadir to store wallet data")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" datadir "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("dirs_next"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("home_dir")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('".bdk-example"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" database "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_tree "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open_tree")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set RPC username, password and url")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n username"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" rpc_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:18443"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Setup the RPC configuration")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n skip_blocks"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use the above configuration to create a RPC blockchain backend")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("rpc_config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Combine everything and finally create the BDK wallet structure")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" db_tree"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch a fresh address to receive coins")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("New")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk address: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("That's a lot of code. They are divided into logical sections. Let's discuss each step one by one.")]),t._v(" "),s("ul",[s("li",[t._v("First we used our previous "),s("code",[t._v("get_descriptors()")]),t._v(" function to generate two descriptor strings. One for generating receive addresses and one for change addresses.")]),t._v(" "),s("li",[t._v("Then we used a special function from BDK called "),s("code",[t._v("wallet_name_from_descriptor()")]),t._v(" to derive a name of the wallet from our descriptors. This allows us to have wallet names deterministically linked with descriptors. So in future if we use a different descriptor, the wallet will automatically have a different name. This allows us to not mix wallet names with same descriptor, and given the descriptors we can always determine what was the name we used. It is recommended to derive wallet names like this while using a core backend. Note that this wallet will be created inside the core node. So just like we accessed the "),s("code",[t._v("test")]),t._v(" wallet, we could also access this wallet.")]),t._v(" "),s("li",[t._v("Then we created a data directory at path "),s("code",[t._v("/home/username/.bdk-example")]),t._v(". We use "),s("code",[t._v("dirs_next")]),t._v(" to find our home path, and then appended that with "),s("code",[t._v(".bdk-example")]),t._v(". All the BDK wallet files will be created and maintained in that directory. In the Database we instructed BDK to create a new "),s("code",[t._v("Tree")]),t._v(" with "),s("code",[t._v("wallet_name")]),t._v(", so given a descriptor, BDK will always know which DB Tree to refer ("),s("code",[t._v("Tree")]),t._v(" is a "),s("code",[t._v("sled")]),t._v(" specific term).")]),t._v(" "),s("li",[t._v("Then like we did previously, we created the rpc username/password authentication, and specified the rpc url. Note that we cannot use the same "),s("code",[t._v("rpc_auth")]),t._v(" we used before for "),s("code",[t._v("core_rpc")]),t._v(" as BDK auth and bitcoin-rpc auth are slightly separate structures.")]),t._v(" "),s("li",[t._v("We combined all this information and created an "),s("code",[t._v("RpcConfig")]),t._v(" structure.")]),t._v(" "),s("li",[t._v("We used the rpc configuration to create a "),s("code",[t._v("RpcBlockchain")]),t._v(" structure.")]),t._v(" "),s("li",[t._v("Finally we used the Descriptors, Database, and Blockchain to create our final BDK "),s("code",[t._v("wallet")]),t._v(" structure.")])]),t._v(" "),s("p",[t._v("Now that we have our wallet cooked, in the end, we instructed it to sync with the bitcoin core backend, and fetch us a new address.")]),t._v(" "),s("p",[t._v("If all goes well, you should see an address printed in the terminal.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n Finished dev "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("unoptimized + debuginfo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(".99s\n Running "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("target/debug/bdk-example"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v("\nbdk address: bcrt1q9vkmujggvzs0rd4z6069v3v0jucje7ua7ap308\n")])])]),s("h2",{attrs:{id:"sending-sats-around"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sending-sats-around"}},[t._v("#")]),t._v(" Sending Sats Around")]),t._v(" "),s("p",[t._v("Now that we have covered all the groundwork, we have all we need to send coins back and forth between core and BDK wallet.")]),t._v(" "),s("p",[t._v("We will keep things simple here and make the following actions")]),t._v(" "),s("ul",[s("li",[t._v("Send 10 BTC from Core to BDK")]),t._v(" "),s("li",[t._v("Send back 5 BTC from BDK to Core")]),t._v(" "),s("li",[t._v("Display balance of two wallets")])]),t._v(" "),s("p",[t._v("In the last line of previous section we got a new address from BDK wallet. We will start from there. Without further discussion lets jump straight into code.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch a fresh address to receive coins")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("New")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Send 10 BTC from Core to BDK")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("send_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_btc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a transaction builder")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tx_builder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set recipient of the transaction")]),t._v("\n tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set_recipients")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("vec!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("script_pubkey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("500000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Finalise the transaction and extract PSBT")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("finish")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set signing option")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" signopt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n assume_height"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sign the above psbt with signing option")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sign")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" signopt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Extract the final transaction")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" tx "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("extract_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Broadcast the transaction")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("broadcast")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch and display wallet balances")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" bdk_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_sat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"core wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BDK wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bdk_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The above code segment is mostly straightforward. The only new thing added is "),s("code",[t._v("wallet.build_tx()")]),t._v(" which returns a "),s("code",[t._v("TxBuilder")]),t._v(". BDK allows us to have very fine grained control of cooking up transactions. Almost everything that is possible to do with a Bitcoin transaction can be done in BDK. Here we have a very simple vanilla transaction with no added magic. To get full list of capabilities that "),s("code",[t._v("TxBuilder")]),t._v(" supports scour its implementation "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/blob/38d1d0b0e29d38cd370c740d798d96a3c9fcaa1f/src/wallet/tx_builder.rs#L123-L153",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Finally to step through what we did above:")]),t._v(" "),s("ul",[s("li",[t._v("We asked core wallet to send 10 BTC to bdk wallet address.")]),t._v(" "),s("li",[t._v("We confirmed the transaction, and synced the wallet.")]),t._v(" "),s("li",[t._v("We asked BDK to create a transaction sending 5 BTC to core wallet address.")]),t._v(" "),s("li",[t._v("We signed and broadcast the transaction. BDK will use the same core node to broadcast the transaction to network.")]),t._v(" "),s("li",[t._v("We confirmed the transaction by mining a block, and synced the wallet.")]),t._v(" "),s("li",[t._v("We fetched and displayed balance of both core and BDK wallet.")])]),t._v(" "),s("p",[t._v("If all goes well, you should see the final updated balance as below:")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" run\n Compiling bdk-example v0.1.0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("/home/raj/github-repo/bdk-example/bdk-example"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n Finished dev "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("unoptimized + debuginfo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(".57s\n Running "),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("target/debug/bdk-example"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v("\ncore wallet balance: Amount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("144.99998590")]),t._v(" BTC"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nBDK wallet balance: Amount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.99999859")]),t._v(" BTC"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("Voila! We have ~145 BTC (150 - 5) in core wallet and 5 BTC (10 - 5) in BDK wallet. The slight deficiency in the amount are due to transaction fees. Because we are using regtest, the fee is some standard value hardcoded in core node.")]),t._v(" "),s("p",[t._v("Check out the data directory where BDK has created the wallet data files.")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("$ "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ls")]),t._v(" ~/.bdk-example/\nblobs conf db snap.0000000000023CAB\n")])])]),s("p",[t._v("And finally, this is what the final "),s("code",[t._v("main.rs")]),t._v(" file looks like.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("secp256k1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoincore_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcApi")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wallet_name_from_descriptor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip39"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivableKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("miniscript"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("signer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FromStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a RPC interface")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_rpc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://127.0.0.1:18443/wallet/test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rpc_auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the test wallet ")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get a new address")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_new_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate 101 blocks and use the above address as coinbase")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get receive and change descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use deterministic wallet name derived from descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet_name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wallet_name_from_descriptor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create the datadir to store wallet data")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" datadir "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("dirs_next"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("home_dir")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('".bdk-example"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" database "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("sled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("datadir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" db_tree "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("open_tree")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set RPC username and password")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" auth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Auth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UserPass")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n username"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set RPC url")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" rpc_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:18443"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Setup the RPC configuration")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" rpc_config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" rpc_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n auth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n wallet_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n skip_blocks"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Use the above configuration to create a RPC blockchain backend")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RpcBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("rpc_config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Combine everything and finally create the BDK wallet structure")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("receive_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("change_desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" db_tree"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch a fresh address to receive coins")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" address "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AddressIndex")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("New")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Send 10 BTC from Core to BDK")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("send_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_btc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a transaction builder")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tx_builder "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set recipient of the transaction")]),t._v("\n tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("set_recipients")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("vec!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("script_pubkey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("500000000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Finalise the transaction and extract PSBT")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tx_builder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("finish")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set signing option")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" signopt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SignOptions")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n assume_height"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sign the above psbt with signing option")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sign")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" signopt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Extract the final transaction")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" tx "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" psbt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("extract_tx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Broadcast the transaction")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("broadcast")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Confirm transaction by generating some blocks")]),t._v("\n core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate_to_address")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("core_address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sync the BDK wallet")]),t._v("\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NoopProgress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Fetch and display wallet balances")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" core_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" core_rpc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" bdk_balance "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Amount")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_sat")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_balance")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"core wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" core_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BDK wallet balance: {:#?}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bdk_balance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// generate fresh descriptor strings and return them via (receive, change) tupple ")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("get_descriptors")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a new secp context")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" secp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secp256k1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You can also set a password to unlock the mnemonic")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" password "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"random password"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate a fresh menmonic, and from their, a fresh private key xprv")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mnemonic")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("generate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MnemonicType")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Words12")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Language")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("English")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mnemonic "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedKey")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mnemonic"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_extended_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" xkey"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_xprv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Regtest")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Derive our descriptors to use")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// We use the following paths for recieve and change descriptor")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// recieve: "m/84h/1h/0h/0"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// change: "m/84h/1h/0h/1" ')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" keys "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Vec")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m/84h/1h/0h/1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("derive_priv")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeySource")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("fingerprint")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("secp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deriv_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" derived_xprv_desc_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DescriptorKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Segwitv0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n derived_xprv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_descriptor_key")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("origin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivationPath")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Wrap the derived key with the wpkh() string to produce a descriptor string")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Secret")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" derived_xprv_desc_key "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" desc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wpkh("')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('")"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("desc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Return the keys as a tupple")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" keys"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("clone")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"conclusion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[t._v("#")]),t._v(" Conclusion")]),t._v(" "),s("p",[t._v("In this tutorial we saw some very basic BDK wallet functionality with a bitcoin core backend as the source and sync of blockchain data. This is just tip of the iceberg of BDK capabilities. BDK allows flexibility in all the dimensions of a bitcoin wallet, that is key chain, blockchain backend and database management. With all that power, we just implemented a trustless, non-custodial, private bitcoin wallet, backed by a bitcoin full node, with less than 200 lines of code (including lots of comments).")]),t._v(" "),s("p",[t._v("BDK thus allows wallet devs, to only focus on stuff that they care about, writing wallet logic. All the backend stuff like blockchain, key management, and databases are abstracted away under the hood.")]),t._v(" "),s("p",[t._v("To find and explore more about the BDK capabilities and how it can fit your development need refer the following resources.")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk",target:"_blank",rel:"noopener noreferrer"}},[t._v("source code"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/",target:"_blank",rel:"noopener noreferrer"}},[t._v("dev docs"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://discord.com/invite/d7NkDKm",target:"_blank",rel:"noopener noreferrer"}},[t._v("community"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/51.5e7cc2bc.js b/assets/js/51.40c5df73.js similarity index 99% rename from assets/js/51.5e7cc2bc.js rename to assets/js/51.40c5df73.js index b178296a49..4a1438f67e 100644 --- a/assets/js/51.5e7cc2bc.js +++ b/assets/js/51.40c5df73.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{404:function(t,e,s){"use strict";s.r(e);var a=s(7),r=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h2",{attrs:{id:"2-of-3-multi-signature-descriptor-wallet-using-bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#2-of-3-multi-signature-descriptor-wallet-using-bdk-cli"}},[t._v("#")]),t._v(" 2-of-3 Multi-Signature Descriptor Wallet using bdk-cli")]),t._v(" "),e("h2",{attrs:{id:"overview-of-the-tutorial"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview-of-the-tutorial"}},[t._v("#")]),t._v(" Overview of the tutorial")]),t._v(" "),e("ul",[e("li",[t._v("The purpose of this tutorial is to continue learning "),e("code",[t._v("bdk-cli")]),t._v(" as our tool to manage a 2 of 3 multi-signature wallet.")]),t._v(" "),e("li",[t._v("Generate a receive address with a spending Policy of 2 out of 3 escrow aka multi-signature.")]),t._v(" "),e("li",[t._v("Intro to more complex but standard policies to create custom encumberances aka custom spending conditions for transactions.")])]),t._v(" "),e("p",[t._v("Note that to complete this tutorial, you'll need to enable the "),e("code",[t._v("compiler")]),t._v(" and "),e("code",[t._v("electrum")]),t._v(" flags when installing or building bdk-cli, for example by installing using:")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--features")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("compiler,electrum\n")])])]),e("h2",{attrs:{id:"step-1-generate-the-xprvs-extended-keys-and-save-to-environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-1-generate-the-xprvs-extended-keys-and-save-to-environment-variables"}},[t._v("#")]),t._v(" Step 1: Generate the XPRVs (Extended-Keys) and Save to environment variables")]),t._v(" "),e("blockquote",[e("p",[t._v("Create three private keys and each in their own environment variable")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export XPRV_00=$(bdk-cli key generate | jq -r '.xprv')")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export XPRV_01=$(bdk-cli key generate | jq -r '.xprv')")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export XPRV_02=$(bdk-cli key generate | jq -r '.xprv')")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/FwgUdwK.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"1a-verify-xprv-environment-variables-are-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1a-verify-xprv-environment-variables-are-active"}},[t._v("#")]),t._v(" 1a: Verify XPRV environment variables are Active")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep XPRV")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/ZerGPbO.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-2-generate-xpubs-extended-public-keys-save-to-environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-2-generate-xpubs-extended-public-keys-save-to-environment-variables"}},[t._v("#")]),t._v(" Step 2: Generate XPUBs (Extended Public Keys) & Save to environment variables")]),t._v(" "),e("blockquote",[e("p",[t._v("Generate the three individual Public Keys aka XPUBs using our Private key and descriptor path.")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export XPUB_00=$(bdk-cli key derive --xprv $XPRV_00 --path "m/84\'/1\'/0\'/0" | jq -r ".xpub")')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export XPUB_01=$(bdk-cli key derive --xprv $XPRV_01 --path "m/84\'/1\'/0\'/0" | jq -r ".xpub")')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export XPUB_02=$(bdk-cli key derive --xprv $XPRV_02 --path "m/84\'/1\'/0\'/0" | jq -r ".xpub")')])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/xT3KRh4.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"2a-verify-xpub-environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#2a-verify-xpub-environment-variables"}},[t._v("#")]),t._v(" 2a: Verify XPUB environment variables")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep XPUB")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/SzAip9E.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-3-create-single-wallet-descriptors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-3-create-single-wallet-descriptors"}},[t._v("#")]),t._v(" Step 3: Create Single-Wallet Descriptors")]),t._v(" "),e("blockquote",[e("p",[t._v("Create the wallet Descriptor for each wallet")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export DESCRIPTOR_00="$XPRV_00/84h/1h/0h/0/*"')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export DESCRIPTOR_01="$XPRV_01/84h/1h/0h/0/*"')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export DESCRIPTOR_02="$XPRV_02/84h/1h/0h/0/*"')])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/mFrWt6b.png",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-4-create-multi-sig-descriptor-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-4-create-multi-sig-descriptor-wallets"}},[t._v("#")]),t._v(" Step 4: Create Multi-Sig-Descriptor Wallets")]),t._v(" "),e("blockquote",[e("p",[t._v("This is how you create the 2-of-3 multi-sig output descriptor. You will need (one PrivateKey and two Xpubs) It consists of using the "),e("code",[t._v("compiler")]),t._v(" function to parse "),e("code",[t._v("policy")]),t._v(" to "),e("code",[t._v("mini-script")]),t._v(" .")])]),t._v(" "),e("ul",[e("li",[t._v("When creating the descriptor the order matters so be aware of that when following tutorial if you are for any reason changing the order of the policy.")])]),t._v(" "),e("h4",{attrs:{id:"multi-sig-wallet-0"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-wallet-0"}},[t._v("#")]),t._v(" Multi-Sig-Wallet 0")]),t._v(" "),e("ul",[e("li",[t._v("[ ] ▶️ "),e("code",[t._v("export MULTI_DESCRIPTOR_00=$(bdk-cli compile \"thresh(2,pk($DESCRIPTOR_00),pk($XPUB_01),pk($XPUB_02))\" | jq -r '.descriptor')")])])]),t._v(" "),e("h4",{attrs:{id:"multi-sig-wallet-1"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-wallet-1"}},[t._v("#")]),t._v(" Multi-Sig-Wallet 1")]),t._v(" "),e("ul",[e("li",[t._v("[ ] ▶️ "),e("code",[t._v("export MULTI_DESCRIPTOR_01=$(bdk-cli compile \"thresh(2,pk($XPUB_00),pk($DESCRIPTOR_01),pk($XPUB_02))\" | jq -r '.descriptor')")])])]),t._v(" "),e("h4",{attrs:{id:"multi-sig-wallet-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-wallet-2"}},[t._v("#")]),t._v(" Multi-Sig-Wallet 2")]),t._v(" "),e("ul",[e("li",[t._v("[ ] ▶️ "),e("code",[t._v("export MULTI_DESCRIPTOR_02=$(bdk-cli compile \"thresh(2,pk($XPUB_00),pk($XPUB_01),pk($DESCRIPTOR_02))\" | jq -r '.descriptor')")])])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/Yb8RmFS.gif",alt:""}})]),t._v(" "),e("h4",{attrs:{id:"multi-sig-2-of-3-policy-gets-compiled-to-miniscript"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-2-of-3-policy-gets-compiled-to-miniscript"}},[t._v("#")]),t._v(" multi-sig 2 of 3 policy gets compiled to miniscript")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# policy")]),t._v("\nthresh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",pk"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("XPRV_A"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(",pk"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("XPUB_B"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(",pk"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("XPUB_C"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("))")]),t._v(" \n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# miniscript")]),t._v("\nwsh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("multi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",XPRV_KEY,PUBKEY_B,XPUB_C"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("))")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h3",{attrs:{id:"4a-verify-multi-sig-descriptor-environment-variables-are-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#4a-verify-multi-sig-descriptor-environment-variables-are-active"}},[t._v("#")]),t._v(" 4a: Verify Multi-Sig-Descriptor environment variables are active")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep MULTI")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/aAgtlsi.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-5-generate-receive-address-by-using-multi-sig-descriptor-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-5-generate-receive-address-by-using-multi-sig-descriptor-wallets"}},[t._v("#")]),t._v(" Step 5: Generate Receive Address by using Multi-Sig-Descriptor Wallets")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 get_new_address")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 get_new_address")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd02 --descriptor $MULTI_DESCRIPTOR_02 get_new_address")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/w1fxPSn.gif",alt:""}})]),t._v(" "),e("p",[t._v("🔴 Did you generate the same address for all three? Good! Else, something might be incorrect.")]),t._v(" "),e("h2",{attrs:{id:"step-6-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-6-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[t._v("#")]),t._v(" Step 6: Send Testnet Bitcoin to the newly created receive-address")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://testnet-faucet.mempool.co",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Testnet Faucet link:1"),e("OutboundLink")],1),t._v(" "),e("a",{attrs:{href:"https://bitcoinfaucet.uo1.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Testnet Faucet link:2"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"step-7-sync-one-of-the-multi-sig-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-7-sync-one-of-the-multi-sig-wallets"}},[t._v("#")]),t._v(" Step 7: Sync one of the Multi-Sig Wallets")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 sync")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/GuefgeI.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-8-check-balance-multi-sig-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-8-check-balance-multi-sig-wallets"}},[t._v("#")]),t._v(" Step 8: Check Balance Multi-Sig Wallets")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 get_balance")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/zNciCqF.gif",alt:""}})]),t._v(" "),e("ul",[e("li",[t._v("Every wallet has access to sync and view balance.")])]),t._v(" "),e("h2",{attrs:{id:"step-9-check-multi-sig-policies-on-descriptor-wallet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-9-check-multi-sig-policies-on-descriptor-wallet"}},[t._v("#")]),t._v(" Step 9: Check Multi-Sig Policies on Descriptor Wallet")]),t._v(" "),e("p",[t._v("▶️"),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 policies")])]),t._v(" "),e("p",[t._v("The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"external"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"contribution"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"conditions"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"items"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"n"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sorted"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" false,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PARTIAL"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"seaxtqqn"')]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"keys"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7cdf2d46"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fc7870cd"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"26b03333"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"satisfaction"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"items"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"n"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sorted"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" false,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PARTIAL"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"threshold"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MULTISIG"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"internal"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" null\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\n")])])]),e("h3",{attrs:{id:"spendingpolicyrequired-for-complex-descriptors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#spendingpolicyrequired-for-complex-descriptors"}},[t._v("#")]),t._v(" SpendingPolicyRequired for complex descriptors")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--external_policy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{'),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("seaxtqqn"),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(': [0,1]}"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("-rootnode-"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("children "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#0 and #1 of root node>")]),t._v("\n")])])]),e("blockquote",[e("p",[t._v("Save the \"id\": We will need to use this ''id'' later.")])]),t._v(" "),e("p",[t._v("More info on "),e("a",{attrs:{href:"https://bitcoindevkit.org/bdk-cli/interface/",target:"_blank",rel:"noopener noreferrer"}},[t._v("external policies here"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"step-10-create-a-transaction-psbt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-10-create-a-transaction-psbt"}},[t._v("#")]),t._v(" Step 10: Create a Transaction (PSBT)")]),t._v(" "),e("ul",[e("li",[t._v("1st Create a PSBT using the first wallet")]),t._v(" "),e("li",[t._v("2nd Sign the PSBT with the first wallet")]),t._v(" "),e("li",[t._v("3rd Sign PSBT with the second wallet")]),t._v(" "),e("li",[t._v("Broadcast PSBT")])]),t._v(" "),e("h3",{attrs:{id:"export-unsigned-psbt-to-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#export-unsigned-psbt-to-environment-variable"}},[t._v("#")]),t._v(" Export UNSIGNED_PSBT to environment variable")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export UNSIGNED_PSBT=$(bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 create_tx --send_all --to mkHS9ne12qx9pS9VojpwU5xtRd4T7X7ZUt:0 --external_policy "{\\"CHANGE_ID_HERE\\": [0,1]}" | jq -r \'.psbt\')')])]),t._v(" "),e("h3",{attrs:{id:"verify-unsigned-psbt-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#verify-unsigned-psbt-environment-variable"}},[t._v("#")]),t._v(" Verify UNSIGNED_PSBT environment variable")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep UNSIGNED")]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/djHaRDq.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-11-sign-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-11-sign-the-transaction"}},[t._v("#")]),t._v(" Step 11: SIGN the Transaction")]),t._v(" "),e("h3",{attrs:{id:"1st-wallet-signs-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1st-wallet-signs-the-transaction"}},[t._v("#")]),t._v(" 1st Wallet Signs the transaction")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 sign --psbt $UNSIGNED_PSBT")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export ONESIG_PSBT=$(bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 sign --psbt $UNSIGNED_PSBT | jq -r '.psbt')")])]),t._v(" "),e("p",[t._v("▶️"),e("code",[t._v("env | grep ONESIG")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('{\n "is_finalized": false,\n "psbt": "cHNidP8BAFUBAAAAAdYCtva/7Rkt+fgFu3mxAdaPh4uTbgBL3HmYZgcEKWygAAAAAAD/////AQqGAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA6gIAAAAAAQFLyGFJFK884DGBM1WgskRZ6gKp/7oZ+Z30u0+wF3pZYAEAAAAA/v///wKghgEAAAAAACIAINHcOQLE6GpJ3J+FOzn/be+HApxW8sZtGqfA3TBW+NYX91hoOAAAAAAWABTPQDZx2wYYIn+ug2pZBmWBn0Tu/gJHMEQCIHu6GmRMDgPZyTx+klFMA9VujR3qDA/Y08kSkRvOaChjAiBAtExtGAYLuQ/DDJzCqLlNZ1bMB3MV+nxsLfTdI9YcYwEhA0b8lz+kt0xHfR/tjUKOc2Nt2L61pDd5vJ/lsKi8pw9MmFUjAAEBK6CGAQAAAAAAIgAg0dw5AsToakncn4U7Of9t74cCnFbyxm0ap8DdMFb41hciAgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDUgwRQIhAJdILr7G3UzYylyr2fA13MFsz/jG4+iZlKeEkX79d082AiA99UF0/uFyXBVNUmuGaxdHL7wlhzqfbgGLMREN0z/O6QEBBWlSIQIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDSEDzsDXexRPSxeXiLJoS0i2fQlOoOGHmo+Dhaeaq3oHV6YhAjGKA2Dqg+QeMICBAifYslQF2WrehLEQ0iEOpp/+eQ0NU64iBgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDRh83y1GVAAAgAEAAIAAAACAAAAAAAAAAAAiBgIxigNg6oPkHjCAgQIn2LJUBdlq3oSxENIhDqaf/nkNDRgmsDMzVAAAgAEAAIAAAACAAAAAAAAAAAAiBgPOwNd7FE9LF5eIsmhLSLZ9CU6g4Yeaj4OFp5qregdXphj8eHDNVAAAgAEAAIAAAACAAAAAAAAAAAAAAA=="\n}\n')])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/0w4sK5y.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"2nd-wallet-signs-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#2nd-wallet-signs-the-transaction"}},[t._v("#")]),t._v(" 2nd Wallet Signs the transaction")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 sign --psbt $ONESIG_PSBT")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export SECONDSIG_PSBT=$(bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 sign --psbt $ONESIG_PSBT | jq -r '.psbt')")])]),t._v(" "),e("p",[t._v("▶️"),e("code",[t._v("env | grep SECONDSIG")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('{\n "is_finalized": true,\n "psbt": "cHNidP8BAFUBAAAAAdYCtva/7Rkt+fgFu3mxAdaPh4uTbgBL3HmYZgcEKWygAAAAAAD/////AQqGAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA6gIAAAAAAQFLyGFJFK884DGBM1WgskRZ6gKp/7oZ+Z30u0+wF3pZYAEAAAAA/v///wKghgEAAAAAACIAINHcOQLE6GpJ3J+FOzn/be+HApxW8sZtGqfA3TBW+NYX91hoOAAAAAAWABTPQDZx2wYYIn+ug2pZBmWBn0Tu/gJHMEQCIHu6GmRMDgPZyTx+klFMA9VujR3qDA/Y08kSkRvOaChjAiBAtExtGAYLuQ/DDJzCqLlNZ1bMB3MV+nxsLfTdI9YcYwEhA0b8lz+kt0xHfR/tjUKOc2Nt2L61pDd5vJ/lsKi8pw9MmFUjAAEBK6CGAQAAAAAAIgAg0dw5AsToakncn4U7Of9t74cCnFbyxm0ap8DdMFb41hciAgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDUgwRQIhAJdILr7G3UzYylyr2fA13MFsz/jG4+iZlKeEkX79d082AiA99UF0/uFyXBVNUmuGaxdHL7wlhzqfbgGLMREN0z/O6QEiAgPOwNd7FE9LF5eIsmhLSLZ9CU6g4Yeaj4OFp5qregdXpkgwRQIhAO2aRERcublhAzToshkZRMg2I8GaE7mM2ECr0vYyuscmAiB5KK4ETlvrLqL0QbcRbGqrSwIa9lVuOqP3f5qCnGRMaQEBBWlSIQIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDSEDzsDXexRPSxeXiLJoS0i2fQlOoOGHmo+Dhaeaq3oHV6YhAjGKA2Dqg+QeMICBAifYslQF2WrehLEQ0iEOpp/+eQ0NU64iBgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDRh83y1GVAAAgAEAAIAAAACAAAAAAAAAAAAiBgIxigNg6oPkHjCAgQIn2LJUBdlq3oSxENIhDqaf/nkNDRgmsDMzVAAAgAEAAIAAAACAAAAAAAAAAAAiBgPOwNd7FE9LF5eIsmhLSLZ9CU6g4Yeaj4OFp5qregdXphj8eHDNVAAAgAEAAIAAAACAAAAAAAAAAAABBwABCP3+AAQASDBFAiEAl0guvsbdTNjKXKvZ8DXcwWzP+Mbj6JmUp4SRfv13TzYCID31QXT+4XJcFU1Sa4ZrF0cvvCWHOp9uAYsxEQ3TP87pAUgwRQIhAO2aRERcublhAzToshkZRMg2I8GaE7mM2ECr0vYyuscmAiB5KK4ETlvrLqL0QbcRbGqrSwIa9lVuOqP3f5qCnGRMaQFpUiECI1AiHZ8q+qw7bjYVTbeGQQ3L2C2sH6CW82z8sXP1jQ0hA87A13sUT0sXl4iyaEtItn0JTqDhh5qPg4Wnmqt6B1emIQIxigNg6oPkHjCAgQIn2LJUBdlq3oSxENIhDqaf/nkNDVOuAAA="\n}\n')])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/OdLHnJ3.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-12-broadcast-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-12-broadcast-transaction"}},[t._v("#")]),t._v(" Step 12: Broadcast Transaction")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 broadcast --psbt $SECONDSIG_PSBT")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('{\n "txid": "61da2451874a483aa8d1d0787c7680d157639f284840de8885098cac43f6cc2f"\n}\n')])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/M7s0Fd6.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"verify-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#verify-transaction"}},[t._v("#")]),t._v(" Verify Transaction")]),t._v(" "),e("p",[t._v("Verify transcation in the memory pool on testnet "),e("a",{attrs:{href:"https://mempool.space/testnet",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mempool-testnet!"),e("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{405:function(t,e,s){"use strict";s.r(e);var a=s(7),r=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h2",{attrs:{id:"2-of-3-multi-signature-descriptor-wallet-using-bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#2-of-3-multi-signature-descriptor-wallet-using-bdk-cli"}},[t._v("#")]),t._v(" 2-of-3 Multi-Signature Descriptor Wallet using bdk-cli")]),t._v(" "),e("h2",{attrs:{id:"overview-of-the-tutorial"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#overview-of-the-tutorial"}},[t._v("#")]),t._v(" Overview of the tutorial")]),t._v(" "),e("ul",[e("li",[t._v("The purpose of this tutorial is to continue learning "),e("code",[t._v("bdk-cli")]),t._v(" as our tool to manage a 2 of 3 multi-signature wallet.")]),t._v(" "),e("li",[t._v("Generate a receive address with a spending Policy of 2 out of 3 escrow aka multi-signature.")]),t._v(" "),e("li",[t._v("Intro to more complex but standard policies to create custom encumberances aka custom spending conditions for transactions.")])]),t._v(" "),e("p",[t._v("Note that to complete this tutorial, you'll need to enable the "),e("code",[t._v("compiler")]),t._v(" and "),e("code",[t._v("electrum")]),t._v(" flags when installing or building bdk-cli, for example by installing using:")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--features")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("compiler,electrum\n")])])]),e("h2",{attrs:{id:"step-1-generate-the-xprvs-extended-keys-and-save-to-environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-1-generate-the-xprvs-extended-keys-and-save-to-environment-variables"}},[t._v("#")]),t._v(" Step 1: Generate the XPRVs (Extended-Keys) and Save to environment variables")]),t._v(" "),e("blockquote",[e("p",[t._v("Create three private keys and each in their own environment variable")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export XPRV_00=$(bdk-cli key generate | jq -r '.xprv')")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export XPRV_01=$(bdk-cli key generate | jq -r '.xprv')")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export XPRV_02=$(bdk-cli key generate | jq -r '.xprv')")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/FwgUdwK.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"1a-verify-xprv-environment-variables-are-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1a-verify-xprv-environment-variables-are-active"}},[t._v("#")]),t._v(" 1a: Verify XPRV environment variables are Active")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep XPRV")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/ZerGPbO.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-2-generate-xpubs-extended-public-keys-save-to-environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-2-generate-xpubs-extended-public-keys-save-to-environment-variables"}},[t._v("#")]),t._v(" Step 2: Generate XPUBs (Extended Public Keys) & Save to environment variables")]),t._v(" "),e("blockquote",[e("p",[t._v("Generate the three individual Public Keys aka XPUBs using our Private key and descriptor path.")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export XPUB_00=$(bdk-cli key derive --xprv $XPRV_00 --path "m/84\'/1\'/0\'/0" | jq -r ".xpub")')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export XPUB_01=$(bdk-cli key derive --xprv $XPRV_01 --path "m/84\'/1\'/0\'/0" | jq -r ".xpub")')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export XPUB_02=$(bdk-cli key derive --xprv $XPRV_02 --path "m/84\'/1\'/0\'/0" | jq -r ".xpub")')])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/xT3KRh4.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"2a-verify-xpub-environment-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#2a-verify-xpub-environment-variables"}},[t._v("#")]),t._v(" 2a: Verify XPUB environment variables")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep XPUB")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/SzAip9E.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-3-create-single-wallet-descriptors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-3-create-single-wallet-descriptors"}},[t._v("#")]),t._v(" Step 3: Create Single-Wallet Descriptors")]),t._v(" "),e("blockquote",[e("p",[t._v("Create the wallet Descriptor for each wallet")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export DESCRIPTOR_00="$XPRV_00/84h/1h/0h/0/*"')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export DESCRIPTOR_01="$XPRV_01/84h/1h/0h/0/*"')])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export DESCRIPTOR_02="$XPRV_02/84h/1h/0h/0/*"')])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/mFrWt6b.png",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-4-create-multi-sig-descriptor-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-4-create-multi-sig-descriptor-wallets"}},[t._v("#")]),t._v(" Step 4: Create Multi-Sig-Descriptor Wallets")]),t._v(" "),e("blockquote",[e("p",[t._v("This is how you create the 2-of-3 multi-sig output descriptor. You will need (one PrivateKey and two Xpubs) It consists of using the "),e("code",[t._v("compiler")]),t._v(" function to parse "),e("code",[t._v("policy")]),t._v(" to "),e("code",[t._v("mini-script")]),t._v(" .")])]),t._v(" "),e("ul",[e("li",[t._v("When creating the descriptor the order matters so be aware of that when following tutorial if you are for any reason changing the order of the policy.")])]),t._v(" "),e("h4",{attrs:{id:"multi-sig-wallet-0"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-wallet-0"}},[t._v("#")]),t._v(" Multi-Sig-Wallet 0")]),t._v(" "),e("ul",[e("li",[t._v("[ ] ▶️ "),e("code",[t._v("export MULTI_DESCRIPTOR_00=$(bdk-cli compile \"thresh(2,pk($DESCRIPTOR_00),pk($XPUB_01),pk($XPUB_02))\" | jq -r '.descriptor')")])])]),t._v(" "),e("h4",{attrs:{id:"multi-sig-wallet-1"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-wallet-1"}},[t._v("#")]),t._v(" Multi-Sig-Wallet 1")]),t._v(" "),e("ul",[e("li",[t._v("[ ] ▶️ "),e("code",[t._v("export MULTI_DESCRIPTOR_01=$(bdk-cli compile \"thresh(2,pk($XPUB_00),pk($DESCRIPTOR_01),pk($XPUB_02))\" | jq -r '.descriptor')")])])]),t._v(" "),e("h4",{attrs:{id:"multi-sig-wallet-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-wallet-2"}},[t._v("#")]),t._v(" Multi-Sig-Wallet 2")]),t._v(" "),e("ul",[e("li",[t._v("[ ] ▶️ "),e("code",[t._v("export MULTI_DESCRIPTOR_02=$(bdk-cli compile \"thresh(2,pk($XPUB_00),pk($XPUB_01),pk($DESCRIPTOR_02))\" | jq -r '.descriptor')")])])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/Yb8RmFS.gif",alt:""}})]),t._v(" "),e("h4",{attrs:{id:"multi-sig-2-of-3-policy-gets-compiled-to-miniscript"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#multi-sig-2-of-3-policy-gets-compiled-to-miniscript"}},[t._v("#")]),t._v(" multi-sig 2 of 3 policy gets compiled to miniscript")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# policy")]),t._v("\nthresh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",pk"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("XPRV_A"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(",pk"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("XPUB_B"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(",pk"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("XPUB_C"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("))")]),t._v(" \n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# miniscript")]),t._v("\nwsh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("multi"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",XPRV_KEY,PUBKEY_B,XPUB_C"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("))")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h3",{attrs:{id:"4a-verify-multi-sig-descriptor-environment-variables-are-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#4a-verify-multi-sig-descriptor-environment-variables-are-active"}},[t._v("#")]),t._v(" 4a: Verify Multi-Sig-Descriptor environment variables are active")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep MULTI")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/aAgtlsi.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-5-generate-receive-address-by-using-multi-sig-descriptor-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-5-generate-receive-address-by-using-multi-sig-descriptor-wallets"}},[t._v("#")]),t._v(" Step 5: Generate Receive Address by using Multi-Sig-Descriptor Wallets")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 get_new_address")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 get_new_address")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd02 --descriptor $MULTI_DESCRIPTOR_02 get_new_address")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/w1fxPSn.gif",alt:""}})]),t._v(" "),e("p",[t._v("🔴 Did you generate the same address for all three? Good! Else, something might be incorrect.")]),t._v(" "),e("h2",{attrs:{id:"step-6-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-6-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[t._v("#")]),t._v(" Step 6: Send Testnet Bitcoin to the newly created receive-address")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://testnet-faucet.mempool.co",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Testnet Faucet link:1"),e("OutboundLink")],1),t._v(" "),e("a",{attrs:{href:"https://bitcoinfaucet.uo1.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Testnet Faucet link:2"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"step-7-sync-one-of-the-multi-sig-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-7-sync-one-of-the-multi-sig-wallets"}},[t._v("#")]),t._v(" Step 7: Sync one of the Multi-Sig Wallets")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 sync")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/GuefgeI.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-8-check-balance-multi-sig-wallets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-8-check-balance-multi-sig-wallets"}},[t._v("#")]),t._v(" Step 8: Check Balance Multi-Sig Wallets")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 get_balance")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/zNciCqF.gif",alt:""}})]),t._v(" "),e("ul",[e("li",[t._v("Every wallet has access to sync and view balance.")])]),t._v(" "),e("h2",{attrs:{id:"step-9-check-multi-sig-policies-on-descriptor-wallet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-9-check-multi-sig-policies-on-descriptor-wallet"}},[t._v("#")]),t._v(" Step 9: Check Multi-Sig Policies on Descriptor Wallet")]),t._v(" "),e("p",[t._v("▶️"),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 policies")])]),t._v(" "),e("p",[t._v("The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"external"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"contribution"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"conditions"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"items"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"n"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sorted"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" false,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PARTIAL"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"id"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"seaxtqqn"')]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"keys"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7cdf2d46"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fc7870cd"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"26b03333"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"satisfaction"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"items"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"m"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"n"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sorted"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" false,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PARTIAL"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"threshold"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"type"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MULTISIG"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"internal"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" null\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n\n")])])]),e("h3",{attrs:{id:"spendingpolicyrequired-for-complex-descriptors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#spendingpolicyrequired-for-complex-descriptors"}},[t._v("#")]),t._v(" SpendingPolicyRequired for complex descriptors")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--external_policy")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{'),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v("seaxtqqn"),e("span",{pre:!0,attrs:{class:"token entity",title:'\\"'}},[t._v('\\"')]),t._v(': [0,1]}"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("-rootnode-"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("children "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#0 and #1 of root node>")]),t._v("\n")])])]),e("blockquote",[e("p",[t._v("Save the \"id\": We will need to use this ''id'' later.")])]),t._v(" "),e("p",[t._v("More info on "),e("a",{attrs:{href:"https://bitcoindevkit.org/bdk-cli/interface/",target:"_blank",rel:"noopener noreferrer"}},[t._v("external policies here"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"step-10-create-a-transaction-psbt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-10-create-a-transaction-psbt"}},[t._v("#")]),t._v(" Step 10: Create a Transaction (PSBT)")]),t._v(" "),e("ul",[e("li",[t._v("1st Create a PSBT using the first wallet")]),t._v(" "),e("li",[t._v("2nd Sign the PSBT with the first wallet")]),t._v(" "),e("li",[t._v("3rd Sign PSBT with the second wallet")]),t._v(" "),e("li",[t._v("Broadcast PSBT")])]),t._v(" "),e("h3",{attrs:{id:"export-unsigned-psbt-to-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#export-unsigned-psbt-to-environment-variable"}},[t._v("#")]),t._v(" Export UNSIGNED_PSBT to environment variable")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v('export UNSIGNED_PSBT=$(bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 create_tx --send_all --to mkHS9ne12qx9pS9VojpwU5xtRd4T7X7ZUt:0 --external_policy "{\\"CHANGE_ID_HERE\\": [0,1]}" | jq -r \'.psbt\')')])]),t._v(" "),e("h3",{attrs:{id:"verify-unsigned-psbt-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#verify-unsigned-psbt-environment-variable"}},[t._v("#")]),t._v(" Verify UNSIGNED_PSBT environment variable")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("env | grep UNSIGNED")]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/djHaRDq.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-11-sign-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-11-sign-the-transaction"}},[t._v("#")]),t._v(" Step 11: SIGN the Transaction")]),t._v(" "),e("h3",{attrs:{id:"1st-wallet-signs-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1st-wallet-signs-the-transaction"}},[t._v("#")]),t._v(" 1st Wallet Signs the transaction")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 sign --psbt $UNSIGNED_PSBT")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export ONESIG_PSBT=$(bdk-cli wallet --wallet wallet_name_msd00 --descriptor $MULTI_DESCRIPTOR_00 sign --psbt $UNSIGNED_PSBT | jq -r '.psbt')")])]),t._v(" "),e("p",[t._v("▶️"),e("code",[t._v("env | grep ONESIG")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('{\n "is_finalized": false,\n "psbt": "cHNidP8BAFUBAAAAAdYCtva/7Rkt+fgFu3mxAdaPh4uTbgBL3HmYZgcEKWygAAAAAAD/////AQqGAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA6gIAAAAAAQFLyGFJFK884DGBM1WgskRZ6gKp/7oZ+Z30u0+wF3pZYAEAAAAA/v///wKghgEAAAAAACIAINHcOQLE6GpJ3J+FOzn/be+HApxW8sZtGqfA3TBW+NYX91hoOAAAAAAWABTPQDZx2wYYIn+ug2pZBmWBn0Tu/gJHMEQCIHu6GmRMDgPZyTx+klFMA9VujR3qDA/Y08kSkRvOaChjAiBAtExtGAYLuQ/DDJzCqLlNZ1bMB3MV+nxsLfTdI9YcYwEhA0b8lz+kt0xHfR/tjUKOc2Nt2L61pDd5vJ/lsKi8pw9MmFUjAAEBK6CGAQAAAAAAIgAg0dw5AsToakncn4U7Of9t74cCnFbyxm0ap8DdMFb41hciAgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDUgwRQIhAJdILr7G3UzYylyr2fA13MFsz/jG4+iZlKeEkX79d082AiA99UF0/uFyXBVNUmuGaxdHL7wlhzqfbgGLMREN0z/O6QEBBWlSIQIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDSEDzsDXexRPSxeXiLJoS0i2fQlOoOGHmo+Dhaeaq3oHV6YhAjGKA2Dqg+QeMICBAifYslQF2WrehLEQ0iEOpp/+eQ0NU64iBgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDRh83y1GVAAAgAEAAIAAAACAAAAAAAAAAAAiBgIxigNg6oPkHjCAgQIn2LJUBdlq3oSxENIhDqaf/nkNDRgmsDMzVAAAgAEAAIAAAACAAAAAAAAAAAAiBgPOwNd7FE9LF5eIsmhLSLZ9CU6g4Yeaj4OFp5qregdXphj8eHDNVAAAgAEAAIAAAACAAAAAAAAAAAAAAA=="\n}\n')])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/0w4sK5y.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"2nd-wallet-signs-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#2nd-wallet-signs-the-transaction"}},[t._v("#")]),t._v(" 2nd Wallet Signs the transaction")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 sign --psbt $ONESIG_PSBT")])]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("export SECONDSIG_PSBT=$(bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 sign --psbt $ONESIG_PSBT | jq -r '.psbt')")])]),t._v(" "),e("p",[t._v("▶️"),e("code",[t._v("env | grep SECONDSIG")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('{\n "is_finalized": true,\n "psbt": "cHNidP8BAFUBAAAAAdYCtva/7Rkt+fgFu3mxAdaPh4uTbgBL3HmYZgcEKWygAAAAAAD/////AQqGAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA6gIAAAAAAQFLyGFJFK884DGBM1WgskRZ6gKp/7oZ+Z30u0+wF3pZYAEAAAAA/v///wKghgEAAAAAACIAINHcOQLE6GpJ3J+FOzn/be+HApxW8sZtGqfA3TBW+NYX91hoOAAAAAAWABTPQDZx2wYYIn+ug2pZBmWBn0Tu/gJHMEQCIHu6GmRMDgPZyTx+klFMA9VujR3qDA/Y08kSkRvOaChjAiBAtExtGAYLuQ/DDJzCqLlNZ1bMB3MV+nxsLfTdI9YcYwEhA0b8lz+kt0xHfR/tjUKOc2Nt2L61pDd5vJ/lsKi8pw9MmFUjAAEBK6CGAQAAAAAAIgAg0dw5AsToakncn4U7Of9t74cCnFbyxm0ap8DdMFb41hciAgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDUgwRQIhAJdILr7G3UzYylyr2fA13MFsz/jG4+iZlKeEkX79d082AiA99UF0/uFyXBVNUmuGaxdHL7wlhzqfbgGLMREN0z/O6QEiAgPOwNd7FE9LF5eIsmhLSLZ9CU6g4Yeaj4OFp5qregdXpkgwRQIhAO2aRERcublhAzToshkZRMg2I8GaE7mM2ECr0vYyuscmAiB5KK4ETlvrLqL0QbcRbGqrSwIa9lVuOqP3f5qCnGRMaQEBBWlSIQIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDSEDzsDXexRPSxeXiLJoS0i2fQlOoOGHmo+Dhaeaq3oHV6YhAjGKA2Dqg+QeMICBAifYslQF2WrehLEQ0iEOpp/+eQ0NU64iBgIjUCIdnyr6rDtuNhVNt4ZBDcvYLawfoJbzbPyxc/WNDRh83y1GVAAAgAEAAIAAAACAAAAAAAAAAAAiBgIxigNg6oPkHjCAgQIn2LJUBdlq3oSxENIhDqaf/nkNDRgmsDMzVAAAgAEAAIAAAACAAAAAAAAAAAAiBgPOwNd7FE9LF5eIsmhLSLZ9CU6g4Yeaj4OFp5qregdXphj8eHDNVAAAgAEAAIAAAACAAAAAAAAAAAABBwABCP3+AAQASDBFAiEAl0guvsbdTNjKXKvZ8DXcwWzP+Mbj6JmUp4SRfv13TzYCID31QXT+4XJcFU1Sa4ZrF0cvvCWHOp9uAYsxEQ3TP87pAUgwRQIhAO2aRERcublhAzToshkZRMg2I8GaE7mM2ECr0vYyuscmAiB5KK4ETlvrLqL0QbcRbGqrSwIa9lVuOqP3f5qCnGRMaQFpUiECI1AiHZ8q+qw7bjYVTbeGQQ3L2C2sH6CW82z8sXP1jQ0hA87A13sUT0sXl4iyaEtItn0JTqDhh5qPg4Wnmqt6B1emIQIxigNg6oPkHjCAgQIn2LJUBdlq3oSxENIhDqaf/nkNDVOuAAA="\n}\n')])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/OdLHnJ3.gif",alt:""}})]),t._v(" "),e("h2",{attrs:{id:"step-12-broadcast-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-12-broadcast-transaction"}},[t._v("#")]),t._v(" Step 12: Broadcast Transaction")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 broadcast --psbt $SECONDSIG_PSBT")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('{\n "txid": "61da2451874a483aa8d1d0787c7680d157639f284840de8885098cac43f6cc2f"\n}\n')])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/M7s0Fd6.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"verify-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#verify-transaction"}},[t._v("#")]),t._v(" Verify Transaction")]),t._v(" "),e("p",[t._v("Verify transcation in the memory pool on testnet "),e("a",{attrs:{href:"https://mempool.space/testnet",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mempool-testnet!"),e("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/52.be1422d1.js b/assets/js/52.ce3ca40d.js similarity index 99% rename from assets/js/52.be1422d1.js rename to assets/js/52.ce3ca40d.js index 5b9d43b5c1..5af14a2b6e 100644 --- a/assets/js/52.be1422d1.js +++ b/assets/js/52.ce3ca40d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{406:function(t,e,a){"use strict";a.r(e);var s=a(7),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h2",{attrs:{id:"tutorial-goals"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tutorial-goals"}},[t._v("#")]),t._v(" Tutorial Goals")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("The goal for this tutorial is to introduce you to "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[t._v("bdk-cli"),e("OutboundLink")],1),t._v(", a powerful command-line program. You will be exposed to many of the basic skills that go into creating and managing bitcoin wallets.")])]),t._v(" "),e("li",[e("p",[t._v("If you've read most of the "),e("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook",target:"_blank",rel:"noopener noreferrer"}},[t._v('"Mastering Bitcoin"'),e("OutboundLink")],1),t._v(" book, this tutorial could serve as a stepping stone into your Bitcoin wallet development journey.")])]),t._v(" "),e("li",[e("p",[t._v("This short tutorial will expose you to the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("bdk library")]),t._v(" "),e("OutboundLink")],1),t._v(" and the practical knowledge needed for bitcoin wallet development. As a consequence you will deepen your technical understanding about bitcoin and the bdk library.")])]),t._v(" "),e("li",[e("p",[t._v("BDK also has "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-ffi",target:"_blank",rel:"noopener noreferrer"}},[t._v("language-bindings"),e("OutboundLink")],1),t._v(" for "),e("strong",[t._v("Kotlin/Java, Swift, Python")]),t._v(" which enable the use of BDK's "),e("strong",[t._v("Rust")]),t._v(" library as an API. You can later use these similar steps to create your own bitcoin mobile, desktop or even WebApp by using the bdk-ffi language bindings.")])])]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"a-few-things-before-you-begin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#a-few-things-before-you-begin"}},[t._v("#")]),t._v(" A few things before you begin:")]),t._v(" "),e("ul",[e("li",[t._v("Three things to look out for in each step of the tutorial:\n"),e("ul",[e("li",[e("ol",[e("li",[t._v("▶️ / 🔶 - Commands for the Terminal or Shell")])])]),t._v(" "),e("li",[e("ol",{attrs:{start:"2"}},[e("li",[t._v("👍 - Preview of the command output. Note, not all commands will output code.")])])]),t._v(" "),e("li",[e("ol",{attrs:{start:"3"}},[e("li",[t._v("Preview Video of the tutorial for reference of what things should look like in action.")])])])])])]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"outline-of-tutorial-and-installation-notes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#outline-of-tutorial-and-installation-notes"}},[t._v("#")]),t._v(" Outline of Tutorial and Installation notes:")]),t._v(" "),e("h3",{attrs:{id:"brief-outline-of-tutorial"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#brief-outline-of-tutorial"}},[t._v("#")]),t._v(" Brief Outline of Tutorial")]),t._v(" "),e("ul",[e("li",[t._v("Step 1: Creating a mnemonic word list + XPRV (Extended Private Key)")]),t._v(" "),e("li",[t._v("Step 2: Generate testnet Receive Address")]),t._v(" "),e("li",[t._v("Step 3: Send funds to newly generated address")]),t._v(" "),e("li",[t._v("Step 4: Sync Wallet")]),t._v(" "),e("li",[t._v("Step 5: Check Balance of Wallet")]),t._v(" "),e("li",[t._v("Step 6: Create a Transaction (PSBT)")]),t._v(" "),e("li",[t._v("Step 7: Sign the Transaction (PSBT)")]),t._v(" "),e("li",[t._v("Step 8: Broadcast Transaction")])]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"rust-and-cargo-installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rust-and-cargo-installation"}},[t._v("#")]),t._v(" Rust and Cargo installation:")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://rustup.rs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Rust and Cargo Installation"),e("OutboundLink")],1)])]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"bdk-cli-installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-cli-installation"}},[t._v("#")]),t._v(" "),e("code",[t._v("bdk-cli")]),t._v(" installation:")]),t._v(" "),e("ul",[e("li",[t._v("Download the "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli.git",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("bdk-cli")]),t._v(" github repository locally"),e("OutboundLink")],1),t._v(" "),e("ul",[e("li",[t._v("Enter the folder "),e("code",[t._v("cd bdk-cli")])]),t._v(" "),e("li",[t._v("Install "),e("code",[t._v("cargo install --path . --features electrum,repl,compiler")])]),t._v(" "),e("li",[t._v("Once installation is done exit and reopen your terminal (command-line interface)")])])])]),t._v(" "),e("h3",{attrs:{id:"emoji-legend"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#emoji-legend"}},[t._v("#")]),t._v(" Emoji Legend:")]),t._v(" "),e("p",[t._v("▶️ : Unix/Linux Commands to copied and pasted\n🔶 : Windows Powershell Commands to copied and pasted\n👍 : Output/ preview of code")]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-0-check-version-of-bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-0-check-version-of-bdk-cli"}},[t._v("#")]),t._v(" Step 0: Check Version of bdk-cli")]),t._v(" "),e("p",[t._v("▶️ / 🔶 "),e("code",[t._v("bdk-cli -V")]),t._v("\n👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("bdk-cli 0.6.0\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/IcuyeMS.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"preview-of-bdk-cli-help-menu"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#preview-of-bdk-cli-help-menu"}},[t._v("#")]),t._v(" Preview of bdk-cli help menu")]),t._v(" "),e("p",[t._v("▶️ / 🔶 "),e("code",[t._v("bdk-cli --help")]),e("br"),t._v("\n👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[t._v("The BDK Command Line Wallet App\n\nbdk-cli is a light weight "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v(" line bitcoin wallet, powered by BDK. This app can be used as a playground as well as\ntesting environment to simulate various wallet testing situations. If you are planning to use BDK "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" your wallet, bdk-\ncli is also a great intro tool to get familiar with the BDK API.\n\nBut this is not just any toy. bdk-cli is also a fully functioning bitcoin wallet with taproot support"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("\n\nFor "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information checkout "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("https://bitcoindevkit.org/"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\nUSAGE:\n bdk-cli "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("OPTIONS"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SUBCOMMAND"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\nFLAGS:\n -h, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--help")]),t._v(" Prints "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" information\n -V, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--version")]),t._v(" Prints version information\n\nOPTIONS:\n -d, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--datadir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("DATADIR"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" Sets the wallet data directory. Default value "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(' "~/.bdk-bitcoin\n -n, '),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--network")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("NETWORK"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" Sets the network "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("default: testnet"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("possible values: bitcoin, testnet, signet, regtest"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nSUBCOMMANDS:\n compile Compile a miniscript policy to an output descriptor\n "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Prints this message or the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" of the given subcommand"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n key Subcommands "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" Key operations\n repl Options to configure a SOCKS5 proxy "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" a blockchain client connection\n wallet Wallet subcommands that can be issued without a blockchain backend\n")])])]),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-1-seed-generate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-1-seed-generate"}},[t._v("#")]),t._v(" Step 1: Seed Generate")]),t._v(" "),e("h3",{attrs:{id:"1a-mnemonic-word-list-xprv-extended-private-key-"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1a-mnemonic-word-list-xprv-extended-private-key-"}},[t._v("#")]),t._v(" 1a: Mnemonic word-list + XPRV (Extended Private Key) 🔑")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli key generate | tee key.json")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v('bdk-cli key generate | Out-File -FilePath "key.json"')])]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"42b15d2f"')]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mnemonic"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"party salon worth satoshi envelope suggest garlic dry add pitch throw clap keen narrow antique oyster ketchup purchase gasp visual work venue fog crater"')]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"xprv"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tprv8ZgxMBicQKsPdwpamtjqMFpYRTafnE1bN2SphLEybCtRKakk6S1TgQCsZgiBwJuJNWe3jYdgVCTsKf9weMxj6tW4zNNKWptykszJpS2L8wE"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/ii62Hul.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1b-save-xprv-extended-private-key-into-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1b-save-xprv-extended-private-key-into-environment-variable"}},[t._v("#")]),t._v(" 1b: Save XPRV (Extended Private Key) into environment variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("export XPRV_00=$(cat key.json | jq -r .xprv)")])]),t._v(" "),e("p",[t._v("Windows Powershell:")]),t._v(" "),e("p",[t._v("🔶 "),e("code",[t._v("$json = Get-Content -Path .\\key.json | ConvertFrom-Json")])]),t._v(" "),e("p",[t._v("🔶 "),e("code",[t._v("$mykeyValue = $json.xprv")])]),t._v(" "),e("p",[t._v("🔶 "),e("code",[t._v("[System.Environment]::SetEnvironmentVariable('XPRV',$mykeyValue, 'Process')")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/KYW2Cdo.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1c-verify-environment-variable-xprv-00-is-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1c-verify-environment-variable-xprv-00-is-active"}},[t._v("#")]),t._v(" 1c: Verify environment variable XPRV_00 is active")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("env | grep XPRV")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("$env:XPRV")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/ZahbJwe.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1d-create-descriptor-and-save-into-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1d-create-descriptor-and-save-into-environment-variable"}},[t._v("#")]),t._v(" 1d: Create Descriptor and Save into environment variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v('export my_descriptor="wpkh($XPRV_00/84h/1h/0h/0/*)"')])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("[System.Environment]::SetEnvironmentVariable('my_descriptor', \"wpkh($env:XPRV/84h/1h/0h/0/*)\", 'Process')")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/UV4Vgsq.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1e-verify-environment-variable-my-descriptor-is-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1e-verify-environment-variable-my-descriptor-is-active"}},[t._v("#")]),t._v(" 1e: Verify environment variable my_descriptor is active")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("env | grep my_descriptor")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("$env:my_descriptor")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/s7ZeRQN.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-2-generate-receive-address"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-2-generate-receive-address"}},[t._v("#")]),t._v(" Step 2: Generate Receive-Address")]),t._v(" "),e("p",[t._v("Linux/Terminal:")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor get_new_address")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor get_new_address")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/P8PjTAo.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"address"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tb1qrh4sq5va0unqtxyfv8al9lz3sna3988cj59uya"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-3-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-3-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[t._v("#")]),t._v(" Step 3: Send testnet bitcoin to the newly created receive-address")]),t._v(" "),e("p",[t._v("Use a faucet to send funds to your newly created address. Here is a link to one: "),e("a",{attrs:{href:"https://bitcoinfaucet.uo1.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Testnet Faucet"),e("OutboundLink")],1)]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-4-sync-the-wallet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-4-sync-the-wallet"}},[t._v("#")]),t._v(" Step 4: Sync the wallet")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor sync")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor sync")])]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/WFYBgVB.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-5-check-the-balance"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-5-check-the-balance"}},[t._v("#")]),t._v(" Step 5: Check the balance")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor get_balance")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor get_balance")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Note: The balance will only show after the transaction has been confirmed in a block at least once.")])]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful:")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"satoshi"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"confirmed"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immature"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"trusted_pending"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"untrusted_pending"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/v8MAYB2.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-6-create-transaction-psbt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-6-create-transaction-psbt"}},[t._v("#")]),t._v(" Step 6: Create Transaction (PSBT)")]),t._v(" "),e("p",[t._v("To create a PSBT (partially-signed-bitcoin-transaction) run the command:")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor create_tx --to tb1qw2c3lxufxqe2x9s4rdzh65tpf4d7fssjgh8nv6:50000")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor create_tx --to tb1qjk6n943uwhqhdf7en600tnwxpslvwtr0udsehp:0 --send_all")]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/EUCovcJ.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"details"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"confirmation_time"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" null,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fee"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("113")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"received"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sent"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("123000")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"transaction"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" null,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"029173d76253e3441f9dc26f91e6ef30dff486848e91a7941f0cacd0af25ee30"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"psbt"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cHNidP8BAFUBAAAAAak8uMR3UGkAGUKWsq8Mv45qg2fdD93JQRIsa2P0wFloAQAAAAD/////AQfgAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA3gIAAAAAAQFY9sVfEEbyjrHXSlxXDxL+71WOMnsPpVElwk+3E/J9vAAAAAAA/v///wIYZRIAAAAAABYAFBKYf7yF+ss6EFdw2rDZTfdLhep8eOABAAAAAAAWABQd6wBRnX8mBZiJYfvy/FGE+xKc+AJHMEQCIFSIkvEUI9yUgEw4JocRs1aiVsBlKKXrOQaQb3XFqR21AiBqiEVzCVVSRGjckyPDgAQBnOdSzBYR6Rw6KFcCP+E27wEhAwIlXdfM2WYnYa36Hp4MS6YkplBAgBsb1tYG9NiWFWTKzPYhAAEBH3jgAQAAAAAAFgAUHesAUZ1/JgWYiWH78vxRhPsSnPgiBgP80FpaWYQzGzCnNI9blXbei61YpAmtoezMRxpVvBJ6SxgTizKsVAAAgAEAAIAAAACAAAAAAAAAAAAAAA=="')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h3",{attrs:{id:"6a-export-psbt-to-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#6a-export-psbt-to-environment-variable"}},[t._v("#")]),t._v(" 6a: export PSBT to environment-variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v('export PSBT="PASTE_PSBT_HERE"')])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶"),e("code",[t._v("[System.Environment]::SetEnvironmentVariable('PSBT',\"PASTE_PSBT_HERE\",'Process')")]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/CEDKcPZ.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-7-sign-transaction-psbt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-7-sign-transaction-psbt"}},[t._v("#")]),t._v(" Step 7: Sign Transaction (PSBT)")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor sign --psbt $PSBT")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor sign --psbt $env:PSBT")])]),t._v(" "),e("ul",[e("li",[t._v("DON'T FORGET to COPY the PSBT for the next step")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/f4o4Ce8.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"is_finalized"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" true,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"psbt"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cHNidP8BAFUBAAAAAak8uMR3UGkAGUKWsq8Mv45qg2fdD93JQRIsa2P0wFloAQAAAAD/////AQfgAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA3gIAAAAAAQFY9sVfEEbyjrHXSlxXDxL+71WOMnsPpVElwk+3E/J9vAAAAAAA/v///wIYZRIAAAAAABYAFBKYf7yF+ss6EFdw2rDZTfdLhep8eOABAAAAAAAWABQd6wBRnX8mBZiJYfvy/FGE+xKc+AJHMEQCIFSIkvEUI9yUgEw4JocRs1aiVsBlKKXrOQaQb3XFqR21AiBqiEVzCVVSRGjckyPDgAQBnOdSzBYR6Rw6KFcCP+E27wEhAwIlXdfM2WYnYa36Hp4MS6YkplBAgBsb1tYG9NiWFWTKzPYhAAEBH3jgAQAAAAAAFgAUHesAUZ1/JgWYiWH78vxRhPsSnPgiAgP80FpaWYQzGzCnNI9blXbei61YpAmtoezMRxpVvBJ6S0gwRQIhALWkBRSJzxuf0od4tPu3qFmEfJ2Y+/QBGtfjSFObWsPeAiA4QJx8Rk5pacrjHv5EOdw6RNHXcdtepFs+m0/Za/h0UQEiBgP80FpaWYQzGzCnNI9blXbei61YpAmtoezMRxpVvBJ6SxgTizKsVAAAgAEAAIAAAACAAAAAAAAAAAABBwABCGwCSDBFAiEAtaQFFInPG5/Sh3i0+7eoWYR8nZj79AEa1+NIU5taw94CIDhAnHxGTmlpyuMe/kQ53DpE0ddx216kWz6bT9lr+HRRASED/NBaWlmEMxswpzSPW5V23outWKQJraHszEcaVbwSeksAAA=="')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h3",{attrs:{id:"7a-export-signed-psbt-to-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#7a-export-signed-psbt-to-environment-variable"}},[t._v("#")]),t._v(" 7a: export signed psbt to environment variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v('export SIGNED_PSBT="Paste_PSBT_HERE"')])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v('$env:PSBTSIGNED = "STRINGHERE"')]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/VJsl8zR.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-8-broadcast-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-8-broadcast-transaction"}},[t._v("#")]),t._v(" Step 8: Broadcast Transaction")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor broadcast --psbt $SIGNED_PSBT")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor broadcast --psbt $env:PSBTSIGNED")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/yQZZk0d.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a0877b7ce91ea6d141ba63277673f5bdf0edfdd45f91a39ba1a1ace15f839b52"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("ul",[e("li",[t._v("Verify transaction in the memory pool on testnet "),e("a",{attrs:{href:"https://mempool.space/testnet",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mempool-testnet!"),e("OutboundLink")],1)])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Run sync one more time and see that the balance has decreased.")])]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"resources"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP-32: Hierarchical Deterministic Wallets"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 39 - Mnemonic code for generating deterministic keys"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 44 - Multi-Account Hierarchy for Deterministic Wallets"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 84 - Derivation scheme for P2WPKH based accounts"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 174 - Partially Signed Bitcoin Transaction Format"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://blog.summerofbitcoin.org/miniscript-policy-descriptors-hidden-powers-of-bitcoin/",target:"_blank",rel:"noopener noreferrer"}},[t._v("What are Descriptors and miniscript?"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://bitcoin.stackexchange.com/questions/97242/bip39-tool-bip32-extended-private-key-vs-bip32-root-key",target:"_blank",rel:"noopener noreferrer"}},[t._v("Master Private Key and Extended Private Key"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://min.sc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Minsc A Miniscript-based scripting language for Bitcoin contracts"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{403:function(t,e,a){"use strict";a.r(e);var s=a(7),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h2",{attrs:{id:"tutorial-goals"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tutorial-goals"}},[t._v("#")]),t._v(" Tutorial Goals")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("The goal for this tutorial is to introduce you to "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[t._v("bdk-cli"),e("OutboundLink")],1),t._v(", a powerful command-line program. You will be exposed to many of the basic skills that go into creating and managing bitcoin wallets.")])]),t._v(" "),e("li",[e("p",[t._v("If you've read most of the "),e("a",{attrs:{href:"https://github.com/bitcoinbook/bitcoinbook",target:"_blank",rel:"noopener noreferrer"}},[t._v('"Mastering Bitcoin"'),e("OutboundLink")],1),t._v(" book, this tutorial could serve as a stepping stone into your Bitcoin wallet development journey.")])]),t._v(" "),e("li",[e("p",[t._v("This short tutorial will expose you to the "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("bdk library")]),t._v(" "),e("OutboundLink")],1),t._v(" and the practical knowledge needed for bitcoin wallet development. As a consequence you will deepen your technical understanding about bitcoin and the bdk library.")])]),t._v(" "),e("li",[e("p",[t._v("BDK also has "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-ffi",target:"_blank",rel:"noopener noreferrer"}},[t._v("language-bindings"),e("OutboundLink")],1),t._v(" for "),e("strong",[t._v("Kotlin/Java, Swift, Python")]),t._v(" which enable the use of BDK's "),e("strong",[t._v("Rust")]),t._v(" library as an API. You can later use these similar steps to create your own bitcoin mobile, desktop or even WebApp by using the bdk-ffi language bindings.")])])]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"a-few-things-before-you-begin"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#a-few-things-before-you-begin"}},[t._v("#")]),t._v(" A few things before you begin:")]),t._v(" "),e("ul",[e("li",[t._v("Three things to look out for in each step of the tutorial:\n"),e("ul",[e("li",[e("ol",[e("li",[t._v("▶️ / 🔶 - Commands for the Terminal or Shell")])])]),t._v(" "),e("li",[e("ol",{attrs:{start:"2"}},[e("li",[t._v("👍 - Preview of the command output. Note, not all commands will output code.")])])]),t._v(" "),e("li",[e("ol",{attrs:{start:"3"}},[e("li",[t._v("Preview Video of the tutorial for reference of what things should look like in action.")])])])])])]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"outline-of-tutorial-and-installation-notes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#outline-of-tutorial-and-installation-notes"}},[t._v("#")]),t._v(" Outline of Tutorial and Installation notes:")]),t._v(" "),e("h3",{attrs:{id:"brief-outline-of-tutorial"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#brief-outline-of-tutorial"}},[t._v("#")]),t._v(" Brief Outline of Tutorial")]),t._v(" "),e("ul",[e("li",[t._v("Step 1: Creating a mnemonic word list + XPRV (Extended Private Key)")]),t._v(" "),e("li",[t._v("Step 2: Generate testnet Receive Address")]),t._v(" "),e("li",[t._v("Step 3: Send funds to newly generated address")]),t._v(" "),e("li",[t._v("Step 4: Sync Wallet")]),t._v(" "),e("li",[t._v("Step 5: Check Balance of Wallet")]),t._v(" "),e("li",[t._v("Step 6: Create a Transaction (PSBT)")]),t._v(" "),e("li",[t._v("Step 7: Sign the Transaction (PSBT)")]),t._v(" "),e("li",[t._v("Step 8: Broadcast Transaction")])]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"rust-and-cargo-installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#rust-and-cargo-installation"}},[t._v("#")]),t._v(" Rust and Cargo installation:")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://rustup.rs/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Rust and Cargo Installation"),e("OutboundLink")],1)])]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"bdk-cli-installation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-cli-installation"}},[t._v("#")]),t._v(" "),e("code",[t._v("bdk-cli")]),t._v(" installation:")]),t._v(" "),e("ul",[e("li",[t._v("Download the "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli.git",target:"_blank",rel:"noopener noreferrer"}},[e("code",[t._v("bdk-cli")]),t._v(" github repository locally"),e("OutboundLink")],1),t._v(" "),e("ul",[e("li",[t._v("Enter the folder "),e("code",[t._v("cd bdk-cli")])]),t._v(" "),e("li",[t._v("Install "),e("code",[t._v("cargo install --path . --features electrum,repl,compiler")])]),t._v(" "),e("li",[t._v("Once installation is done exit and reopen your terminal (command-line interface)")])])])]),t._v(" "),e("h3",{attrs:{id:"emoji-legend"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#emoji-legend"}},[t._v("#")]),t._v(" Emoji Legend:")]),t._v(" "),e("p",[t._v("▶️ : Unix/Linux Commands to copied and pasted\n🔶 : Windows Powershell Commands to copied and pasted\n👍 : Output/ preview of code")]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-0-check-version-of-bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-0-check-version-of-bdk-cli"}},[t._v("#")]),t._v(" Step 0: Check Version of bdk-cli")]),t._v(" "),e("p",[t._v("▶️ / 🔶 "),e("code",[t._v("bdk-cli -V")]),t._v("\n👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("bdk-cli 0.6.0\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/IcuyeMS.gif",alt:""}})]),t._v(" "),e("h3",{attrs:{id:"preview-of-bdk-cli-help-menu"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#preview-of-bdk-cli-help-menu"}},[t._v("#")]),t._v(" Preview of bdk-cli help menu")]),t._v(" "),e("p",[t._v("▶️ / 🔶 "),e("code",[t._v("bdk-cli --help")]),e("br"),t._v("\n👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[t._v("The BDK Command Line Wallet App\n\nbdk-cli is a light weight "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v(" line bitcoin wallet, powered by BDK. This app can be used as a playground as well as\ntesting environment to simulate various wallet testing situations. If you are planning to use BDK "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" your wallet, bdk-\ncli is also a great intro tool to get familiar with the BDK API.\n\nBut this is not just any toy. bdk-cli is also a fully functioning bitcoin wallet with taproot support"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("\n\nFor "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("more")]),t._v(" information checkout "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("https://bitcoindevkit.org/"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\nUSAGE:\n bdk-cli "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("OPTIONS"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("SUBCOMMAND"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\nFLAGS:\n -h, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--help")]),t._v(" Prints "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" information\n -V, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--version")]),t._v(" Prints version information\n\nOPTIONS:\n -d, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--datadir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("DATADIR"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" Sets the wallet data directory. Default value "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(' "~/.bdk-bitcoin\n -n, '),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--network")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("NETWORK"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" Sets the network "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("default: testnet"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("possible values: bitcoin, testnet, signet, regtest"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\nSUBCOMMANDS:\n compile Compile a miniscript policy to an output descriptor\n "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" Prints this message or the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("help")]),t._v(" of the given subcommand"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n key Subcommands "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" Key operations\n repl Options to configure a SOCKS5 proxy "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" a blockchain client connection\n wallet Wallet subcommands that can be issued without a blockchain backend\n")])])]),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-1-seed-generate"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-1-seed-generate"}},[t._v("#")]),t._v(" Step 1: Seed Generate")]),t._v(" "),e("h3",{attrs:{id:"1a-mnemonic-word-list-xprv-extended-private-key-"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1a-mnemonic-word-list-xprv-extended-private-key-"}},[t._v("#")]),t._v(" 1a: Mnemonic word-list + XPRV (Extended Private Key) 🔑")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli key generate | tee key.json")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v('bdk-cli key generate | Out-File -FilePath "key.json"')])]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fingerprint"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"42b15d2f"')]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mnemonic"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"party salon worth satoshi envelope suggest garlic dry add pitch throw clap keen narrow antique oyster ketchup purchase gasp visual work venue fog crater"')]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"xprv"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tprv8ZgxMBicQKsPdwpamtjqMFpYRTafnE1bN2SphLEybCtRKakk6S1TgQCsZgiBwJuJNWe3jYdgVCTsKf9weMxj6tW4zNNKWptykszJpS2L8wE"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/ii62Hul.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1b-save-xprv-extended-private-key-into-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1b-save-xprv-extended-private-key-into-environment-variable"}},[t._v("#")]),t._v(" 1b: Save XPRV (Extended Private Key) into environment variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("export XPRV_00=$(cat key.json | jq -r .xprv)")])]),t._v(" "),e("p",[t._v("Windows Powershell:")]),t._v(" "),e("p",[t._v("🔶 "),e("code",[t._v("$json = Get-Content -Path .\\key.json | ConvertFrom-Json")])]),t._v(" "),e("p",[t._v("🔶 "),e("code",[t._v("$mykeyValue = $json.xprv")])]),t._v(" "),e("p",[t._v("🔶 "),e("code",[t._v("[System.Environment]::SetEnvironmentVariable('XPRV',$mykeyValue, 'Process')")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/KYW2Cdo.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1c-verify-environment-variable-xprv-00-is-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1c-verify-environment-variable-xprv-00-is-active"}},[t._v("#")]),t._v(" 1c: Verify environment variable XPRV_00 is active")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("env | grep XPRV")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("$env:XPRV")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/ZahbJwe.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1d-create-descriptor-and-save-into-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1d-create-descriptor-and-save-into-environment-variable"}},[t._v("#")]),t._v(" 1d: Create Descriptor and Save into environment variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v('export my_descriptor="wpkh($XPRV_00/84h/1h/0h/0/*)"')])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("[System.Environment]::SetEnvironmentVariable('my_descriptor', \"wpkh($env:XPRV/84h/1h/0h/0/*)\", 'Process')")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/UV4Vgsq.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h3",{attrs:{id:"1e-verify-environment-variable-my-descriptor-is-active"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#1e-verify-environment-variable-my-descriptor-is-active"}},[t._v("#")]),t._v(" 1e: Verify environment variable my_descriptor is active")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("env | grep my_descriptor")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("$env:my_descriptor")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/s7ZeRQN.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-2-generate-receive-address"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-2-generate-receive-address"}},[t._v("#")]),t._v(" Step 2: Generate Receive-Address")]),t._v(" "),e("p",[t._v("Linux/Terminal:")]),t._v(" "),e("p",[t._v("▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor get_new_address")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor get_new_address")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/P8PjTAo.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"address"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tb1qrh4sq5va0unqtxyfv8al9lz3sna3988cj59uya"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-3-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-3-send-testnet-bitcoin-to-the-newly-created-receive-address"}},[t._v("#")]),t._v(" Step 3: Send testnet bitcoin to the newly created receive-address")]),t._v(" "),e("p",[t._v("Use a faucet to send funds to your newly created address. Here is a link to one: "),e("a",{attrs:{href:"https://bitcoinfaucet.uo1.net",target:"_blank",rel:"noopener noreferrer"}},[t._v("Bitcoin Testnet Faucet"),e("OutboundLink")],1)]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-4-sync-the-wallet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-4-sync-the-wallet"}},[t._v("#")]),t._v(" Step 4: Sync the wallet")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor sync")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶 "),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor sync")])]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/WFYBgVB.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-5-check-the-balance"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-5-check-the-balance"}},[t._v("#")]),t._v(" Step 5: Check the balance")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor get_balance")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor get_balance")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Note: The balance will only show after the transaction has been confirmed in a block at least once.")])]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful:")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"satoshi"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"confirmed"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100000")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"immature"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"trusted_pending"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"untrusted_pending"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/v8MAYB2.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-6-create-transaction-psbt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-6-create-transaction-psbt"}},[t._v("#")]),t._v(" Step 6: Create Transaction (PSBT)")]),t._v(" "),e("p",[t._v("To create a PSBT (partially-signed-bitcoin-transaction) run the command:")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor create_tx --to tb1qw2c3lxufxqe2x9s4rdzh65tpf4d7fssjgh8nv6:50000")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor create_tx --to tb1qjk6n943uwhqhdf7en600tnwxpslvwtr0udsehp:0 --send_all")]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/EUCovcJ.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"details"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"confirmation_time"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" null,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fee"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("113")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"received"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sent"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("123000")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"transaction"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" null,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"029173d76253e3441f9dc26f91e6ef30dff486848e91a7941f0cacd0af25ee30"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"psbt"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cHNidP8BAFUBAAAAAak8uMR3UGkAGUKWsq8Mv45qg2fdD93JQRIsa2P0wFloAQAAAAD/////AQfgAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA3gIAAAAAAQFY9sVfEEbyjrHXSlxXDxL+71WOMnsPpVElwk+3E/J9vAAAAAAA/v///wIYZRIAAAAAABYAFBKYf7yF+ss6EFdw2rDZTfdLhep8eOABAAAAAAAWABQd6wBRnX8mBZiJYfvy/FGE+xKc+AJHMEQCIFSIkvEUI9yUgEw4JocRs1aiVsBlKKXrOQaQb3XFqR21AiBqiEVzCVVSRGjckyPDgAQBnOdSzBYR6Rw6KFcCP+E27wEhAwIlXdfM2WYnYa36Hp4MS6YkplBAgBsb1tYG9NiWFWTKzPYhAAEBH3jgAQAAAAAAFgAUHesAUZ1/JgWYiWH78vxRhPsSnPgiBgP80FpaWYQzGzCnNI9blXbei61YpAmtoezMRxpVvBJ6SxgTizKsVAAAgAEAAIAAAACAAAAAAAAAAAAAAA=="')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h3",{attrs:{id:"6a-export-psbt-to-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#6a-export-psbt-to-environment-variable"}},[t._v("#")]),t._v(" 6a: export PSBT to environment-variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v('export PSBT="PASTE_PSBT_HERE"')])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶"),e("code",[t._v("[System.Environment]::SetEnvironmentVariable('PSBT',\"PASTE_PSBT_HERE\",'Process')")]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/CEDKcPZ.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-7-sign-transaction-psbt"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-7-sign-transaction-psbt"}},[t._v("#")]),t._v(" Step 7: Sign Transaction (PSBT)")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor sign --psbt $PSBT")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor sign --psbt $env:PSBT")])]),t._v(" "),e("ul",[e("li",[t._v("DON'T FORGET to COPY the PSBT for the next step")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/f4o4Ce8.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"is_finalized"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" true,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"psbt"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"cHNidP8BAFUBAAAAAak8uMR3UGkAGUKWsq8Mv45qg2fdD93JQRIsa2P0wFloAQAAAAD/////AQfgAQAAAAAAGXapFDRKD0jKFQ7CuQOBdmC5tosTpnAmiKwAAAAAAAEA3gIAAAAAAQFY9sVfEEbyjrHXSlxXDxL+71WOMnsPpVElwk+3E/J9vAAAAAAA/v///wIYZRIAAAAAABYAFBKYf7yF+ss6EFdw2rDZTfdLhep8eOABAAAAAAAWABQd6wBRnX8mBZiJYfvy/FGE+xKc+AJHMEQCIFSIkvEUI9yUgEw4JocRs1aiVsBlKKXrOQaQb3XFqR21AiBqiEVzCVVSRGjckyPDgAQBnOdSzBYR6Rw6KFcCP+E27wEhAwIlXdfM2WYnYa36Hp4MS6YkplBAgBsb1tYG9NiWFWTKzPYhAAEBH3jgAQAAAAAAFgAUHesAUZ1/JgWYiWH78vxRhPsSnPgiAgP80FpaWYQzGzCnNI9blXbei61YpAmtoezMRxpVvBJ6S0gwRQIhALWkBRSJzxuf0od4tPu3qFmEfJ2Y+/QBGtfjSFObWsPeAiA4QJx8Rk5pacrjHv5EOdw6RNHXcdtepFs+m0/Za/h0UQEiBgP80FpaWYQzGzCnNI9blXbei61YpAmtoezMRxpVvBJ6SxgTizKsVAAAgAEAAIAAAACAAAAAAAAAAAABBwABCGwCSDBFAiEAtaQFFInPG5/Sh3i0+7eoWYR8nZj79AEa1+NIU5taw94CIDhAnHxGTmlpyuMe/kQ53DpE0ddx216kWz6bT9lr+HRRASED/NBaWlmEMxswpzSPW5V23outWKQJraHszEcaVbwSeksAAA=="')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("hr"),t._v(" "),e("h3",{attrs:{id:"7a-export-signed-psbt-to-environment-variable"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#7a-export-signed-psbt-to-environment-variable"}},[t._v("#")]),t._v(" 7a: export signed psbt to environment variable")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v('export SIGNED_PSBT="Paste_PSBT_HERE"')])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v('$env:PSBTSIGNED = "STRINGHERE"')]),t._v(" "),e("img",{attrs:{src:"https://i.imgur.com/VJsl8zR.gif",alt:""}})]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"step-8-broadcast-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#step-8-broadcast-transaction"}},[t._v("#")]),t._v(" Step 8: Broadcast Transaction")]),t._v(" "),e("p",[t._v("Linux/Terminal:\n▶️ "),e("code",[t._v("bdk-cli wallet --wallet wallet_name --descriptor $my_descriptor broadcast --psbt $SIGNED_PSBT")])]),t._v(" "),e("p",[t._v("Windows Powershell:\n🔶\n"),e("code",[t._v("bdk-cli wallet --descriptor $env:my_descriptor broadcast --psbt $env:PSBTSIGNED")])]),t._v(" "),e("figure",[e("img",{attrs:{src:"https://i.imgur.com/yQZZk0d.gif",alt:""}})]),t._v(" "),e("p",[t._v("👍 The output below confirms the command was successful.")]),t._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a0877b7ce91ea6d141ba63277673f5bdf0edfdd45f91a39ba1a1ace15f839b52"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("ul",[e("li",[t._v("Verify transaction in the memory pool on testnet "),e("a",{attrs:{href:"https://mempool.space/testnet",target:"_blank",rel:"noopener noreferrer"}},[t._v("Mempool-testnet!"),e("OutboundLink")],1)])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("Run sync one more time and see that the balance has decreased.")])]),t._v(" "),e("hr"),t._v(" "),e("h2",{attrs:{id:"resources"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#resources"}},[t._v("#")]),t._v(" Resources")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP-32: Hierarchical Deterministic Wallets"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 39 - Mnemonic code for generating deterministic keys"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 44 - Multi-Account Hierarchy for Deterministic Wallets"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 84 - Derivation scheme for P2WPKH based accounts"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t._v("BIP: 174 - Partially Signed Bitcoin Transaction Format"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://blog.summerofbitcoin.org/miniscript-policy-descriptors-hidden-powers-of-bitcoin/",target:"_blank",rel:"noopener noreferrer"}},[t._v("What are Descriptors and miniscript?"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://bitcoin.stackexchange.com/questions/97242/bip39-tool-bip32-extended-private-key-vs-bip32-root-key",target:"_blank",rel:"noopener noreferrer"}},[t._v("Master Private Key and Extended Private Key"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://min.sc",target:"_blank",rel:"noopener noreferrer"}},[t._v("Minsc A Miniscript-based scripting language for Bitcoin contracts"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/53.2a7bdadc.js b/assets/js/53.403d55e0.js similarity index 99% rename from assets/js/53.2a7bdadc.js rename to assets/js/53.403d55e0.js index c9483d5b53..52fc2ea40e 100644 --- a/assets/js/53.2a7bdadc.js +++ b/assets/js/53.403d55e0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{409:function(t,s,a){"use strict";a.r(s);var n=a(7),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("It’s easy to underestimate the importance of privacy tech for Bitcoin,\nespecially when connecting to third party services. They can learn your\nIP address and associate the transactions you sent over it. You can only\nhope that this information will not be leaked anytime in the future with\nunpredictable consequences. In order to use Bitcoin privately, you need\nto encrypt and anonymize the data you send over the Internet.")]),t._v(" "),s("p",[t._v("Tor is one of the must-have privacy preserving tools for the Internet in\ngeneral, and for Bitcoin in particular. Tor network consists of nodes that\nuse clever cryptographic methods to encrypt user data and transfer them as\nanonymously as possible.")]),t._v(" "),s("p",[t._v("In this article we show how to integrate Tor with your BDK application.")]),t._v(" "),s("h2",{attrs:{id:"prerequisite"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisite"}},[t._v("#")]),t._v(" Prerequisite")]),t._v(" "),s("p",[t._v("First, you would need to have a Tor daemon up and running.")]),t._v(" "),s("p",[t._v("On Mac OS X you can install with Homebrew.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("brew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" tor\nbrew services start tor\n")])])]),s("p",[t._v("On Ubuntu or other Debian-based distributions.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" tor\n")])])]),s("p",[t._v("In some cases you'll need to wait a minute or two for the bootstrapping to finish.\nIn general, Tor is not the fastest network, so if any of the examples below fail\ndue to timeout, simply restart it.")]),t._v(" "),s("p",[t._v("At the very end of the article we’ll show how to integrate Tor directly to\nyour application.")]),t._v(" "),s("p",[t._v("By default, Tor creates a "),s("a",{attrs:{href:"https://en.wikipedia.org/wiki/SOCKS",target:"_blank",rel:"noopener noreferrer"}},[t._v("SOCKS5"),s("OutboundLink")],1),t._v(" proxy\nendpoint and listens on port 9050. Your application should connect to the\nproxy on "),s("code",[t._v("localhost:9050")]),t._v(" and use it for its network activities.")]),t._v(" "),s("h2",{attrs:{id:"setting-up"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up"}},[t._v("#")]),t._v(" Setting Up")]),t._v(" "),s("p",[t._v("Create a new cargo project.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mkdir")]),t._v(" ~/tutorial\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" tutorial\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" new bdk-tor\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" bdk-tor\n")])])]),s("p",[t._v("Open "),s("code",[t._v("src/main.rs")]),t._v(" file remove all its contents and add these lines.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FromStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedPrivKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bip84")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeychainKind")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SyncOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add additional imports here")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" network "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Testnet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xpriv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xpriv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedPrivKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Syncing the wallet..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SyncOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The wallet synced. Height: {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_height")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedPrivKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryDatabase")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bip84")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeychainKind")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("External")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bip84")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeychainKind")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Internal")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("In this code we create a testnet wallet with "),s("code",[t._v("create_wallet()")]),t._v(" function and\ntry to sync it with a specific blockchain client implementation. We create a\nblockchain client using "),s("code",[t._v("create_blockchain()")]),t._v(" function. We’ll implement it\nlater for each type of blockchain client supported by BDK.")]),t._v(" "),s("h2",{attrs:{id:"electrumblockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#electrumblockchain"}},[t._v("#")]),t._v(" ElectrumBlockchain")]),t._v(" "),s("p",[t._v("The Electrum client is enabled by default so the "),s("code",[t._v("Cargo.toml")]),t._v(" dependencies\nsection will look like this.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("And the imports look like this.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("electrum_client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Socks5Config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Here is the implementation of "),s("code",[t._v("create_blockchain()")]),t._v(" function for the\nElectrum client.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ssl://electrum.blockstream.info:60002"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("socks5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Socks5Config")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n credentials"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("In this example we create an instance of "),s("code",[t._v("Socks5Config")]),t._v(" which defines the\nTor proxy parameters for "),s("code",[t._v("ElectrumBlockchain")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"blocking-esplorablockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#blocking-esplorablockchain"}},[t._v("#")]),t._v(" Blocking EsploraBlockchain")]),t._v(" "),s("p",[t._v("The blocking version of "),s("code",[t._v("EsploraBlockchain")]),t._v(" uses "),s("code",[t._v("ureq")]),t._v(" crate to send HTTP\nrequests to Eslora backends. By default, its SOCKS5 feature is disabled,\nso we need to enable it in "),s("code",[t._v("Cargo.toml")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"use-esplora-blocking"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The imports are")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("esplora"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("And "),s("code",[t._v("create_blockchain()")]),t._v(" implementation is")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/testnet/api"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socks5://127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n base_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n proxy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n concurrency"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n stop_gap"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timeout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("120")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Here we use "),s("code",[t._v("proxy()")]),t._v(" method of the config builder to set the Tor proxy\naddress. Please note, that unlike the previous examples, the Esplora client\nbuilder requires not just a proxy address, but a URL\n“socks5://127.0.0.1:9050”.")]),t._v(" "),s("h2",{attrs:{id:"asynchronous-esplorablockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#asynchronous-esplorablockchain"}},[t._v("#")]),t._v(" Asynchronous EsploraBlockchain")]),t._v(" "),s("p",[t._v("There’s no need in enabling SOCKS5 for the asynchronous Esplora client,\nso we are good to go without additional dependencies.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"use-esplora-async"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The imports are the same as in previous example.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("esplora"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("code",[t._v("create_blockchain()")]),t._v(" is almost identical.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/testnet/api"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socks5h://127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n base_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n proxy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n concurrency"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n stop_gap"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timeout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("120")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("There are two notable differences though. First, we call "),s("code",[t._v("build_async()")]),t._v(" to\ncreate an asynchronous Esplora client. Second the SOCKS5 URL scheme is\n“socks5h”. It’s not a typo. The async client supports two SOCKS5 schemes\n“socks5” and “socks5h”. The difference between them is that the former\nmakes the client to resolve domain names, and the latter does not, so the\nclient passes them to the proxy as is. A regular DNS resolver cannot\nresolve Tor onion addresses, so we should use “socks5h” here.")]),t._v(" "),s("h2",{attrs:{id:"compactfiltersblockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#compactfiltersblockchain"}},[t._v("#")]),t._v(" CompactFiltersBlockchain")]),t._v(" "),s("p",[t._v("Add these lines to the dependencies section of "),s("code",[t._v("Cargo.toml")]),t._v(" file to enable\nBIP-157/BIP-158 compact filter support.")]),t._v(" "),s("p",[t._v("It can take a while to sync a wallet using compact filters over Tor, so be\npatient.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"compact_filters"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Now add the required imports into "),s("code",[t._v("src/main.rs")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("sync"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("compact_filters"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mempool")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Peer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CompactFiltersBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("code",[t._v("create_blockchain()")]),t._v(" function will look like this.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CompactFiltersBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" peer_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"neutrino.testnet3.suredbits.com:18333"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mempool "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mempool")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" peer_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" peer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Peer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect_proxy")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("peer_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" mempool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Testnet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CompactFiltersBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("vec!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("peer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./wallet-filters"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("500_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Here we use "),s("code",[t._v("Peer::connect_proxy()")]),t._v(" which accepts the address to the SOCKS5\nproxy and performs all the heavy lifting for us.")]),t._v(" "),s("h2",{attrs:{id:"integrated-tor-daemon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#integrated-tor-daemon"}},[t._v("#")]),t._v(" Integrated Tor daemon")]),t._v(" "),s("p",[t._v("As an application developer you don’t have to rely on your users to install\nand start Tor to use your application. Using "),s("code",[t._v("libtor")]),t._v(" crate you can bundle\nTor daemon with your app.")]),t._v(" "),s("p",[s("code",[t._v("libtor")]),t._v(" builds a Tor binary from the source files. Since Tor is written in C\nyou'll need a C compiler and build tools.")]),t._v(" "),s("p",[t._v("Install these packages on Mac OS X:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("xcode-select "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--install")]),t._v("\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" autoconf\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" automake\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" libtool\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" openssl\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" pkg-config\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("export")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("LDFLAGS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-L/opt/homebrew/opt/openssl/lib"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("export")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CPPFLAGS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-I/opt/homebrew/opt/openssl/include"')]),t._v("\n")])])]),s("p",[t._v("Or these packages on Ubuntu or another Debian-based Linux distribution:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" autoconf automake clang "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" libtool openssl pkg-config\n")])])]),s("p",[t._v("Then add these dependencies to the "),s("code",[t._v("Cargo.toml")]),t._v(" file.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("libtor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"47.8.0+0.4.7.x"')]),t._v("\n")])])]),s("p",[t._v("This is an example of how we can use "),s("code",[t._v("libtor")]),t._v(" to start a Tor daemon.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("prelude"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("thread"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Duration")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("libtor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogDestination")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("libtor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogLevel")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("libtor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HiddenServiceVersion")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorAddress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("env"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pub")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("start_tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_port "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("19050")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" data_dir "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("format!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{}/{}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("env"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("temp_dir")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("display")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk-tor"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" log_file_name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("format!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{}/{}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("data_dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"log"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Staring Tor in {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("data_dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("truncate_log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("log_file_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataDirectory")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data_dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogTo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogLevel")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Notice")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogDestination")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("log_file_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("as_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SocksPort")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socks_port"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Custom")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ExitPolicy reject *:*"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Custom")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BridgeRelay 0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("start_background")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" started "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("started "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" tries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("120")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("panic!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"It took too long to start Tor. See {} for details"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("log_file_name\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("thread"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sleep")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Duration")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_millis")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n started "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find_string_in_log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("log_file_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bootstrapped 100%"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Tor started"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("format!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:{}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socks_port"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("First, we create a Tor object, and then we call "),s("code",[t._v("start_background()")]),t._v(" method\nto start it in the background. After that, we continuously try to find\n“Bootstrapped 100%” string in the log file. Once we find it, Tor is\nready to proxy our connections. We use port 19050 because, the user can\nhave their own instance of Tor running already.")]),t._v(" "),s("p",[t._v("Next you can modify "),s("code",[t._v("create_blockchain()")]),t._v(" like this")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ssl://electrum.blockstream.info:60002"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("start_tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("In this example we start Tor first, then use the address returned by\n"),s("code",[t._v("start_tor()")]),t._v(" function as proxy address.")]),t._v(" "),s("p",[t._v("We omitted "),s("code",[t._v("find_string_in_log()")]),t._v(" and "),s("code",[t._v("truncate_log()")]),t._v(" for brevity. You\ncan find their implementations in "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/blob/master/examples/esplora_backend_with_tor.rs",target:"_blank",rel:"noopener noreferrer"}},[t._v("esplora_backend_with_tor.rs"),s("OutboundLink")],1)])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{408:function(t,s,a){"use strict";a.r(s);var n=a(7),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"introduction"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),s("p",[t._v("It’s easy to underestimate the importance of privacy tech for Bitcoin,\nespecially when connecting to third party services. They can learn your\nIP address and associate the transactions you sent over it. You can only\nhope that this information will not be leaked anytime in the future with\nunpredictable consequences. In order to use Bitcoin privately, you need\nto encrypt and anonymize the data you send over the Internet.")]),t._v(" "),s("p",[t._v("Tor is one of the must-have privacy preserving tools for the Internet in\ngeneral, and for Bitcoin in particular. Tor network consists of nodes that\nuse clever cryptographic methods to encrypt user data and transfer them as\nanonymously as possible.")]),t._v(" "),s("p",[t._v("In this article we show how to integrate Tor with your BDK application.")]),t._v(" "),s("h2",{attrs:{id:"prerequisite"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prerequisite"}},[t._v("#")]),t._v(" Prerequisite")]),t._v(" "),s("p",[t._v("First, you would need to have a Tor daemon up and running.")]),t._v(" "),s("p",[t._v("On Mac OS X you can install with Homebrew.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("brew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" tor\nbrew services start tor\n")])])]),s("p",[t._v("On Ubuntu or other Debian-based distributions.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" tor\n")])])]),s("p",[t._v("In some cases you'll need to wait a minute or two for the bootstrapping to finish.\nIn general, Tor is not the fastest network, so if any of the examples below fail\ndue to timeout, simply restart it.")]),t._v(" "),s("p",[t._v("At the very end of the article we’ll show how to integrate Tor directly to\nyour application.")]),t._v(" "),s("p",[t._v("By default, Tor creates a "),s("a",{attrs:{href:"https://en.wikipedia.org/wiki/SOCKS",target:"_blank",rel:"noopener noreferrer"}},[t._v("SOCKS5"),s("OutboundLink")],1),t._v(" proxy\nendpoint and listens on port 9050. Your application should connect to the\nproxy on "),s("code",[t._v("localhost:9050")]),t._v(" and use it for its network activities.")]),t._v(" "),s("h2",{attrs:{id:"setting-up"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up"}},[t._v("#")]),t._v(" Setting Up")]),t._v(" "),s("p",[t._v("Create a new cargo project.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mkdir")]),t._v(" ~/tutorial\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" tutorial\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("cargo")]),t._v(" new bdk-tor\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" bdk-tor\n")])])]),s("p",[t._v("Open "),s("code",[t._v("src/main.rs")]),t._v(" file remove all its contents and add these lines.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("FromStr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedPrivKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("bitcoin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("database"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bip84")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeychainKind")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SyncOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add additional imports here")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("main")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" network "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Testnet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xpriv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" xpriv "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bip32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedPrivKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" blockchain "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" wallet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Syncing the wallet..."')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n wallet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sync")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SyncOptions")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"The wallet synced. Height: {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_height")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ExtendedPrivKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryDatabase")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Wallet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bip84")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeychainKind")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("External")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Bip84")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("xpriv"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("KeychainKind")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Internal")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("network"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MemoryDatabase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("In this code we create a testnet wallet with "),s("code",[t._v("create_wallet()")]),t._v(" function and\ntry to sync it with a specific blockchain client implementation. We create a\nblockchain client using "),s("code",[t._v("create_blockchain()")]),t._v(" function. We’ll implement it\nlater for each type of blockchain client supported by BDK.")]),t._v(" "),s("h2",{attrs:{id:"electrumblockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#electrumblockchain"}},[t._v("#")]),t._v(" ElectrumBlockchain")]),t._v(" "),s("p",[t._v("The Electrum client is enabled by default so the "),s("code",[t._v("Cargo.toml")]),t._v(" dependencies\nsection will look like this.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("And the imports look like this.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("electrum_client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Socks5Config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Here is the implementation of "),s("code",[t._v("create_blockchain()")]),t._v(" function for the\nElectrum client.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ssl://electrum.blockstream.info:60002"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigBuilder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("socks5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Socks5Config")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_string")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n credentials"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" client "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Client")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("client"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("In this example we create an instance of "),s("code",[t._v("Socks5Config")]),t._v(" which defines the\nTor proxy parameters for "),s("code",[t._v("ElectrumBlockchain")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"blocking-esplorablockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#blocking-esplorablockchain"}},[t._v("#")]),t._v(" Blocking EsploraBlockchain")]),t._v(" "),s("p",[t._v("The blocking version of "),s("code",[t._v("EsploraBlockchain")]),t._v(" uses "),s("code",[t._v("ureq")]),t._v(" crate to send HTTP\nrequests to Eslora backends. By default, its SOCKS5 feature is disabled,\nso we need to enable it in "),s("code",[t._v("Cargo.toml")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"use-esplora-blocking"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The imports are")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("esplora"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("And "),s("code",[t._v("create_blockchain()")]),t._v(" implementation is")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/testnet/api"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socks5://127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n base_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n proxy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n concurrency"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n stop_gap"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timeout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("120")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Here we use "),s("code",[t._v("proxy()")]),t._v(" method of the config builder to set the Tor proxy\naddress. Please note, that unlike the previous examples, the Esplora client\nbuilder requires not just a proxy address, but a URL\n“socks5://127.0.0.1:9050”.")]),t._v(" "),s("h2",{attrs:{id:"asynchronous-esplorablockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#asynchronous-esplorablockchain"}},[t._v("#")]),t._v(" Asynchronous EsploraBlockchain")]),t._v(" "),s("p",[t._v("There’s no need in enabling SOCKS5 for the asynchronous Esplora client,\nso we are good to go without additional dependencies.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"use-esplora-async"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("The imports are the same as in previous example.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("esplora"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConfigurableBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("code",[t._v("create_blockchain()")]),t._v(" is almost identical.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/testnet/api"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"socks5h://127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchainConfig")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n base_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n proxy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socks_url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n concurrency"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n stop_gap"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n timeout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("120")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EsploraBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_config")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("There are two notable differences though. First, we call "),s("code",[t._v("build_async()")]),t._v(" to\ncreate an asynchronous Esplora client. Second the SOCKS5 URL scheme is\n“socks5h”. It’s not a typo. The async client supports two SOCKS5 schemes\n“socks5” and “socks5h”. The difference between them is that the former\nmakes the client to resolve domain names, and the latter does not, so the\nclient passes them to the proxy as is. A regular DNS resolver cannot\nresolve Tor onion addresses, so we should use “socks5h” here.")]),t._v(" "),s("h2",{attrs:{id:"compactfiltersblockchain"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#compactfiltersblockchain"}},[t._v("#")]),t._v(" CompactFiltersBlockchain")]),t._v(" "),s("p",[t._v("Add these lines to the dependencies section of "),s("code",[t._v("Cargo.toml")]),t._v(" file to enable\nBIP-157/BIP-158 compact filter support.")]),t._v(" "),s("p",[t._v("It can take a while to sync a wallet using compact filters over Tor, so be\npatient.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("default-features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("features")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"compact_filters"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Now add the required imports into "),s("code",[t._v("src/main.rs")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("sync"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("compact_filters"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mempool")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Peer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("bdk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("blockchain"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CompactFiltersBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GetHeight")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("code",[t._v("create_blockchain()")]),t._v(" function will look like this.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CompactFiltersBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" peer_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"neutrino.testnet3.suredbits.com:18333"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:9050"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" mempool "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Mempool")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Connecting to {} via {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" peer_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" peer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Peer")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("connect_proxy")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("peer_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socks_addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" mempool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Network")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Testnet")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CompactFiltersBlockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("vec!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("peer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"./wallet-filters"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Some")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("500_000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("unwrap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Here we use "),s("code",[t._v("Peer::connect_proxy()")]),t._v(" which accepts the address to the SOCKS5\nproxy and performs all the heavy lifting for us.")]),t._v(" "),s("h2",{attrs:{id:"integrated-tor-daemon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#integrated-tor-daemon"}},[t._v("#")]),t._v(" Integrated Tor daemon")]),t._v(" "),s("p",[t._v("As an application developer you don’t have to rely on your users to install\nand start Tor to use your application. Using "),s("code",[t._v("libtor")]),t._v(" crate you can bundle\nTor daemon with your app.")]),t._v(" "),s("p",[s("code",[t._v("libtor")]),t._v(" builds a Tor binary from the source files. Since Tor is written in C\nyou'll need a C compiler and build tools.")]),t._v(" "),s("p",[t._v("Install these packages on Mac OS X:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("xcode-select "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--install")]),t._v("\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" autoconf\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" automake\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" libtool\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" openssl\nbrew "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" pkg-config\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("export")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("LDFLAGS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-L/opt/homebrew/opt/openssl/lib"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("export")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CPPFLAGS")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"-I/opt/homebrew/opt/openssl/include"')]),t._v("\n")])])]),s("p",[t._v("Or these packages on Ubuntu or another Debian-based Linux distribution:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" autoconf automake clang "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" libtool openssl pkg-config\n")])])]),s("p",[t._v("Then add these dependencies to the "),s("code",[t._v("Cargo.toml")]),t._v(" file.")]),t._v(" "),s("div",{staticClass:"language-toml extra-class"},[s("pre",{pre:!0,attrs:{class:"language-toml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token table class-name"}},[t._v("dependencies")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("bdk")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("version")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"^0.26"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token key property"}},[t._v("libtor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"47.8.0+0.4.7.x"')]),t._v("\n")])])]),s("p",[t._v("This is an example of how we can use "),s("code",[t._v("libtor")]),t._v(" to start a Tor daemon.")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("fs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("prelude"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("thread"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),t._v("time"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Duration")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("libtor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogDestination")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("libtor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogLevel")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("libtor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HiddenServiceVersion")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorAddress")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("std"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),t._v("env"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pub")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("start_tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_port "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("19050")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" data_dir "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("format!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{}/{}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("env"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("temp_dir")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("display")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"bdk-tor"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" log_file_name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("format!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{}/{}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("data_dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"log"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Staring Tor in {}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("data_dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("truncate_log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("log_file_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataDirectory")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data_dir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogTo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogLevel")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Notice")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LogDestination")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("File")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("log_file_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("as_str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SocksPort")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("socks_port"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Custom")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ExitPolicy reject *:*"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("flag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TorFlag")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Custom")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"BridgeRelay 0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("start_background")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" started "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("mut")]),t._v(" tries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("started "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n tries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" tries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("120")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("panic!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"It took too long to start Tor. See {} for details"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("log_file_name\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("thread"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sleep")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Duration")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_millis")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n started "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find_string_in_log")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("log_file_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bootstrapped 100%"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("println!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Tor started"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token macro property"}},[t._v("format!")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1:{}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" socks_port"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("First, we create a Tor object, and then we call "),s("code",[t._v("start_background()")]),t._v(" method\nto start it in the background. After that, we continuously try to find\n“Bootstrapped 100%” string in the log file. Once we find it, Tor is\nready to proxy our connections. We use port 19050 because, the user can\nhave their own instance of Tor running already.")]),t._v(" "),s("p",[t._v("Next you can modify "),s("code",[t._v("create_blockchain()")]),t._v(" like this")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("create_blockchain")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ElectrumBlockchain")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ssl://electrum.blockstream.info:60002"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" socks_addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("start_tor")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("In this example we start Tor first, then use the address returned by\n"),s("code",[t._v("start_tor()")]),t._v(" function as proxy address.")]),t._v(" "),s("p",[t._v("We omitted "),s("code",[t._v("find_string_in_log()")]),t._v(" and "),s("code",[t._v("truncate_log()")]),t._v(" for brevity. You\ncan find their implementations in "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/blob/master/examples/esplora_backend_with_tor.rs",target:"_blank",rel:"noopener noreferrer"}},[t._v("esplora_backend_with_tor.rs"),s("OutboundLink")],1)])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/54.ee839839.js b/assets/js/54.56b55248.js similarity index 99% rename from assets/js/54.ee839839.js rename to assets/js/54.56b55248.js index bca1494bff..b6a4d44891 100644 --- a/assets/js/54.ee839839.js +++ b/assets/js/54.56b55248.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{408:function(e,t,i){"use strict";i.r(t);var r=i(7),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[t("strong",[e._v("tldr;")]),e._v(" "),t("em",[e._v("we can't produce and maintain bindings for all Rust crates we get requests for, but we are working to help others build their own bindings by (1) making our architecture composable and reusable, and (2) building strong examples and documentation on how to do it for other crates.")])]),e._v(" "),t("br"),e._v(" "),t("p",[e._v("Over the past 2 years, the Bitcoin Development Kit team has been successful at building and releasing language bindings for our Rust library. In particular, over the past 18 months we have locked in and solidified our approach for the iOS, Android, Kotlin, Java, and Python bindings by using a Rust library called "),t("a",{attrs:{href:"https://github.com/mozilla/uniffi-rs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Uniffi"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Over the course of the year, we've had many requests to add to the bindings certain features that are not directly in the Rust BDK library. These request mainly break down into two groups:")]),e._v(" "),t("ol",[t("li",[e._v('Features that are part of crates "upstream" of BDK (rust-bitcoin, rust-miniscript)')]),e._v(" "),t("li",[e._v("Features that are not but that have Rust crates and would be useful on mobile (payjoin, coinjoin implementations, silent payments, BIP-47)")])]),e._v(" "),t("h2",{attrs:{id:"current-architecture"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#current-architecture"}},[e._v("#")]),e._v(" Current architecture")]),e._v(" "),t("p",[e._v("The current architecture for the BDK bindings is more or less wrapping the bdk, rust-bitcoin, and rust-miniscript crates and exposing an API that allows users to leverage them similarly to how they would BDK in Rust if they were using it in a Rust project.")]),e._v(" "),t("p",[e._v('While we started with a simplified version of the Rust BDK API, over time users asked for more and more functionality, and exposing some of the underlying rust-bitcoin constructs became important. This makes sense, and indeed users of the bitcoin development kit in Rust have access to all the related APIs by simply importing rust-bitcoin and rust-miniscript, hence our desire to accommodate these use cases as well. However, this is currently done all in one "bindings" library (i.e. if you import '),t("code",[e._v("bdk-android")]),e._v(" in a project, you'll have access to an API that is mostly bdk-based, but also contains a bit of rust-bitcoin and rust-miniscript).")]),e._v(" "),t("h2",{attrs:{id:"moving-forward-building-a-family-of-libraries"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#moving-forward-building-a-family-of-libraries"}},[e._v("#")]),e._v(" Moving forward: building a family of libraries")]),e._v(" "),t("p",[e._v("At the same time, other Rust-based libraries started using the uniffi approach (a good example is "),t("a",{attrs:{href:"https://github.com/lightningdevkit/ldk-node",target:"_blank",rel:"noopener noreferrer"}},[e._v("ldk-node"),t("OutboundLink")],1),e._v(") to expose bindings. When developing and using those libraries together, it quickly became clear that much of the work was duplicated; both libraries needed access to underlying rust-bitcoin types, but they both exposed their own versions of it.")]),e._v(" "),t("p",[e._v("Over the coming months, the team is looking at extracting the rust-bitcoin part of the BDK bindings library (bdk-ffi) and publishing that library on "),t("a",{attrs:{href:"https://crates.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("crates.io"),t("OutboundLink")],1),e._v(" so as to make it available to others who wish to build Rust bindings using uniffi.")]),e._v(" "),t("h2",{attrs:{id:"why-cant-we-just-build-one-big-bdk-library-with-everything-in-it"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-cant-we-just-build-one-big-bdk-library-with-everything-in-it"}},[e._v("#")]),e._v(" Why can't we just build one big BDK library with "),t("em",[e._v("everything")]),e._v(" in it?")]),e._v(" "),t("ol",[t("li",[e._v("The short answer to this is that it would simply not be maintainable. If we rely on many underlying Rust crates, we'd need to release patches every time one of the underlying libraries patches a bug. We'd also need to keep them all in sync (what API versions work with what), and we'd be relying on work from teams that may or may not have the capacity to keep their crates up to date.")]),e._v(" "),t("li",[e._v("Scope creep. Unless we define a narrow and structured scope for the library, we will forever be handling requests for features that may or may not be feasible to accommodate.")]),e._v(" "),t("li",[e._v("Library size. Because one of our primary focus for the bindings is mobile devices, we need to make sure we don't build a library that is too big. This is a more nuanced issue, but it relates to point (2), where too large a scope would eventually produce a library that is potentially not optimal for mobile devices because it attempts to do too much all in one package.")])]),e._v(" "),t("h2",{attrs:{id:"are-you-looking-to-build-rust-bindings-yourself"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-you-looking-to-build-rust-bindings-yourself"}},[e._v("#")]),e._v(" Are you looking to build Rust bindings yourself?")]),e._v(" "),t("p",[e._v("We got your back! The Bitcoin Development Kit team intends to help others in the Rust bitcoin ecosystem build bindings if they wish to. To that effect, we maintain 3 repositories that should help you get going with bindings in no time:")]),e._v(" "),t("ol",[t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/thunderbiscuit/uniffi-bindings-template",target:"_blank",rel:"noopener noreferrer"}},[e._v("Uniffi library template"),t("OutboundLink")],1)]),e._v(". This is a repository you can fork and start adding code to produce bindings directly for iOS and Android. Included are our custom-made Gradle plugin and Swift release shell scripts, as well as information about the little build quirks you need to know about for smooth releases.")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/thunderbiscuit/uniffi-examples",target:"_blank",rel:"noopener noreferrer"}},[e._v("Uniffi examples"),t("OutboundLink")],1)]),e._v(". This repository provides boiled-down examples of APIs exposed using uniffi, with an "),t("a",{attrs:{href:"https://thunderbiscuit.github.io/uniffi-examples/",target:"_blank",rel:"noopener noreferrer"}},[e._v("accompanying documentation website"),t("OutboundLink")],1),e._v(". Functions, enums, objects, callbacks, multi-libraries, a lot of information and examples to get you started.")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/thunderbiscuit/bitcoin-frontier",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sandbox library "),t("code",[e._v("bitcoin-frontier")]),t("OutboundLink")],1)]),e._v(". This repository is meant as a sandbox to start developing and testing your own bindings. Simply fork it and start adding code! It comes with a fully working Android app you can leverage to test out whatever bindings you're building.")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{411:function(e,t,i){"use strict";i.r(t);var r=i(7),o=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[t("strong",[e._v("tldr;")]),e._v(" "),t("em",[e._v("we can't produce and maintain bindings for all Rust crates we get requests for, but we are working to help others build their own bindings by (1) making our architecture composable and reusable, and (2) building strong examples and documentation on how to do it for other crates.")])]),e._v(" "),t("br"),e._v(" "),t("p",[e._v("Over the past 2 years, the Bitcoin Development Kit team has been successful at building and releasing language bindings for our Rust library. In particular, over the past 18 months we have locked in and solidified our approach for the iOS, Android, Kotlin, Java, and Python bindings by using a Rust library called "),t("a",{attrs:{href:"https://github.com/mozilla/uniffi-rs",target:"_blank",rel:"noopener noreferrer"}},[e._v("Uniffi"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Over the course of the year, we've had many requests to add to the bindings certain features that are not directly in the Rust BDK library. These request mainly break down into two groups:")]),e._v(" "),t("ol",[t("li",[e._v('Features that are part of crates "upstream" of BDK (rust-bitcoin, rust-miniscript)')]),e._v(" "),t("li",[e._v("Features that are not but that have Rust crates and would be useful on mobile (payjoin, coinjoin implementations, silent payments, BIP-47)")])]),e._v(" "),t("h2",{attrs:{id:"current-architecture"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#current-architecture"}},[e._v("#")]),e._v(" Current architecture")]),e._v(" "),t("p",[e._v("The current architecture for the BDK bindings is more or less wrapping the bdk, rust-bitcoin, and rust-miniscript crates and exposing an API that allows users to leverage them similarly to how they would BDK in Rust if they were using it in a Rust project.")]),e._v(" "),t("p",[e._v('While we started with a simplified version of the Rust BDK API, over time users asked for more and more functionality, and exposing some of the underlying rust-bitcoin constructs became important. This makes sense, and indeed users of the bitcoin development kit in Rust have access to all the related APIs by simply importing rust-bitcoin and rust-miniscript, hence our desire to accommodate these use cases as well. However, this is currently done all in one "bindings" library (i.e. if you import '),t("code",[e._v("bdk-android")]),e._v(" in a project, you'll have access to an API that is mostly bdk-based, but also contains a bit of rust-bitcoin and rust-miniscript).")]),e._v(" "),t("h2",{attrs:{id:"moving-forward-building-a-family-of-libraries"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#moving-forward-building-a-family-of-libraries"}},[e._v("#")]),e._v(" Moving forward: building a family of libraries")]),e._v(" "),t("p",[e._v("At the same time, other Rust-based libraries started using the uniffi approach (a good example is "),t("a",{attrs:{href:"https://github.com/lightningdevkit/ldk-node",target:"_blank",rel:"noopener noreferrer"}},[e._v("ldk-node"),t("OutboundLink")],1),e._v(") to expose bindings. When developing and using those libraries together, it quickly became clear that much of the work was duplicated; both libraries needed access to underlying rust-bitcoin types, but they both exposed their own versions of it.")]),e._v(" "),t("p",[e._v("Over the coming months, the team is looking at extracting the rust-bitcoin part of the BDK bindings library (bdk-ffi) and publishing that library on "),t("a",{attrs:{href:"https://crates.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("crates.io"),t("OutboundLink")],1),e._v(" so as to make it available to others who wish to build Rust bindings using uniffi.")]),e._v(" "),t("h2",{attrs:{id:"why-cant-we-just-build-one-big-bdk-library-with-everything-in-it"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#why-cant-we-just-build-one-big-bdk-library-with-everything-in-it"}},[e._v("#")]),e._v(" Why can't we just build one big BDK library with "),t("em",[e._v("everything")]),e._v(" in it?")]),e._v(" "),t("ol",[t("li",[e._v("The short answer to this is that it would simply not be maintainable. If we rely on many underlying Rust crates, we'd need to release patches every time one of the underlying libraries patches a bug. We'd also need to keep them all in sync (what API versions work with what), and we'd be relying on work from teams that may or may not have the capacity to keep their crates up to date.")]),e._v(" "),t("li",[e._v("Scope creep. Unless we define a narrow and structured scope for the library, we will forever be handling requests for features that may or may not be feasible to accommodate.")]),e._v(" "),t("li",[e._v("Library size. Because one of our primary focus for the bindings is mobile devices, we need to make sure we don't build a library that is too big. This is a more nuanced issue, but it relates to point (2), where too large a scope would eventually produce a library that is potentially not optimal for mobile devices because it attempts to do too much all in one package.")])]),e._v(" "),t("h2",{attrs:{id:"are-you-looking-to-build-rust-bindings-yourself"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#are-you-looking-to-build-rust-bindings-yourself"}},[e._v("#")]),e._v(" Are you looking to build Rust bindings yourself?")]),e._v(" "),t("p",[e._v("We got your back! The Bitcoin Development Kit team intends to help others in the Rust bitcoin ecosystem build bindings if they wish to. To that effect, we maintain 3 repositories that should help you get going with bindings in no time:")]),e._v(" "),t("ol",[t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/thunderbiscuit/uniffi-bindings-template",target:"_blank",rel:"noopener noreferrer"}},[e._v("Uniffi library template"),t("OutboundLink")],1)]),e._v(". This is a repository you can fork and start adding code to produce bindings directly for iOS and Android. Included are our custom-made Gradle plugin and Swift release shell scripts, as well as information about the little build quirks you need to know about for smooth releases.")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/thunderbiscuit/uniffi-examples",target:"_blank",rel:"noopener noreferrer"}},[e._v("Uniffi examples"),t("OutboundLink")],1)]),e._v(". This repository provides boiled-down examples of APIs exposed using uniffi, with an "),t("a",{attrs:{href:"https://thunderbiscuit.github.io/uniffi-examples/",target:"_blank",rel:"noopener noreferrer"}},[e._v("accompanying documentation website"),t("OutboundLink")],1),e._v(". Functions, enums, objects, callbacks, multi-libraries, a lot of information and examples to get you started.")]),e._v(" "),t("li",[t("strong",[t("a",{attrs:{href:"https://github.com/thunderbiscuit/bitcoin-frontier",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sandbox library "),t("code",[e._v("bitcoin-frontier")]),t("OutboundLink")],1)]),e._v(". This repository is meant as a sandbox to start developing and testing your own bindings. Simply fork it and start adding code! It comes with a fully working Android app you can leverage to test out whatever bindings you're building.")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/55.faeb684f.js b/assets/js/55.28fec600.js similarity index 99% rename from assets/js/55.faeb684f.js rename to assets/js/55.28fec600.js index 54cdd5cabd..f6f6f77d83 100644 --- a/assets/js/55.faeb684f.js +++ b/assets/js/55.28fec600.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{410:function(a,e,t){"use strict";t.r(e);var s=t(7),r=Object(s.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h2",{attrs:{id:"introduction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[a._v("#")]),a._v(" Introduction")]),a._v(" "),e("h3",{attrs:{id:"compact-filters"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compact-filters"}},[a._v("#")]),a._v(" Compact Filters:")]),a._v(" "),e("p",[a._v("Compact filters are the latest specification of Bitcoin SPV node implementation as per "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP157"),e("OutboundLink")],1),a._v(" and "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP158"),e("OutboundLink")],1),a._v(". Such light clients were envisioned by Satoshi himself in his original white paper, but due to lack of robust privacy and trust guarantees using conventional "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("bloomfilters"),e("OutboundLink")],1),a._v(", these type of nodes never got popular.")]),a._v(" "),e("p",[a._v("Enters "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP157"),e("OutboundLink")],1),a._v(", which described a new type of filters for Bitcoin Blockchain data, known as "),e("code",[a._v("compact_filters")]),a._v(". The "),e("a",{attrs:{href:"https://github.com/lightninglabs/neutrino",target:"_blank",rel:"noopener noreferrer"}},[a._v("Neutrino"),e("OutboundLink")],1),a._v(' project pioneered the use of compact filter based light client nodes for using with Lightning Network wallets. Using compact filters, a light-node can talk to one or more full nodes, and fetch relevant information from the blockchain, with much more robust privacy and security guarantees than previously possible. Compact filter based nodes are best suitable to be used with mobile wallets, to create more trustless mobile applications on Bitcoin. Any wallet application that needs to have an "eye on the blockchain" has an use for such light clients.')]),a._v(" "),e("p",[e("code",[a._v("BIP157")]),a._v(" type filters allows to create tiny sized SPV nodes, that can fetch blockchain data and can identify inconsistency, so it can actively defend itself, while also preserving its privacy. Such nodes are most useful for Lightning Network mobile applications.")]),a._v(" "),e("p",[a._v("Example of such "),e("code",[a._v("compact_filters")]),a._v(" wallets in wild is "),e("a",{attrs:{href:"https://github.com/breez/breezmobile",target:"_blank",rel:"noopener noreferrer"}},[a._v("Breeze"),e("OutboundLink")],1),a._v(" Lightning mobile wallet.")]),a._v(" "),e("p",[a._v("Bitcoin core supports serving "),e("code",[a._v("BIP157")]),a._v(" type filters from "),e("code",[a._v("v0.21.0")]),a._v(".")]),a._v(" "),e("h3",{attrs:{id:"bdk-and-compact-filters"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-and-compact-filters"}},[a._v("#")]),a._v(" BDK and Compact filters")]),a._v(" "),e("p",[a._v("BDK is a bitcoin wallet development library that can be used to create bitcoin wallets with custom "),e("code",[a._v("Database")]),a._v(" and "),e("code",[a._v("Blockchain")]),a._v(" backends. BDK is a "),e("a",{attrs:{href:"https://bitcoindevkit.org/descriptors/",target:"_blank",rel:"noopener noreferrer"}},[a._v("descriptor"),e("OutboundLink")],1),a._v(" based wallet, i.e. the wallet keychain is described by a set of descriptors.")]),a._v(" "),e("p",[a._v("Using BDK one can instantiate wallets of various kinds as per requirement. BDK abstracts away all the heavy lifting works, and allow wallet devs to concentrate on logic that they care about, i.e. writing wallet codes. For more detailed documentation on BDK capabilities check these "),e("a",{attrs:{href:"https://bitcoindevkit.org/blog/2020/12/hello-world/",target:"_blank",rel:"noopener noreferrer"}},[a._v("blog"),e("OutboundLink")],1),a._v(", "),e("a",{attrs:{href:"https://bitcoindevkit.org/blog/2020/11/descriptors-in-the-wild/",target:"_blank",rel:"noopener noreferrer"}},[a._v("bog"),e("OutboundLink")],1),a._v(" and "),e("a",{attrs:{href:"https://docs.rs/bdk/",target:"_blank",rel:"noopener noreferrer"}},[a._v("docs"),e("OutboundLink")],1),a._v(".")]),a._v(" "),e("p",[a._v("The main three components of abstraction in BDK are")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("Database")])]),a._v(" "),e("li",[e("code",[a._v("Descriptors")])]),a._v(" "),e("li",[e("code",[a._v("Blockchain")])])]),a._v(" "),e("p",[a._v("BDK comes with default implementations of all them that developers can start with out of the box. Developers can also create their own custom implementations and plug it into BDK (thanks to rust magic of "),e("code",[a._v("Traits")]),a._v(").")]),a._v(" "),e("p",[a._v("BDK also supports "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP158"),e("OutboundLink")],1),a._v(" communication protocol, which allows creation of "),e("code",[a._v("BIP157")]),a._v(" type compact filter SPV nodes. This capability is extended to wallet with BDK's "),e("code",[a._v("Blockchain")]),a._v(" data structure. The "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/blockchain/trait.Blockchain.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("API"),e("OutboundLink")],1),a._v(" for "),e("code",[a._v("compact_filters")]),a._v(" backend is similar to any other kind of backends, so wallet devs don't need to worry about all the details. Its ok if the dev haven't even heard of "),e("code",[a._v("BIP157")]),a._v(", BDK takes care of that in background.")]),a._v(" "),e("p",[a._v("This capability can be unlocked by compiling BDK with the "),e("code",[a._v("compact_filters")]),a._v(" feature. Once enabled, BDK will be able to create wallets with the "),e("code",[a._v("compact_filters")]),a._v(" type "),e("code",[a._v("Blockchain")]),a._v(" backend. (The default backend is electrum server)")]),a._v(" "),e("h3",{attrs:{id:"bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-cli"}},[a._v("#")]),a._v(" bdk-cli")]),a._v(" "),e("p",[e("code",[a._v("bdk-cli")]),a._v(" is a lightweight "),e("a",{attrs:{href:"https://codewith.mu/en/tutorials/1.0/repl",target:"_blank",rel:"noopener noreferrer"}},[a._v("REPL"),e("OutboundLink")],1),a._v(" wrapper over the BDK library to facilitate quick and easy demonstration of BDK capabilities in command-line. Wallet devs can use this tool to quickly try out different possibilities with BDK.")]),a._v(" "),e("p",[a._v("In this tutorial, We will use "),e("code",[a._v("bdk-cli")]),a._v(" to demonstrate some basic wallet functionalities using "),e("code",[a._v("compact_filters")]),a._v(" backend.")]),a._v(" "),e("h2",{attrs:{id:"tutorial-scope"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tutorial-scope"}},[a._v("#")]),a._v(" Tutorial Scope")]),a._v(" "),e("p",[a._v("Basic wallet workflow we will cover:")]),a._v(" "),e("ul",[e("li",[a._v("create and sync a wallet,")]),a._v(" "),e("li",[a._v("receive a transaction,")]),a._v(" "),e("li",[a._v("create a transaction,")]),a._v(" "),e("li",[a._v("sign and broadcast the transaction,")]),a._v(" "),e("li",[a._v("fetch updated balance,")])]),a._v(" "),e("p",[a._v("The BDK wallet will have a "),e("code",[a._v("BIP157")]),a._v(" SPV backend (aka "),e("code",[a._v("compact_filters")]),a._v(" backend) that will connect with a Bitcoin core node serving filter data.")]),a._v(" "),e("p",[a._v("It will publish and extract transaction data through that node.")]),a._v(" "),e("p",[a._v("We will have a Bitcoin Core wallet and a BDK wallet, sending and receiving transactions between each other, in regtest.")]),a._v(" "),e("h2",{attrs:{id:"prerequisites"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[a._v("#")]),a._v(" Prerequisites")]),a._v(" "),e("p",[a._v("Following things are required to start with the tutorial.")]),a._v(" "),e("ol",[e("li",[a._v("A Bitcoin Core regtest node listening at "),e("code",[a._v("localhost:18444")]),a._v(" signalling for compact filter support.")]),a._v(" "),e("li",[e("code",[a._v("bdk-cli")]),a._v(" compiled with "),e("code",[a._v("compact_filter")]),a._v(" features.")])]),a._v(" "),e("p",[a._v("If you already have these two setup and working, you can skip this and jump to the "),e("a",{attrs:{href:"#tutorial"}},[a._v("Tutorial")]),a._v(" section.")]),a._v(" "),e("h3",{attrs:{id:"install-and-run-bitcoind"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-and-run-bitcoind"}},[a._v("#")]),a._v(" Install and run "),e("code",[a._v("bitcoind")])]),a._v(" "),e("p",[a._v("You can definitely do it with your own "),e("code",[a._v("bitcoind")]),a._v(" installation. "),e("code",[a._v("BIP157")]),a._v(" support has been included in Bitcoin Core "),e("code",[a._v("v0.21.0")]),a._v(". So anything above that will work.")]),a._v(" "),e("p",[a._v("You also need to ensure proper configuration settings for signalling "),e("code",[a._v("compact_filters")]),a._v(" support.")]),a._v(" "),e("p",[a._v("For ease of testing, the BDK project hosts docker images that can be used to spawn Bitcoin Core with all the relevant configurations.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("spawn a regtest node using "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bitcoin-regtest-box",target:"_blank",rel:"noopener noreferrer"}},[a._v("bitcoin-regtest-box"),e("OutboundLink")],1),a._v(" docker file.")]),a._v(" "),e("p",[a._v("Start the regtest box docker container.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--detach")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--rm")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1:18443-18444:18443-18444/tcp "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" bdk-box bitcoindevkit/bitcoind\n")])])]),e("p",[a._v("This will spin up a docker container running "),e("code",[a._v("bicoind")]),a._v(" and listening to port "),e("code",[a._v("18444")]),a._v(" and "),e("code",[a._v("18333")]),a._v(". You can keep this terminal alive to see communication events with BDK and the node.")])]),a._v(" "),e("li",[e("p",[a._v("Check node is reachable")]),a._v(" "),e("p",[a._v("In another terminal try connecting to the node with "),e("code",[a._v("bitcoin-cli")])]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getnetworkinfo\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"version"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("210000")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"subversion"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/Satoshi:0.21.1/"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"protocolversion"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("70016")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localservices"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0000000000000449"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localservicesnames"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"NETWORK"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"WITNESS"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"COMPACT_FILTERS"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"NETWORK_LIMITED"')]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),e("p",[a._v("In the output, the "),e("code",[a._v("version")]),a._v(" should show "),e("code",[a._v("210000")]),a._v(". "),e("code",[a._v("localservicesnames")]),a._v(" should contain "),e("code",[a._v('"COMPACT_FILTERS"')]),a._v(". If you see this, then Bitcoin Core is correctly configured.")])])]),a._v(" "),e("h3",{attrs:{id:"install-and-run-bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-and-run-bdk-cli"}},[a._v("#")]),a._v(" Install and run bdk-cli")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Install "),e("code",[a._v("bdk-cli")]),a._v(" with "),e("code",[a._v("compact_filters")]),a._v(" feature")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("cargo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--git")]),a._v(" https://github.com/bitcoindevkit/bdk-cli.git bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--features")]),a._v(" compact_filters\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Check installation")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\nUSAGE:\n bdk-cli "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("OPTIONS"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("SUBCOMMAND"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nFLAGS:\n -h, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v(" Prints "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" information\n -V, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" Prints version information\nOPTIONS:\n -n, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("NETWORK"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" Sets the network "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("default: testnet"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\nSUBCOMMANDS:\n "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" Prints this message or the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" of the given subcommand"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("s"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n key Key management sub-commands\n repl Enter REPL "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v(" loop mode\n wallet Wallet options and sub-commands\n")])])])])]),a._v(" "),e("p",[a._v("Once these are setup correctly, you can start with the tutorial next.")]),a._v(" "),e("h2",{attrs:{id:"tutorial"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tutorial"}},[a._v("#")]),a._v(" Tutorial")]),a._v(" "),e("p",[a._v("[Note: For brevity "),e("code",[a._v("bdk-cli")]),a._v(" results are stored in command line variables using "),e("code",[a._v("jq")]),a._v(" tool. It is recommended to check the full results to see different information returned by "),e("code",[a._v("bdk-cli")]),a._v(" commands.]")]),a._v(" "),e("h3",{attrs:{id:"bitcoin-core-wallet-generation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-core-wallet-generation"}},[a._v("#")]),a._v(" Bitcoin Core Wallet Generation")]),a._v(" "),e("p",[a._v("This is standard procedure with "),e("code",[a._v("bitcoin-cli")]),a._v(".")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Create a wallet and generate 101 blocks.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" createwallet "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("test")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"test"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"warning"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getnewaddress\nbcrt1qatd7yq0jukwusuaufltlejmeydpvnpv43r5gc2\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" generatetoaddress "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("101")]),a._v(" bcrt1qatd7yq0jukwusuaufltlejmeydpvnpv43r5gc2\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3813ed6eb716f4743b9657d918799acf743add985a8ded28d8aa3629dd4496b6"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"70da855913bdf791b6e458c611cebdef79b7a9840eb103ce58c71c1c7e3c49bc"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"682ca732ef72719cd6f82c5047c7690fb1cd2df2543d035ac4ea99e974b8d172"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"78799e4771017d4f46aa3c240054e2d61f54cea07ec44cb18ae712761e0aaa1e"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getbalance\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("50.00000000")]),a._v("\n")])])]),e("p",[a._v("Now the core wallet has generated new blocks and is funded with test bitcoin.")])])]),a._v(" "),e("h3",{attrs:{id:"bdk-wallet-generation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-wallet-generation"}},[a._v("#")]),a._v(" BDK Wallet Generation")]),a._v(" "),e("p",[a._v("BDK is a descriptor based wallet library. So in order to use it we will need some descriptors to work with.")]),a._v(" "),e("p",[a._v("BDK wallet will ask for two descriptors as input, corresponding to "),e("code",[a._v("receive")]),a._v(" and "),e("code",[a._v("change")]),a._v(" addresses. Its recommended to have these two descriptors separate as BDK will handle them separately and ensure "),e("code",[a._v("change")]),a._v(" addresses are never used for receiving funds.")]),a._v(" "),e("p",[a._v("Or developers can decide to use a single descriptor too, in that case BDK will use that descriptor for deriving both "),e("code",[a._v("receive")]),a._v(" and "),e("code",[a._v("change")]),a._v(" addresses.")]),a._v(" "),e("p",[a._v("We will use "),e("code",[a._v("bdk-cli")]),a._v(" itself to generate such descriptors.")]),a._v(" "),e("ul",[e("li",[e("h4",{attrs:{id:"generate-a-privatekey"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#generate-a-privatekey"}},[a._v("#")]),a._v(" Generate a privatekey")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("BDK_xprv")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli key generate "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.xprv'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n$ "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_xprv")]),a._v("\ntprv8ZgxMBicQKsPefY7tdq7EKny81n9tfSvUYfSHAZByXdjPAZVysvaB6sFd2YavqfqMBgbHaXUG5oWM6sYvdJn6vnUizzQKTYAJ36bQsfPv4N\n")])])]),e("p",[e("code",[a._v("bdk-cli key generate")]),a._v(" will generate a fresh master key with "),e("code",[a._v("mnemonic")]),a._v(" and "),e("code",[a._v("xprv")]),a._v(". We have extracted the value of extended private key and stored it in "),e("code",[a._v("BDK_xprv")]),a._v(" variable.")]),a._v(" "),e("p",[a._v("The returned "),e("code",[a._v("mnemonic")]),a._v(" can be used to restore back the wallet if wallet data directory is lost.")])]),a._v(" "),e("li",[e("h4",{attrs:{id:"generate-descriptors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#generate-descriptors"}},[a._v("#")]),a._v(" Generate Descriptors")]),a._v(" "),e("p",[e("code",[a._v("bdk-cli key derive")]),a._v(" can derive an "),e("code",[a._v("xpub")]),a._v("s given a "),e("code",[a._v("master key")]),a._v(" and "),e("code",[a._v("derivation_path")]),a._v(".")]),a._v(" "),e("p",[a._v("We will use the following paths for our "),e("code",[a._v("receive")]),a._v(" and "),e("code",[a._v("change")]),a._v(" descriptors")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("receive")]),a._v(" path: "),e("code",[a._v("m/84h/1h/0h/0")])]),a._v(" "),e("li",[e("code",[a._v("change")]),a._v(" path: "),e("code",[a._v("m/84h/1h/0h/1")]),a._v(",")])]),a._v(" "),e("p",[a._v("We can then simply wrap them in a "),e("code",[a._v('"wpkh()"')]),a._v(" to create our descriptors string and store them.")]),a._v(" "),e("p",[a._v("When asked for a new address, BDK will derive one from the "),e("code",[a._v("receive")]),a._v(" descriptor.")]),a._v(" "),e("p",[a._v("And while constructing transaction, BDK will use the "),e("code",[a._v("change")]),a._v(" descriptor to derive change address.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("BDK_recv_desc")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wpkh('),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli key derive "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--path")]),a._v(" m/84h/1h/0h/0 "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--xprv")]),a._v(" $BDK_xprv "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.xprv'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(')"')]),a._v("\n$ "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v("\nwpkh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("ff09c7c9/84"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'/1'")]),a._v("/0'/0"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("tprv8hkdEGgwLLnqsdfkJFidpTj5d6z5qFdP6Qwzsviea3HrS9C2mXXaDivPKCCgcaWvnGNX9eciLUQs91PWYXJqrChfnAagViCgG6L5phaNyWr/*"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("BDK_chng_desc")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wpkh('),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli key derive "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--path")]),a._v(" m/84h/1h/0h/1 "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--xprv")]),a._v(" $BDK_xprv "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.xprv'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(')"')]),a._v("\n$ "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v("\nwpkh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("ff09c7c9/84"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'/1'")]),a._v("/0'/1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("tprv8hkdEGgwLLnqtbYkGG7fSy7v43RF2SQGGjNuZtmBzEHh7H8xgpXBETQAbVPqi8rkvLNFKLYY4rDzXA4fn5Ha1yuazZqhQPe3uNKmFS7648s/*"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n")])])]),e("p",[a._v("Note: "),e("code",[a._v("BDK_xprv")]),a._v(" has been used as the "),e("code",[a._v("master key")]),a._v(", this will allow BDK to have signing capabilities.\nWe could have used an "),e("code",[a._v("xpub")]),a._v(" master key here instead, that would create an "),e("code",[a._v("watch-only")]),a._v(" wallet.")])]),a._v(" "),e("li",[e("h4",{attrs:{id:"create-and-sync-a-wallet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#create-and-sync-a-wallet"}},[a._v("#")]),a._v(" Create and Sync a wallet")]),a._v(" "),e("p",[a._v("We will now instruct BDK to create a new wallet with following instructions")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("ul",[e("li",[a._v("name ("),e("code",[a._v("--wallet")]),a._v(") "),e("code",[a._v("bdk-test")]),a._v(",")]),a._v(" "),e("li",[e("code",[a._v("receive")]),a._v(" descriptor ("),e("code",[a._v("-d")]),a._v(") as "),e("code",[a._v("$BDK_recv_desc")]),a._v(" and change descriptor ("),e("code",[a._v("-c")]),a._v(") as "),e("code",[a._v("$BDK_chng_desc")]),a._v(",")]),a._v(" "),e("li",[a._v("connected to a full node ("),e("code",[a._v("--node")]),a._v(") listening at "),e("code",[a._v("127.0.0.1:18444")]),a._v(",")]),a._v(" "),e("li",[a._v("and finally create and sync the wallet with the "),e("code",[a._v("sync")]),a._v(" command.")])]),a._v(" "),e("p",[a._v("If you are using a "),e("code",[a._v("regtest")]),a._v(" node, also add "),e("code",[a._v("--network regtest")]),a._v(", the default is "),e("code",[a._v("testnet")]),a._v(".")]),a._v(" "),e("p",[e("code",[a._v("bdk-cli")]),a._v(" makes multiple parallel connections that can be configured with the "),e("code",[a._v("--conn-count")]),a._v(" parameter (default is 4). This makes syncing parallel and fast. Use "),e("code",[a._v("bdk-cli --help")]),a._v(" to see all other options.")]),a._v(" "),e("p",[a._v("Getting an empty return means wallet creation succeeded.")]),a._v(" "),e("p",[a._v("BDK has created a wallet named "),e("code",[a._v("bdk-test")]),a._v(" in its data directory. Which is by default stored at "),e("code",[a._v("~/.bdk-bitcoin/compact_filters")]),a._v(" folder.")]),a._v(" "),e("p",[a._v("Looking into that folder different files and directories maintained by BDK can be seen.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("ls")]),a._v(" .bdk-bitcoin/compact_filters/\n000004.log CURRENT LOCK MANIFEST-000003 OPTIONS-000010\nbdk-test IDENTITY LOG OPTIONS-000008\n")])])])])]),a._v(" "),e("h3",{attrs:{id:"recieve-coins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#recieve-coins"}},[a._v("#")]),a._v(" Recieve Coins")]),a._v(" "),e("p",[a._v("We will use the "),e("code",[a._v("core")]),a._v(" wallet to send 5 BTC to our"),e("code",[a._v("bdk-test")]),a._v(" wallet.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Fetch a new address using "),e("code",[a._v("bdk-cli")])]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" get_new_address\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bcrt1qx2479wywulf50pqx5uy64zhxq9f3tuvlh8u0s9"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Transfer funds to the previous address and generate a block, using "),e("code",[a._v("bitcoin-cli")])]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" sendtoaddress bcrt1qx2479wywulf50pqx5uy64zhxq9f3tuvlh8u0s9 "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),a._v("\n\n\n$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" generatetoaddress "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" bcrt1qw3ht9xtc9pgyvmqay0ap9fw8mxd27az8el0uz3\n")])])]),e("p",[e("code",[a._v("core")]),a._v(" has sent 5 BTC to our "),e("code",[a._v("bdk-test")]),a._v(" wallet. Which is confirmed in a new block.")]),a._v(" "),e("p",[e("code",[a._v("bdk-test")]),a._v(" can see that now by syncing again.")]),a._v(" "),e("p",[a._v("(Note: BDK required explicit "),e("code",[a._v("sync()")]),a._v(" calls to give wallet developers flexibility on when to sync).")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" get_balance\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"satoshi"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("500000000")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("We can see "),e("code",[a._v("500000000")]),a._v(" sats balance in our "),e("code",[a._v("bdk-test")]),a._v(" wallet.")]),a._v(" "),e("p",[a._v("BDK has fetched blockchain details concerning its wallet descriptors, from the core node, using compact filters.")])])]),a._v(" "),e("h3",{attrs:{id:"creating-a-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-transaction"}},[a._v("#")]),a._v(" Creating a transaction.")]),a._v(" "),e("p",[a._v("Now we want to create a transaction sending coins from "),e("code",[a._v("bdk-test")]),a._v(" wallet to the "),e("code",[a._v("core")]),a._v(" wallet.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("fetch a new "),e("code",[a._v("core")]),a._v(" address")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("core_addrs")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getnewaddress "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("tr")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\\r'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Create a raw transaction using "),e("code",[a._v("bdk-cli")]),a._v(" to the above address. This will generate a "),e("code",[a._v("psbt")]),a._v(" which we will sign.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("psbt")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" $BDK_recv_desc "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" $BDK_chng_desc create_tx "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--to")]),a._v(" $core_addrs:200000000 "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.psbt'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])]),e("p",[a._v("(Recommended to check all the other information returned by "),e("code",[a._v("bdk-cli create_tx")]),a._v(")")])])]),a._v(" "),e("h3",{attrs:{id:"sign-and-broadcast-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sign-and-broadcast-the-transaction"}},[a._v("#")]),a._v(" Sign and Broadcast the transaction")]),a._v(" "),e("p",[a._v("Asking BDK to sign a transaction is as straight forward as it can get. BDK already holds the "),e("code",[a._v("xprv")]),a._v(" deatils to sign a transaction. It returns a finalised "),e("code",[a._v("signed_psbt")]),a._v(" which we will next broadcast to the network.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Sign the transaction")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("signed_psbt")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" $BDK_recv_desc "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" $BDK_chng_desc sign "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--psbt")]),a._v(" $psbt "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.psbt'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Broadcast the transaction")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" broadcast "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--psbt")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$signed_psbt")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c343f5b25372e285308eba912d1fe8fade9f64afde6d95306e248e52e0852252"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("This makes BDK broadcast the transaction via the connected core node, and it returns the corresponding Txid.")])])]),a._v(" "),e("h3",{attrs:{id:"confirming-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#confirming-the-transaction"}},[a._v("#")]),a._v(" Confirming the Transaction")]),a._v(" "),e("p",[a._v("The transaction has been received by the "),e("code",[a._v("core")]),a._v(" node and waiting in its mempool for inclusion in block.\nWe can see the transaction via its "),e("code",[a._v("txid")]),a._v(" received in previous step.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Check transaction in mempool")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" gettransaction c343f5b25372e285308eba912d1fe8fade9f64afde6d95306e2248e52e0852252\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"amount"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.00000000")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"confirmations"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"trusted"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" false,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c343f5b25372e285308eba912d1fe8fade9f64afde6d95306e248e52e0852252"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"walletconflicts"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"time"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1621697202")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"timereceived"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1621697202")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bip125-replaceable"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"no"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"details"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bcrt1q3h4hs6mve5dcl7da3d4acmlp20hh8c3t4mldwe"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"category"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"receive"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"amount"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.00000000")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"label"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"vout"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"hex"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01000000000101d84e8cb7477f9fe6f265b56d5416ff47da9a70be18f65ec50731b8257c67f2bd0100000000ffffffff0273a2e11100000000160014874270187001febc4cebd8cb083cf2c783e8f1ac00c2eb0b000000001600148deb786b6ccd1b8ff9bd8b6bdc6fe153ef73e22b0247304402201037d9ef5b80392296311c8899b1f12a0987778d694a442a88bafa6fbd7a7c9a022011293176255897444d9c71b0b9cd13b2aedb749b142577566c90a63d61025e2c01210202427d16b29c1c8546255363a74326ee9ab3196770bb3fccc7b679d52f9c1ccf00000000"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("This means, core has recieved the transaction in its mempool and waiting for confirmation.")])]),a._v(" "),e("li",[e("p",[a._v("Generate 1 block to confirm the transaction")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" generatetoaddress "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" bcrt1qatd7yq0jukwusuaufltlejmeydpvnpv43r5gc2\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"55436ff0169bbb3e70ab10cb7cdd45ab86204d5d7864a109142d91120d023197"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Sync the "),e("code",[a._v("bdk-test")]),a._v(" wallet and ask for available balance.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v(" $ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n $ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" get_balance\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n \t"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"satoshi"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("299999859")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("If you see the balance updated, voila!")]),a._v(" "),e("p",[a._v("What happened here is:")]),a._v(" "),e("ul",[e("li",[a._v("core created a new block containing the transaction.")]),a._v(" "),e("li",[e("code",[a._v("bdk-cli")]),a._v(" fetched the corresponding filter data.")]),a._v(" "),e("li",[a._v("It noticed it got a concerning transaction.")]),a._v(" "),e("li",[a._v("It asked for the details of that transaction from the core node.")]),a._v(" "),e("li",[a._v("It updated its wallet details with this new information.")]),a._v(" "),e("li",[a._v("The update is reflected in the wallet balance.")])])])]),a._v(" "),e("h3",{attrs:{id:"shutdown-docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#shutdown-docker"}},[a._v("#")]),a._v(" Shutdown Docker")]),a._v(" "),e("p",[a._v("You may now shutdown the regtest docker container.")]),a._v(" "),e("p",[a._v("Note: This will also clean up any data in the bitcoin core, including the wallet.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("kill")]),a._v(" bdk-box\n")])])]),e("h2",{attrs:{id:"end-words"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#end-words"}},[a._v("#")]),a._v(" End Words")]),a._v(" "),e("p",[a._v("In this tutorial we went through the process of receiving, creating, signing and broadcasting transaction using the BDK wallet with "),e("code",[a._v("compact_filters")]),a._v(" feature. This demonstrates how BDK capabilities can be used to create SPV light wallets with integrated "),e("code",[a._v("BIP157")]),a._v(" type "),e("code",[a._v("compact_filters")]),a._v(" node.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{409:function(a,e,t){"use strict";t.r(e);var s=t(7),r=Object(s.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h2",{attrs:{id:"introduction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[a._v("#")]),a._v(" Introduction")]),a._v(" "),e("h3",{attrs:{id:"compact-filters"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#compact-filters"}},[a._v("#")]),a._v(" Compact Filters:")]),a._v(" "),e("p",[a._v("Compact filters are the latest specification of Bitcoin SPV node implementation as per "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP157"),e("OutboundLink")],1),a._v(" and "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP158"),e("OutboundLink")],1),a._v(". Such light clients were envisioned by Satoshi himself in his original white paper, but due to lack of robust privacy and trust guarantees using conventional "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("bloomfilters"),e("OutboundLink")],1),a._v(", these type of nodes never got popular.")]),a._v(" "),e("p",[a._v("Enters "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP157"),e("OutboundLink")],1),a._v(", which described a new type of filters for Bitcoin Blockchain data, known as "),e("code",[a._v("compact_filters")]),a._v(". The "),e("a",{attrs:{href:"https://github.com/lightninglabs/neutrino",target:"_blank",rel:"noopener noreferrer"}},[a._v("Neutrino"),e("OutboundLink")],1),a._v(' project pioneered the use of compact filter based light client nodes for using with Lightning Network wallets. Using compact filters, a light-node can talk to one or more full nodes, and fetch relevant information from the blockchain, with much more robust privacy and security guarantees than previously possible. Compact filter based nodes are best suitable to be used with mobile wallets, to create more trustless mobile applications on Bitcoin. Any wallet application that needs to have an "eye on the blockchain" has an use for such light clients.')]),a._v(" "),e("p",[e("code",[a._v("BIP157")]),a._v(" type filters allows to create tiny sized SPV nodes, that can fetch blockchain data and can identify inconsistency, so it can actively defend itself, while also preserving its privacy. Such nodes are most useful for Lightning Network mobile applications.")]),a._v(" "),e("p",[a._v("Example of such "),e("code",[a._v("compact_filters")]),a._v(" wallets in wild is "),e("a",{attrs:{href:"https://github.com/breez/breezmobile",target:"_blank",rel:"noopener noreferrer"}},[a._v("Breeze"),e("OutboundLink")],1),a._v(" Lightning mobile wallet.")]),a._v(" "),e("p",[a._v("Bitcoin core supports serving "),e("code",[a._v("BIP157")]),a._v(" type filters from "),e("code",[a._v("v0.21.0")]),a._v(".")]),a._v(" "),e("h3",{attrs:{id:"bdk-and-compact-filters"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-and-compact-filters"}},[a._v("#")]),a._v(" BDK and Compact filters")]),a._v(" "),e("p",[a._v("BDK is a bitcoin wallet development library that can be used to create bitcoin wallets with custom "),e("code",[a._v("Database")]),a._v(" and "),e("code",[a._v("Blockchain")]),a._v(" backends. BDK is a "),e("a",{attrs:{href:"https://bitcoindevkit.org/descriptors/",target:"_blank",rel:"noopener noreferrer"}},[a._v("descriptor"),e("OutboundLink")],1),a._v(" based wallet, i.e. the wallet keychain is described by a set of descriptors.")]),a._v(" "),e("p",[a._v("Using BDK one can instantiate wallets of various kinds as per requirement. BDK abstracts away all the heavy lifting works, and allow wallet devs to concentrate on logic that they care about, i.e. writing wallet codes. For more detailed documentation on BDK capabilities check these "),e("a",{attrs:{href:"https://bitcoindevkit.org/blog/2020/12/hello-world/",target:"_blank",rel:"noopener noreferrer"}},[a._v("blog"),e("OutboundLink")],1),a._v(", "),e("a",{attrs:{href:"https://bitcoindevkit.org/blog/2020/11/descriptors-in-the-wild/",target:"_blank",rel:"noopener noreferrer"}},[a._v("bog"),e("OutboundLink")],1),a._v(" and "),e("a",{attrs:{href:"https://docs.rs/bdk/",target:"_blank",rel:"noopener noreferrer"}},[a._v("docs"),e("OutboundLink")],1),a._v(".")]),a._v(" "),e("p",[a._v("The main three components of abstraction in BDK are")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("Database")])]),a._v(" "),e("li",[e("code",[a._v("Descriptors")])]),a._v(" "),e("li",[e("code",[a._v("Blockchain")])])]),a._v(" "),e("p",[a._v("BDK comes with default implementations of all them that developers can start with out of the box. Developers can also create their own custom implementations and plug it into BDK (thanks to rust magic of "),e("code",[a._v("Traits")]),a._v(").")]),a._v(" "),e("p",[a._v("BDK also supports "),e("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[a._v("BIP158"),e("OutboundLink")],1),a._v(" communication protocol, which allows creation of "),e("code",[a._v("BIP157")]),a._v(" type compact filter SPV nodes. This capability is extended to wallet with BDK's "),e("code",[a._v("Blockchain")]),a._v(" data structure. The "),e("a",{attrs:{href:"https://docs.rs/bdk/latest/bdk/blockchain/trait.Blockchain.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("API"),e("OutboundLink")],1),a._v(" for "),e("code",[a._v("compact_filters")]),a._v(" backend is similar to any other kind of backends, so wallet devs don't need to worry about all the details. Its ok if the dev haven't even heard of "),e("code",[a._v("BIP157")]),a._v(", BDK takes care of that in background.")]),a._v(" "),e("p",[a._v("This capability can be unlocked by compiling BDK with the "),e("code",[a._v("compact_filters")]),a._v(" feature. Once enabled, BDK will be able to create wallets with the "),e("code",[a._v("compact_filters")]),a._v(" type "),e("code",[a._v("Blockchain")]),a._v(" backend. (The default backend is electrum server)")]),a._v(" "),e("h3",{attrs:{id:"bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-cli"}},[a._v("#")]),a._v(" bdk-cli")]),a._v(" "),e("p",[e("code",[a._v("bdk-cli")]),a._v(" is a lightweight "),e("a",{attrs:{href:"https://codewith.mu/en/tutorials/1.0/repl",target:"_blank",rel:"noopener noreferrer"}},[a._v("REPL"),e("OutboundLink")],1),a._v(" wrapper over the BDK library to facilitate quick and easy demonstration of BDK capabilities in command-line. Wallet devs can use this tool to quickly try out different possibilities with BDK.")]),a._v(" "),e("p",[a._v("In this tutorial, We will use "),e("code",[a._v("bdk-cli")]),a._v(" to demonstrate some basic wallet functionalities using "),e("code",[a._v("compact_filters")]),a._v(" backend.")]),a._v(" "),e("h2",{attrs:{id:"tutorial-scope"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tutorial-scope"}},[a._v("#")]),a._v(" Tutorial Scope")]),a._v(" "),e("p",[a._v("Basic wallet workflow we will cover:")]),a._v(" "),e("ul",[e("li",[a._v("create and sync a wallet,")]),a._v(" "),e("li",[a._v("receive a transaction,")]),a._v(" "),e("li",[a._v("create a transaction,")]),a._v(" "),e("li",[a._v("sign and broadcast the transaction,")]),a._v(" "),e("li",[a._v("fetch updated balance,")])]),a._v(" "),e("p",[a._v("The BDK wallet will have a "),e("code",[a._v("BIP157")]),a._v(" SPV backend (aka "),e("code",[a._v("compact_filters")]),a._v(" backend) that will connect with a Bitcoin core node serving filter data.")]),a._v(" "),e("p",[a._v("It will publish and extract transaction data through that node.")]),a._v(" "),e("p",[a._v("We will have a Bitcoin Core wallet and a BDK wallet, sending and receiving transactions between each other, in regtest.")]),a._v(" "),e("h2",{attrs:{id:"prerequisites"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[a._v("#")]),a._v(" Prerequisites")]),a._v(" "),e("p",[a._v("Following things are required to start with the tutorial.")]),a._v(" "),e("ol",[e("li",[a._v("A Bitcoin Core regtest node listening at "),e("code",[a._v("localhost:18444")]),a._v(" signalling for compact filter support.")]),a._v(" "),e("li",[e("code",[a._v("bdk-cli")]),a._v(" compiled with "),e("code",[a._v("compact_filter")]),a._v(" features.")])]),a._v(" "),e("p",[a._v("If you already have these two setup and working, you can skip this and jump to the "),e("a",{attrs:{href:"#tutorial"}},[a._v("Tutorial")]),a._v(" section.")]),a._v(" "),e("h3",{attrs:{id:"install-and-run-bitcoind"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-and-run-bitcoind"}},[a._v("#")]),a._v(" Install and run "),e("code",[a._v("bitcoind")])]),a._v(" "),e("p",[a._v("You can definitely do it with your own "),e("code",[a._v("bitcoind")]),a._v(" installation. "),e("code",[a._v("BIP157")]),a._v(" support has been included in Bitcoin Core "),e("code",[a._v("v0.21.0")]),a._v(". So anything above that will work.")]),a._v(" "),e("p",[a._v("You also need to ensure proper configuration settings for signalling "),e("code",[a._v("compact_filters")]),a._v(" support.")]),a._v(" "),e("p",[a._v("For ease of testing, the BDK project hosts docker images that can be used to spawn Bitcoin Core with all the relevant configurations.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("spawn a regtest node using "),e("a",{attrs:{href:"https://github.com/bitcoindevkit/bitcoin-regtest-box",target:"_blank",rel:"noopener noreferrer"}},[a._v("bitcoin-regtest-box"),e("OutboundLink")],1),a._v(" docker file.")]),a._v(" "),e("p",[a._v("Start the regtest box docker container.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--detach")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--rm")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-p")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("127.0")]),a._v(".0.1:18443-18444:18443-18444/tcp "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" bdk-box bitcoindevkit/bitcoind\n")])])]),e("p",[a._v("This will spin up a docker container running "),e("code",[a._v("bicoind")]),a._v(" and listening to port "),e("code",[a._v("18444")]),a._v(" and "),e("code",[a._v("18333")]),a._v(". You can keep this terminal alive to see communication events with BDK and the node.")])]),a._v(" "),e("li",[e("p",[a._v("Check node is reachable")]),a._v(" "),e("p",[a._v("In another terminal try connecting to the node with "),e("code",[a._v("bitcoin-cli")])]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getnetworkinfo\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"version"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("210000")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"subversion"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/Satoshi:0.21.1/"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"protocolversion"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("70016")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localservices"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"0000000000000449"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"localservicesnames"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"NETWORK"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"WITNESS"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"COMPACT_FILTERS"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"NETWORK_LIMITED"')]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),e("p",[a._v("In the output, the "),e("code",[a._v("version")]),a._v(" should show "),e("code",[a._v("210000")]),a._v(". "),e("code",[a._v("localservicesnames")]),a._v(" should contain "),e("code",[a._v('"COMPACT_FILTERS"')]),a._v(". If you see this, then Bitcoin Core is correctly configured.")])])]),a._v(" "),e("h3",{attrs:{id:"install-and-run-bdk-cli"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-and-run-bdk-cli"}},[a._v("#")]),a._v(" Install and run bdk-cli")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Install "),e("code",[a._v("bdk-cli")]),a._v(" with "),e("code",[a._v("compact_filters")]),a._v(" feature")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("cargo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--git")]),a._v(" https://github.com/bitcoindevkit/bdk-cli.git bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--features")]),a._v(" compact_filters\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Check installation")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\nUSAGE:\n bdk-cli "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("OPTIONS"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("SUBCOMMAND"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\nFLAGS:\n -h, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v(" Prints "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" information\n -V, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" Prints version information\nOPTIONS:\n -n, "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("NETWORK"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" Sets the network "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("default: testnet"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n\nSUBCOMMANDS:\n "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" Prints this message or the "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" of the given subcommand"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),a._v("s"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n key Key management sub-commands\n repl Enter REPL "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("command")]),a._v(" loop mode\n wallet Wallet options and sub-commands\n")])])])])]),a._v(" "),e("p",[a._v("Once these are setup correctly, you can start with the tutorial next.")]),a._v(" "),e("h2",{attrs:{id:"tutorial"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#tutorial"}},[a._v("#")]),a._v(" Tutorial")]),a._v(" "),e("p",[a._v("[Note: For brevity "),e("code",[a._v("bdk-cli")]),a._v(" results are stored in command line variables using "),e("code",[a._v("jq")]),a._v(" tool. It is recommended to check the full results to see different information returned by "),e("code",[a._v("bdk-cli")]),a._v(" commands.]")]),a._v(" "),e("h3",{attrs:{id:"bitcoin-core-wallet-generation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bitcoin-core-wallet-generation"}},[a._v("#")]),a._v(" Bitcoin Core Wallet Generation")]),a._v(" "),e("p",[a._v("This is standard procedure with "),e("code",[a._v("bitcoin-cli")]),a._v(".")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Create a wallet and generate 101 blocks.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" createwallet "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("test")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"name"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"test"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"warning"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getnewaddress\nbcrt1qatd7yq0jukwusuaufltlejmeydpvnpv43r5gc2\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" generatetoaddress "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("101")]),a._v(" bcrt1qatd7yq0jukwusuaufltlejmeydpvnpv43r5gc2\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"3813ed6eb716f4743b9657d918799acf743add985a8ded28d8aa3629dd4496b6"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"70da855913bdf791b6e458c611cebdef79b7a9840eb103ce58c71c1c7e3c49bc"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"682ca732ef72719cd6f82c5047c7690fb1cd2df2543d035ac4ea99e974b8d172"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"78799e4771017d4f46aa3c240054e2d61f54cea07ec44cb18ae712761e0aaa1e"')]),a._v(",\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getbalance\n"),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("50.00000000")]),a._v("\n")])])]),e("p",[a._v("Now the core wallet has generated new blocks and is funded with test bitcoin.")])])]),a._v(" "),e("h3",{attrs:{id:"bdk-wallet-generation"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bdk-wallet-generation"}},[a._v("#")]),a._v(" BDK Wallet Generation")]),a._v(" "),e("p",[a._v("BDK is a descriptor based wallet library. So in order to use it we will need some descriptors to work with.")]),a._v(" "),e("p",[a._v("BDK wallet will ask for two descriptors as input, corresponding to "),e("code",[a._v("receive")]),a._v(" and "),e("code",[a._v("change")]),a._v(" addresses. Its recommended to have these two descriptors separate as BDK will handle them separately and ensure "),e("code",[a._v("change")]),a._v(" addresses are never used for receiving funds.")]),a._v(" "),e("p",[a._v("Or developers can decide to use a single descriptor too, in that case BDK will use that descriptor for deriving both "),e("code",[a._v("receive")]),a._v(" and "),e("code",[a._v("change")]),a._v(" addresses.")]),a._v(" "),e("p",[a._v("We will use "),e("code",[a._v("bdk-cli")]),a._v(" itself to generate such descriptors.")]),a._v(" "),e("ul",[e("li",[e("h4",{attrs:{id:"generate-a-privatekey"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#generate-a-privatekey"}},[a._v("#")]),a._v(" Generate a privatekey")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("BDK_xprv")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli key generate "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.xprv'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n$ "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_xprv")]),a._v("\ntprv8ZgxMBicQKsPefY7tdq7EKny81n9tfSvUYfSHAZByXdjPAZVysvaB6sFd2YavqfqMBgbHaXUG5oWM6sYvdJn6vnUizzQKTYAJ36bQsfPv4N\n")])])]),e("p",[e("code",[a._v("bdk-cli key generate")]),a._v(" will generate a fresh master key with "),e("code",[a._v("mnemonic")]),a._v(" and "),e("code",[a._v("xprv")]),a._v(". We have extracted the value of extended private key and stored it in "),e("code",[a._v("BDK_xprv")]),a._v(" variable.")]),a._v(" "),e("p",[a._v("The returned "),e("code",[a._v("mnemonic")]),a._v(" can be used to restore back the wallet if wallet data directory is lost.")])]),a._v(" "),e("li",[e("h4",{attrs:{id:"generate-descriptors"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#generate-descriptors"}},[a._v("#")]),a._v(" Generate Descriptors")]),a._v(" "),e("p",[e("code",[a._v("bdk-cli key derive")]),a._v(" can derive an "),e("code",[a._v("xpub")]),a._v("s given a "),e("code",[a._v("master key")]),a._v(" and "),e("code",[a._v("derivation_path")]),a._v(".")]),a._v(" "),e("p",[a._v("We will use the following paths for our "),e("code",[a._v("receive")]),a._v(" and "),e("code",[a._v("change")]),a._v(" descriptors")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("receive")]),a._v(" path: "),e("code",[a._v("m/84h/1h/0h/0")])]),a._v(" "),e("li",[e("code",[a._v("change")]),a._v(" path: "),e("code",[a._v("m/84h/1h/0h/1")]),a._v(",")])]),a._v(" "),e("p",[a._v("We can then simply wrap them in a "),e("code",[a._v('"wpkh()"')]),a._v(" to create our descriptors string and store them.")]),a._v(" "),e("p",[a._v("When asked for a new address, BDK will derive one from the "),e("code",[a._v("receive")]),a._v(" descriptor.")]),a._v(" "),e("p",[a._v("And while constructing transaction, BDK will use the "),e("code",[a._v("change")]),a._v(" descriptor to derive change address.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("BDK_recv_desc")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wpkh('),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli key derive "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--path")]),a._v(" m/84h/1h/0h/0 "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--xprv")]),a._v(" $BDK_xprv "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.xprv'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(')"')]),a._v("\n$ "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v("\nwpkh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("ff09c7c9/84"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'/1'")]),a._v("/0'/0"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("tprv8hkdEGgwLLnqsdfkJFidpTj5d6z5qFdP6Qwzsviea3HrS9C2mXXaDivPKCCgcaWvnGNX9eciLUQs91PWYXJqrChfnAagViCgG6L5phaNyWr/*"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n")])])]),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("BDK_chng_desc")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"wpkh('),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli key derive "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--path")]),a._v(" m/84h/1h/0h/1 "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--xprv")]),a._v(" $BDK_xprv "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.xprv'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(')"')]),a._v("\n$ "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v("\nwpkh"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("ff09c7c9/84"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'/1'")]),a._v("/0'/1"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("tprv8hkdEGgwLLnqtbYkGG7fSy7v43RF2SQGGjNuZtmBzEHh7H8xgpXBETQAbVPqi8rkvLNFKLYY4rDzXA4fn5Ha1yuazZqhQPe3uNKmFS7648s/*"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v("\n")])])]),e("p",[a._v("Note: "),e("code",[a._v("BDK_xprv")]),a._v(" has been used as the "),e("code",[a._v("master key")]),a._v(", this will allow BDK to have signing capabilities.\nWe could have used an "),e("code",[a._v("xpub")]),a._v(" master key here instead, that would create an "),e("code",[a._v("watch-only")]),a._v(" wallet.")])]),a._v(" "),e("li",[e("h4",{attrs:{id:"create-and-sync-a-wallet"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#create-and-sync-a-wallet"}},[a._v("#")]),a._v(" Create and Sync a wallet")]),a._v(" "),e("p",[a._v("We will now instruct BDK to create a new wallet with following instructions")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("ul",[e("li",[a._v("name ("),e("code",[a._v("--wallet")]),a._v(") "),e("code",[a._v("bdk-test")]),a._v(",")]),a._v(" "),e("li",[e("code",[a._v("receive")]),a._v(" descriptor ("),e("code",[a._v("-d")]),a._v(") as "),e("code",[a._v("$BDK_recv_desc")]),a._v(" and change descriptor ("),e("code",[a._v("-c")]),a._v(") as "),e("code",[a._v("$BDK_chng_desc")]),a._v(",")]),a._v(" "),e("li",[a._v("connected to a full node ("),e("code",[a._v("--node")]),a._v(") listening at "),e("code",[a._v("127.0.0.1:18444")]),a._v(",")]),a._v(" "),e("li",[a._v("and finally create and sync the wallet with the "),e("code",[a._v("sync")]),a._v(" command.")])]),a._v(" "),e("p",[a._v("If you are using a "),e("code",[a._v("regtest")]),a._v(" node, also add "),e("code",[a._v("--network regtest")]),a._v(", the default is "),e("code",[a._v("testnet")]),a._v(".")]),a._v(" "),e("p",[e("code",[a._v("bdk-cli")]),a._v(" makes multiple parallel connections that can be configured with the "),e("code",[a._v("--conn-count")]),a._v(" parameter (default is 4). This makes syncing parallel and fast. Use "),e("code",[a._v("bdk-cli --help")]),a._v(" to see all other options.")]),a._v(" "),e("p",[a._v("Getting an empty return means wallet creation succeeded.")]),a._v(" "),e("p",[a._v("BDK has created a wallet named "),e("code",[a._v("bdk-test")]),a._v(" in its data directory. Which is by default stored at "),e("code",[a._v("~/.bdk-bitcoin/compact_filters")]),a._v(" folder.")]),a._v(" "),e("p",[a._v("Looking into that folder different files and directories maintained by BDK can be seen.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("ls")]),a._v(" .bdk-bitcoin/compact_filters/\n000004.log CURRENT LOCK MANIFEST-000003 OPTIONS-000010\nbdk-test IDENTITY LOG OPTIONS-000008\n")])])])])]),a._v(" "),e("h3",{attrs:{id:"recieve-coins"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#recieve-coins"}},[a._v("#")]),a._v(" Recieve Coins")]),a._v(" "),e("p",[a._v("We will use the "),e("code",[a._v("core")]),a._v(" wallet to send 5 BTC to our"),e("code",[a._v("bdk-test")]),a._v(" wallet.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Fetch a new address using "),e("code",[a._v("bdk-cli")])]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" get_new_address\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bcrt1qx2479wywulf50pqx5uy64zhxq9f3tuvlh8u0s9"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Transfer funds to the previous address and generate a block, using "),e("code",[a._v("bitcoin-cli")])]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" sendtoaddress bcrt1qx2479wywulf50pqx5uy64zhxq9f3tuvlh8u0s9 "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("5")]),a._v("\n\n\n$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" generatetoaddress "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" bcrt1qw3ht9xtc9pgyvmqay0ap9fw8mxd27az8el0uz3\n")])])]),e("p",[e("code",[a._v("core")]),a._v(" has sent 5 BTC to our "),e("code",[a._v("bdk-test")]),a._v(" wallet. Which is confirmed in a new block.")]),a._v(" "),e("p",[e("code",[a._v("bdk-test")]),a._v(" can see that now by syncing again.")]),a._v(" "),e("p",[a._v("(Note: BDK required explicit "),e("code",[a._v("sync()")]),a._v(" calls to give wallet developers flexibility on when to sync).")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" get_balance\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"satoshi"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("500000000")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("We can see "),e("code",[a._v("500000000")]),a._v(" sats balance in our "),e("code",[a._v("bdk-test")]),a._v(" wallet.")]),a._v(" "),e("p",[a._v("BDK has fetched blockchain details concerning its wallet descriptors, from the core node, using compact filters.")])])]),a._v(" "),e("h3",{attrs:{id:"creating-a-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-transaction"}},[a._v("#")]),a._v(" Creating a transaction.")]),a._v(" "),e("p",[a._v("Now we want to create a transaction sending coins from "),e("code",[a._v("bdk-test")]),a._v(" wallet to the "),e("code",[a._v("core")]),a._v(" wallet.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("fetch a new "),e("code",[a._v("core")]),a._v(" address")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("core_addrs")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" getnewaddress "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("tr")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'\\r'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Create a raw transaction using "),e("code",[a._v("bdk-cli")]),a._v(" to the above address. This will generate a "),e("code",[a._v("psbt")]),a._v(" which we will sign.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("psbt")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" $BDK_recv_desc "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" $BDK_chng_desc create_tx "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--to")]),a._v(" $core_addrs:200000000 "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.psbt'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])]),e("p",[a._v("(Recommended to check all the other information returned by "),e("code",[a._v("bdk-cli create_tx")]),a._v(")")])])]),a._v(" "),e("h3",{attrs:{id:"sign-and-broadcast-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sign-and-broadcast-the-transaction"}},[a._v("#")]),a._v(" Sign and Broadcast the transaction")]),a._v(" "),e("p",[a._v("Asking BDK to sign a transaction is as straight forward as it can get. BDK already holds the "),e("code",[a._v("xprv")]),a._v(" deatils to sign a transaction. It returns a finalised "),e("code",[a._v("signed_psbt")]),a._v(" which we will next broadcast to the network.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Sign the transaction")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("signed_psbt")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" $BDK_recv_desc "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" $BDK_chng_desc sign "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--psbt")]),a._v(" $psbt "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" jq "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-r")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'.psbt'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Broadcast the transaction")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" broadcast "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--psbt")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$signed_psbt")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c343f5b25372e285308eba912d1fe8fade9f64afde6d95306e248e52e0852252"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("This makes BDK broadcast the transaction via the connected core node, and it returns the corresponding Txid.")])])]),a._v(" "),e("h3",{attrs:{id:"confirming-the-transaction"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#confirming-the-transaction"}},[a._v("#")]),a._v(" Confirming the Transaction")]),a._v(" "),e("p",[a._v("The transaction has been received by the "),e("code",[a._v("core")]),a._v(" node and waiting in its mempool for inclusion in block.\nWe can see the transaction via its "),e("code",[a._v("txid")]),a._v(" received in previous step.")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("Check transaction in mempool")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" gettransaction c343f5b25372e285308eba912d1fe8fade9f64afde6d95306e2248e52e0852252\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"amount"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.00000000")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"confirmations"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"trusted"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" false,\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"txid"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"c343f5b25372e285308eba912d1fe8fade9f64afde6d95306e248e52e0852252"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"walletconflicts"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"time"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1621697202")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"timereceived"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1621697202")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bip125-replaceable"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"no"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"details"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"address"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"bcrt1q3h4hs6mve5dcl7da3d4acmlp20hh8c3t4mldwe"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"category"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"receive"')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"amount"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("2.00000000")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"label"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('""')]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"vout"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(",\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"hex"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"01000000000101d84e8cb7477f9fe6f265b56d5416ff47da9a70be18f65ec50731b8257c67f2bd0100000000ffffffff0273a2e11100000000160014874270187001febc4cebd8cb083cf2c783e8f1ac00c2eb0b000000001600148deb786b6ccd1b8ff9bd8b6bdc6fe153ef73e22b0247304402201037d9ef5b80392296311c8899b1f12a0987778d694a442a88bafa6fbd7a7c9a022011293176255897444d9c71b0b9cd13b2aedb749b142577566c90a63d61025e2c01210202427d16b29c1c8546255363a74326ee9ab3196770bb3fccc7b679d52f9c1ccf00000000"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("This means, core has recieved the transaction in its mempool and waiting for confirmation.")])]),a._v(" "),e("li",[e("p",[a._v("Generate 1 block to confirm the transaction")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exec")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-it")]),a._v(" bdk-box /root/bitcoin-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-regtest")]),a._v(" generatetoaddress "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v(" bcrt1qatd7yq0jukwusuaufltlejmeydpvnpv43r5gc2\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"55436ff0169bbb3e70ab10cb7cdd45ab86204d5d7864a109142d91120d023197"')]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n")])])])]),a._v(" "),e("li",[e("p",[a._v("Sync the "),e("code",[a._v("bdk-test")]),a._v(" wallet and ask for available balance.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v(" $ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("sync")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n $ bdk-cli "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),a._v(" regtest wallet "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--node")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"127.0.0.1:18444"')]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--wallet")]),a._v(" bdk-test "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_recv_desc")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$BDK_chng_desc")]),a._v(" get_balance\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n \t"),e("span",{pre:!0,attrs:{class:"token string"}},[a._v('"satoshi"')]),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("299999859")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),e("p",[a._v("If you see the balance updated, voila!")]),a._v(" "),e("p",[a._v("What happened here is:")]),a._v(" "),e("ul",[e("li",[a._v("core created a new block containing the transaction.")]),a._v(" "),e("li",[e("code",[a._v("bdk-cli")]),a._v(" fetched the corresponding filter data.")]),a._v(" "),e("li",[a._v("It noticed it got a concerning transaction.")]),a._v(" "),e("li",[a._v("It asked for the details of that transaction from the core node.")]),a._v(" "),e("li",[a._v("It updated its wallet details with this new information.")]),a._v(" "),e("li",[a._v("The update is reflected in the wallet balance.")])])])]),a._v(" "),e("h3",{attrs:{id:"shutdown-docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#shutdown-docker"}},[a._v("#")]),a._v(" Shutdown Docker")]),a._v(" "),e("p",[a._v("You may now shutdown the regtest docker container.")]),a._v(" "),e("p",[a._v("Note: This will also clean up any data in the bitcoin core, including the wallet.")]),a._v(" "),e("div",{staticClass:"language-shell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-shell"}},[e("code",[a._v("$ "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("kill")]),a._v(" bdk-box\n")])])]),e("h2",{attrs:{id:"end-words"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#end-words"}},[a._v("#")]),a._v(" End Words")]),a._v(" "),e("p",[a._v("In this tutorial we went through the process of receiving, creating, signing and broadcasting transaction using the BDK wallet with "),e("code",[a._v("compact_filters")]),a._v(" feature. This demonstrates how BDK capabilities can be used to create SPV light wallets with integrated "),e("code",[a._v("BIP157")]),a._v(" type "),e("code",[a._v("compact_filters")]),a._v(" node.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/56.d9f7cfaa.js b/assets/js/56.6ea53471.js similarity index 99% rename from assets/js/56.d9f7cfaa.js rename to assets/js/56.6ea53471.js index 4b7fa6459c..e79cd395f1 100644 --- a/assets/js/56.d9f7cfaa.js +++ b/assets/js/56.6ea53471.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{411:function(e,t,a){"use strict";a.r(t);var s=a(7),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),t("p",[e._v("In this post, we will use the "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" tool to create a multi-owned descriptor-based paper wallet. We will use "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk"),t("OutboundLink")],1),e._v(" via the "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" tool to test our descriptor and to be able to sweep the funds from our paper wallet to a new address.")]),e._v(" "),t("h2",{attrs:{id:"about-paper-wallets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#about-paper-wallets"}},[e._v("#")]),e._v(" About paper wallets")]),e._v(" "),t("p",[e._v("Paper wallets have a lot of drawbacks, as explained in the "),t("a",{attrs:{href:"https://en.bitcoin.it/wiki/Paper_wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("paper wallet Wiki article"),t("OutboundLink")],1),e._v(", as always, do your own research before deciding to use it with mainnet bitcoins. In this post we will\nonly be using testnet coins.")]),e._v(" "),t("h2",{attrs:{id:"descriptors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#descriptors"}},[e._v("#")]),e._v(" Descriptors")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet/tree/339fa4418d94f6fdd96f3d0301cab8a0bc09e8bd",target:"_blank",rel:"noopener noreferrer"}},[e._v("previous version"),t("OutboundLink")],1),e._v(" of the "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" followed the original paper wallet design: WIF"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn1",id:"fnref1"}},[e._v("[1]")])]),e._v(" as secret part with the option to generate a different kind of addresses (legacy, nested segwit, and segwit).")]),e._v(" "),t("p",[e._v("There were plans to "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet/issues/5",target:"_blank",rel:"noopener noreferrer"}},[e._v("support mnemonic"),t("OutboundLink")],1),e._v(" instead of WIF keys because it may"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn2",id:"fnref2"}},[e._v("[2]")])]),e._v(" save the sweep transaction"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn3",id:"fnref3"}},[e._v("[3]")])]),e._v(" and there are more wallets capable of importing a mnemonic instead of a WIF.")]),e._v(" "),t("p",[e._v("However, choosing a single address type or having wallet support for a specific format is the kind of problem "),t("a",{attrs:{href:"/descriptors"}},[e._v("descriptors")]),e._v(" solve perfectly, so the latest "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" version now accepts a descriptor and the network as parameters.")]),e._v(" "),t("h2",{attrs:{id:"example-use-case"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-use-case"}},[e._v("#")]),e._v(" Example use case")]),e._v(" "),t("p",[e._v("So let's say your grandma wants to buy bitcoin and asked for your help.")]),e._v(" "),t("p",[e._v("You are a little afraid she may lose the private key. At the same time, you don't want to duplicate the keys and give those to her daughters Alice and Barbara, because both of them could spend and accuse the other of having done so.")]),e._v(" "),t("p",[e._v("Even though we trust everyone in the family it is better to play it safe and divide the responsibility of protecting Grandma's bitcoin.")]),e._v(" "),t("p",[e._v("This is a perfect case for a 2 of 3 multi-signature paper wallet. This way also protects the participants from having their copy of the wallet stolen. To compromise Grandma's wallet a thief would need to find and steal at least two of them.")]),e._v(" "),t("p",[e._v("Note that you as the wallet creator are still the single point of trust because you are going to generate the keys for everyone. Setups combining self generated keys from the participants is possible future work.")]),e._v(" "),t("h2",{attrs:{id:"creating-the-paper-wallet"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-paper-wallet"}},[e._v("#")]),e._v(" Creating the paper wallet")]),e._v(" "),t("p",[e._v("For this example the spending descriptor would be:")]),e._v(" "),t("p",[t("code",[e._v("wsh(multi(2,Grandma,Alice,Barbara))")])]),e._v(" "),t("p",[e._v("You need "),t("a",{attrs:{href:"https://www.rust-lang.org/tools/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust"),t("OutboundLink")],1),e._v(" installed to use "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(". The -n option below explicitly selects\ngenerating "),t("code",[e._v("testnet")]),e._v(" keys. Use "),t("code",[e._v("rusty-paper-wallet --help")]),e._v(" to see usage instructions and other\noptions.")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cargo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" rusty-paper-wallet\n$ rusty-paper-wallet "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"wsh(multi(2,Grandma,Alice,Barbara))"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" testnet\ndata:text/html"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("base64,PCFET0N"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n")])])]),t("p",[e._v("The "),t("a",{attrs:{href:"/descriptor-based-paper-wallets/data-url.txt"}},[e._v("output")]),e._v(" of the command is very long and has been shortened. The string is a "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Data_URI_scheme",target:"_blank",rel:"noopener noreferrer"}},[e._v("data URI scheme"),t("OutboundLink")],1),e._v(" paste-able in the address bar of a browser. By using a data URI no files are written on the hard disk, leaving less trace of secret material on the computer.\nIt's also a good idea to use incognito mode in the browser to prevent it from saving the page in the history.")]),e._v(" "),t("p",[e._v("The following is the result:")]),e._v(" "),t("iframe",{staticClass:"example",attrs:{src:"/descriptor-based-paper-wallets/Bitcoin_Paper_Wallet.html"}}),e._v(" "),t("p",[e._v("Under the hood, the command created a key pair randomly for every alias present in the descriptor, then replaced the aliases with the created keys and generated the corresponding address. This address is the same for every paper wallet and it is shown in the upper part of the paper wallet (the public part) along with the alias, linking the paper wallet to the owner.")]),e._v(" "),t("p",[e._v("The lower part is the secret part, the written part is the descriptor with the aliases, followed by a legend linking the aliases with the keys. In the legend, all the keys are public but the one of the owner which is a private WIF. The secret QR code instead contains the descriptor already with the keys.")]),e._v(" "),t("p",[e._v("The paper wallet must then be printed, and it is better to use a printer without wifi and also to be aware that some sensitive data may remain in the printer's cache.")]),e._v(" "),t("p",[e._v("Then the paper wallet must be cut along the dotted lines, the secret part should be folded twice over the black zone"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn4",id:"fnref4"}},[e._v("[4]")])]),e._v(". The black zone helps to avoid showing the secret parts in the presence of back-light. Once the folding is done the paper wallet should be plasticized to prevent being damaged by water.")]),e._v(" "),t("h2",{attrs:{id:"bdk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bdk"}},[e._v("#")]),e._v(" BDK")]),e._v(" "),t("p",[e._v("Any descriptor based wallet can be used to check the balance of and sweep the funds from\nGrandma's paper wallet. For this post we'll demonstrate using the "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" tool to do these steps.\nAnother area where "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk"),t("OutboundLink")],1),e._v(" could be used with "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" is to compile a more\ncomplicated miniscript spending policy into a descriptor, as we have done in the "),t("RouterLink",{attrs:{to:"/blog/2021/02/spending-policy-demo/#step-4-create-wallet-descriptors-for-each-participant"}},[e._v("spending policy demo")]),e._v(" post.")],1),e._v(" "),t("h2",{attrs:{id:"funding-tx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#funding-tx"}},[e._v("#")]),e._v(" Funding tx")]),e._v(" "),t("p",[e._v("Since Grandma's wallet was created as a "),t("code",[e._v("wsh")]),e._v(" descriptor, bitcoin can be sent to it from any\nsegwit capable wallet, we'll use a public "),t("a",{attrs:{href:"https://bitcoinfaucet.uo1.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("bitcoin testnet faucet"),t("OutboundLink")],1),e._v(". Once the funds are sent the\ndeposit address "),t("code",[e._v("tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw")]),e._v(" we can also use this\naddress and a testnet explorer to "),t("a",{attrs:{href:"https://mempool.space/testnet/address/tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw",target:"_blank",rel:"noopener noreferrer"}},[e._v("confirm the funds were received"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"sweep-tx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sweep-tx"}},[e._v("#")]),e._v(" Sweep tx")]),e._v(" "),t("p",[e._v("Now that Grandma's paper wallet is funded it's time to demonstrate how to use "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" to sweep these\nfunds to a new address. Let's assume Grandma lost her original paper wallet and has asked\nher daughters to sweep them to a new single signature wallet so she can spend them.")]),e._v(" "),t("h3",{attrs:{id:"step-1-alice-creates-and-signs-a-psbt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-1-alice-creates-and-signs-a-psbt"}},[e._v("#")]),e._v(" Step 1: Alice creates and signs a PSBT")]),e._v(" "),t("p",[e._v("Alice uses the private text or QR code from her paper wallet to find her private key and the\npublic keys for Grandma and Barbara. With this info she creates a PSBT to sweep Grandma's funds\nto a new address (in this example we'll send them back to our "),t("a",{attrs:{href:"https://bitcoinfaucet.uo1.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("bitcoin testnet faucet"),t("OutboundLink")],1),e._v("). Notice how Alice\nincludes her wallet's descriptor checksum '#em3q73l5', this "),t("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums",target:"_blank",rel:"noopener noreferrer"}},[e._v("guarantees"),t("OutboundLink")],1),e._v(" she has entered her descriptor correctly.")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SWEEP_TO_ADDR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("tb1qm5tfegjevj27yvvna9elym9lnzcf0zraxgl8z2\n\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_WIF")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("cSSKRHDmQEEutp5LD14tAcixu2ehSNPDTqNek1zMa9Pet98qxHq3\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BARBARA_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("02a3f3f2658b9812ddeabfbde2fde03f8a65369e4ed621f29fa8ba0cc519b789fb\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("GRANDMA_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("03f1bd2bff8e9c61f58a8d46d18fd8f3149b1f2d76b3c423a7874a5d5811d67cee\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_DESCRIPTOR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"wsh(multi(2,'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$GRANDMA_PUBKEY")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_WIF")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_PUBKEY")]),e._v('))#em3q73l5"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# confirm descriptor creates the expected deposit address")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_DESCRIPTOR")]),e._v(" get_new_address\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"address"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# sync the wallet and show the balance")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_DESCRIPTOR")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sync")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_DESCRIPTOR")]),e._v(" get_balance\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"satoshi"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10000")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# create and sign PSBT")]),e._v("\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("UNSIGNED_PSBT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" $ALICE_DESCRIPTOR create_tx "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--send_all")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--to")]),e._v(" $SWEEP_TO_ADDR:0 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-r")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('".psbt"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_SIGNED_PSBT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" $ALICE_DESCRIPTOR sign "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--psbt")]),e._v(" $UNSIGNED_PSBT "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-r")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('".psbt"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n")])])]),t("h3",{attrs:{id:"step-2-barbara-signs-alices-signed-psbt-and-broadcasts-the-tx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-2-barbara-signs-alices-signed-psbt-and-broadcasts-the-tx"}},[e._v("#")]),e._v(" Step 2: Barbara signs Alice's signed PSBT and broadcasts the tx")]),e._v(" "),t("p",[e._v("Now it's Barbara's turn to use the private text or QR code from her paper wallet to get her private\nkey and the public keys for Grandma and Alice. With this info plus Alice's signed PSBT she can\ncreate a fully signed PSBT to broadcast and complete the sweep of Grandma's funds.")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("02e486e32f0f87136fa042cb53219ace8537ea1d036deb2f4293570b94325d11cb\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BARBARA_WIF")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("cSfMLzSZ9NjWUTqL3sFpgWJssnu2qgmE2cm5N1jPDRRJuDcrsPEB\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("GRANDMA_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("03f1bd2bff8e9c61f58a8d46d18fd8f3149b1f2d76b3c423a7874a5d5811d67cee\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BARBARA_DESCRIPTOR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"wsh(multi(2,'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$GRANDMA_PUBKEY")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_PUBKEY")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_WIF")]),e._v('))#nxfa5n0z"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# confirm descriptor creates the expected deposit address")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" get_new_address\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"address"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# sync the wallet and show the balance")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sync")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" get_balance\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"satoshi"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10000")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FINAL_PSBT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" $BARBARA_DESCRIPTOR sign "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--psbt")]),e._v(" $ALICE_SIGNED_PSBT "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-r")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('".psbt"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" broadcast "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--psbt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$FINAL_PSBT")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"txid"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"9ecd8e6be92b7edd8bf1799f8f7090e58f813825f826bdb771b4cdb444cdeb59"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("And finally we verify that Alice and Barbara successfully created and broadcast Grandma's "),t("a",{attrs:{href:"https://mempool.space/testnet/tx/9ecd8e6be92b7edd8bf1799f8f7090e58f813825f826bdb771b4cdb444cdeb59",target:"_blank",rel:"noopener noreferrer"}},[e._v("sweep tx"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[e._v("#")]),e._v(" Conclusion")]),e._v(" "),t("p",[e._v("In this post we showed how to create a multi-sig descriptor based paper wallet using\n"),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" and then sweep the funds from our example paper wallet to a new address. If you\nfound this post interesting please comment below. Or give it a try yourself and if you run into any\nproblems or would like to suggest improvements leave an issue in the "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" or\n"),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" github repos. Thanks!")]),e._v(" "),t("hr",{staticClass:"footnotes-sep"}),e._v(" "),t("section",{staticClass:"footnotes"},[t("ol",{staticClass:"footnotes-list"},[t("li",{staticClass:"footnote-item",attrs:{id:"fn1"}},[t("p",[e._v("Wallet Input Format, a string encoding a ECDSA private key https://en.bitcoin.it/wiki/Wallet_import_format "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref1"}},[e._v("↩︎")])])]),e._v(" "),t("li",{staticClass:"footnote-item",attrs:{id:"fn2"}},[t("p",[e._v("Unless the user import the WIF directly into bitcoin core "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref2"}},[e._v("↩︎")])])]),e._v(" "),t("li",{staticClass:"footnote-item",attrs:{id:"fn3"}},[t("p",[e._v("Some wallets refers to sweep as the action to create a transaction taking all the funds from the paper wallet and sending those to the wallet itself. "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref3"}},[e._v("↩︎")])])]),e._v(" "),t("li",{staticClass:"footnote-item",attrs:{id:"fn4"}},[t("p",[e._v("Ideally, the black zone should be twice as long as the secret part to cover it back and front, long descriptor may leave a shorter black zone, ensure to have you printer set with vertical layout for best results. "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref4"}},[e._v("↩︎")])])])])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{410:function(e,t,a){"use strict";a.r(t);var s=a(7),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"introduction"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),t("p",[e._v("In this post, we will use the "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" tool to create a multi-owned descriptor-based paper wallet. We will use "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk"),t("OutboundLink")],1),e._v(" via the "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" tool to test our descriptor and to be able to sweep the funds from our paper wallet to a new address.")]),e._v(" "),t("h2",{attrs:{id:"about-paper-wallets"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#about-paper-wallets"}},[e._v("#")]),e._v(" About paper wallets")]),e._v(" "),t("p",[e._v("Paper wallets have a lot of drawbacks, as explained in the "),t("a",{attrs:{href:"https://en.bitcoin.it/wiki/Paper_wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("paper wallet Wiki article"),t("OutboundLink")],1),e._v(", as always, do your own research before deciding to use it with mainnet bitcoins. In this post we will\nonly be using testnet coins.")]),e._v(" "),t("h2",{attrs:{id:"descriptors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#descriptors"}},[e._v("#")]),e._v(" Descriptors")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet/tree/339fa4418d94f6fdd96f3d0301cab8a0bc09e8bd",target:"_blank",rel:"noopener noreferrer"}},[e._v("previous version"),t("OutboundLink")],1),e._v(" of the "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" followed the original paper wallet design: WIF"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn1",id:"fnref1"}},[e._v("[1]")])]),e._v(" as secret part with the option to generate a different kind of addresses (legacy, nested segwit, and segwit).")]),e._v(" "),t("p",[e._v("There were plans to "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet/issues/5",target:"_blank",rel:"noopener noreferrer"}},[e._v("support mnemonic"),t("OutboundLink")],1),e._v(" instead of WIF keys because it may"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn2",id:"fnref2"}},[e._v("[2]")])]),e._v(" save the sweep transaction"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn3",id:"fnref3"}},[e._v("[3]")])]),e._v(" and there are more wallets capable of importing a mnemonic instead of a WIF.")]),e._v(" "),t("p",[e._v("However, choosing a single address type or having wallet support for a specific format is the kind of problem "),t("a",{attrs:{href:"/descriptors"}},[e._v("descriptors")]),e._v(" solve perfectly, so the latest "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" version now accepts a descriptor and the network as parameters.")]),e._v(" "),t("h2",{attrs:{id:"example-use-case"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-use-case"}},[e._v("#")]),e._v(" Example use case")]),e._v(" "),t("p",[e._v("So let's say your grandma wants to buy bitcoin and asked for your help.")]),e._v(" "),t("p",[e._v("You are a little afraid she may lose the private key. At the same time, you don't want to duplicate the keys and give those to her daughters Alice and Barbara, because both of them could spend and accuse the other of having done so.")]),e._v(" "),t("p",[e._v("Even though we trust everyone in the family it is better to play it safe and divide the responsibility of protecting Grandma's bitcoin.")]),e._v(" "),t("p",[e._v("This is a perfect case for a 2 of 3 multi-signature paper wallet. This way also protects the participants from having their copy of the wallet stolen. To compromise Grandma's wallet a thief would need to find and steal at least two of them.")]),e._v(" "),t("p",[e._v("Note that you as the wallet creator are still the single point of trust because you are going to generate the keys for everyone. Setups combining self generated keys from the participants is possible future work.")]),e._v(" "),t("h2",{attrs:{id:"creating-the-paper-wallet"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-paper-wallet"}},[e._v("#")]),e._v(" Creating the paper wallet")]),e._v(" "),t("p",[e._v("For this example the spending descriptor would be:")]),e._v(" "),t("p",[t("code",[e._v("wsh(multi(2,Grandma,Alice,Barbara))")])]),e._v(" "),t("p",[e._v("You need "),t("a",{attrs:{href:"https://www.rust-lang.org/tools/install",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust"),t("OutboundLink")],1),e._v(" installed to use "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(". The -n option below explicitly selects\ngenerating "),t("code",[e._v("testnet")]),e._v(" keys. Use "),t("code",[e._v("rusty-paper-wallet --help")]),e._v(" to see usage instructions and other\noptions.")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cargo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" rusty-paper-wallet\n$ rusty-paper-wallet "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"wsh(multi(2,Grandma,Alice,Barbara))"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-n")]),e._v(" testnet\ndata:text/html"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("base64,PCFET0N"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("..")]),e._v(".\n")])])]),t("p",[e._v("The "),t("a",{attrs:{href:"/descriptor-based-paper-wallets/data-url.txt"}},[e._v("output")]),e._v(" of the command is very long and has been shortened. The string is a "),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Data_URI_scheme",target:"_blank",rel:"noopener noreferrer"}},[e._v("data URI scheme"),t("OutboundLink")],1),e._v(" paste-able in the address bar of a browser. By using a data URI no files are written on the hard disk, leaving less trace of secret material on the computer.\nIt's also a good idea to use incognito mode in the browser to prevent it from saving the page in the history.")]),e._v(" "),t("p",[e._v("The following is the result:")]),e._v(" "),t("iframe",{staticClass:"example",attrs:{src:"/descriptor-based-paper-wallets/Bitcoin_Paper_Wallet.html"}}),e._v(" "),t("p",[e._v("Under the hood, the command created a key pair randomly for every alias present in the descriptor, then replaced the aliases with the created keys and generated the corresponding address. This address is the same for every paper wallet and it is shown in the upper part of the paper wallet (the public part) along with the alias, linking the paper wallet to the owner.")]),e._v(" "),t("p",[e._v("The lower part is the secret part, the written part is the descriptor with the aliases, followed by a legend linking the aliases with the keys. In the legend, all the keys are public but the one of the owner which is a private WIF. The secret QR code instead contains the descriptor already with the keys.")]),e._v(" "),t("p",[e._v("The paper wallet must then be printed, and it is better to use a printer without wifi and also to be aware that some sensitive data may remain in the printer's cache.")]),e._v(" "),t("p",[e._v("Then the paper wallet must be cut along the dotted lines, the secret part should be folded twice over the black zone"),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn4",id:"fnref4"}},[e._v("[4]")])]),e._v(". The black zone helps to avoid showing the secret parts in the presence of back-light. Once the folding is done the paper wallet should be plasticized to prevent being damaged by water.")]),e._v(" "),t("h2",{attrs:{id:"bdk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bdk"}},[e._v("#")]),e._v(" BDK")]),e._v(" "),t("p",[e._v("Any descriptor based wallet can be used to check the balance of and sweep the funds from\nGrandma's paper wallet. For this post we'll demonstrate using the "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" tool to do these steps.\nAnother area where "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk"),t("OutboundLink")],1),e._v(" could be used with "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" is to compile a more\ncomplicated miniscript spending policy into a descriptor, as we have done in the "),t("RouterLink",{attrs:{to:"/blog/2021/02/spending-policy-demo/#step-4-create-wallet-descriptors-for-each-participant"}},[e._v("spending policy demo")]),e._v(" post.")],1),e._v(" "),t("h2",{attrs:{id:"funding-tx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#funding-tx"}},[e._v("#")]),e._v(" Funding tx")]),e._v(" "),t("p",[e._v("Since Grandma's wallet was created as a "),t("code",[e._v("wsh")]),e._v(" descriptor, bitcoin can be sent to it from any\nsegwit capable wallet, we'll use a public "),t("a",{attrs:{href:"https://bitcoinfaucet.uo1.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("bitcoin testnet faucet"),t("OutboundLink")],1),e._v(". Once the funds are sent the\ndeposit address "),t("code",[e._v("tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw")]),e._v(" we can also use this\naddress and a testnet explorer to "),t("a",{attrs:{href:"https://mempool.space/testnet/address/tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw",target:"_blank",rel:"noopener noreferrer"}},[e._v("confirm the funds were received"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"sweep-tx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sweep-tx"}},[e._v("#")]),e._v(" Sweep tx")]),e._v(" "),t("p",[e._v("Now that Grandma's paper wallet is funded it's time to demonstrate how to use "),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" to sweep these\nfunds to a new address. Let's assume Grandma lost her original paper wallet and has asked\nher daughters to sweep them to a new single signature wallet so she can spend them.")]),e._v(" "),t("h3",{attrs:{id:"step-1-alice-creates-and-signs-a-psbt"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-1-alice-creates-and-signs-a-psbt"}},[e._v("#")]),e._v(" Step 1: Alice creates and signs a PSBT")]),e._v(" "),t("p",[e._v("Alice uses the private text or QR code from her paper wallet to find her private key and the\npublic keys for Grandma and Barbara. With this info she creates a PSBT to sweep Grandma's funds\nto a new address (in this example we'll send them back to our "),t("a",{attrs:{href:"https://bitcoinfaucet.uo1.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("bitcoin testnet faucet"),t("OutboundLink")],1),e._v("). Notice how Alice\nincludes her wallet's descriptor checksum '#em3q73l5', this "),t("a",{attrs:{href:"https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md#checksums",target:"_blank",rel:"noopener noreferrer"}},[e._v("guarantees"),t("OutboundLink")],1),e._v(" she has entered her descriptor correctly.")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SWEEP_TO_ADDR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("tb1qm5tfegjevj27yvvna9elym9lnzcf0zraxgl8z2\n\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_WIF")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("cSSKRHDmQEEutp5LD14tAcixu2ehSNPDTqNek1zMa9Pet98qxHq3\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BARBARA_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("02a3f3f2658b9812ddeabfbde2fde03f8a65369e4ed621f29fa8ba0cc519b789fb\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("GRANDMA_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("03f1bd2bff8e9c61f58a8d46d18fd8f3149b1f2d76b3c423a7874a5d5811d67cee\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_DESCRIPTOR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"wsh(multi(2,'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$GRANDMA_PUBKEY")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_WIF")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_PUBKEY")]),e._v('))#em3q73l5"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# confirm descriptor creates the expected deposit address")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_DESCRIPTOR")]),e._v(" get_new_address\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"address"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# sync the wallet and show the balance")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_DESCRIPTOR")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sync")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_DESCRIPTOR")]),e._v(" get_balance\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"satoshi"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10000")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# create and sign PSBT")]),e._v("\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("UNSIGNED_PSBT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" $ALICE_DESCRIPTOR create_tx "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--send_all")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--to")]),e._v(" $SWEEP_TO_ADDR:0 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-r")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('".psbt"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_SIGNED_PSBT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" alice "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" $ALICE_DESCRIPTOR sign "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--psbt")]),e._v(" $UNSIGNED_PSBT "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-r")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('".psbt"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n")])])]),t("h3",{attrs:{id:"step-2-barbara-signs-alices-signed-psbt-and-broadcasts-the-tx"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-2-barbara-signs-alices-signed-psbt-and-broadcasts-the-tx"}},[e._v("#")]),e._v(" Step 2: Barbara signs Alice's signed PSBT and broadcasts the tx")]),e._v(" "),t("p",[e._v("Now it's Barbara's turn to use the private text or QR code from her paper wallet to get her private\nkey and the public keys for Grandma and Alice. With this info plus Alice's signed PSBT she can\ncreate a fully signed PSBT to broadcast and complete the sweep of Grandma's funds.")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("ALICE_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("02e486e32f0f87136fa042cb53219ace8537ea1d036deb2f4293570b94325d11cb\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BARBARA_WIF")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("cSfMLzSZ9NjWUTqL3sFpgWJssnu2qgmE2cm5N1jPDRRJuDcrsPEB\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("GRANDMA_PUBKEY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("03f1bd2bff8e9c61f58a8d46d18fd8f3149b1f2d76b3c423a7874a5d5811d67cee\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("BARBARA_DESCRIPTOR")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"wsh(multi(2,'),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$GRANDMA_PUBKEY")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$ALICE_PUBKEY")]),e._v(","),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_WIF")]),e._v('))#nxfa5n0z"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# confirm descriptor creates the expected deposit address")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" get_new_address\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"address"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"tb1qu6lcua9w2zkarjj5xwxh3l3qtcxh84hsra3jrvpszh69j2e54x7q3thycw"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# sync the wallet and show the balance")]),e._v("\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sync")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" get_balance\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"satoshi"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10000")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n$ "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("FINAL_PSBT")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" $BARBARA_DESCRIPTOR sign "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--psbt")]),e._v(" $ALICE_SIGNED_PSBT "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" jq "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-r")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('".psbt"')]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n\n$ bdk-cli wallet "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-w")]),e._v(" barbara "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$BARBARA_DESCRIPTOR")]),e._v(" broadcast "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--psbt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$FINAL_PSBT")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"txid"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"9ecd8e6be92b7edd8bf1799f8f7090e58f813825f826bdb771b4cdb444cdeb59"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("And finally we verify that Alice and Barbara successfully created and broadcast Grandma's "),t("a",{attrs:{href:"https://mempool.space/testnet/tx/9ecd8e6be92b7edd8bf1799f8f7090e58f813825f826bdb771b4cdb444cdeb59",target:"_blank",rel:"noopener noreferrer"}},[e._v("sweep tx"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[e._v("#")]),e._v(" Conclusion")]),e._v(" "),t("p",[e._v("In this post we showed how to create a multi-sig descriptor based paper wallet using\n"),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" and then sweep the funds from our example paper wallet to a new address. If you\nfound this post interesting please comment below. Or give it a try yourself and if you run into any\nproblems or would like to suggest improvements leave an issue in the "),t("a",{attrs:{href:"https://github.com/RCasatta/rusty-paper-wallet",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rusty Paper Wallet"),t("OutboundLink")],1),e._v(" or\n"),t("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk-cli",target:"_blank",rel:"noopener noreferrer"}},[e._v("bdk-cli"),t("OutboundLink")],1),e._v(" github repos. Thanks!")]),e._v(" "),t("hr",{staticClass:"footnotes-sep"}),e._v(" "),t("section",{staticClass:"footnotes"},[t("ol",{staticClass:"footnotes-list"},[t("li",{staticClass:"footnote-item",attrs:{id:"fn1"}},[t("p",[e._v("Wallet Input Format, a string encoding a ECDSA private key https://en.bitcoin.it/wiki/Wallet_import_format "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref1"}},[e._v("↩︎")])])]),e._v(" "),t("li",{staticClass:"footnote-item",attrs:{id:"fn2"}},[t("p",[e._v("Unless the user import the WIF directly into bitcoin core "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref2"}},[e._v("↩︎")])])]),e._v(" "),t("li",{staticClass:"footnote-item",attrs:{id:"fn3"}},[t("p",[e._v("Some wallets refers to sweep as the action to create a transaction taking all the funds from the paper wallet and sending those to the wallet itself. "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref3"}},[e._v("↩︎")])])]),e._v(" "),t("li",{staticClass:"footnote-item",attrs:{id:"fn4"}},[t("p",[e._v("Ideally, the black zone should be twice as long as the secret part to cover it back and front, long descriptor may leave a shorter black zone, ensure to have you printer set with vertical layout for best results. "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref4"}},[e._v("↩︎")])])])])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/59.4cbb2cdf.js b/assets/js/59.2b8ae69f.js similarity index 99% rename from assets/js/59.4cbb2cdf.js rename to assets/js/59.2b8ae69f.js index 8c991729aa..0363b693fa 100644 --- a/assets/js/59.4cbb2cdf.js +++ b/assets/js/59.2b8ae69f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{416:function(e,t,a){"use strict";a.r(t);var o=a(7),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("This post is part 2 of 3 of a series. ("),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"}},[e._v("Part 1")]),e._v(", "),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"}},[e._v("Part 3")]),e._v(")")],1),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"#the-dataset"}},[e._v("The dataset")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"#the-mempool"}},[e._v("The mempool")])]),e._v(" "),t("li",[t("a",{attrs:{href:"#the-outliers"}},[e._v("The outliers")])]),e._v(" "),t("li",[t("a",{attrs:{href:"#recap"}},[e._v("Recap")])])])])]),e._v(" "),t("h2",{attrs:{id:"the-dataset"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-dataset"}},[e._v("#")]),e._v(" The dataset")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://storage.googleapis.com/bitcoin_log/dataset_18.csv.gz",target:"_blank",rel:"noopener noreferrer"}},[e._v("dataset"),t("OutboundLink")],1),e._v(" is publicly available (~500MB gzip compressed, ~2GB as plain CSV).")]),e._v(" "),t("p",[e._v("The output of the model is the fee rate, expressed in "),t("code",[e._v("[satoshi/vbytes]")]),e._v(".")]),e._v(" "),t("p",[e._v("What about the inputs? Generally speaking, we have two main requirements for what can be included as input for our model:")]),e._v(" "),t("ul",[t("li",[e._v("It must be correlated to the output, even with a non-linear relation.")]),e._v(" "),t("li",[e._v("It must be available to a light client: for instance, assuming to have knowledge and an index of the last 1000 blocks is considered too much.")])]),e._v(" "),t("p",[e._v("To evaluate the approach we are taking, we also want to compare our model's results with another available estimation: for this reason the dataset includes data to compute the error agains Bitcoin Core's "),t("code",[e._v("estimatesmartfee")]),e._v(" results, even though we are not going to use it for this model.")]),e._v(" "),t("p",[e._v("The dataset will contain only transactions that spend already confirmed inputs. If we wanted to include transactions with unconfirmed inputs as well, the fee rate would have to be computed as a whole;\nfor example if transaction "),t("code",[e._v("t2")]),e._v(" spends an unconfirmed input from "),t("code",[e._v("t1")]),e._v(" (while "),t("code",[e._v("t1")]),e._v(" only spends confirmed inputs, and all its other outputs are unspent), the aggregated fee rate would have to be used.\nSupposing "),t("code",[e._v("f()")]),e._v(" is extracts the absolute fee and "),t("code",[e._v("w()")]),e._v(" the transaction weight, the aggregated fee rate would be "),t("code",[e._v("(f(t1) + f(t2)) / (w(t1) + w(t2))")]),e._v(". Thus, as already said previously, to keep things simple the model simply discards all the transaction\nthat would need to perform this computation.")]),e._v(" "),t("p",[e._v("For the same reason the dataset has the "),t("code",[e._v("parent_in_cpfp")]),e._v(" flag. When a transaction has inputs confirmed (so it's not excluded by the previous rule) but one or more of its output have been spent by a transaction confirmed in the same block, "),t("code",[e._v("parent_in_cpfp")]),e._v(" is "),t("code",[e._v("1")]),e._v(".\nTransactions with "),t("code",[e._v("parent_in_cpfp = 1")]),e._v(" are included in the dataset but excluded by the current model, since the miner probably considered an aggregated fee rate while picking the transactions to build a block.")]),e._v(" "),t("h4",{attrs:{id:"the-mempool"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-mempool"}},[e._v("#")]),e._v(" The mempool")]),e._v(" "),t("p",[e._v("The most important input of our model is the current "),t("em",[e._v("status")]),e._v(' of the mempool itself. However, we cannot feed the model with a list of the fee rate of every unconfirmed transaction, because this array would have a variable length.\nTo overcome this, the transaction contained in the mempool are grouped in "buckets" which are basically subsets of the mempool where all the transactions contained in a bucket have a similar fee rate. In particular we only care about the\n'),t("em",[e._v("number")]),e._v(" of transaction in every "),t("em",[e._v("bucket")]),e._v(", not which transactions it contains.")]),e._v(" "),t("p",[e._v("The mempool buckets array is defined by two parameters, the "),t("code",[e._v("percentage_increment")]),e._v(" and the "),t("code",[e._v("array_max")]),e._v(" value.\nStarting from the minimum fee rate value "),t("code",[e._v("min_relay_fee=1.0")]),e._v(", the "),t("code",[e._v("ith")]),e._v(" element is: "),t("code",[e._v("a_i=min_relay_fee * (1+percentage_increment)^(i+1)")])]),e._v(" "),t("p",[e._v("For instance, choosing the mempool buckets array to have parameters "),t("code",[e._v("percentage_increment = 50%")]),e._v(" and "),t("code",[e._v("array_max = 500.0 sat/vbytes")]),e._v(" the buckets would be constructed like so:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("bucket")]),e._v(" "),t("th",[e._v("bucket min fee rate")]),e._v(" "),t("th",[e._v("bucket max fee rate")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("a_0")]),e._v(" "),t("td",[e._v("1.0")]),e._v(" "),t("td",[e._v("1.5")])]),e._v(" "),t("tr",[t("td",[e._v("a_1")]),e._v(" "),t("td",[e._v("1.5")]),e._v(" "),t("td",[e._v("2.25")])]),e._v(" "),t("tr",[t("td",[e._v("a_2")]),e._v(" "),t("td",[e._v("2.25")]),e._v(" "),t("td",[e._v("3.375")])]),e._v(" "),t("tr",[t("td",[e._v("a_15")]),e._v(" "),t("td",[e._v("437.89")]),e._v(" "),t("td",[e._v("inf")])])])]),e._v(" "),t("p",[e._v("The array stops at "),t("code",[e._v("a15")]),e._v(" because "),t("code",[e._v("a16")]),e._v(" would have a bucket min greater than "),t("code",[e._v("array_max")]),e._v(".")]),e._v(" "),t("p",[e._v("The model is for light-client such as "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[e._v("neutrino"),t("OutboundLink")],1),e._v(" based ones. In these clients the mempool is already available (it's needed to check for received transactions) but we can't compute fee rates of this transactions because previous confirmed inputs are not in the mempool!")]),e._v(" "),t("p",[e._v("Luckily, "),t("strong",[e._v("thanks to temporal locality "),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn1",id:"fnref1"}},[e._v("[1]")])]),e._v(", an important part of mempool transactions spend outputs created very recently")]),e._v(", for example in the last 6 blocks.\nThe blocks are available through the p2p network, and downloading the last 6 is considered a good compromise between resource consumption and accurate prediction. We need the model to be built with the same data available in the prediction phase, as a consequence "),t("em",[e._v("the mempool data in the dataset refers only to transactions having their inputs in the last 6 blocks")]),e._v(". However the "),t("code",[e._v("bitcoin-csv")]),e._v(" tool inside the "),t("a",{attrs:{href:"https://github.com/RCasatta/bitcoin_logger",target:"_blank",rel:"noopener noreferrer"}},[e._v("data logger"),t("OutboundLink")],1),e._v(" allows to configure this parameter.")]),e._v(" "),t("h4",{attrs:{id:"the-outliers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-outliers"}},[e._v("#")]),e._v(" The outliers")]),e._v(" "),t("p",[e._v("The dataset also contains the block percentile fee rate "),t("code",[e._v("q_k")]),e._v(", considering "),t("code",[e._v("r_i")]),e._v(" to be the rate of the "),t("code",[e._v("ith")]),e._v(" transaction in a block, "),t("code",[e._v("q_k")]),e._v(" is the fee rate value such that for each transaction in a block "),t("code",[e._v("r_i")]),e._v(" < "),t("code",[e._v("q_k")]),e._v(" returns the "),t("code",[e._v("k%")]),e._v(" transactions in the block that are paying lower fees.")]),e._v(" "),t("p",[e._v("Percentiles are not used to feed the model but to filter some outliers tx.\nRemoving this observations is controversial at best and considered cheating at worse. However, it should be considered that Bitcoin Core "),t("code",[e._v("estimatesmartfee")]),e._v(" doesn't even bother to give estimation for the next block, we think this is due to the fact that many transactions that are confirming in the next block are huge overestimation, or clearly errors like "),t("a",{attrs:{href:"https://blockstream.info/tx/33291156ab79e9b4a1019b618b0acfa18cbdf8fa6b71c43a9eed62a849b86f9a",target:"_blank",rel:"noopener noreferrer"}},[e._v("this one"),t("OutboundLink")],1),e._v(" we found when we started logging data.\nThese outliers are several for transactions confirming in the next block ("),t("code",[e._v("confirms_in=1")]),e._v("), less so for "),t("code",[e._v("confirms_in=2")]),e._v(", mostly disappeared for "),t("code",[e._v("confirms_in=3")]),e._v(" or more. It's counterintuitive that overestimation exists for "),t("code",[e._v("confirms_in>1")]),e._v(", by definition an overestimation is a fee rate way higher than needed, so how is possible that an overestimation doesn't enter the very next block? There are a couple of reasons why a block is discovered without containing a transaction with high fee rate:")]),e._v(" "),t("ul",[t("li",[e._v("network latency: my node saw the transaction but the miner didn't see that transaction yet,")]),e._v(" "),t("li",[e._v("block building latency: the miner saw the transaction, but didn't finish to rebuild the block template or decided it's more efficient to finish a cycle on the older block template.")])]),e._v(" "),t("p",[e._v("To keep the model balanced, when overestimation is filtered out, underestimation are filtered out as well. This also has the effect to remove some of the transactions possibly included because a fee is payed out-of-band.\nAnother reason to filter transactions is that the dataset is over-represented by transactions with low "),t("code",[e._v("confirms_in")]),e._v(": more than 50% of transactions get confirmed in the next block, so we think it's good to filter some of these transactions.")]),e._v(" "),t("p",[e._v("The applied filters are the following:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("confirms_in")]),e._v(" "),t("th",[e._v("lower")]),e._v(" "),t("th",[e._v("higher")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("1")]),e._v(" "),t("td",[e._v("q45")]),e._v(" "),t("td",[e._v("q55")])]),e._v(" "),t("tr",[t("td",[e._v("2")]),e._v(" "),t("td",[e._v("q30")]),e._v(" "),t("td",[e._v("q70")])]),e._v(" "),t("tr",[t("td",[e._v("3")]),e._v(" "),t("td",[e._v("q1")]),e._v(" "),t("td",[e._v("q99")])])])]),e._v(" "),t("p",[e._v("Not yet convinced by the removal of these outliers? The "),t("a",{attrs:{href:"https://storage.googleapis.com/bitcoin_log/dataset_18.csv.gz",target:"_blank",rel:"noopener noreferrer"}},[e._v("dataset"),t("OutboundLink")],1),e._v(" contains all the observations, make your model 😃")]),e._v(" "),t("h4",{attrs:{id:"recap"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recap"}},[e._v("#")]),e._v(" Recap")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("column")]),e._v(" "),t("th",[e._v("used in the model")]),e._v(" "),t("th",[e._v("description")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("txid")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Transaction hash, useful for debugging")])]),e._v(" "),t("tr",[t("td",[e._v("timestamp")]),e._v(" "),t("td",[e._v("converted")]),e._v(" "),t("td",[e._v("The time when the transaction has been added in the mempool, in the model is used in the form "),t("code",[e._v("day_of_week")]),e._v(" and "),t("code",[e._v("hour")])])]),e._v(" "),t("tr",[t("td",[e._v("current_height")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("The blockchain height seen by the node in this moment")])]),e._v(" "),t("tr",[t("td",[e._v("confirms_in")]),e._v(" "),t("td",[e._v("yes")]),e._v(" "),t("td",[e._v("This transaction confirmed at block height "),t("code",[e._v("current_height+confirms_in")])])]),e._v(" "),t("tr",[t("td",[e._v("fee_rate")]),e._v(" "),t("td",[e._v("target")]),e._v(" "),t("td",[e._v("This transaction fee rate measured in "),t("code",[e._v("[sat/vbytes]")])])]),e._v(" "),t("tr",[t("td",[e._v("fee_rate_bytes")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("fee rate in satoshi / bytes, used to check Bitcoin Core "),t("code",[e._v("estimatesmartfee")]),e._v(" predictions")])]),e._v(" "),t("tr",[t("td",[e._v("block_avg_fee")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("block average fee rate "),t("code",[e._v("[sat/vbytes]")]),e._v(" of block "),t("code",[e._v("current_height+confirms_in")])])]),e._v(" "),t("tr",[t("td",[e._v("core_econ")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("bitcoin "),t("code",[e._v("estimatesmartfee")]),e._v(" result for "),t("code",[e._v("confirms_in")]),e._v(" block target and in economic mode. Could be not available "),t("code",[e._v("?")]),e._v(" when a block is connected more recently than the estimation has been requested, estimation are requested every 10 secs.")])]),e._v(" "),t("tr",[t("td",[e._v("core_cons")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Same as above but with conservative mode")])]),e._v(" "),t("tr",[t("td",[e._v("mempool_len")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Sum of the mempool transactions with fee rate available (sum of every "),t("code",[e._v("a*")]),e._v(" field)")])]),e._v(" "),t("tr",[t("td",[e._v("parent_in_cpfp")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("It's 1 when the transaction has outputs that are spent in the same block in which the transaction is confirmed (they are parent in a CPFP relations).")])]),e._v(" "),t("tr",[t("td",[e._v("q1-q30-...")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Transaction confirming fast could be outliers, usually paying a lot more than required, this percentiles are used to filter those transactions,")])]),e._v(" "),t("tr",[t("td",[e._v("a1-a2-...")]),e._v(" "),t("td",[e._v("yes")]),e._v(" "),t("td",[e._v("Contains the number of transaction in the mempool with known fee rate in the ith bucket.")])])])]),e._v(" "),t("p",[t("img",{attrs:{src:"/img/fee-estimation-for-light-clients/the-good-the-bad-the-ugly.jpg",alt:"The good, the bad and the ugly"}})]),t("div",{attrs:{align:"center"}},[e._v('My biological neural network fired this, I think it\'s because a lot of chapters start with "The"')]),e._v(" "),t("br"),t("br"),t("p"),e._v(" "),t("p",[e._v("In the previous "),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"}},[e._v("Part 1")]),e._v(" we talked about the problem.")],1),e._v(" "),t("p",[e._v("In the following "),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"}},[e._v("Part 3")]),e._v(" we are going to talk about the model.")],1),e._v(" "),t("hr",{staticClass:"footnotes-sep"}),e._v(" "),t("section",{staticClass:"footnotes"},[t("ol",{staticClass:"footnotes-list"},[t("li",{staticClass:"footnote-item",attrs:{id:"fn1"}},[t("p",[e._v("In computer science temporal locality refers to the tendency to access recent data more often than older data. "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref1"}},[e._v("↩︎")])])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{414:function(e,t,a){"use strict";a.r(t);var o=a(7),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("This post is part 2 of 3 of a series. ("),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"}},[e._v("Part 1")]),e._v(", "),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"}},[e._v("Part 3")]),e._v(")")],1),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"#the-dataset"}},[e._v("The dataset")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"#the-mempool"}},[e._v("The mempool")])]),e._v(" "),t("li",[t("a",{attrs:{href:"#the-outliers"}},[e._v("The outliers")])]),e._v(" "),t("li",[t("a",{attrs:{href:"#recap"}},[e._v("Recap")])])])])]),e._v(" "),t("h2",{attrs:{id:"the-dataset"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-dataset"}},[e._v("#")]),e._v(" The dataset")]),e._v(" "),t("p",[e._v("The "),t("a",{attrs:{href:"https://storage.googleapis.com/bitcoin_log/dataset_18.csv.gz",target:"_blank",rel:"noopener noreferrer"}},[e._v("dataset"),t("OutboundLink")],1),e._v(" is publicly available (~500MB gzip compressed, ~2GB as plain CSV).")]),e._v(" "),t("p",[e._v("The output of the model is the fee rate, expressed in "),t("code",[e._v("[satoshi/vbytes]")]),e._v(".")]),e._v(" "),t("p",[e._v("What about the inputs? Generally speaking, we have two main requirements for what can be included as input for our model:")]),e._v(" "),t("ul",[t("li",[e._v("It must be correlated to the output, even with a non-linear relation.")]),e._v(" "),t("li",[e._v("It must be available to a light client: for instance, assuming to have knowledge and an index of the last 1000 blocks is considered too much.")])]),e._v(" "),t("p",[e._v("To evaluate the approach we are taking, we also want to compare our model's results with another available estimation: for this reason the dataset includes data to compute the error agains Bitcoin Core's "),t("code",[e._v("estimatesmartfee")]),e._v(" results, even though we are not going to use it for this model.")]),e._v(" "),t("p",[e._v("The dataset will contain only transactions that spend already confirmed inputs. If we wanted to include transactions with unconfirmed inputs as well, the fee rate would have to be computed as a whole;\nfor example if transaction "),t("code",[e._v("t2")]),e._v(" spends an unconfirmed input from "),t("code",[e._v("t1")]),e._v(" (while "),t("code",[e._v("t1")]),e._v(" only spends confirmed inputs, and all its other outputs are unspent), the aggregated fee rate would have to be used.\nSupposing "),t("code",[e._v("f()")]),e._v(" is extracts the absolute fee and "),t("code",[e._v("w()")]),e._v(" the transaction weight, the aggregated fee rate would be "),t("code",[e._v("(f(t1) + f(t2)) / (w(t1) + w(t2))")]),e._v(". Thus, as already said previously, to keep things simple the model simply discards all the transaction\nthat would need to perform this computation.")]),e._v(" "),t("p",[e._v("For the same reason the dataset has the "),t("code",[e._v("parent_in_cpfp")]),e._v(" flag. When a transaction has inputs confirmed (so it's not excluded by the previous rule) but one or more of its output have been spent by a transaction confirmed in the same block, "),t("code",[e._v("parent_in_cpfp")]),e._v(" is "),t("code",[e._v("1")]),e._v(".\nTransactions with "),t("code",[e._v("parent_in_cpfp = 1")]),e._v(" are included in the dataset but excluded by the current model, since the miner probably considered an aggregated fee rate while picking the transactions to build a block.")]),e._v(" "),t("h4",{attrs:{id:"the-mempool"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-mempool"}},[e._v("#")]),e._v(" The mempool")]),e._v(" "),t("p",[e._v("The most important input of our model is the current "),t("em",[e._v("status")]),e._v(' of the mempool itself. However, we cannot feed the model with a list of the fee rate of every unconfirmed transaction, because this array would have a variable length.\nTo overcome this, the transaction contained in the mempool are grouped in "buckets" which are basically subsets of the mempool where all the transactions contained in a bucket have a similar fee rate. In particular we only care about the\n'),t("em",[e._v("number")]),e._v(" of transaction in every "),t("em",[e._v("bucket")]),e._v(", not which transactions it contains.")]),e._v(" "),t("p",[e._v("The mempool buckets array is defined by two parameters, the "),t("code",[e._v("percentage_increment")]),e._v(" and the "),t("code",[e._v("array_max")]),e._v(" value.\nStarting from the minimum fee rate value "),t("code",[e._v("min_relay_fee=1.0")]),e._v(", the "),t("code",[e._v("ith")]),e._v(" element is: "),t("code",[e._v("a_i=min_relay_fee * (1+percentage_increment)^(i+1)")])]),e._v(" "),t("p",[e._v("For instance, choosing the mempool buckets array to have parameters "),t("code",[e._v("percentage_increment = 50%")]),e._v(" and "),t("code",[e._v("array_max = 500.0 sat/vbytes")]),e._v(" the buckets would be constructed like so:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("bucket")]),e._v(" "),t("th",[e._v("bucket min fee rate")]),e._v(" "),t("th",[e._v("bucket max fee rate")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("a_0")]),e._v(" "),t("td",[e._v("1.0")]),e._v(" "),t("td",[e._v("1.5")])]),e._v(" "),t("tr",[t("td",[e._v("a_1")]),e._v(" "),t("td",[e._v("1.5")]),e._v(" "),t("td",[e._v("2.25")])]),e._v(" "),t("tr",[t("td",[e._v("a_2")]),e._v(" "),t("td",[e._v("2.25")]),e._v(" "),t("td",[e._v("3.375")])]),e._v(" "),t("tr",[t("td",[e._v("a_15")]),e._v(" "),t("td",[e._v("437.89")]),e._v(" "),t("td",[e._v("inf")])])])]),e._v(" "),t("p",[e._v("The array stops at "),t("code",[e._v("a15")]),e._v(" because "),t("code",[e._v("a16")]),e._v(" would have a bucket min greater than "),t("code",[e._v("array_max")]),e._v(".")]),e._v(" "),t("p",[e._v("The model is for light-client such as "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[e._v("neutrino"),t("OutboundLink")],1),e._v(" based ones. In these clients the mempool is already available (it's needed to check for received transactions) but we can't compute fee rates of this transactions because previous confirmed inputs are not in the mempool!")]),e._v(" "),t("p",[e._v("Luckily, "),t("strong",[e._v("thanks to temporal locality "),t("sup",{staticClass:"footnote-ref"},[t("a",{attrs:{href:"#fn1",id:"fnref1"}},[e._v("[1]")])]),e._v(", an important part of mempool transactions spend outputs created very recently")]),e._v(", for example in the last 6 blocks.\nThe blocks are available through the p2p network, and downloading the last 6 is considered a good compromise between resource consumption and accurate prediction. We need the model to be built with the same data available in the prediction phase, as a consequence "),t("em",[e._v("the mempool data in the dataset refers only to transactions having their inputs in the last 6 blocks")]),e._v(". However the "),t("code",[e._v("bitcoin-csv")]),e._v(" tool inside the "),t("a",{attrs:{href:"https://github.com/RCasatta/bitcoin_logger",target:"_blank",rel:"noopener noreferrer"}},[e._v("data logger"),t("OutboundLink")],1),e._v(" allows to configure this parameter.")]),e._v(" "),t("h4",{attrs:{id:"the-outliers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-outliers"}},[e._v("#")]),e._v(" The outliers")]),e._v(" "),t("p",[e._v("The dataset also contains the block percentile fee rate "),t("code",[e._v("q_k")]),e._v(", considering "),t("code",[e._v("r_i")]),e._v(" to be the rate of the "),t("code",[e._v("ith")]),e._v(" transaction in a block, "),t("code",[e._v("q_k")]),e._v(" is the fee rate value such that for each transaction in a block "),t("code",[e._v("r_i")]),e._v(" < "),t("code",[e._v("q_k")]),e._v(" returns the "),t("code",[e._v("k%")]),e._v(" transactions in the block that are paying lower fees.")]),e._v(" "),t("p",[e._v("Percentiles are not used to feed the model but to filter some outliers tx.\nRemoving this observations is controversial at best and considered cheating at worse. However, it should be considered that Bitcoin Core "),t("code",[e._v("estimatesmartfee")]),e._v(" doesn't even bother to give estimation for the next block, we think this is due to the fact that many transactions that are confirming in the next block are huge overestimation, or clearly errors like "),t("a",{attrs:{href:"https://blockstream.info/tx/33291156ab79e9b4a1019b618b0acfa18cbdf8fa6b71c43a9eed62a849b86f9a",target:"_blank",rel:"noopener noreferrer"}},[e._v("this one"),t("OutboundLink")],1),e._v(" we found when we started logging data.\nThese outliers are several for transactions confirming in the next block ("),t("code",[e._v("confirms_in=1")]),e._v("), less so for "),t("code",[e._v("confirms_in=2")]),e._v(", mostly disappeared for "),t("code",[e._v("confirms_in=3")]),e._v(" or more. It's counterintuitive that overestimation exists for "),t("code",[e._v("confirms_in>1")]),e._v(", by definition an overestimation is a fee rate way higher than needed, so how is possible that an overestimation doesn't enter the very next block? There are a couple of reasons why a block is discovered without containing a transaction with high fee rate:")]),e._v(" "),t("ul",[t("li",[e._v("network latency: my node saw the transaction but the miner didn't see that transaction yet,")]),e._v(" "),t("li",[e._v("block building latency: the miner saw the transaction, but didn't finish to rebuild the block template or decided it's more efficient to finish a cycle on the older block template.")])]),e._v(" "),t("p",[e._v("To keep the model balanced, when overestimation is filtered out, underestimation are filtered out as well. This also has the effect to remove some of the transactions possibly included because a fee is payed out-of-band.\nAnother reason to filter transactions is that the dataset is over-represented by transactions with low "),t("code",[e._v("confirms_in")]),e._v(": more than 50% of transactions get confirmed in the next block, so we think it's good to filter some of these transactions.")]),e._v(" "),t("p",[e._v("The applied filters are the following:")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("confirms_in")]),e._v(" "),t("th",[e._v("lower")]),e._v(" "),t("th",[e._v("higher")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("1")]),e._v(" "),t("td",[e._v("q45")]),e._v(" "),t("td",[e._v("q55")])]),e._v(" "),t("tr",[t("td",[e._v("2")]),e._v(" "),t("td",[e._v("q30")]),e._v(" "),t("td",[e._v("q70")])]),e._v(" "),t("tr",[t("td",[e._v("3")]),e._v(" "),t("td",[e._v("q1")]),e._v(" "),t("td",[e._v("q99")])])])]),e._v(" "),t("p",[e._v("Not yet convinced by the removal of these outliers? The "),t("a",{attrs:{href:"https://storage.googleapis.com/bitcoin_log/dataset_18.csv.gz",target:"_blank",rel:"noopener noreferrer"}},[e._v("dataset"),t("OutboundLink")],1),e._v(" contains all the observations, make your model 😃")]),e._v(" "),t("h4",{attrs:{id:"recap"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recap"}},[e._v("#")]),e._v(" Recap")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("column")]),e._v(" "),t("th",[e._v("used in the model")]),e._v(" "),t("th",[e._v("description")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("txid")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Transaction hash, useful for debugging")])]),e._v(" "),t("tr",[t("td",[e._v("timestamp")]),e._v(" "),t("td",[e._v("converted")]),e._v(" "),t("td",[e._v("The time when the transaction has been added in the mempool, in the model is used in the form "),t("code",[e._v("day_of_week")]),e._v(" and "),t("code",[e._v("hour")])])]),e._v(" "),t("tr",[t("td",[e._v("current_height")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("The blockchain height seen by the node in this moment")])]),e._v(" "),t("tr",[t("td",[e._v("confirms_in")]),e._v(" "),t("td",[e._v("yes")]),e._v(" "),t("td",[e._v("This transaction confirmed at block height "),t("code",[e._v("current_height+confirms_in")])])]),e._v(" "),t("tr",[t("td",[e._v("fee_rate")]),e._v(" "),t("td",[e._v("target")]),e._v(" "),t("td",[e._v("This transaction fee rate measured in "),t("code",[e._v("[sat/vbytes]")])])]),e._v(" "),t("tr",[t("td",[e._v("fee_rate_bytes")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("fee rate in satoshi / bytes, used to check Bitcoin Core "),t("code",[e._v("estimatesmartfee")]),e._v(" predictions")])]),e._v(" "),t("tr",[t("td",[e._v("block_avg_fee")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("block average fee rate "),t("code",[e._v("[sat/vbytes]")]),e._v(" of block "),t("code",[e._v("current_height+confirms_in")])])]),e._v(" "),t("tr",[t("td",[e._v("core_econ")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("bitcoin "),t("code",[e._v("estimatesmartfee")]),e._v(" result for "),t("code",[e._v("confirms_in")]),e._v(" block target and in economic mode. Could be not available "),t("code",[e._v("?")]),e._v(" when a block is connected more recently than the estimation has been requested, estimation are requested every 10 secs.")])]),e._v(" "),t("tr",[t("td",[e._v("core_cons")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Same as above but with conservative mode")])]),e._v(" "),t("tr",[t("td",[e._v("mempool_len")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Sum of the mempool transactions with fee rate available (sum of every "),t("code",[e._v("a*")]),e._v(" field)")])]),e._v(" "),t("tr",[t("td",[e._v("parent_in_cpfp")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("It's 1 when the transaction has outputs that are spent in the same block in which the transaction is confirmed (they are parent in a CPFP relations).")])]),e._v(" "),t("tr",[t("td",[e._v("q1-q30-...")]),e._v(" "),t("td",[e._v("no")]),e._v(" "),t("td",[e._v("Transaction confirming fast could be outliers, usually paying a lot more than required, this percentiles are used to filter those transactions,")])]),e._v(" "),t("tr",[t("td",[e._v("a1-a2-...")]),e._v(" "),t("td",[e._v("yes")]),e._v(" "),t("td",[e._v("Contains the number of transaction in the mempool with known fee rate in the ith bucket.")])])])]),e._v(" "),t("p",[t("img",{attrs:{src:"/img/fee-estimation-for-light-clients/the-good-the-bad-the-ugly.jpg",alt:"The good, the bad and the ugly"}})]),t("div",{attrs:{align:"center"}},[e._v('My biological neural network fired this, I think it\'s because a lot of chapters start with "The"')]),e._v(" "),t("br"),t("br"),t("p"),e._v(" "),t("p",[e._v("In the previous "),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"}},[e._v("Part 1")]),e._v(" we talked about the problem.")],1),e._v(" "),t("p",[e._v("In the following "),t("RouterLink",{attrs:{to:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"}},[e._v("Part 3")]),e._v(" we are going to talk about the model.")],1),e._v(" "),t("hr",{staticClass:"footnotes-sep"}),e._v(" "),t("section",{staticClass:"footnotes"},[t("ol",{staticClass:"footnotes-list"},[t("li",{staticClass:"footnote-item",attrs:{id:"fn1"}},[t("p",[e._v("In computer science temporal locality refers to the tendency to access recent data more often than older data. "),t("a",{staticClass:"footnote-backref",attrs:{href:"#fnref1"}},[e._v("↩︎")])])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/61.33b6fbe5.js b/assets/js/61.a3e37a93.js similarity index 99% rename from assets/js/61.33b6fbe5.js rename to assets/js/61.a3e37a93.js index 5f703cd47c..4172320ef1 100644 --- a/assets/js/61.33b6fbe5.js +++ b/assets/js/61.a3e37a93.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{418:function(e,t,s){"use strict";s.r(t);var n=s(7),a=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("This is the first of a two-parts blog series in which I will try to explain all the changes that I made to BDK (and some of its dependencies) to make our "),t("a",{attrs:{href:"https://twitter.com/afilini/status/1459763243556163584",target:"_blank",rel:"noopener noreferrer"}},[e._v("first Taproot transaction in mainnet"),t("OutboundLink")],1),e._v(", which also\nturned out to be "),t("a",{attrs:{href:"https://twitter.com/afilini/status/1459774394054725634",target:"_blank",rel:"noopener noreferrer"}},[e._v("the first ever use of the new "),t("code",[e._v("OP_CHECKSIGADD")]),e._v(" opcode"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Hopefully this will give an insight into what kind of changes need to be made to a wallet in order to support spending "),t("code",[e._v("P2TR")]),e._v(" outputs, both with key-spend and script-spend. BDK actually delegates\nmost of the hard work to "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(", and luckily most of the Taproot code was already implemented by the time I started working on it. I only had to patch a few little bugs here and there, and it ended up\nworking flawlessly in the end.")]),e._v(" "),t("p",[e._v("In this first part I will focus on the changes made to our dependencies, "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(". In the second part I will talk about BDK itself.")]),e._v(" "),t("h2",{attrs:{id:"backstory"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#backstory"}},[e._v("#")]),e._v(" Backstory")]),e._v(" "),t("p",[e._v("On the evening of Thursday, November 11th I was attending our weekly "),t("a",{attrs:{href:"https://www.satoshispritz.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Satoshi Spritz"),t("OutboundLink")],1),e._v(" meetup in Milan. The activation of Taproot was right around the corner, and naturally that was the main discussion\ntopic that night. The activation was forecasted for the early afternoon of Sunday, November 14th, a little less than 72h later.")]),e._v(" "),t("p",[e._v("I began to wonder how hard it would be to patch BDK and add support for Taproot. I knew most of the work had already been done in our main dependencies, "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(", and so I decided\nto challenge myself: could I make it in time for the activation?")]),e._v(" "),t("p",[e._v('The following day I started digging into the topic. It didn\'t help that up until that time I only had a rather "high level" idea of how Taproot worked, but luckily all the BIPs were very well written and\nstraightforward to understand.')]),e._v(" "),t("p",[e._v("By Friday night (or rather, early Saturday morning) "),t("a",{attrs:{href:"https://mempool.space/signet/tx/ba0ebb350717701ca4ea109aadfbaf3058f6cd73e5ece3927ddee653de06cf5a",target:"_blank",rel:"noopener noreferrer"}},[e._v("I had Taproot key-spend working"),t("OutboundLink")],1),e._v(", which made me pretty optimistic even though the activation date was actually moving closer, now being forecasted for\nSunday "),t("em",[e._v("morning")]),e._v(".")]),e._v(" "),t("p",[e._v("After a few hours of sleep I went back to work and by early Saturday afternoon "),t("a",{attrs:{href:"https://mempool.space/signet/tx/41d7d49f9f4edffa9ca88ad6fb887fbf1ae68f9f31def267fdb3a5949f766bf5",target:"_blank",rel:"noopener noreferrer"}},[e._v("I had Taproot script-spend working as well"),t("OutboundLink")],1),e._v(". This left me a few hours to coordinate with some friends and "),t("a",{attrs:{href:"https://mempool.space/address/1Taproote7gvQGKz5g982ecSbPvqJhMUf",target:"_blank",rel:"noopener noreferrer"}},[e._v("generate a vanity address"),t("OutboundLink")],1),e._v("\nto deposit funds into temporarily, as we didn't trust sending them to Taproot addresses before the activation (as they were anyone-can-spend according to the pre-activation rules).")]),e._v(" "),t("p",[e._v("After another pretty short night, I woke up a 5:30 AM on Sunday to monitor the activation. I broadcasted our transactions shortly after 6:00 AM as the activation block was being mined. Unfortunately, the first\nthree blocks that were enforcing Taproot rules "),t("a",{attrs:{href:"https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019598.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("didn't include any Taproot transaction"),t("OutboundLink")],1),e._v(", which indicates that the miners weren't actually running the new Bitcoin Core 22.0 nodes. The fourth block, mined by "),t("code",[e._v("Foundry USA")]),e._v(" "),t("a",{attrs:{href:"https://mempool.space/tx/2eb8dbaa346d4be4e82fe444c2f0be00654d8cfd8c4a9a61b11aeaab8c00b272",target:"_blank",rel:"noopener noreferrer"}},[e._v("included my transaction"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://twitter.com/achow101/status/1459760452775387136?s=20",target:"_blank",rel:"noopener noreferrer"}},[e._v("a few others"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("In the end our transaction was the third Taproot script-spend in the block, but the first to use the new "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#script-execution",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("OP_CHECKSIGADD")]),t("OutboundLink")],1),e._v(" opcode, as the two preceding it were respectively "),t("a",{attrs:{href:"https://mempool.space/tx/37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8",target:"_blank",rel:"noopener noreferrer"}},[e._v("a single-sig"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://mempool.space/tx/905ecdf95a84804b192f4dc221cfed4d77959b81ed66013a7e41a6e61e7ed530",target:"_blank",rel:"noopener noreferrer"}},[e._v("a 2-of-2 multisig"),t("OutboundLink")],1),e._v("\nscript, made with with two "),t("code",[e._v("OP_CHECKSIG(VERIFY)")]),e._v("s.")]),e._v(" "),t("p",[e._v("Now, with the context out of the way, we can begin talking about the code!")]),e._v(" "),t("h2",{attrs:{id:"rust-bitcoin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust-bitcoin"}},[e._v("#")]),e._v(" rust-bitcoin")]),e._v(" "),t("p",[e._v("The first dependency I had to update was "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(". Most of the taproot stuff were already merged in "),t("code",[e._v("master")]),e._v(" (altough they hadn't been released yet). One notable missing part was the support for "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0371.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP371")]),t("OutboundLink")],1),e._v(",\nwhich is an extension of "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP174")]),t("OutboundLink")],1),e._v(", aka the "),t("code",[e._v("Partially Signed Bitcoin Transaction")]),e._v(" BIP. This new BIP defines a few new fields that are required to properly handle Taproot transactions.")]),e._v(" "),t("p",[e._v("Luckily most of the work had already been done by "),t("a",{attrs:{href:"https://twitter.com/sanket1729",target:"_blank",rel:"noopener noreferrer"}},[e._v("sanket1729"),t("OutboundLink")],1),e._v(", so I forked his branch and made only few very minor changes, just to expose a structure that I will have to use later which in his code wasn't public.")]),e._v(" "),t("p",[e._v("You can find all the commits mentioned here in "),t("a",{attrs:{href:"https://github.com/afilini/rust-bitcoin/tree/taproot-testing",target:"_blank",rel:"noopener noreferrer"}},[e._v("my rust-bitcoin "),t("code",[e._v("taproot-testing")]),e._v(" branch"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git diff 187234f f830df9\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("diff --git a/src/lib.rs b/src/lib.rs\nindex 87d9c36..d5e5802 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("@@ -54,7 +54,6 @@")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_mut)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(dead_code)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_imports)]\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(missing_docs)]\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_must_use)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(broken_intra_doc_links)]\n")])]),e._v("\ndiff --git a/src/util/taproot.rs b/src/util/taproot.rs\nindex 674eeee..3d56cbc 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/util/taproot.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/util/taproot.rs")]),e._v("\n@@ -440,7 +440,7 @@ impl TaprootBuilder {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("// Internally used structure to represent the node information in taproot tree\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]\n')])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("pub(crate) struct NodeInfo {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("pub struct NodeInfo {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" /// Merkle Hash for this node\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub(crate) hash: sha256::Hash,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" /// information about leaves inside this node\n")])]),e._v("@@ -448,8 +448,12 @@ pub(crate) struct NodeInfo {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("}\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("impl NodeInfo {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn hash(&self) -> &sha256::Hash {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" &self.hash\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Create a new NodeInfo with omitted/hidden info\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn new_hidden(hash: sha256::Hash) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn new_hidden(hash: sha256::Hash) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Self {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" hash: hash,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" leaves: vec![],\n")])]),e._v("@@ -457,7 +461,7 @@ impl NodeInfo {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Create a new leaf with NodeInfo\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn new_leaf_with_ver(script: Script, ver: LeafVersion) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn new_leaf_with_ver(script: Script, ver: LeafVersion) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let leaf = LeafInfo::new(script, ver);\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Self {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" hash: leaf.hash(),\n")])]),e._v("@@ -466,7 +470,7 @@ impl NodeInfo {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Combine two NodeInfo's to create a new parent\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn combine(a: Self, b: Self) -> Result {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn combine(a: Self, b: Self) -> Result {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut all_leaves = Vec::with_capacity(a.leaves.len() + b.leaves.len());\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for mut a_leaf in a.leaves {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" a_leaf.merkle_branch.push(b.hash)?; // add hashing partner\n")])]),e._v("\n")])])]),t("p",[e._v("There isn't much to explain here: I disabled the "),t("code",[e._v("missing_docs")]),e._v(" lint so that the compiler wouldn't complain about the new public methods that aren't documented.\nThen, I added a getter for the "),t("code",[e._v("hash")]),e._v(" field of "),t("code",[e._v("NodeInfo")]),e._v(" and made the struct itself and a bunch of methods public.")]),e._v(" "),t("p",[e._v('We will use this structure later to recover the merkle root of a Taproot script tree, given one leaf and the other "hidden" branches.')]),e._v(" "),t("h2",{attrs:{id:"rust-miniscript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust-miniscript"}},[e._v("#")]),e._v(" rust-miniscript")]),e._v(" "),t("p",[e._v("Moving on to "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(': once again, most of the work required to support Taproot had already been done, but this time I was working with very "early" prototype-like code, so I was prepared to\nmake some changes to the code to get it to work how I wanted.')]),e._v(" "),t("p",[e._v("Instead of showing one big diff I will talk about the commits individually, which I think will help making more clear what I was doing.")]),e._v(" "),t("p",[e._v("Once again, you can find all the commits referenced here in "),t("a",{attrs:{href:"https://github.com/afilini/rust-miniscript/tree/taproot",target:"_blank",rel:"noopener noreferrer"}},[e._v("my rust-miniscript "),t("code",[e._v("taproot")]),e._v(" branch"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 34cf15b\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 34cf15b3aac1d8c2693af1b9749b888f3f29e510\nAuthor: Alekos Filini \nDate: Fri Nov 12 12:06:35 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Fix TapTree iter depth\n")])]),e._v("\ndiff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs\nindex 79d3c05..314c7f4 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/tr.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/tr.rs")]),e._v("\n@@ -65,7 +65,7 @@ impl TapTree {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" /// Iterate over all miniscripts\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn iter(&self) -> TapTreeIter {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTreeIter { stack: vec![self] }\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTreeIter { stack: vec![(0, self)] }\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Helper function to translate keys\n")])]),e._v("@@ -262,7 +262,7 @@ pub struct TapTreeIter<'a, Pk: MiniscriptKey>\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("where\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Pk: 'a,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("{\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" stack: Vec<&'a TapTree>,\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" stack: Vec<(usize, &'a TapTree)>,\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("}\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("impl<'a, Pk> Iterator for TapTreeIter<'a, Pk>\n")])]),e._v("@@ -273,13 +273,13 @@ where\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn next(&mut self) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" while !self.stack.is_empty() {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let last = self.stack.pop().expect("Size checked above");\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let (depth, last) = self.stack.pop().expect("Size checked above");\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match &*last {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTree::Tree(l, r) => {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push(&r);\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push(&l);\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push((depth + 1, &r));\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push((depth + 1, &l));\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTree::Leaf(ref ms) => return Some((self.stack.len(), ms)),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTree::Leaf(ref ms) => return Some((depth, ms)),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" None\n")])])])])]),t("p",[t("code",[e._v("TapTreeIterator")]),e._v(" is an iterator that goes through a "),t("code",[e._v("TapTree")]),e._v(" and yields a "),t("code",[e._v("(depth, node)")]),e._v(" pair. This is then fed to "),t("a",{attrs:{href:"https://github.com/afilini/rust-miniscript/blob/taproot/src/descriptor/tr.rs#L183-L189",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("TaprootBuilder")]),t("OutboundLink")],1),e._v(", which returns an error if trying to insert nodes\nin "),t("a",{attrs:{href:"https://github.com/afilini/rust-bitcoin/blob/taproot-testing/src/util/taproot.rs#L403-L405",target:"_blank",rel:"noopener noreferrer"}},[e._v("an order that is not DFS"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("The way the depth was computed before made the builder always fail for non-trivial trees (i.e. more than 1 node).")]),e._v(" "),t("p",[e._v("Here I decided to play the safe card, and just keep track of the depth explicitly: I think there might be a way to compute the depth just knowing the "),t("code",[e._v("self.stack.len()")]),e._v(" (assuming the tree has a specific structure,\nwhich I'm not sure applies here), but anyway I didn't have much time to think about it and I just went for the \"dumb but idiot-proof\" way which ended up working fine.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show f4a3459\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit f4a3459128e37ca0c2701b8b6da064d4952296ff\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:15:52 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Switch rust-bitcoin rev\n")])]),e._v("\ndiff --git a/Cargo.toml b/Cargo.toml\nindex 12825e8..8240024 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/Cargo.toml")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/Cargo.toml")]),e._v('\n@@ -17,7 +17,7 @@ rand = ["bitcoin/rand"]\n\n'),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("[dependencies]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('# bitcoin = "0.27"\n')])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('bitcoin = {git = "https://github.com/sanket1729/rust-bitcoin", branch = "taproot_psbt"}\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('bitcoin = { git = "https://github.com/afilini/rust-bitcoin.git", branch = "taproot-testing" }\n')])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("[dependencies.serde]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('version = "1.0"\n')])])])])]),t("p",[e._v("Trivial commit, switch to "),t("a",{attrs:{href:"https://github.com/afilini/rust-bitcoin/tree/taproot-testing",target:"_blank",rel:"noopener noreferrer"}},[e._v("my fork of rust-bitcoin"),t("OutboundLink")],1),e._v(" so that I can make changes if necessary.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 0446b16\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 0446b1631cec9f7118d46f0f4c94ccd20de29f94\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:25:18 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Parse x-only keys\n")])]),e._v("\ndiff --git a/src/descriptor/key.rs b/src/descriptor/key.rs\nindex 4108d00..b7f90b5 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/key.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/key.rs")]),e._v("\n@@ -283,9 +283,9 @@ impl FromStr for DescriptorPublicKey {\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn from_str(s: &str) -> Result {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' // A "raw" public key without any origin is the least we accept.\n')])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if s.len() < 66 {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if s.len() < 64 {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" return Err(DescriptorKeyParseError(\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' "Key too short (<66 char), doesn\'t match any format",\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' "Key too short (<64 char), doesn\'t match any format",\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" ));\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n@@ -301,6 +301,14 @@ impl FromStr for DescriptorPublicKey {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" derivation_path,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" wildcard,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }))\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else if key_part.len() == 64 {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // x-only pubkey, prefix it with `02`\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let key = bitcoin::PublicKey::from_str(&format!("02{}", key_part))\n')]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' .map_err(|_| DescriptorKeyParseError("Error while parsing x-only public key"))?;\n')]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Ok(DescriptorPublicKey::SinglePub(DescriptorSinglePub {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" key,\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" origin,\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }))\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if key_part.len() >= 2\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' && !(&key_part[0..2] == "02" || &key_part[0..2] == "03" || &key_part[0..2] == "04")\n')])]),e._v("diff --git a/src/lib.rs b/src/lib.rs\nindex e168b16..3a2335e 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("@@ -95,8 +95,6 @@")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(non_snake_case)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_mut)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(dead_code)]\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_imports)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(missing_docs)]\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("pub extern crate bitcoin;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('#[cfg(feature = "serde")]\n')])])])])]),t("p",[e._v("This, I'm not really sure of: Taproot uses x-only public keys, which means that the first byte (which is usually a "),t("code",[e._v("03")]),e._v(" or a "),t("code",[e._v("02")]),e._v(") that indicates the parity of the EC point is completely dropped, and it's implicit\nthat the point is even (= "),t("code",[e._v("02")]),e._v("). Check out "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP340")]),t("OutboundLink")],1),e._v(" for a much better explanation.")]),e._v(" "),t("p",[e._v("So here when I find a string that is only 64 characters long I will assume it's an x-only pubkey, and I will parse it as a normal "),t("code",[e._v("bitcoin::PublicKey")]),e._v(" by prefixing it with "),t("code",[e._v("02")]),e._v(".")]),e._v(" "),t("p",[e._v("I guess one alternative could have been to try and parse it as a "),t("code",[e._v("schnorr::PublicKey")]),e._v(' and then "convert" it to a '),t("code",[e._v("ecdsa::PublicKey")]),e._v(" which should be supported, but once again I just wanted to get it done quickly and\nthis worked fine.")]),e._v(" "),t("p",[e._v("I also disabled the "),t("code",[e._v("unused_imports")]),e._v(" and "),t("code",[e._v("missing_docs")]),e._v(" lint so that the compiler wouldn't whine too much.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 87316ff\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 87316fffd06ab3bdf300fd1a958ddaa2789a6696\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:26:01 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Parse `tr()` descriptors\n")])]),e._v("\ndiff --git a/src/descriptor/mod.rs b/src/descriptor/mod.rs\nindex 06d98e1..4190786 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/mod.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/mod.rs")]),e._v("\n@@ -610,6 +610,7 @@ where\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("wpkh", 1) => Descriptor::Wpkh(Wpkh::from_tree(top)?),\n')]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("sh", 1) => Descriptor::Sh(Sh::from_tree(top)?),\n')]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("wsh", 1) => Descriptor::Wsh(Wsh::from_tree(top)?),\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("tr", _) => Descriptor::Tr(Tr::from_tree(top)?),\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => Descriptor::Bare(Bare::from_tree(top)?),\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" })\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("diff --git a/src/expression.rs b/src/expression.rs\nindex 1cef614..11a68d3 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/expression.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/expression.rs")]),e._v("\n@@ -100,7 +100,12 @@ impl<'a> Tree<'a> {\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" sl = &sl[n + 1..];\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" loop {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let (arg, new_sl) = Tree::from_slice_helper_round(sl, depth + 1)?;\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let (arg, new_sl) = if sl.contains('{') {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Tree::from_slice_helper_curly(sl, depth + 1)?\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Tree::from_slice_helper_round(sl, depth + 1)?\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" };\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" ret.args.push(arg);\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if new_sl.is_empty() {\n")])])])])]),t("p",[e._v("When trying to parse a descriptor (essentially turning a recursive string of "),t("code",[e._v("operator(args)")]),e._v(" into an abstract tree in memory) use a "),t("em",[e._v("curly-bracket-aware")]),e._v(" parser if there is one in the string.")]),e._v(" "),t("p",[e._v("The code to then build a "),t("code",[e._v("Tr")]),e._v(" struct given an "),t("code",[e._v("expression::Tree")]),e._v(" (and the "),t("code",[e._v("from_slice_helper_curly")]),e._v(" function) were already implemented, so it was just a matter of correctly\nbuilding the abstract tree by parsing curly brackets in descriptors.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 3055cab\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 3055cabef8bd51eda344ce501b03c533fd367b4f\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:26:30 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Fix control block creation when satisfying `Tr`\n")])]),e._v("\ndiff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs\nindex 314c7f4..8487d56 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/tr.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/tr.rs")]),e._v("\n@@ -571,17 +571,14 @@ impl DescriptorTrait for Tr {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let ver = LeafVersion::default();\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let leaf_script = (ms.encode(), ver);\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let control_block_set = spend_info\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .as_script_map()\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .get(&leaf_script)\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' .expect("Control block must exist in script map for every known leaf");\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // let control_block_set = spend_info\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // .as_script_map()\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // .get(&leaf_script)\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' // .expect("Control block must exist in script map for every known leaf");\n')]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let control_block = spend_info.control_block(&leaf_script).expect("Control block must exist in script map for every known leaf");\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" wit.push(leaf_script.0.into_bytes()); // Push the leaf script\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // There can be multiple control blocks for a (script, ver) pair\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Find the smallest one amongst those\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let control_block = control_block_set\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .iter()\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .min_by(|x, y| x.as_inner().len().cmp(&y.as_inner().len()))\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' .expect("Atleast one control must exist for a known leaf");\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" wit.push(control_block.serialize());\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Finally, save the minimum\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" min_wit = Some(wit);\n")])]),e._v("\n")])])]),t("p",[e._v("This is where things get more interesting: this section of code builds the witness to satisfy a Taproot descriptor. In case of a script-spend, we need to prove that the script we are using had been committed\ninto the public key of our "),t("code",[e._v("P2TR")]),e._v(' input. We do this by adding a "control block", that contains data about the parity of the key, the leaf version used, and the merkle path from the leaf we are using to spend\nup to the merkle root, which is committed into the public key. Once again, this is explained very well in '),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP341")]),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Before my patch the code was only getting the set of merkle paths that could lead from the root to the leaves that contain a given script. For context, the signature of "),t("code",[e._v("TaprootSpendInfo::as_script_map(&self)")]),e._v(" is:")]),e._v(" "),t("div",{staticClass:"language-rust extra-class"},[t("pre",{pre:!0,attrs:{class:"language-rust"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// Access the internal script map")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("pub")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("fn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function-definition function"}},[e._v("as_script_map")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("->")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("BTreeMap")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("LeafVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("BTreeSet")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("TaprootMerkleBranch")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">>")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v('Then the code would look for the "shortest" path to that specific script, as it would save size in the final transaction (leaves that are more "deep" in the tree than others naturally have more hidden branches\nin their path to the root, and thus require a longer control block to reveal them all).')]),e._v(" "),t("p",[e._v("The issue here is that the "),t("code",[e._v("control_block")]),e._v(" variable is then serialized directly into the witness. But this is not a control block, it's just a set of merkle paths! A control block only has "),t("em",[e._v("one")]),e._v(" merkle path, and\nincludes the leaf version and the key parity bit.")]),e._v(" "),t("p",[e._v("Conveniently, the "),t("code",[e._v("TaprootSpendInfo")]),e._v(' struct also has this other method (I\'m including the implementation as well, because it shows that internally it does the same "trick" to find the shortest path):')]),e._v(" "),t("div",{staticClass:"language-rust extra-class"},[t("pre",{pre:!0,attrs:{class:"language-rust"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// Obtain a [`ControlBlock`] for particular script with the given version.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// Returns [`None`] if the script is not contained in the [`TaprootSpendInfo`]")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// If there are multiple ControlBlocks possible, this returns the shortest one.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("pub")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("fn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function-definition function"}},[e._v("control_block")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" script_ver"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("LeafVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("->")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Option")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("ControlBlock")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("let")]),e._v(" merkle_branch_set "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("script_map"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("get")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("script_ver"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("?")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// Choose the smallest one amongst the multiple script maps")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("let")]),e._v(" smallest "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" merkle_branch_set\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("iter")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("min_by")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token closure-params"}},[t("span",{pre:!0,attrs:{class:"token closure-punctuation punctuation"}},[e._v("|")]),e._v("x"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" y"),t("span",{pre:!0,attrs:{class:"token closure-punctuation punctuation"}},[e._v("|")])]),e._v(" x"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v(".0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cmp")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),e._v("y"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v(".0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("expect")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Non-empty iterator"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Some")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("ControlBlock")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n internal_key"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("internal_key"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n output_key_parity"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("output_key_parity"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n leaf_version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("LeafVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("default")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n merkle_branch"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" smallest"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("clone")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("So to fix this code we just have to use that method instead, and we can get it done in one single line!")]),e._v(" "),t("p",[e._v('Instead of removing the old code at the time I only commented it out, because I initially thought I would still have to look for the shortest script myself, and I figured the "sorting" code would come in handy\nlater on.')]),e._v(" "),t("p",[e._v("Also, if you are an acute observer, you might have noticed that there's a bug in this last snippet of code. Feel free to think about it a little bit, then check out the "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin/pull/703",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR"),t("OutboundLink")],1),e._v(" I made\nif you wanna know the answer!")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git show 35378ad\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 35378ad01a6f2b8161a3f36448b24d031f8aeaec\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:27:14 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Consider key-spend max satisfaction weight\n")])]),e._v("\ndiff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs\nindex 8487d56..fabf860 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/tr.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/tr.rs")]),e._v("\n@@ -593,7 +593,7 @@ impl DescriptorTrait for Tr {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn max_satisfaction_weight(&self) -> Result {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut max_wieght = None;\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut max_wieght = Some(65);\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for (depth, ms) in self.iter_scripts() {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let script_size = ms.script_size();\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let max_sat_elems = match ms.max_satisfaction_witness_elements() {\n")])])])])]),t("p",[e._v("This is a little bug in the code that tries to compute what the maximum satisfaction weight would be for a descriptor. For instance, we use this in BDK to compute how many extra sats of fees we need to pay\nin order to target a given fee rate, assuming the descriptor is satisfied with the worst (larger and most expensive) path.")]),e._v(" "),t("p",[e._v("For Taproot descriptors, it's just a matter of iterating over the leaves in the tree and pick the most expensive one... or is it? This doesn't take into account that Taproot outputs can also be spent with\nkey-spend, which means just pushing a signature to the witness. This signature is 64 bytes long when using the new "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("SIGHASH_DEFAULT")]),t("OutboundLink")],1),e._v(" sighash, or 65 otherwise. Since we are thinking about the maximum satisfaction\nweight, or the worst case possible, we naturally pick the latter.")]),e._v(" "),t("p",[e._v("Note that theoretically you could build a Taproot address \"without\" an available key-path spend (by using an unspendable Schnorr public key), but the code here in rust-miniscript doesn't take that into\naccount, as there's no way that I'm aware of to specificy in a "),t("code",[e._v("tr()")]),e._v(" descriptor that the key is unspendable. So, while theoretically here we should first check whether the key-spend path is available before\naccounting for its weight, in practice this is always true in miniscript so we just use that as our starting worst case and update it later if necessary while iterating the tree leaves.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show b4878f8\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit b4878f816e9ede11d5ed947c06e03aa988e3e26f\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:27:53 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Look for taproot stuff in psbts\n")])]),e._v("\ndiff --git a/src/psbt/mod.rs b/src/psbt/mod.rs\nindex 9a8b17d..42c6ce8 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/psbt/mod.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/psbt/mod.rs")]),e._v("\n@@ -25,13 +25,14 @@ use bitcoin;\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::hashes::{hash160, ripemd160, sha256, sha256d};\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::secp256k1::{self, Secp256k1};\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::util::psbt::PartiallySignedTransaction as Psbt;\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::util::taproot::TapLeafHash;\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::Script;\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use interpreter;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use miniscript::limits::SEQUENCE_LOCKTIME_DISABLE_FLAG;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use miniscript::satisfy::{After, Older};\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use Satisfier;\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use {BitcoinECSig, Preimage32};\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use {BitcoinECSig, BitcoinSchnorrSig, Preimage32};\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use {MiniscriptKey, ToPublicKey};\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("mod finalizer;\n")])]),e._v("@@ -231,6 +232,24 @@ impl<'psbt> PsbtInputSatisfier<'psbt> {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("}\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("impl<'psbt, Pk: MiniscriptKey + ToPublicKey> Satisfier for PsbtInputSatisfier<'psbt> {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn lookup_tap_key_spend_sig(&self) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if let Some((sig, hash_ty)) = self.psbt.inputs[self.index].tap_key_sig {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Some(BitcoinSchnorrSig { sig, hash_ty })\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" None\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn lookup_tap_leaf_script_sig(&self, pk: &Pk, lh: &TapLeafHash) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let pk = pk.to_x_only_pubkey();\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if let Some((sig, hash_ty)) = self.psbt.inputs[self.index].tap_script_sigs.get(&(pk, *lh)) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Some(BitcoinSchnorrSig { sig: *sig, hash_ty: *hash_ty })\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" None\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn lookup_ec_sig(&self, pk: &Pk) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if let Some(rawsig) = self.psbt.inputs[self.index]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .partial_sigs\n")])])])])]),t("p",[e._v("This commit implements the Taproot-specific "),t("code",[e._v("Satisfier")]),e._v(" methods on "),t("code",[e._v("PsbtInputSatisfier")]),e._v(". The code to produce a valid witness (i.e. "),t("em",[e._v("satisfy")]),e._v(") a descriptor by looking for Taproot key-spend or script-spend signatures\nis already implemented, so it's just a matter of actually returning those, if they are present in a PSBT.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 80da0ba\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 80da0ba9b742b2dee23e7302e2f95a6e96b1d6ed\nAuthor: Alekos Filini \nDate: Sat Nov 13 16:54:27 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Iter keys in `MultiA`\n")])]),e._v("\ndiff --git a/src/miniscript/iter.rs b/src/miniscript/iter.rs\nindex 36c4b69..a54a371 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/miniscript/iter.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/miniscript/iter.rs")]),e._v("\n@@ -121,7 +121,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn get_leaf_pk(&self) -> Vec {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match self.node {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkK(ref key) => vec![key.clone()],\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) => keys.clone(),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) | Terminal::MultiA(_, ref keys) => keys.clone(),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => vec![],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -139,7 +139,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match self.node {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkH(ref hash) => vec![hash.clone()],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkK(ref key) => vec![key.to_pubkeyhash()],\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) => keys.iter().map(Pk::to_pubkeyhash).collect(),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) | Terminal::MultiA(_, ref keys) => keys.iter().map(Pk::to_pubkeyhash).collect(),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => vec![],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -155,7 +155,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match self.node {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkH(ref hash) => vec![PkPkh::HashedPubkey(hash.clone())],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkK(ref key) => vec![PkPkh::PlainPubkey(key.clone())],\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) => keys\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) | Terminal::MultiA(_, ref keys) => keys\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .into_iter()\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .map(|key| PkPkh::PlainPubkey(key.clone()))\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .collect(),\n")])]),e._v("@@ -170,7 +170,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn get_nth_pk(&self, n: usize) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match (&self.node, n) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkK(ref key), 0) => Some(key.clone()),\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) => keys.get(n).cloned(),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) | (&Terminal::MultiA(_, ref keys), _) => keys.get(n).cloned(),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => None,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -186,7 +186,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match (&self.node, n) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkH(ref hash), 0) => Some(hash.clone()),\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkK(ref key), 0) => Some(key.to_pubkeyhash()),\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) => keys.get(n).map(Pk::to_pubkeyhash),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) | (&Terminal::MultiA(_, ref keys), _) => keys.get(n).map(Pk::to_pubkeyhash),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => None,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -199,7 +199,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match (&self.node, n) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkH(ref hash), 0) => Some(PkPkh::HashedPubkey(hash.clone())),\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkK(ref key), 0) => Some(PkPkh::PlainPubkey(key.clone())),\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) => {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) | (&Terminal::MultiA(_, ref keys), _) => {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" keys.get(n).map(|key| PkPkh::PlainPubkey(key.clone()))\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => None,\n")])])])])]),t("p",[e._v("Taproot descriptors add a new miniscript operator called "),t("code",[e._v("multi_a()")]),e._v(" which behaves like "),t("code",[e._v("multi()")]),e._v(" in non-Taproot descriptors, but uses the new "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#script-execution",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("OP_CHECKSIGADD")]),t("OutboundLink")],1),e._v(" opcode when serialized in a script.")]),e._v(" "),t("p",[e._v("When this was added, somebody forgot to update the various methods that iterate over the public keys of a descriptor to correctly return the keys contained in "),t("code",[e._v("multi_a()")]),e._v(" - essentially, it was falling back in\nthe default case used by the operators that don't contain any key, but this one does!")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 8b108c5\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 8b108c5c0bf50b66b7220746525742b71f6cd4b4\nAuthor: Alekos Filini \nDate: Sat Nov 13 17:26:53 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Fix witness generation for `MultiA`\n")])]),e._v("\ndiff --git a/src/miniscript/satisfy.rs b/src/miniscript/satisfy.rs\nindex 655436e..ab43707 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/miniscript/satisfy.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/miniscript/satisfy.rs")]),e._v("\n@@ -1264,7 +1264,7 @@ impl Satisfaction {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Collect all available signatures\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut sig_count = 0;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut sigs = vec![vec![vec![]]; keys.len()];\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for (i, pk) in keys.iter().enumerate() {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for (i, pk) in keys.iter().rev().enumerate() {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match Witness::signature::<_, _, Ctx>(stfr, pk, leaf_hash) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Witness::Stack(sig) => {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" sigs[i] = sig;\n")])])])])]),t("p",[e._v("And finally, the last little fix: the "),t("code",[e._v("multi_a()")]),e._v(" operator is satisfied by pushing to the witness either a signature (if you have one available for that specific public key) or an empty vector. The problem is,\nthey have to be in the right order to match the order of public keys in your Taproot script.")]),e._v(" "),t("p",[e._v("rust-miniscript was pushing them in reverse order, so script validation was always failing for multisigs that had more than 1 key. Adding a "),t("code",[e._v(".rev()")]),e._v(" to the iterator fixed the issue.")]),e._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[e._v("#")]),e._v(" Conclusion")]),e._v(" "),t("p",[e._v("And that was it! We now have a fully working "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(" ready for Taproot.")]),e._v(" "),t("p",[e._v("In "),t("a",{attrs:{href:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2"}},[e._v("Part 2")]),e._v(" I will go over the code changes in BDK, but I think it's now time for you and I to take a break 😃")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{426:function(e,t,s){"use strict";s.r(t);var n=s(7),a=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("This is the first of a two-parts blog series in which I will try to explain all the changes that I made to BDK (and some of its dependencies) to make our "),t("a",{attrs:{href:"https://twitter.com/afilini/status/1459763243556163584",target:"_blank",rel:"noopener noreferrer"}},[e._v("first Taproot transaction in mainnet"),t("OutboundLink")],1),e._v(", which also\nturned out to be "),t("a",{attrs:{href:"https://twitter.com/afilini/status/1459774394054725634",target:"_blank",rel:"noopener noreferrer"}},[e._v("the first ever use of the new "),t("code",[e._v("OP_CHECKSIGADD")]),e._v(" opcode"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Hopefully this will give an insight into what kind of changes need to be made to a wallet in order to support spending "),t("code",[e._v("P2TR")]),e._v(" outputs, both with key-spend and script-spend. BDK actually delegates\nmost of the hard work to "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(", and luckily most of the Taproot code was already implemented by the time I started working on it. I only had to patch a few little bugs here and there, and it ended up\nworking flawlessly in the end.")]),e._v(" "),t("p",[e._v("In this first part I will focus on the changes made to our dependencies, "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(". In the second part I will talk about BDK itself.")]),e._v(" "),t("h2",{attrs:{id:"backstory"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#backstory"}},[e._v("#")]),e._v(" Backstory")]),e._v(" "),t("p",[e._v("On the evening of Thursday, November 11th I was attending our weekly "),t("a",{attrs:{href:"https://www.satoshispritz.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Satoshi Spritz"),t("OutboundLink")],1),e._v(" meetup in Milan. The activation of Taproot was right around the corner, and naturally that was the main discussion\ntopic that night. The activation was forecasted for the early afternoon of Sunday, November 14th, a little less than 72h later.")]),e._v(" "),t("p",[e._v("I began to wonder how hard it would be to patch BDK and add support for Taproot. I knew most of the work had already been done in our main dependencies, "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(", and so I decided\nto challenge myself: could I make it in time for the activation?")]),e._v(" "),t("p",[e._v('The following day I started digging into the topic. It didn\'t help that up until that time I only had a rather "high level" idea of how Taproot worked, but luckily all the BIPs were very well written and\nstraightforward to understand.')]),e._v(" "),t("p",[e._v("By Friday night (or rather, early Saturday morning) "),t("a",{attrs:{href:"https://mempool.space/signet/tx/ba0ebb350717701ca4ea109aadfbaf3058f6cd73e5ece3927ddee653de06cf5a",target:"_blank",rel:"noopener noreferrer"}},[e._v("I had Taproot key-spend working"),t("OutboundLink")],1),e._v(", which made me pretty optimistic even though the activation date was actually moving closer, now being forecasted for\nSunday "),t("em",[e._v("morning")]),e._v(".")]),e._v(" "),t("p",[e._v("After a few hours of sleep I went back to work and by early Saturday afternoon "),t("a",{attrs:{href:"https://mempool.space/signet/tx/41d7d49f9f4edffa9ca88ad6fb887fbf1ae68f9f31def267fdb3a5949f766bf5",target:"_blank",rel:"noopener noreferrer"}},[e._v("I had Taproot script-spend working as well"),t("OutboundLink")],1),e._v(". This left me a few hours to coordinate with some friends and "),t("a",{attrs:{href:"https://mempool.space/address/1Taproote7gvQGKz5g982ecSbPvqJhMUf",target:"_blank",rel:"noopener noreferrer"}},[e._v("generate a vanity address"),t("OutboundLink")],1),e._v("\nto deposit funds into temporarily, as we didn't trust sending them to Taproot addresses before the activation (as they were anyone-can-spend according to the pre-activation rules).")]),e._v(" "),t("p",[e._v("After another pretty short night, I woke up a 5:30 AM on Sunday to monitor the activation. I broadcasted our transactions shortly after 6:00 AM as the activation block was being mined. Unfortunately, the first\nthree blocks that were enforcing Taproot rules "),t("a",{attrs:{href:"https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019598.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("didn't include any Taproot transaction"),t("OutboundLink")],1),e._v(", which indicates that the miners weren't actually running the new Bitcoin Core 22.0 nodes. The fourth block, mined by "),t("code",[e._v("Foundry USA")]),e._v(" "),t("a",{attrs:{href:"https://mempool.space/tx/2eb8dbaa346d4be4e82fe444c2f0be00654d8cfd8c4a9a61b11aeaab8c00b272",target:"_blank",rel:"noopener noreferrer"}},[e._v("included my transaction"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://twitter.com/achow101/status/1459760452775387136?s=20",target:"_blank",rel:"noopener noreferrer"}},[e._v("a few others"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("In the end our transaction was the third Taproot script-spend in the block, but the first to use the new "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#script-execution",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("OP_CHECKSIGADD")]),t("OutboundLink")],1),e._v(" opcode, as the two preceding it were respectively "),t("a",{attrs:{href:"https://mempool.space/tx/37777defed8717c581b4c0509329550e344bdc14ac38f71fc050096887e535c8",target:"_blank",rel:"noopener noreferrer"}},[e._v("a single-sig"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://mempool.space/tx/905ecdf95a84804b192f4dc221cfed4d77959b81ed66013a7e41a6e61e7ed530",target:"_blank",rel:"noopener noreferrer"}},[e._v("a 2-of-2 multisig"),t("OutboundLink")],1),e._v("\nscript, made with with two "),t("code",[e._v("OP_CHECKSIG(VERIFY)")]),e._v("s.")]),e._v(" "),t("p",[e._v("Now, with the context out of the way, we can begin talking about the code!")]),e._v(" "),t("h2",{attrs:{id:"rust-bitcoin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust-bitcoin"}},[e._v("#")]),e._v(" rust-bitcoin")]),e._v(" "),t("p",[e._v("The first dependency I had to update was "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(". Most of the taproot stuff were already merged in "),t("code",[e._v("master")]),e._v(" (altough they hadn't been released yet). One notable missing part was the support for "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0371.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP371")]),t("OutboundLink")],1),e._v(",\nwhich is an extension of "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP174")]),t("OutboundLink")],1),e._v(", aka the "),t("code",[e._v("Partially Signed Bitcoin Transaction")]),e._v(" BIP. This new BIP defines a few new fields that are required to properly handle Taproot transactions.")]),e._v(" "),t("p",[e._v("Luckily most of the work had already been done by "),t("a",{attrs:{href:"https://twitter.com/sanket1729",target:"_blank",rel:"noopener noreferrer"}},[e._v("sanket1729"),t("OutboundLink")],1),e._v(", so I forked his branch and made only few very minor changes, just to expose a structure that I will have to use later which in his code wasn't public.")]),e._v(" "),t("p",[e._v("You can find all the commits mentioned here in "),t("a",{attrs:{href:"https://github.com/afilini/rust-bitcoin/tree/taproot-testing",target:"_blank",rel:"noopener noreferrer"}},[e._v("my rust-bitcoin "),t("code",[e._v("taproot-testing")]),e._v(" branch"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git diff 187234f f830df9\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("diff --git a/src/lib.rs b/src/lib.rs\nindex 87d9c36..d5e5802 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("@@ -54,7 +54,6 @@")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_mut)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(dead_code)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_imports)]\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(missing_docs)]\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_must_use)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(broken_intra_doc_links)]\n")])]),e._v("\ndiff --git a/src/util/taproot.rs b/src/util/taproot.rs\nindex 674eeee..3d56cbc 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/util/taproot.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/util/taproot.rs")]),e._v("\n@@ -440,7 +440,7 @@ impl TaprootBuilder {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("// Internally used structure to represent the node information in taproot tree\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]\n')])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("pub(crate) struct NodeInfo {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("pub struct NodeInfo {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" /// Merkle Hash for this node\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub(crate) hash: sha256::Hash,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" /// information about leaves inside this node\n")])]),e._v("@@ -448,8 +448,12 @@ pub(crate) struct NodeInfo {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("}\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("impl NodeInfo {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn hash(&self) -> &sha256::Hash {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" &self.hash\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Create a new NodeInfo with omitted/hidden info\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn new_hidden(hash: sha256::Hash) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn new_hidden(hash: sha256::Hash) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Self {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" hash: hash,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" leaves: vec![],\n")])]),e._v("@@ -457,7 +461,7 @@ impl NodeInfo {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Create a new leaf with NodeInfo\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn new_leaf_with_ver(script: Script, ver: LeafVersion) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn new_leaf_with_ver(script: Script, ver: LeafVersion) -> Self {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let leaf = LeafInfo::new(script, ver);\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Self {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" hash: leaf.hash(),\n")])]),e._v("@@ -466,7 +470,7 @@ impl NodeInfo {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Combine two NodeInfo's to create a new parent\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn combine(a: Self, b: Self) -> Result {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn combine(a: Self, b: Self) -> Result {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut all_leaves = Vec::with_capacity(a.leaves.len() + b.leaves.len());\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for mut a_leaf in a.leaves {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" a_leaf.merkle_branch.push(b.hash)?; // add hashing partner\n")])]),e._v("\n")])])]),t("p",[e._v("There isn't much to explain here: I disabled the "),t("code",[e._v("missing_docs")]),e._v(" lint so that the compiler wouldn't complain about the new public methods that aren't documented.\nThen, I added a getter for the "),t("code",[e._v("hash")]),e._v(" field of "),t("code",[e._v("NodeInfo")]),e._v(" and made the struct itself and a bunch of methods public.")]),e._v(" "),t("p",[e._v('We will use this structure later to recover the merkle root of a Taproot script tree, given one leaf and the other "hidden" branches.')]),e._v(" "),t("h2",{attrs:{id:"rust-miniscript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust-miniscript"}},[e._v("#")]),e._v(" rust-miniscript")]),e._v(" "),t("p",[e._v("Moving on to "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(': once again, most of the work required to support Taproot had already been done, but this time I was working with very "early" prototype-like code, so I was prepared to\nmake some changes to the code to get it to work how I wanted.')]),e._v(" "),t("p",[e._v("Instead of showing one big diff I will talk about the commits individually, which I think will help making more clear what I was doing.")]),e._v(" "),t("p",[e._v("Once again, you can find all the commits referenced here in "),t("a",{attrs:{href:"https://github.com/afilini/rust-miniscript/tree/taproot",target:"_blank",rel:"noopener noreferrer"}},[e._v("my rust-miniscript "),t("code",[e._v("taproot")]),e._v(" branch"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 34cf15b\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 34cf15b3aac1d8c2693af1b9749b888f3f29e510\nAuthor: Alekos Filini \nDate: Fri Nov 12 12:06:35 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Fix TapTree iter depth\n")])]),e._v("\ndiff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs\nindex 79d3c05..314c7f4 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/tr.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/tr.rs")]),e._v("\n@@ -65,7 +65,7 @@ impl TapTree {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" /// Iterate over all miniscripts\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn iter(&self) -> TapTreeIter {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTreeIter { stack: vec![self] }\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTreeIter { stack: vec![(0, self)] }\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Helper function to translate keys\n")])]),e._v("@@ -262,7 +262,7 @@ pub struct TapTreeIter<'a, Pk: MiniscriptKey>\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("where\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Pk: 'a,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("{\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" stack: Vec<&'a TapTree>,\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" stack: Vec<(usize, &'a TapTree)>,\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("}\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("impl<'a, Pk> Iterator for TapTreeIter<'a, Pk>\n")])]),e._v("@@ -273,13 +273,13 @@ where\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn next(&mut self) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" while !self.stack.is_empty() {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let last = self.stack.pop().expect("Size checked above");\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let (depth, last) = self.stack.pop().expect("Size checked above");\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match &*last {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTree::Tree(l, r) => {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push(&r);\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push(&l);\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push((depth + 1, &r));\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" self.stack.push((depth + 1, &l));\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTree::Leaf(ref ms) => return Some((self.stack.len(), ms)),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" TapTree::Leaf(ref ms) => return Some((depth, ms)),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" None\n")])])])])]),t("p",[t("code",[e._v("TapTreeIterator")]),e._v(" is an iterator that goes through a "),t("code",[e._v("TapTree")]),e._v(" and yields a "),t("code",[e._v("(depth, node)")]),e._v(" pair. This is then fed to "),t("a",{attrs:{href:"https://github.com/afilini/rust-miniscript/blob/taproot/src/descriptor/tr.rs#L183-L189",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("TaprootBuilder")]),t("OutboundLink")],1),e._v(", which returns an error if trying to insert nodes\nin "),t("a",{attrs:{href:"https://github.com/afilini/rust-bitcoin/blob/taproot-testing/src/util/taproot.rs#L403-L405",target:"_blank",rel:"noopener noreferrer"}},[e._v("an order that is not DFS"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("The way the depth was computed before made the builder always fail for non-trivial trees (i.e. more than 1 node).")]),e._v(" "),t("p",[e._v("Here I decided to play the safe card, and just keep track of the depth explicitly: I think there might be a way to compute the depth just knowing the "),t("code",[e._v("self.stack.len()")]),e._v(" (assuming the tree has a specific structure,\nwhich I'm not sure applies here), but anyway I didn't have much time to think about it and I just went for the \"dumb but idiot-proof\" way which ended up working fine.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show f4a3459\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit f4a3459128e37ca0c2701b8b6da064d4952296ff\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:15:52 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Switch rust-bitcoin rev\n")])]),e._v("\ndiff --git a/Cargo.toml b/Cargo.toml\nindex 12825e8..8240024 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/Cargo.toml")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/Cargo.toml")]),e._v('\n@@ -17,7 +17,7 @@ rand = ["bitcoin/rand"]\n\n'),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("[dependencies]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('# bitcoin = "0.27"\n')])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('bitcoin = {git = "https://github.com/sanket1729/rust-bitcoin", branch = "taproot_psbt"}\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('bitcoin = { git = "https://github.com/afilini/rust-bitcoin.git", branch = "taproot-testing" }\n')])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("[dependencies.serde]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('version = "1.0"\n')])])])])]),t("p",[e._v("Trivial commit, switch to "),t("a",{attrs:{href:"https://github.com/afilini/rust-bitcoin/tree/taproot-testing",target:"_blank",rel:"noopener noreferrer"}},[e._v("my fork of rust-bitcoin"),t("OutboundLink")],1),e._v(" so that I can make changes if necessary.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 0446b16\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 0446b1631cec9f7118d46f0f4c94ccd20de29f94\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:25:18 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Parse x-only keys\n")])]),e._v("\ndiff --git a/src/descriptor/key.rs b/src/descriptor/key.rs\nindex 4108d00..b7f90b5 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/key.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/key.rs")]),e._v("\n@@ -283,9 +283,9 @@ impl FromStr for DescriptorPublicKey {\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn from_str(s: &str) -> Result {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' // A "raw" public key without any origin is the least we accept.\n')])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if s.len() < 66 {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if s.len() < 64 {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" return Err(DescriptorKeyParseError(\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' "Key too short (<66 char), doesn\'t match any format",\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' "Key too short (<64 char), doesn\'t match any format",\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" ));\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n@@ -301,6 +301,14 @@ impl FromStr for DescriptorPublicKey {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" derivation_path,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" wildcard,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }))\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else if key_part.len() == 64 {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // x-only pubkey, prefix it with `02`\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let key = bitcoin::PublicKey::from_str(&format!("02{}", key_part))\n')]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' .map_err(|_| DescriptorKeyParseError("Error while parsing x-only public key"))?;\n')]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Ok(DescriptorPublicKey::SinglePub(DescriptorSinglePub {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" key,\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" origin,\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }))\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if key_part.len() >= 2\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' && !(&key_part[0..2] == "02" || &key_part[0..2] == "03" || &key_part[0..2] == "04")\n')])]),e._v("diff --git a/src/lib.rs b/src/lib.rs\nindex e168b16..3a2335e 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/lib.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("@@ -95,8 +95,6 @@")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(non_snake_case)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_mut)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(dead_code)]\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(unused_imports)]\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("#![deny(missing_docs)]\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("pub extern crate bitcoin;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v('#[cfg(feature = "serde")]\n')])])])])]),t("p",[e._v("This, I'm not really sure of: Taproot uses x-only public keys, which means that the first byte (which is usually a "),t("code",[e._v("03")]),e._v(" or a "),t("code",[e._v("02")]),e._v(") that indicates the parity of the EC point is completely dropped, and it's implicit\nthat the point is even (= "),t("code",[e._v("02")]),e._v("). Check out "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP340")]),t("OutboundLink")],1),e._v(" for a much better explanation.")]),e._v(" "),t("p",[e._v("So here when I find a string that is only 64 characters long I will assume it's an x-only pubkey, and I will parse it as a normal "),t("code",[e._v("bitcoin::PublicKey")]),e._v(" by prefixing it with "),t("code",[e._v("02")]),e._v(".")]),e._v(" "),t("p",[e._v("I guess one alternative could have been to try and parse it as a "),t("code",[e._v("schnorr::PublicKey")]),e._v(' and then "convert" it to a '),t("code",[e._v("ecdsa::PublicKey")]),e._v(" which should be supported, but once again I just wanted to get it done quickly and\nthis worked fine.")]),e._v(" "),t("p",[e._v("I also disabled the "),t("code",[e._v("unused_imports")]),e._v(" and "),t("code",[e._v("missing_docs")]),e._v(" lint so that the compiler wouldn't whine too much.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 87316ff\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 87316fffd06ab3bdf300fd1a958ddaa2789a6696\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:26:01 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Parse `tr()` descriptors\n")])]),e._v("\ndiff --git a/src/descriptor/mod.rs b/src/descriptor/mod.rs\nindex 06d98e1..4190786 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/mod.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/mod.rs")]),e._v("\n@@ -610,6 +610,7 @@ where\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("wpkh", 1) => Descriptor::Wpkh(Wpkh::from_tree(top)?),\n')]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("sh", 1) => Descriptor::Sh(Sh::from_tree(top)?),\n')]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("wsh", 1) => Descriptor::Wsh(Wsh::from_tree(top)?),\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' ("tr", _) => Descriptor::Tr(Tr::from_tree(top)?),\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => Descriptor::Bare(Bare::from_tree(top)?),\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" })\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("diff --git a/src/expression.rs b/src/expression.rs\nindex 1cef614..11a68d3 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/expression.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/expression.rs")]),e._v("\n@@ -100,7 +100,12 @@ impl<'a> Tree<'a> {\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" sl = &sl[n + 1..];\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" loop {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let (arg, new_sl) = Tree::from_slice_helper_round(sl, depth + 1)?;\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let (arg, new_sl) = if sl.contains('{') {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Tree::from_slice_helper_curly(sl, depth + 1)?\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Tree::from_slice_helper_round(sl, depth + 1)?\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" };\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" ret.args.push(arg);\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if new_sl.is_empty() {\n")])])])])]),t("p",[e._v("When trying to parse a descriptor (essentially turning a recursive string of "),t("code",[e._v("operator(args)")]),e._v(" into an abstract tree in memory) use a "),t("em",[e._v("curly-bracket-aware")]),e._v(" parser if there is one in the string.")]),e._v(" "),t("p",[e._v("The code to then build a "),t("code",[e._v("Tr")]),e._v(" struct given an "),t("code",[e._v("expression::Tree")]),e._v(" (and the "),t("code",[e._v("from_slice_helper_curly")]),e._v(" function) were already implemented, so it was just a matter of correctly\nbuilding the abstract tree by parsing curly brackets in descriptors.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 3055cab\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 3055cabef8bd51eda344ce501b03c533fd367b4f\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:26:30 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Fix control block creation when satisfying `Tr`\n")])]),e._v("\ndiff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs\nindex 314c7f4..8487d56 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/tr.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/tr.rs")]),e._v("\n@@ -571,17 +571,14 @@ impl DescriptorTrait for Tr {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let ver = LeafVersion::default();\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let leaf_script = (ms.encode(), ver);\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let control_block_set = spend_info\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .as_script_map()\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .get(&leaf_script)\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' .expect("Control block must exist in script map for every known leaf");\n')])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // let control_block_set = spend_info\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // .as_script_map()\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // .get(&leaf_script)\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' // .expect("Control block must exist in script map for every known leaf");\n')]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' let control_block = spend_info.control_block(&leaf_script).expect("Control block must exist in script map for every known leaf");\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" wit.push(leaf_script.0.into_bytes()); // Push the leaf script\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // There can be multiple control blocks for a (script, ver) pair\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Find the smallest one amongst those\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let control_block = control_block_set\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .iter()\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .min_by(|x, y| x.as_inner().len().cmp(&y.as_inner().len()))\n")]),t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(' .expect("Atleast one control must exist for a known leaf");\n')])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" wit.push(control_block.serialize());\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Finally, save the minimum\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" min_wit = Some(wit);\n")])]),e._v("\n")])])]),t("p",[e._v("This is where things get more interesting: this section of code builds the witness to satisfy a Taproot descriptor. In case of a script-spend, we need to prove that the script we are using had been committed\ninto the public key of our "),t("code",[e._v("P2TR")]),e._v(' input. We do this by adding a "control block", that contains data about the parity of the key, the leaf version used, and the merkle path from the leaf we are using to spend\nup to the merkle root, which is committed into the public key. Once again, this is explained very well in '),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("BIP341")]),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Before my patch the code was only getting the set of merkle paths that could lead from the root to the leaves that contain a given script. For context, the signature of "),t("code",[e._v("TaprootSpendInfo::as_script_map(&self)")]),e._v(" is:")]),e._v(" "),t("div",{staticClass:"language-rust extra-class"},[t("pre",{pre:!0,attrs:{class:"language-rust"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// Access the internal script map")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("pub")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("fn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function-definition function"}},[e._v("as_script_map")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("->")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("BTreeMap")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("LeafVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("BTreeSet")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("TaprootMerkleBranch")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">>")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v('Then the code would look for the "shortest" path to that specific script, as it would save size in the final transaction (leaves that are more "deep" in the tree than others naturally have more hidden branches\nin their path to the root, and thus require a longer control block to reveal them all).')]),e._v(" "),t("p",[e._v("The issue here is that the "),t("code",[e._v("control_block")]),e._v(" variable is then serialized directly into the witness. But this is not a control block, it's just a set of merkle paths! A control block only has "),t("em",[e._v("one")]),e._v(" merkle path, and\nincludes the leaf version and the key parity bit.")]),e._v(" "),t("p",[e._v("Conveniently, the "),t("code",[e._v("TaprootSpendInfo")]),e._v(' struct also has this other method (I\'m including the implementation as well, because it shows that internally it does the same "trick" to find the shortest path):')]),e._v(" "),t("div",{staticClass:"language-rust extra-class"},[t("pre",{pre:!0,attrs:{class:"language-rust"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// Obtain a [`ControlBlock`] for particular script with the given version.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// Returns [`None`] if the script is not contained in the [`TaprootSpendInfo`]")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("/// If there are multiple ControlBlocks possible, this returns the shortest one.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("pub")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("fn")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function-definition function"}},[e._v("control_block")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" script_ver"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("LeafVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("->")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Option")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("ControlBlock")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("let")]),e._v(" merkle_branch_set "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("script_map"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("get")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("script_ver"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("?")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("// Choose the smallest one amongst the multiple script maps")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("let")]),e._v(" smallest "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" merkle_branch_set\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("iter")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("min_by")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token closure-params"}},[t("span",{pre:!0,attrs:{class:"token closure-punctuation punctuation"}},[e._v("|")]),e._v("x"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v(" y"),t("span",{pre:!0,attrs:{class:"token closure-punctuation punctuation"}},[e._v("|")])]),e._v(" x"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v(".0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("cmp")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&")]),e._v("y"),t("span",{pre:!0,attrs:{class:"token number"}},[e._v(".0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("len")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("expect")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Non-empty iterator"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("Some")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("ControlBlock")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n internal_key"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("internal_key"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n output_key_parity"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("self")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("output_key_parity"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n leaf_version"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[e._v("LeafVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("default")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n merkle_branch"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" smallest"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("clone")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("So to fix this code we just have to use that method instead, and we can get it done in one single line!")]),e._v(" "),t("p",[e._v('Instead of removing the old code at the time I only commented it out, because I initially thought I would still have to look for the shortest script myself, and I figured the "sorting" code would come in handy\nlater on.')]),e._v(" "),t("p",[e._v("Also, if you are an acute observer, you might have noticed that there's a bug in this last snippet of code. Feel free to think about it a little bit, then check out the "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin/pull/703",target:"_blank",rel:"noopener noreferrer"}},[e._v("PR"),t("OutboundLink")],1),e._v(" I made\nif you wanna know the answer!")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("git show 35378ad\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 35378ad01a6f2b8161a3f36448b24d031f8aeaec\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:27:14 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Consider key-spend max satisfaction weight\n")])]),e._v("\ndiff --git a/src/descriptor/tr.rs b/src/descriptor/tr.rs\nindex 8487d56..fabf860 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/descriptor/tr.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/descriptor/tr.rs")]),e._v("\n@@ -593,7 +593,7 @@ impl DescriptorTrait for Tr {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn max_satisfaction_weight(&self) -> Result {\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut max_wieght = None;\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut max_wieght = Some(65);\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for (depth, ms) in self.iter_scripts() {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let script_size = ms.script_size();\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let max_sat_elems = match ms.max_satisfaction_witness_elements() {\n")])])])])]),t("p",[e._v("This is a little bug in the code that tries to compute what the maximum satisfaction weight would be for a descriptor. For instance, we use this in BDK to compute how many extra sats of fees we need to pay\nin order to target a given fee rate, assuming the descriptor is satisfied with the worst (larger and most expensive) path.")]),e._v(" "),t("p",[e._v("For Taproot descriptors, it's just a matter of iterating over the leaves in the tree and pick the most expensive one... or is it? This doesn't take into account that Taproot outputs can also be spent with\nkey-spend, which means just pushing a signature to the witness. This signature is 64 bytes long when using the new "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("SIGHASH_DEFAULT")]),t("OutboundLink")],1),e._v(" sighash, or 65 otherwise. Since we are thinking about the maximum satisfaction\nweight, or the worst case possible, we naturally pick the latter.")]),e._v(" "),t("p",[e._v("Note that theoretically you could build a Taproot address \"without\" an available key-path spend (by using an unspendable Schnorr public key), but the code here in rust-miniscript doesn't take that into\naccount, as there's no way that I'm aware of to specificy in a "),t("code",[e._v("tr()")]),e._v(" descriptor that the key is unspendable. So, while theoretically here we should first check whether the key-spend path is available before\naccounting for its weight, in practice this is always true in miniscript so we just use that as our starting worst case and update it later if necessary while iterating the tree leaves.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show b4878f8\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit b4878f816e9ede11d5ed947c06e03aa988e3e26f\nAuthor: Alekos Filini \nDate: Sat Nov 13 14:27:53 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Look for taproot stuff in psbts\n")])]),e._v("\ndiff --git a/src/psbt/mod.rs b/src/psbt/mod.rs\nindex 9a8b17d..42c6ce8 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/psbt/mod.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/psbt/mod.rs")]),e._v("\n@@ -25,13 +25,14 @@ use bitcoin;\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::hashes::{hash160, ripemd160, sha256, sha256d};\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::secp256k1::{self, Secp256k1};\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::util::psbt::PartiallySignedTransaction as Psbt;\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::util::taproot::TapLeafHash;\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use bitcoin::Script;\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use interpreter;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use miniscript::limits::SEQUENCE_LOCKTIME_DISABLE_FLAG;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use miniscript::satisfy::{After, Older};\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use Satisfier;\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use {BitcoinECSig, Preimage32};\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use {BitcoinECSig, BitcoinSchnorrSig, Preimage32};\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("use {MiniscriptKey, ToPublicKey};\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("mod finalizer;\n")])]),e._v("@@ -231,6 +232,24 @@ impl<'psbt> PsbtInputSatisfier<'psbt> {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("}\n")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("impl<'psbt, Pk: MiniscriptKey + ToPublicKey> Satisfier for PsbtInputSatisfier<'psbt> {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn lookup_tap_key_spend_sig(&self) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if let Some((sig, hash_ty)) = self.psbt.inputs[self.index].tap_key_sig {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Some(BitcoinSchnorrSig { sig, hash_ty })\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" None\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn lookup_tap_leaf_script_sig(&self, pk: &Pk, lh: &TapLeafHash) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let pk = pk.to_x_only_pubkey();\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if let Some((sig, hash_ty)) = self.psbt.inputs[self.index].tap_script_sigs.get(&(pk, *lh)) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Some(BitcoinSchnorrSig { sig: *sig, hash_ty: *hash_ty })\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" } else {\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" None\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v("\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" fn lookup_ec_sig(&self, pk: &Pk) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" if let Some(rawsig) = self.psbt.inputs[self.index]\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .partial_sigs\n")])])])])]),t("p",[e._v("This commit implements the Taproot-specific "),t("code",[e._v("Satisfier")]),e._v(" methods on "),t("code",[e._v("PsbtInputSatisfier")]),e._v(". The code to produce a valid witness (i.e. "),t("em",[e._v("satisfy")]),e._v(") a descriptor by looking for Taproot key-spend or script-spend signatures\nis already implemented, so it's just a matter of actually returning those, if they are present in a PSBT.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 80da0ba\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 80da0ba9b742b2dee23e7302e2f95a6e96b1d6ed\nAuthor: Alekos Filini \nDate: Sat Nov 13 16:54:27 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Iter keys in `MultiA`\n")])]),e._v("\ndiff --git a/src/miniscript/iter.rs b/src/miniscript/iter.rs\nindex 36c4b69..a54a371 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/miniscript/iter.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/miniscript/iter.rs")]),e._v("\n@@ -121,7 +121,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn get_leaf_pk(&self) -> Vec {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match self.node {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkK(ref key) => vec![key.clone()],\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) => keys.clone(),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) | Terminal::MultiA(_, ref keys) => keys.clone(),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => vec![],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -139,7 +139,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match self.node {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkH(ref hash) => vec![hash.clone()],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkK(ref key) => vec![key.to_pubkeyhash()],\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) => keys.iter().map(Pk::to_pubkeyhash).collect(),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) | Terminal::MultiA(_, ref keys) => keys.iter().map(Pk::to_pubkeyhash).collect(),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => vec![],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -155,7 +155,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match self.node {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkH(ref hash) => vec![PkPkh::HashedPubkey(hash.clone())],\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::PkK(ref key) => vec![PkPkh::PlainPubkey(key.clone())],\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) => keys\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Terminal::Multi(_, ref keys) | Terminal::MultiA(_, ref keys) => keys\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .into_iter()\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .map(|key| PkPkh::PlainPubkey(key.clone()))\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" .collect(),\n")])]),e._v("@@ -170,7 +170,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" pub fn get_nth_pk(&self, n: usize) -> Option {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match (&self.node, n) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkK(ref key), 0) => Some(key.clone()),\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) => keys.get(n).cloned(),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) | (&Terminal::MultiA(_, ref keys), _) => keys.get(n).cloned(),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => None,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -186,7 +186,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match (&self.node, n) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkH(ref hash), 0) => Some(hash.clone()),\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkK(ref key), 0) => Some(key.to_pubkeyhash()),\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) => keys.get(n).map(Pk::to_pubkeyhash),\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) | (&Terminal::MultiA(_, ref keys), _) => keys.get(n).map(Pk::to_pubkeyhash),\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => None,\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")])]),e._v("@@ -199,7 +199,7 @@ impl Miniscript {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match (&self.node, n) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkH(ref hash), 0) => Some(PkPkh::HashedPubkey(hash.clone())),\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::PkK(ref key), 0) => Some(PkPkh::PlainPubkey(key.clone())),\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) => {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" (&Terminal::Multi(_, ref keys), _) | (&Terminal::MultiA(_, ref keys), _) => {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" keys.get(n).map(|key| PkPkh::PlainPubkey(key.clone()))\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" }\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" _ => None,\n")])])])])]),t("p",[e._v("Taproot descriptors add a new miniscript operator called "),t("code",[e._v("multi_a()")]),e._v(" which behaves like "),t("code",[e._v("multi()")]),e._v(" in non-Taproot descriptors, but uses the new "),t("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#script-execution",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("OP_CHECKSIGADD")]),t("OutboundLink")],1),e._v(" opcode when serialized in a script.")]),e._v(" "),t("p",[e._v("When this was added, somebody forgot to update the various methods that iterate over the public keys of a descriptor to correctly return the keys contained in "),t("code",[e._v("multi_a()")]),e._v(" - essentially, it was falling back in\nthe default case used by the operators that don't contain any key, but this one does!")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("$ git show 8b108c5\n")])])]),t("div",{staticClass:"language-diff extra-class"},[t("pre",{pre:!0,attrs:{class:"language-diff"}},[t("code",[e._v("commit 8b108c5c0bf50b66b7220746525742b71f6cd4b4\nAuthor: Alekos Filini \nDate: Sat Nov 13 17:26:53 2021 +0100\n\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Fix witness generation for `MultiA`\n")])]),e._v("\ndiff --git a/src/miniscript/satisfy.rs b/src/miniscript/satisfy.rs\nindex 655436e..ab43707 100644\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("--- a/src/miniscript/satisfy.rs")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token coord"}},[e._v("+++ b/src/miniscript/satisfy.rs")]),e._v("\n@@ -1264,7 +1264,7 @@ impl Satisfaction {\n"),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" // Collect all available signatures\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut sig_count = 0;\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" let mut sigs = vec![vec![vec![]]; keys.len()];\n")])]),t("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[t("span",{pre:!0,attrs:{class:"token prefix deleted"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for (i, pk) in keys.iter().enumerate() {\n")])]),t("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[t("span",{pre:!0,attrs:{class:"token prefix inserted"}},[e._v("+")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" for (i, pk) in keys.iter().rev().enumerate() {\n")])]),t("span",{pre:!0,attrs:{class:"token unchanged"}},[t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" match Witness::signature::<_, _, Ctx>(stfr, pk, leaf_hash) {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" Witness::Stack(sig) => {\n")]),t("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[e._v(" ")]),t("span",{pre:!0,attrs:{class:"token line"}},[e._v(" sigs[i] = sig;\n")])])])])]),t("p",[e._v("And finally, the last little fix: the "),t("code",[e._v("multi_a()")]),e._v(" operator is satisfied by pushing to the witness either a signature (if you have one available for that specific public key) or an empty vector. The problem is,\nthey have to be in the right order to match the order of public keys in your Taproot script.")]),e._v(" "),t("p",[e._v("rust-miniscript was pushing them in reverse order, so script validation was always failing for multisigs that had more than 1 key. Adding a "),t("code",[e._v(".rev()")]),e._v(" to the iterator fixed the issue.")]),e._v(" "),t("h2",{attrs:{id:"conclusion"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#conclusion"}},[e._v("#")]),e._v(" Conclusion")]),e._v(" "),t("p",[e._v("And that was it! We now have a fully working "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-bitcoin"),t("OutboundLink")],1),e._v(" and "),t("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-miniscript",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-miniscript"),t("OutboundLink")],1),e._v(" ready for Taproot.")]),e._v(" "),t("p",[e._v("In "),t("a",{attrs:{href:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2"}},[e._v("Part 2")]),e._v(" I will go over the code changes in BDK, but I think it's now time for you and I to take a break 😃")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/62.486ddf40.js b/assets/js/62.9fac6f0e.js similarity index 99% rename from assets/js/62.486ddf40.js rename to assets/js/62.9fac6f0e.js index 715b512c35..05b32dfe19 100644 --- a/assets/js/62.486ddf40.js +++ b/assets/js/62.9fac6f0e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{419:function(t,s,e){"use strict";e.r(s);var a=e(7),n=Object(a.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("p",[t._v("This is the second part of a two-part blog series in which I talk through the changes made to BDK to make a Taproot transaction. If you haven't read it yet, check out "),s("a",{attrs:{href:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1"}},[t._v("Part 1")]),t._v(".")]),t._v(" "),s("p",[t._v("While in the first part I managed to show full raw commits, in this case I will only focus on the relevant changes, otherwise the post would get very long. You can always find the "),s("a",{attrs:{href:"https://github.com/bitcoindevkit/bdk/compare/aa075f0...afilini:taproot-testing",target:"_blank",rel:"noopener noreferrer"}},[t._v("full diff"),s("OutboundLink")],1),t._v(" here, if you are interested\nin that.")]),t._v(" "),s("h2",{attrs:{id:"shortcuts"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#shortcuts"}},[t._v("#")]),t._v(" Shortcuts")]),t._v(" "),s("p",[t._v("As mentioned previously, the main goal of this journey for me was to find out what it really takes to support Taproot in BDK. The code shown here wasn't written to be readable and/or maintainable, so\nsome shortcuts were taken, in particular:")]),t._v(" "),s("ul",[s("li",[t._v('No support for BIP32 extended keys: this is probably very quick to add, but in the first "proof of concept" I decided to only work with WIF keys for simplicity')]),t._v(" "),s("li",[t._v("No support for "),s("a",{attrs:{href:"https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("SIGHASH_DEFAULT")]),s("OutboundLink")],1),t._v(': this would require some minor changes to a few traits in BDK that still use the "legacy" '),s("code",[t._v("SigHashType")]),t._v(" enum from "),s("a",{attrs:{href:"https://github.com/rust-bitcoin/rust-bitcoin",target:"_blank",rel:"noopener noreferrer"}},[t._v("rust-bitcoin"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"utilities"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#utilities"}},[t._v("#")]),t._v(" Utilities")]),t._v(" "),s("p",[t._v("Let's start with some utilities:")]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pub")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("ecdsa_to_schnorr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("ecdsa"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PublicKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("schnorr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PublicKey")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("schnorr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PublicKey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_slice")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("pk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("to_bytes")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Key conversion failure"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pub")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("compute_merkle_root")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n leaf_hash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TapLeafHash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n control_block"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ControlBlock")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TapBranchHash")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TapBranchHash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_inner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n control_block\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("merkle_branch\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("as_inner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("iter")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("fold")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NodeInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new_hidden")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("sha256"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Hash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("from_slice")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("leaf_hash"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("as_inner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Invalid TapLeafHash"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token closure-params"}},[s("span",{pre:!0,attrs:{class:"token closure-punctuation punctuation"}},[t._v("|")]),t._v("acc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" branch"),s("span",{pre:!0,attrs:{class:"token closure-punctuation punctuation"}},[t._v("|")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NodeInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("combine")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("acc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("taproot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")])]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NodeInfo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("new_hidden")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("branch"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Invalid tree"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("hash")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("into_inner")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v('The first function "converts" an ECDSA key to a Schnorr key by dropping the first byte that encodes the key parity, since Schnorr keys are "x-only".')]),t._v(" "),s("p",[t._v("The second one constructs the merkle root of a taptree given a leaf hash and the corresponding control block.")]),t._v(" "),s("h2",{attrs:{id:"wrap-fallible-methods"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#wrap-fallible-methods"}},[t._v("#")]),t._v(" Wrap Fallible Methods")]),t._v(" "),s("p",[t._v("Many of the methods exposed by a "),s("code",[t._v("Descriptor")]),t._v(' struct used to be infallible: for instance, it was always possible to "encode" a descriptor into a Bitcoin script by calling the '),s("code",[t._v("script_pubkey()")]),t._v(" method.")]),t._v(" "),s("p",[t._v("Unfortunately, taproot descriptors need some extra metadata to do that: they can be computed by calling the "),s("code",[t._v("spend_info()")]),t._v(" method, and they will be cached inside the descriptor, but since it's not guaranteed by the\ncompiler that the method will be called before trying to encode it, the infallible methods had to be changed to return a "),s("code",[t._v("Result")]),t._v(", so that they can fail if the spend info is not present.")]),t._v(" "),s("p",[t._v("In BDK we call the "),s("code",[t._v("spend_info()")]),t._v(' method right after "deriving" the descriptor, so it\'s guaranteed that we will never encounter that error: for this reason, we wrap those methods and call '),s("code",[t._v("expect()")]),t._v(" on them, to keep\nthe original code mostly unchanged.")]),t._v(" "),s("p",[t._v("Here we call "),s("code",[t._v("spend_info()")]),t._v(" right after deriving the descriptor, if it's a "),s("code",[t._v("Tr")]),t._v(" variant:")]),t._v(" "),s("div",{staticClass:"language-diff extra-class"},[s("pre",{pre:!0,attrs:{class:"language-diff"}},[s("code",[t._v("@@ -136,10 +133,16 @@ impl AsDerived for Descriptor {\n"),s("span",{pre:!0,attrs:{class:"token unchanged"}},[s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" index: u32,\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" secp: &'s SecpCtx,\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" ) -> Descriptor> {\n")])]),s("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[s("span",{pre:!0,attrs:{class:"token prefix deleted"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" self.derive(index).translate_pk_infallible(\n")])]),s("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" let mut derived = self.derive(index).translate_pk_infallible(\n")])]),s("span",{pre:!0,attrs:{class:"token unchanged"}},[s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" |key| DerivedDescriptorKey::new(key.clone(), secp),\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" |key| DerivedDescriptorKey::new(key.clone(), secp),\n")])]),s("span",{pre:!0,attrs:{class:"token deleted-sign deleted"}},[s("span",{pre:!0,attrs:{class:"token prefix deleted"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" )\n")])]),s("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" );\n")]),s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v("\n")]),s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" if let Descriptor::Tr(tr) = &mut derived {\n")]),s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" tr.spend_info(secp);\n")]),s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" }\n")]),s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v("\n")]),s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" derived\n")])]),s("span",{pre:!0,attrs:{class:"token unchanged"}},[s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" }\n")])])])])]),s("p",[t._v("And here we wrap the "),s("code",[t._v("script_pubkey()")]),t._v(" method and call "),s("code",[t._v("expect()")]),t._v(" on it. Note that we only implement it on "),s("code",[t._v("DerivedDescriptor")]),t._v(', because it\'s not guaranteed that "extended descriptors" will have the cached metadata inside.')]),t._v(" "),s("div",{staticClass:"language-rust extra-class"},[s("pre",{pre:!0,attrs:{class:"language-rust"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pub")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("crate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("trait")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token type-definition class-name"}},[t._v("DerivedDescriptorSafeOps")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/// The [`Descriptor::script_pubkey`] method can fail on `Tr` descriptors that don't have the")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/// `spend_info` inside. Since we generate those upon derivation, it's guaranteed that the")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/// method will not fail on `DerivedDescriptor`s.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("script_pubkey_derived")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("self")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Script")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("impl")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token lifetime-annotation symbol"}},[t._v("'s")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivedDescriptorSafeOps")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Descriptor")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DerivedDescriptorKey")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token lifetime-annotation symbol"}},[t._v("'s")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("fn")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("script_pubkey_derived")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("self")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("self")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("script_pubkey")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("expect")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"`spend_info` is always present in `DerivedDescriptor`s"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"descriptor-metadata"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#descriptor-metadata"}},[t._v("#")]),t._v(" Descriptor Metadata")]),t._v(" "),s("p",[t._v('In BDK we have a few traits that in a way "unify" the interface of a descriptor: things like the '),s("code",[t._v("redeem_script")]),t._v(" of an input has to be computed differently depending on the type of descriptor. The traits we define\nare implemented on the "),s("code",[t._v("DerivedDescriptor")]),t._v(" or "),s("code",[t._v("ExtendedDescriptor")]),t._v(" structs and allow us to quickly get what we need without having to check the descriptor type manually.")]),t._v(" "),s("p",[t._v("Internally, they are essentially large "),s("code",[t._v("match")]),t._v("es that return different things depending on the descriptor variant. Due to some renaming that had been done recently in "),s("code",[t._v("miniscript")]),t._v(" (not necessarily related to taproot)\nwe have to update them:")]),t._v(" "),s("div",{staticClass:"language-diff extra-class"},[s("pre",{pre:!0,attrs:{class:"language-diff"}},[s("code",[t._v("@@ -337,6 +339,7 @@ pub(crate) trait DerivedDescriptorMeta {\n\n"),s("span",{pre:!0,attrs:{class:"token unchanged"}},[s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v("pub(crate) trait DescriptorMeta {\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" fn is_witness(&self) -> bool;\n")])]),s("span",{pre:!0,attrs:{class:"token inserted-sign inserted"}},[s("span",{pre:!0,attrs:{class:"token prefix inserted"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" fn is_tap(&self) -> bool;\n")])]),s("span",{pre:!0,attrs:{class:"token unchanged"}},[s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" fn get_extended_keys(&self) -> Result>, DescriptorError>;\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" fn derive_from_hd_keypaths<'s>(\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" &self,\n")])]),t._v("@@ -358,23 +361,29 @@ pub(crate) trait DescriptorScripts {\n\n"),s("span",{pre:!0,attrs:{class:"token unchanged"}},[s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v("impl<'s> DescriptorScripts for DerivedDescriptor<'s> {\n")]),s("span",{pre:!0,attrs:{class:"token prefix unchanged"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token line"}},[t._v(" fn psbt_redeem_script(&self) -> Option + diff --git a/bdk-cli/concept/index.html b/bdk-cli/concept/index.html index abccbabafc..fe3dca0535 100644 --- a/bdk-cli/concept/index.html +++ b/bdk-cli/concept/index.html @@ -31,7 +31,7 @@ - + @@ -62,7 +62,7 @@ will never contain any data that can't be recreated purely by looking at the blockchain. Keys, descriptors, Electrum endpoints are not stored in the database. This explains why you'll have to specify them every time in the command line. It can be seen more like a cache and can be safely deleted without risking funds.
  • BDK doesn't automatically "monitor" the blockchain, instead there's a sync command that has to be called by the user.
  • When you create a transaction and then sign it, it's not automatically broadcast to the network. There's a broadcast command that does this. Moreover, the command doesn't accept a normal Bitcoin raw transaction, but instead a PSBT. That's because internally transactions are always moved as PSBTs, and again, the broadcast command is just a very thin wrapper over the raw library call.
  • There are probably more of these examples, but hopefully by this point you'll have more or less understood the gist of it. If you are not a developer, some parts of this will feel weird, inefficient, hard -to understand, and that's absolutely normal. Just try to survive through the pain and you'll be rewarded!

    Last Updated: 10/14/2024, 7:07:10 PM
    - + diff --git a/bdk-cli/installation/index.html b/bdk-cli/installation/index.html index eb38269578..b7c09f0a0f 100644 --- a/bdk-cli/installation/index.html +++ b/bdk-cli/installation/index.html @@ -35,7 +35,7 @@ - + @@ -112,7 +112,7 @@ wallet Wallet Operations

    An example command to sync a testnet wallet to a default electrum server looks like this:

    bdk-cli wallet -w example --descriptor "wpkh(tprv8ZgxMBicQKsPexGYyaFwnAsCXCjmz2FaTm6LtesyyihjbQE3gRMfXqQBXKM43DvC1UgRVv1qom1qFxNMSqVAs88qx9PhgFnfGVUdiiDf6j4/0/*)" sync
    -
    Last Updated: 10/14/2024, 7:07:10 PM
    - + diff --git a/bdk-cli/interface/index.html b/bdk-cli/interface/index.html index 005834e15b..73ba867fb9 100644 --- a/bdk-cli/interface/index.html +++ b/bdk-cli/interface/index.html @@ -29,7 +29,7 @@ - + @@ -364,7 +364,7 @@ --psbt <BASE64_PSBT> Sets the PSBT to sign --assume_height <HEIGHT> Assume the blockchain has reached a specific height. This affects the transaction finalization, if there are timelocks in the descriptor --trust_witness_utxo <WITNESS> Whether the signer should trust the witness_utxo, if the non_witness_utxo hasn’t been provided -

    Adds to the PSBT all the signatures it can produce with the secrets embedded in the descriptor (xprv or WIF keys). Returns the signed PSBT and, if there are enough item to satisfy the script, also the extracted raw Bitcoin transaction.

    Optionally, the --assume_height option can be specified to let the wallet assume the blockchain has reached a specific height. This affects the finalization of the PSBT which is done right at the end of the signing process: the wallet tries to satisfy the spending condition of each input using the partial signatures collected. In case timelocks are present the wallet needs to know whether or not they have expired. This flag is particularly useful for offline wallets.

    # sync

    This subcommand has no extra flags. It connects to the chosen Electrum server and synchronizes the list of transactions received and available UTXOs.

    Adds to the PSBT all the signatures it can produce with the secrets embedded in the descriptor (xprv or WIF keys). Returns the signed PSBT and, if there are enough item to satisfy the script, also the extracted raw Bitcoin transaction.

    Optionally, the --assume_height option can be specified to let the wallet assume the blockchain has reached a specific height. This affects the finalization of the PSBT which is done right at the end of the signing process: the wallet tries to satisfy the spending condition of each input using the partial signatures collected. In case timelocks are present the wallet needs to know whether or not they have expired. This flag is particularly useful for offline wallets.

    # sync

    This subcommand has no extra flags. It connects to the chosen Electrum server and synchronizes the list of transactions received and available UTXOs.

    Last Updated: 10/14/2024, 7:07:10 PM
    - + diff --git a/bdk-cli/introduction/index.html b/bdk-cli/introduction/index.html index 08420ffecf..e293bf785d 100644 --- a/bdk-cli/introduction/index.html +++ b/bdk-cli/introduction/index.html @@ -29,7 +29,7 @@ - + @@ -53,7 +53,7 @@ Blog GitHub - (opens new window)

    # Introduction

    bdk-cli (opens new window) is a lightweight repl (opens new window) wrapper over bdk that comes as a command line application. It is useful for quick testing and prototyping of bdk functionalities.

    This can also be used as an example application to create your own command line bitcoin wallet tool using bdk.

    bdk-cli can interface with all the blockchain backends currently supported by bdk, like rpc, electrum, esplora and compact_filters.

    Check out project documentation (opens new window) for more details.

    The following sections goes into more details on the installation and usage of bdk-cli.

    - + diff --git a/bdk-cli/playground/index.html b/bdk-cli/playground/index.html index 05f7d81ccb..25408d7103 100644 --- a/bdk-cli/playground/index.html +++ b/bdk-cli/playground/index.html @@ -27,7 +27,7 @@ - + @@ -51,7 +51,7 @@ Blog GitHub - (opens new window)

    # Playground

    - + diff --git a/bdk-cli/regtest/index.html b/bdk-cli/regtest/index.html index 5f27ce8f77..8033c54896 100644 --- a/bdk-cli/regtest/index.html +++ b/bdk-cli/regtest/index.html @@ -31,7 +31,7 @@ - + @@ -60,7 +60,7 @@

    Just like before, this command will probably take a while to finish.

    Once it's done, assuming you have a regtest bitcoind running in background, you can launch a new terminal and run the following command to actually start electrs:

    electrs --log-filters INFO --timestamp --db-dir /tmp/electrs-db --electrum-rpc-addr="127.0.0.1:50001" --network=regtest --cookie-file=$HOME/.bitcoin/regtest/.cookie
     

    on macOS you should change the cookie-file to $HOME/Library/Application Support/Bitcoin/regtest/.cookie.

    This will start the Electrum server on port 50001. You can then add the -n regtest -s 127.0.0.1:50001 to the bdk-cli commands to switch to the local regtest.

    # Troubleshooting

    # Stuck with "wait until bitcoind is synced (i.e. initialblockdownload = false)"

    Just generate a few blocks with bitcoin-cli generatetoaddress 1 <address>

    # Bonus: Docker

    If you have already installed Docker on your machine, you can also use 🍣 Nigiri CLI (opens new window) to spin-up a complete development environment in regtest that includes a bitcoin node, an electrs explorer and the esplora (opens new window) web-app to visualize blocks and transactions in the browser.

    Install 🍣 Nigiri

    $ curl https://getnigiri.vulpem.com | bash
     

    Start Docker daemon and run Nigiri box

    $ nigiri start
    -

    This will start electrum RPC interface on port 51401, the REST interface on 3000 and the esplora UI on 5000 (You can visit with the browser and look for blocks, addresses and transactions)

    You can then add the -n regtest -s 127.0.0.1:51401 to the bdk-cli commands to switch to the local regtest.

    This will start electrum RPC interface on port 51401, the REST interface on 3000 and the esplora UI on 5000 (You can visit with the browser and look for blocks, addresses and transactions)

    You can then add the -n regtest -s 127.0.0.1:51401 to the bdk-cli commands to switch to the local regtest.

    Last Updated: 10/14/2024, 7:07:10 PM
    - + diff --git a/blog/2020/12/hello-world/index.html b/blog/2020/12/hello-world/index.html index 9c1c9b6098..bf8e93f8c7 100644 --- a/blog/2020/12/hello-world/index.html +++ b/blog/2020/12/hello-world/index.html @@ -30,7 +30,7 @@ - + @@ -147,7 +147,7 @@ txid = txid );

    # Custom Database and Blockchain types

    We briefly mentioned before that for our example we used the MemoryDatabase, but that it could also be swapped for a different one: this is one example of the modularity of BDK. By default, some database types are already implemented in the library, namely the MemoryDatabase (opens new window) which only keeps data in RAM, the Sled (opens new window) database that can store data on a filesystem, and the SqliteDatabase (opens new window) that can store data into a SQLite database. But since the Database trait is public, users of the library can also implement different database types more suitable for their use-case.

    The same is true for the Blockchain types: the library provides (through the use of opt-in features) implementations for the Electrum, Esplora, CompactFilters (Neutrino) and Bitcoin Core rpc backends. Those again can also be -swapped with custom types if the user desires to do so.

    # Conclusion

    Hopefully, this article will help you get started with BDK! This is just a very quick and gentle introduction to the library, and only barely scratches the surface of what's inside: we will keep publishing more articles in the future to explain some of the more advanced features of BDK, like key generation, using complex descriptors with multiple keys and/or timelocks, using external signers, etc.

    If you'd like to learn more about the library feel free to ask any questions in the comment section down below, or join our Discord Community (opens new window) to chat with us directly!

    - + diff --git a/blog/2020/12/release-v0.2.0/index.html b/blog/2020/12/release-v0.2.0/index.html index 8b6908bd0b..d0092dec0c 100644 --- a/blog/2020/12/release-v0.2.0/index.html +++ b/blog/2020/12/release-v0.2.0/index.html @@ -30,7 +30,7 @@ - + @@ -128,7 +128,7 @@ .map_err(|e| KeyError::Message(e.to_string()))?) } } -

    # Support for sortedmulti()

    Thanks to the addition of sortedmulti() in rust-miniscript, we can now also support them in BDK, which means we are getting more and more compatible with other descriptor-based wallets out there like Bitcoin Core.

    # Contributors

    A huge thanks to everybody who contributed to this new release with suggestions, pull requests and bug reports.

    Since the 0.1.0-beta.1 release over three months ago, we've had 213 new commits made by 10 different contributors for a total of 9990 additions and 2993 deletions. Here's the full diff (opens new window).

    A special thanks to the 7 new contributors:

    - + diff --git a/blog/tags/bdk-rn/index.html b/blog/tags/bdk-rn/index.html index 5aef233ce8..0e266c05b8 100644 --- a/blog/tags/bdk-rn/index.html +++ b/blog/tags/bdk-rn/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/bdk/index.html b/blog/tags/bdk/index.html index 1a4d45da12..2cf343f2af 100644 --- a/blog/tags/bdk/index.html +++ b/blog/tags/bdk/index.html @@ -25,7 +25,7 @@ - + @@ -180,6 +180,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/bindings/index.html b/blog/tags/bindings/index.html index c993606e30..58a3583fe8 100644 --- a/blog/tags/bindings/index.html +++ b/blog/tags/bindings/index.html @@ -25,7 +25,7 @@ - + @@ -92,6 +92,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/bitcoin-cli/index.html b/blog/tags/bitcoin-cli/index.html index d526401242..fbf05b3efe 100644 --- a/blog/tags/bitcoin-cli/index.html +++ b/blog/tags/bitcoin-cli/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/bitcoin/index.html b/blog/tags/bitcoin/index.html index 2ab48bba82..76d2d595a5 100644 --- a/blog/tags/bitcoin/index.html +++ b/blog/tags/bitcoin/index.html @@ -25,7 +25,7 @@ - + @@ -92,6 +92,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/blockchain/index.html b/blog/tags/blockchain/index.html index 261edafbc5..e2252b368d 100644 --- a/blog/tags/blockchain/index.html +++ b/blog/tags/blockchain/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/coin selection/index.html b/blog/tags/coin selection/index.html index 9fcc4cc27c..ed41137233 100644 --- a/blog/tags/coin selection/index.html +++ b/blog/tags/coin selection/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/compact_filters/index.html b/blog/tags/compact_filters/index.html index 7cfb25599b..4eb5303138 100644 --- a/blog/tags/compact_filters/index.html +++ b/blog/tags/compact_filters/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/descriptor/index.html b/blog/tags/descriptor/index.html index dabe586eb8..3b0883a40e 100644 --- a/blog/tags/descriptor/index.html +++ b/blog/tags/descriptor/index.html @@ -25,7 +25,7 @@ - + @@ -114,6 +114,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/development/index.html b/blog/tags/development/index.html index 9224d1425d..fd37691958 100644 --- a/blog/tags/development/index.html +++ b/blog/tags/development/index.html @@ -25,7 +25,7 @@ - + @@ -103,6 +103,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/fee/index.html b/blog/tags/fee/index.html index 7935b7d756..e143be2bea 100644 --- a/blog/tags/fee/index.html +++ b/blog/tags/fee/index.html @@ -25,7 +25,7 @@ - + @@ -49,7 +49,7 @@ Blog GitHub - (opens new window)

    Posts tagged with Fee

    Fee estimation for light-clients (Part 1)

    + (opens new window)

    - + diff --git a/blog/tags/getting started/index.html b/blog/tags/getting started/index.html index ff9d841474..d736fc96fa 100644 --- a/blog/tags/getting started/index.html +++ b/blog/tags/getting started/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/grants/index.html b/blog/tags/grants/index.html index 544f423f89..d410e76c60 100644 --- a/blog/tags/grants/index.html +++ b/blog/tags/grants/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/guide/index.html b/blog/tags/guide/index.html index 94aab67a2c..a76924b848 100644 --- a/blog/tags/guide/index.html +++ b/blog/tags/guide/index.html @@ -25,7 +25,7 @@ - + @@ -125,6 +125,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/iOS/index.html b/blog/tags/iOS/index.html index 993dfe01ab..ef377d1ac2 100644 --- a/blog/tags/iOS/index.html +++ b/blog/tags/iOS/index.html @@ -25,7 +25,7 @@ - + @@ -92,6 +92,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/index.html b/blog/tags/index.html index 0cd1245414..383d7bc7fa 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -25,7 +25,7 @@ - + @@ -49,7 +49,7 @@ Blog GitHub - (opens new window)
    - + diff --git a/blog/tags/miniscript/index.html b/blog/tags/miniscript/index.html index 308e92a2bf..e5f43c33df 100644 --- a/blog/tags/miniscript/index.html +++ b/blog/tags/miniscript/index.html @@ -25,7 +25,7 @@ - + @@ -114,6 +114,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/mobile/index.html b/blog/tags/mobile/index.html index e9df008700..aa3d0628c5 100644 --- a/blog/tags/mobile/index.html +++ b/blog/tags/mobile/index.html @@ -25,7 +25,7 @@ - + @@ -92,6 +92,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/multi-sig/index.html b/blog/tags/multi-sig/index.html index b4dbfaa9ae..384ee865e4 100644 --- a/blog/tags/multi-sig/index.html +++ b/blog/tags/multi-sig/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/novice/index.html b/blog/tags/novice/index.html index c93670d26c..c6adb49e53 100644 --- a/blog/tags/novice/index.html +++ b/blog/tags/novice/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/paper wallets/index.html b/blog/tags/paper wallets/index.html index 4ecfbe99e5..f5e825112a 100644 --- a/blog/tags/paper wallets/index.html +++ b/blog/tags/paper wallets/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/project/index.html b/blog/tags/project/index.html index 58191ab90f..8b068472b0 100644 --- a/blog/tags/project/index.html +++ b/blog/tags/project/index.html @@ -25,7 +25,7 @@ - + @@ -103,6 +103,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/release/index.html b/blog/tags/release/index.html index aabb35d9b6..f6dcce1434 100644 --- a/blog/tags/release/index.html +++ b/blog/tags/release/index.html @@ -25,7 +25,7 @@ - + @@ -158,6 +158,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/rust/index.html b/blog/tags/rust/index.html index 2e1c9563ea..d31664cddd 100644 --- a/blog/tags/rust/index.html +++ b/blog/tags/rust/index.html @@ -25,7 +25,7 @@ - + @@ -169,6 +169,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/security/index.html b/blog/tags/security/index.html index 0ff4bc7268..b2e69b93bd 100644 --- a/blog/tags/security/index.html +++ b/blog/tags/security/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/summer of bitcoin/index.html b/blog/tags/summer of bitcoin/index.html index c97e2a4e23..1bc67971e1 100644 --- a/blog/tags/summer of bitcoin/index.html +++ b/blog/tags/summer of bitcoin/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/taproot/index.html b/blog/tags/taproot/index.html index b0e8273326..7022c155a2 100644 --- a/blog/tags/taproot/index.html +++ b/blog/tags/taproot/index.html @@ -25,7 +25,7 @@ - + @@ -92,6 +92,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/tor/index.html b/blog/tags/tor/index.html index ea1c339e27..d91ced9aca 100644 --- a/blog/tags/tor/index.html +++ b/blog/tags/tor/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/tutorial/index.html b/blog/tags/tutorial/index.html index 8354127780..49b1d81d38 100644 --- a/blog/tags/tutorial/index.html +++ b/blog/tags/tutorial/index.html @@ -25,7 +25,7 @@ - + @@ -147,6 +147,6 @@
    BDK Foundation
    - + diff --git a/blog/tags/wallet/index.html b/blog/tags/wallet/index.html index cc4abb580c..691aaefca1 100644 --- a/blog/tags/wallet/index.html +++ b/blog/tags/wallet/index.html @@ -25,7 +25,7 @@ - + @@ -81,6 +81,6 @@
    BDK Foundation
    - + diff --git a/blog/using-bdk-with-hardware-wallets/index.html b/blog/using-bdk-with-hardware-wallets/index.html index 6ea8e5fad2..690293b230 100644 --- a/blog/using-bdk-with-hardware-wallets/index.html +++ b/blog/using-bdk-with-hardware-wallets/index.html @@ -30,7 +30,7 @@ - + @@ -181,7 +181,7 @@ blockchain.broadcast(&raw_transaction)?; println!("Transaction broadcasted! TXID: {txid}.\nExplorer URL: https://mempool.space/testnet/tx/{txid}", txid = txid); -

    # Conclusion

    We just received coins on a hardware wallet and spent from it - how cool is that?!

    See the hardware signer example (opens new window) for the full code, and, if you have any questions or suggestions, head to our Discord (opens new window). See you there!

    - + diff --git a/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html b/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html index 6b159af6a1..37590be9c7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html +++ b/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html @@ -1,18 +1,18 @@ BlockEvent in bdk_bitcoind_rpc - Rust

    Struct bdk_bitcoind_rpc::BlockEvent

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

    A newly emitted block from Emitter.

    Fields§

    §block: B

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

    -
    §checkpoint: CheckPoint

    The checkpoint of the new block.

    -

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

    §checkpoint: CheckPoint

    The checkpoint of the new block.

    +

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

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

    Implementations§

    source§

    impl<B> BlockEvent<B>

    source

    pub fn block_height(&self) -> u32

    The block height of this new block.

    source

    pub fn block_hash(&self) -> BlockHash

    The block hash of this new block.

    -
    source

    pub fn connected_to(&self) -> BlockId

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

    -

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

    source

    pub fn connected_to(&self) -> BlockId

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

    +

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

    This value is derived from BlockEvent::checkpoint.

    Trait Implementations§

    source§

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

    source§

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

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

    Struct bdk_bitcoind_rpc::Emitter

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

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

    Refer to module-level documentation for more.

    -

    Implementations§

    source§

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

    source

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

    Construct a new Emitter.

    +

    Implementations§

    source§

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

    source

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

    Construct a new Emitter.

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

    start_height starts emission from a given height (if there are no conflicts with the diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.FromScriptError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.FromScriptError.html index 61990ff4a6..94e7fd1dd1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.FromScriptError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.FromScriptError.html @@ -6,7 +6,7 @@

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    UnrecognizedScript

    Script is not a p2pkh, p2sh or witness program.

    §

    WitnessProgram(Error)

    A witness program error.

    §

    WitnessVersion(TryFromError)

    A witness version construction error.

    -

    Trait Implementations§

    §

    impl Clone for FromScriptError

    §

    fn clone(&self) -> FromScriptError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for FromScriptError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for FromScriptError

    §

    fn from(e: Error) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromScriptError

    §

    fn from(never: Infallible) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromScriptError

    §

    fn from(e: TryFromError) -> FromScriptError

    Converts to this type from the input type.
    §

    impl PartialEq for FromScriptError

    §

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

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

    Trait Implementations§

    §

    impl Clone for FromScriptError

    §

    fn clone(&self) -> FromScriptError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for FromScriptError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for FromScriptError

    §

    fn from(e: Error) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromScriptError

    §

    fn from(never: Infallible) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromScriptError

    §

    fn from(e: TryFromError) -> FromScriptError

    Converts to this type from the input type.
    §

    impl PartialEq for FromScriptError

    §

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

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

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

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

    impl Eq for FromScriptError

    §

    impl StructuralPartialEq for FromScriptError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.ParseError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.ParseError.html index 2d766ea9aa..e9a08b2364 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.ParseError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/enum.ParseError.html @@ -18,7 +18,7 @@
    §

    InvalidBase58PayloadLength(InvalidBase58PayloadLengthError)

    Invalid base58 payload data length for legacy address.

    §

    InvalidLegacyPrefix(InvalidLegacyPrefixError)

    Invalid legacy address prefix in base58 data payload.

    §

    NetworkValidation(NetworkValidationError)

    Address’s network differs from required one.

    -

    Trait Implementations§

    §

    impl Clone for ParseError

    §

    fn clone(&self) -> ParseError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<DecodeError> for ParseError

    §

    fn from(e: DecodeError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParseError

    §

    fn from(never: Infallible) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for ParseError

    §

    fn from(e: InvalidBase58PayloadLengthError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidLegacyPrefixError> for ParseError

    §

    fn from(e: InvalidLegacyPrefixError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<LegacyAddressTooLongError> for ParseError

    §

    fn from(e: LegacyAddressTooLongError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<NetworkValidationError> for ParseError

    §

    fn from(e: NetworkValidationError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for ParseError

    §

    fn from(e: TryFromError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<UnknownHrpError> for ParseError

    §

    fn from(e: UnknownHrpError) -> ParseError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseError

    §

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

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

    Trait Implementations§

    §

    impl Clone for ParseError

    §

    fn clone(&self) -> ParseError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<DecodeError> for ParseError

    §

    fn from(e: DecodeError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParseError

    §

    fn from(never: Infallible) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for ParseError

    §

    fn from(e: InvalidBase58PayloadLengthError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidLegacyPrefixError> for ParseError

    §

    fn from(e: InvalidLegacyPrefixError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<LegacyAddressTooLongError> for ParseError

    §

    fn from(e: LegacyAddressTooLongError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<NetworkValidationError> for ParseError

    §

    fn from(e: NetworkValidationError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for ParseError

    §

    fn from(e: TryFromError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<UnknownHrpError> for ParseError

    §

    fn from(e: UnknownHrpError) -> ParseError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseError

    §

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

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

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

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

    impl Eq for ParseError

    §

    impl StructuralPartialEq for ParseError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.FromScriptError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.FromScriptError.html index 31ab8b8693..3210b0b02e 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.FromScriptError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.FromScriptError.html @@ -6,7 +6,7 @@

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    UnrecognizedScript

    Script is not a p2pkh, p2sh or witness program.

    §

    WitnessProgram(Error)

    A witness program error.

    §

    WitnessVersion(TryFromError)

    A witness version construction error.

    -

    Trait Implementations§

    §

    impl Clone for FromScriptError

    §

    fn clone(&self) -> FromScriptError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for FromScriptError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for FromScriptError

    §

    fn from(e: Error) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromScriptError

    §

    fn from(never: Infallible) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromScriptError

    §

    fn from(e: TryFromError) -> FromScriptError

    Converts to this type from the input type.
    §

    impl PartialEq for FromScriptError

    §

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

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

    Trait Implementations§

    §

    impl Clone for FromScriptError

    §

    fn clone(&self) -> FromScriptError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for FromScriptError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for FromScriptError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for FromScriptError

    §

    fn from(e: Error) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromScriptError

    §

    fn from(never: Infallible) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromScriptError

    §

    fn from(e: TryFromError) -> FromScriptError

    Converts to this type from the input type.
    §

    impl PartialEq for FromScriptError

    §

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

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

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

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

    impl Eq for FromScriptError

    §

    impl StructuralPartialEq for FromScriptError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.ParseError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.ParseError.html index d173d385aa..9be8bb3195 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.ParseError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/address/error/enum.ParseError.html @@ -18,7 +18,7 @@
    §

    InvalidBase58PayloadLength(InvalidBase58PayloadLengthError)

    Invalid base58 payload data length for legacy address.

    §

    InvalidLegacyPrefix(InvalidLegacyPrefixError)

    Invalid legacy address prefix in base58 data payload.

    §

    NetworkValidation(NetworkValidationError)

    Address’s network differs from required one.

    -

    Trait Implementations§

    §

    impl Clone for ParseError

    §

    fn clone(&self) -> ParseError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<DecodeError> for ParseError

    §

    fn from(e: DecodeError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParseError

    §

    fn from(never: Infallible) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for ParseError

    §

    fn from(e: InvalidBase58PayloadLengthError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidLegacyPrefixError> for ParseError

    §

    fn from(e: InvalidLegacyPrefixError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<LegacyAddressTooLongError> for ParseError

    §

    fn from(e: LegacyAddressTooLongError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<NetworkValidationError> for ParseError

    §

    fn from(e: NetworkValidationError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for ParseError

    §

    fn from(e: TryFromError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<UnknownHrpError> for ParseError

    §

    fn from(e: UnknownHrpError) -> ParseError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseError

    §

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

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

    Trait Implementations§

    §

    impl Clone for ParseError

    §

    fn clone(&self) -> ParseError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<DecodeError> for ParseError

    §

    fn from(e: DecodeError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParseError

    §

    fn from(never: Infallible) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for ParseError

    §

    fn from(e: InvalidBase58PayloadLengthError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<InvalidLegacyPrefixError> for ParseError

    §

    fn from(e: InvalidLegacyPrefixError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<LegacyAddressTooLongError> for ParseError

    §

    fn from(e: LegacyAddressTooLongError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<NetworkValidationError> for ParseError

    §

    fn from(e: NetworkValidationError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for ParseError

    §

    fn from(e: TryFromError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<UnknownHrpError> for ParseError

    §

    fn from(e: UnknownHrpError) -> ParseError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseError

    §

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

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

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

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

    impl Eq for ParseError

    §

    impl StructuralPartialEq for ParseError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/amount/enum.ParseAmountError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/amount/enum.ParseAmountError.html index 5449191a5a..aa272e5ef8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/amount/enum.ParseAmountError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/amount/enum.ParseAmountError.html @@ -10,7 +10,7 @@
    §

    MissingDigits(MissingDigitsError)

    A digit was expected but not found.

    §

    InputTooLarge(InputTooLargeError)

    Input string was too large.

    §

    InvalidCharacter(InvalidCharacterError)

    Invalid character in input.

    -

    Trait Implementations§

    §

    impl Clone for ParseAmountError

    §

    fn clone(&self) -> ParseAmountError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseAmountError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseAmountError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseAmountError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Infallible> for ParseAmountError

    §

    fn from(never: Infallible) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<InputTooLargeError> for ParseAmountError

    §

    fn from(value: InputTooLargeError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<InvalidCharacterError> for ParseAmountError

    §

    fn from(value: InvalidCharacterError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<MissingDigitsError> for ParseAmountError

    §

    fn from(value: MissingDigitsError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<OutOfRangeError> for ParseAmountError

    §

    fn from(value: OutOfRangeError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<ParseAmountError> for ParseError

    §

    fn from(e: ParseAmountError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TooPreciseError> for ParseAmountError

    §

    fn from(value: TooPreciseError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseAmountError

    §

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

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

    Trait Implementations§

    §

    impl Clone for ParseAmountError

    §

    fn clone(&self) -> ParseAmountError

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseAmountError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseAmountError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseAmountError

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Infallible> for ParseAmountError

    §

    fn from(never: Infallible) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<InputTooLargeError> for ParseAmountError

    §

    fn from(value: InputTooLargeError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<InvalidCharacterError> for ParseAmountError

    §

    fn from(value: InvalidCharacterError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<MissingDigitsError> for ParseAmountError

    §

    fn from(value: MissingDigitsError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<OutOfRangeError> for ParseAmountError

    §

    fn from(value: OutOfRangeError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl From<ParseAmountError> for ParseError

    §

    fn from(e: ParseAmountError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TooPreciseError> for ParseAmountError

    §

    fn from(value: TooPreciseError) -> ParseAmountError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseAmountError

    §

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

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

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

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

    impl Eq for ParseAmountError

    §

    impl StructuralPartialEq for ParseAmountError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/enum.Error.html index a9ad948343..312239c87c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/enum.Error.html @@ -6,7 +6,7 @@

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    Decode(InvalidCharacterError)

    Invalid character while decoding.

    §

    IncorrectChecksum(IncorrectChecksumError)

    Checksum was not correct.

    §

    TooShort(TooShortError)

    Checked data was too short.

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for Error

    §

    fn from(err: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<IncorrectChecksumError> for Error

    §

    fn from(e: IncorrectChecksumError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<InvalidCharacterError> for Error

    §

    fn from(e: InvalidCharacterError) -> Error

    Converts to this type from the input type.
    §

    impl From<TooShortError> for Error

    §

    fn from(e: TooShortError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for Error

    §

    fn from(err: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<IncorrectChecksumError> for Error

    §

    fn from(e: IncorrectChecksumError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<InvalidCharacterError> for Error

    §

    fn from(e: InvalidCharacterError) -> Error

    Converts to this type from the input type.
    §

    impl From<TooShortError> for Error

    §

    fn from(e: TooShortError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

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

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

    impl Eq for Error

    §

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/error/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/error/enum.Error.html index e768a851c8..c5ae0c8852 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/error/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/error/enum.Error.html @@ -6,7 +6,7 @@

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    Decode(InvalidCharacterError)

    Invalid character while decoding.

    §

    IncorrectChecksum(IncorrectChecksumError)

    Checksum was not correct.

    §

    TooShort(TooShortError)

    Checked data was too short.

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for Error

    §

    fn from(err: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<IncorrectChecksumError> for Error

    §

    fn from(e: IncorrectChecksumError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<InvalidCharacterError> for Error

    §

    fn from(e: InvalidCharacterError) -> Error

    Converts to this type from the input type.
    §

    impl From<TooShortError> for Error

    §

    fn from(e: TooShortError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for Error

    §

    fn from(err: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<IncorrectChecksumError> for Error

    §

    fn from(e: IncorrectChecksumError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<InvalidCharacterError> for Error

    §

    fn from(e: InvalidCharacterError) -> Error

    Converts to this type from the input type.
    §

    impl From<TooShortError> for Error

    §

    fn from(e: TooShortError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

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

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

    impl Eq for Error

    §

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.String.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.String.html index fa090a97ef..88b1d80c22 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.String.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.String.html @@ -2387,7 +2387,7 @@
    §Example
    let original: String = "statue".to_owned();
     let shared: Rc<str> = Rc::from(original);
     assert_eq!("statue", &shared[..]);
    -

    §

    impl From<String> for ToSqlOutput<'_>

    §

    fn from(t: String) -> ToSqlOutput<'_>

    Converts to this type from the input type.
    §

    impl From<String> for Value

    §

    fn from(s: String) -> Value

    Converts to this type from the input type.
    source§

    impl From<String> for Value

    source§

    fn from(f: String) -> Value

    Convert String to Value::String.

    +
    §

    impl From<String> for ToSqlOutput<'_>

    §

    fn from(t: String) -> ToSqlOutput<'_>

    Converts to this type from the input type.
    §

    impl From<String> for Value

    §

    fn from(s: String) -> Value

    Converts to this type from the input type.
    source§

    impl From<String> for Value

    source§

    fn from(f: String) -> Value

    Convert String to Value::String.

    §Examples
    use serde_json::Value;
     
    @@ -2457,9 +2457,9 @@ 

    §Examples< ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where S: Serializer,

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

    impl StrConsumer for String

    Pushes the str onto the end of the String

    §

    fn consume(&mut self, buf: &str)

    Consume the base64 encoded data in buf
    1.16.0 · source§

    impl ToSocketAddrs for String

    §

    type Iter = IntoIter<SocketAddr>

    Returned iterator over socket addresses which this type may correspond -to.
    source§

    fn to_socket_addrs(&self) -> Result<IntoIter<SocketAddr>, Error>

    Converts this object to an iterator of resolved SocketAddrs. Read more
    §

    impl ToSql for String

    §

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

    Converts Rust value to SQLite value
    §

    impl TryFrom<String> for CommandString

    §

    type Error = CommandStringError

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

    fn try_from( +to.

    source§

    fn to_socket_addrs(&self) -> Result<IntoIter<SocketAddr>, Error>

    Converts this object to an iterator of resolved SocketAddrs. Read more
    §

    impl ToSql for String

    §

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

    Converts Rust value to SQLite value
    §

    impl TryFrom<String> for CommandString

    §

    type Error = CommandStringError

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

    fn try_from( value: String -) -> Result<CommandString, <CommandString as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<LockTime, <LockTime as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Sequence

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Sequence, <Sequence as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: String) -> Result<Time, <Time as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Time

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Time, <Time as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    1.0.0 · source§

    impl Write for String

    source§

    fn write_str(&mut self, s: &str) -> Result<(), Error>

    Writes a string slice into this writer, returning whether the write +) -> Result<CommandString, <CommandString as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<LockTime, <LockTime as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Sequence

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Sequence, <Sequence as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Time

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Time, <Time as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: String) -> Result<Time, <Time as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    1.0.0 · source§

    impl Write for String

    source§

    fn write_str(&mut self, s: &str) -> Result<(), Error>

    Writes a string slice into this writer, returning whether the write succeeded. Read more
    source§

    fn write_char(&mut self, c: char) -> Result<(), Error>

    Writes a char into this writer, returning whether the write succeeded. Read more
    1.0.0 · source§

    fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

    Glue for usage of the write! macro with implementors of this trait. Read more
    source§

    impl DerefPure for String

    1.0.0 · source§

    impl Eq for String

    source§

    impl Index for String

    1.0.0 · source§

    impl StructuralPartialEq for String

    Auto Trait Implementations§

    §

    impl Freeze for String

    §

    impl RefUnwindSafe for String

    §

    impl Send for String

    §

    impl Sync for String

    §

    impl Unpin for String

    §

    impl UnwindSafe for String

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

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

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.Vec.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.Vec.html index 8aed14d134..6cbb50fc41 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.Vec.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/base58/struct.Vec.html @@ -3693,72 +3693,72 @@
    §Examples< assert_eq!(yp, y.as_ptr());

    source§

    fn clone(&self) -> Vec<T, A>

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

    impl<T, A> Debug for Vec<T, A>
    where T: Debug, - A: Allocator,

    source§

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Vec<(u32, Address)>

    source§

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Vec<(u32, Address)>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<(u32, Address)>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<AddrV2Message>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<AddrV2Message>, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<BlockHash>

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<BlockHash>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<BlockHash>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<FilterHash>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<FilterHash>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<FilterHash>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<FilterHeader>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<FilterHeader>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<FilterHeader>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Header>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Header>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<Header>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Inventory>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Inventory>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<Inventory>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<PrefilledTransaction>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<PrefilledTransaction>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<PrefilledTransaction>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<ShortId>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<ShortId>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<ShortId>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TapLeafHash>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TapLeafHash>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<TapLeafHash>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Transaction>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Transaction>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<Transaction>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TxIn>

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<Vec<TxIn>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TxMerkleNode>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TxIn>

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<Vec<TxIn>, Error>
    where + R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TxMerkleNode>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<TxMerkleNode>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TxOut>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<TxOut>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<TxOut>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<VarInt>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<VarInt>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<VarInt>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Vec<u8>>

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<Vec<u8>>

    §

    fn consensus_decode_from_finite_reader<R>( r: &mut R ) -> Result<Vec<Vec<u8>>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<u64>

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<Vec<u64>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where - R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<u8>

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<Vec<u8>, Error>
    where - R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<u64>

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<Vec<u64>, Error>
    where + R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where + R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Decodable for Vec<u8>

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<Vec<u8>, Error>
    where + R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    1.0.0 · source§

    impl<T> Default for Vec<T>

    source§

    fn default() -> Vec<T>

    Creates an empty Vec<T>.

    The vector will not allocate until elements are pushed onto it.

    1.0.0 · source§

    impl<T, A> Deref for Vec<T, A>
    where @@ -3768,24 +3768,24 @@
    §Examples< deserializer: D ) -> Result<Vec<T>, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

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

    impl<'a> DisplayHex for &'a Vec<u8>

    §

    type Display = DisplayByteSlice<'a>

    The type providing fmt::Display implementation. Read more
    §

    fn as_hex(self) -> <&'a Vec<u8> as DisplayHex>::Display

    Display Self as a continuous sequence of ASCII hex chars.
    §

    fn hex_reserve_suggestion(self) -> usize

    Hints how much bytes to reserve when creating a String. Read more
    §

    fn to_lower_hex_string(self) -> String

    Create a lower-hex-encoded string. Read more
    §

    fn to_upper_hex_string(self) -> String

    Create an upper-hex-encoded string. Read more
    §

    fn to_hex_string(self, case: Case) -> String

    Create a hex-encoded string. Read more
    §

    fn append_hex_to_string(self, case: Case, string: &mut String)

    Appends hex-encoded content to an existing String. Read more
    1.0.0 · source§

    impl<T, A> Drop for Vec<T, A>
    where - A: Allocator,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    §

    impl Encodable for Vec<(u32, Address)>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<AddrV2Message>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<BlockHash>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<FilterHash>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<FilterHeader>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Header>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Inventory>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + A: Allocator,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    §

    impl Encodable for Vec<(u32, Address)>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<AddrV2Message>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<BlockHash>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<FilterHash>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<FilterHeader>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Header>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Inventory>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<PrefilledTransaction>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<ShortId>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TapLeafHash>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Transaction>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TxIn>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TxMerkleNode>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TxOut>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<VarInt>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Vec<u8>>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<u64>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<u8>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<ShortId>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TapLeafHash>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Transaction>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TxIn>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TxMerkleNode>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<TxOut>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<VarInt>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<Vec<u8>>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<u64>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl Encodable for Vec<u8>

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    1.2.0 · source§

    impl<'a, T, A> Extend<&'a T> for Vec<T, A>
    where T: Copy + 'a, A: Allocator,

    Extend implementation that copies elements out of references before pushing them onto the Vec.

    @@ -3841,7 +3841,7 @@
    §Examples<
    let o: Cow<'_, [i32]> = Cow::Owned(vec![1, 2, 3]);
     let b: Cow<'_, [i32]> = Cow::Borrowed(&[1, 2, 3]);
     assert_eq!(Vec::from(o), Vec::from(b));
    -
    §

    impl From<DerivationPath> for Vec<ChildNumber>

    §

    fn from(path: DerivationPath) -> Vec<ChildNumber>

    Converts to this type from the input type.
    §

    impl From<PushBytesBuf> for Vec<u8>

    §

    fn from(value: PushBytesBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Vec<u8>

    §

    fn from(v: ScriptBuf) -> Vec<u8>

    Converts to this type from the input type.
    1.14.0 · source§

    impl From<String> for Vec<u8>

    source§

    fn from(string: String) -> Vec<u8>

    Converts the given String to a vector Vec that holds values of type u8.

    +
    §

    impl From<DerivationPath> for Vec<ChildNumber>

    §

    fn from(path: DerivationPath) -> Vec<ChildNumber>

    Converts to this type from the input type.
    §

    impl From<PushBytesBuf> for Vec<u8>

    §

    fn from(value: PushBytesBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Vec<u8>

    §

    fn from(v: ScriptBuf) -> Vec<u8>

    Converts to this type from the input type.
    1.14.0 · source§

    impl From<String> for Vec<u8>

    source§

    fn from(string: String) -> Vec<u8>

    Converts the given String to a vector Vec that holds values of type u8.

    §Examples
    let s1 = String::from("hello world");
     let v1 = Vec::from(s1);
    @@ -3849,8 +3849,8 @@ 
    §Examples< for b in v1 { println!("{b}"); }
    -
    §

    impl From<TaprootMerkleBranch> for Vec<TapNodeHash>

    §

    fn from(branch: TaprootMerkleBranch) -> Vec<TapNodeHash>

    Converts to this type from the input type.
    §

    impl From<Vec<&[u8]>> for Witness

    §

    fn from(vec: Vec<&[u8]>) -> Witness

    Converts to this type from the input type.
    §

    impl<A> From<Vec<<A as Array>::Item>> for SmallVec<A>
    where - A: Array,

    §

    fn from(vec: Vec<<A as Array>::Item>) -> SmallVec<A>

    Converts to this type from the input type.
    §

    impl From<Vec<ChildNumber>> for DerivationPath

    §

    fn from(numbers: Vec<ChildNumber>) -> DerivationPath

    Converts to this type from the input type.
    1.43.0 · source§

    impl From<Vec<NonZero<u8>>> for CString

    source§

    fn from(v: Vec<NonZero<u8>>) -> CString

    Converts a Vec<NonZero<u8>> into a CString without +

    §

    impl From<TaprootMerkleBranch> for Vec<TapNodeHash>

    §

    fn from(branch: TaprootMerkleBranch) -> Vec<TapNodeHash>

    Converts to this type from the input type.
    §

    impl From<Vec<&[u8]>> for Witness

    §

    fn from(vec: Vec<&[u8]>) -> Witness

    Converts to this type from the input type.
    §

    impl<A> From<Vec<<A as Array>::Item>> for SmallVec<A>
    where + A: Array,

    §

    fn from(vec: Vec<<A as Array>::Item>) -> SmallVec<A>

    Converts to this type from the input type.
    §

    impl From<Vec<ChildNumber>> for DerivationPath

    §

    fn from(numbers: Vec<ChildNumber>) -> DerivationPath

    Converts to this type from the input type.
    1.43.0 · source§

    impl From<Vec<NonZero<u8>>> for CString

    source§

    fn from(v: Vec<NonZero<u8>>) -> CString

    Converts a Vec<NonZero<u8>> into a CString without copying nor checking for inner nul bytes.

    1.8.0 · source§

    impl<'a, T> From<Vec<T>> for Cow<'a, [T]>
    where T: Clone,

    source§

    fn from(v: Vec<T>) -> Cow<'a, [T]>

    Creates an Owned variant of Cow @@ -3895,8 +3895,8 @@

    §Example

    This conversion is guaranteed to run in O(1) time and to not re-allocate the Vec’s buffer or allocate any additional memory.

    -
    §

    impl From<Vec<Vec<u8>>> for Witness

    §

    fn from(vec: Vec<Vec<u8>>) -> Witness

    Converts to this type from the input type.
    source§

    impl From<Vec<u32>> for IndexVec

    source§

    fn from(v: Vec<u32>) -> IndexVec

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for Builder

    Creates a new builder from an existing vector.

    -
    §

    fn from(v: Vec<u8>) -> Builder

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ScriptBuf

    §

    fn from(v: Vec<u8>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ToSqlOutput<'_>

    §

    fn from(t: Vec<u8>) -> ToSqlOutput<'_>

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for Value

    §

    fn from(v: Vec<u8>) -> Value

    Converts to this type from the input type.
    source§

    impl From<Vec<usize>> for IndexVec

    source§

    fn from(v: Vec<usize>) -> IndexVec

    Converts to this type from the input type.
    1.10.0 · source§

    impl<T, A> From<VecDeque<T, A>> for Vec<T, A>
    where +

    §

    impl From<Vec<Vec<u8>>> for Witness

    §

    fn from(vec: Vec<Vec<u8>>) -> Witness

    Converts to this type from the input type.
    source§

    impl From<Vec<u32>> for IndexVec

    source§

    fn from(v: Vec<u32>) -> IndexVec

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for Builder

    Creates a new builder from an existing vector.

    +
    §

    fn from(v: Vec<u8>) -> Builder

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ScriptBuf

    §

    fn from(v: Vec<u8>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ToSqlOutput<'_>

    §

    fn from(t: Vec<u8>) -> ToSqlOutput<'_>

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for Value

    §

    fn from(v: Vec<u8>) -> Value

    Converts to this type from the input type.
    source§

    impl From<Vec<usize>> for IndexVec

    source§

    fn from(v: Vec<usize>) -> IndexVec

    Converts to this type from the input type.
    1.10.0 · source§

    impl<T, A> From<VecDeque<T, A>> for Vec<T, A>
    where A: Allocator,

    source§

    fn from(other: VecDeque<T, A>) -> Vec<T, A>

    Turn a VecDeque<T> into a Vec<T>.

    This never needs to re-allocate, but does need to do O(n) data movement if the circular buffer doesn’t happen to be at the beginning of the allocation.

    @@ -3991,7 +3991,7 @@
    §Examples< assert_eq!(first_element, Some("a".to_string())); assert_eq!(v_iter.next(), Some("b".to_string())); assert_eq!(v_iter.next(), None);
    -
    §

    type Item = T

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<T, A>

    Which kind of iterator are we turning this into?
    source§

    impl<T> Merge for Vec<T>

    source§

    fn merge(&mut self, other: Vec<T>)

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

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

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

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

    impl<T, A> Ord for Vec<T, A>
    where +

    §

    type Item = T

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<T, A>

    Which kind of iterator are we turning this into?
    §

    impl<T> Merge for Vec<T>

    §

    fn merge(&mut self, other: Vec<T>)

    Merge another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

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

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

    impl<T, A> Ord for Vec<T, A>
    where T: Ord, A: Allocator,

    Implements ordering of vectors, lexicographically.

    source§

    fn cmp(&self, other: &Vec<T, A>) -> Ordering

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

    fn max(self, other: Self) -> Self
    where @@ -4085,12 +4085,12 @@
    §Examples< let [a, b]: [_; 2] = v.try_into().unwrap(); assert_eq!(a, b' '); assert_eq!(b, b'd');
    -

    §

    type Error = Vec<T, A>

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

    impl TryFrom<Vec<TapNodeHash>> for TaprootMerkleBranch

    §

    type Error = Vec<T, A>

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

    impl TryFrom<Vec<TapNodeHash>> for TaprootMerkleBranch

    §

    fn try_from( v: Vec<TapNodeHash> ) -> Result<TaprootMerkleBranch, <TaprootMerkleBranch as TryFrom<Vec<TapNodeHash>>>::Error>

    Creates a merkle proof from list of hashes.

    §Errors

    If inner proof length is more than TAPROOT_CONTROL_MAX_NODE_COUNT (128).

    -
    §

    type Error = TaprootError

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

    impl TryFrom<Vec<u8>> for PushBytesBuf

    §

    type Error = PushBytesError

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

    fn try_from( +

    §

    type Error = TaprootError

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

    impl TryFrom<Vec<u8>> for PushBytesBuf

    §

    type Error = PushBytesError

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

    fn try_from( vec: Vec<u8> ) -> Result<PushBytesBuf, <PushBytesBuf as TryFrom<Vec<u8>>>::Error>

    Performs the conversion.
    §

    impl Write for Vec<u8>

    §

    fn write(&mut self, buf: &[u8]) -> Result<usize, Error>

    Writes buf into this writer, returning how many bytes were written.
    §

    fn flush(&mut self) -> Result<(), Error>

    Flushes this output stream, ensuring that all intermediately buffered contents reach their destination.
    §

    fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

    Attempts to write an entire buffer into this writer.
    1.0.0 · source§

    impl<A> Write for Vec<u8, A>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHash.html index 5ddbd02f39..ad4c6e280a 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHash.html @@ -6,11 +6,11 @@ &self, previous_filter_header: &FilterHeader ) -> FilterHeader

    Computes the filter header from a filter hash and previous filter header.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for FilterHash

    §

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

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

    impl AsRef<[u8; 32]> for FilterHash

    §

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

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

    impl Borrow<[u8]> for FilterHash

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for FilterHash

    §

    fn clone(&self) -> FilterHash

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FilterHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FilterHash

    Trait Implementations§

    §

    impl AsRef<[u8]> for FilterHash

    §

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

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

    impl AsRef<[u8; 32]> for FilterHash

    §

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

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

    impl Borrow<[u8]> for FilterHash

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for FilterHash

    §

    fn clone(&self) -> FilterHash

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FilterHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FilterHash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<FilterHash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for FilterHash

    §

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

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

    impl Display for FilterHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FilterHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl FromStr for FilterHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHash, <FilterHash as FromStr>::Err>

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

    impl Hash for FilterHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl FromStr for FilterHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHash, <FilterHash as FromStr>::Err>

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

    impl Hash for FilterHash

    §

    type Engine = <Hash as Hash>::Engine

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

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHeader.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHeader.html index 815eab2347..4d2fda9219 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHeader.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip158/struct.FilterHeader.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

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

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

    impl Display for FilterHeader

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FilterHeader

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl FromStr for FilterHeader

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHeader, <FilterHeader as FromStr>::Err>

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

    impl Hash for FilterHeader

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl FromStr for FilterHeader

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHeader, <FilterHeader as FromStr>::Err>

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

    impl Hash for FilterHeader

    §

    type Engine = <Hash as Hash>::Engine

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

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/enum.Error.html index 5117d948e7..a5254e9bf5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/enum.Error.html @@ -22,7 +22,7 @@
    §

    Hex(HexToArrayError)

    Hexadecimal decoding error

    §

    InvalidPublicKeyHexLength(usize)

    PublicKey hex should be 66 or 130 digits long.

    §

    InvalidBase58PayloadLength(InvalidBase58PayloadLengthError)

    Base58 decoded data was an invalid length.

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for Error

    §

    fn from(err: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for GetKeyError

    §

    fn from(e: Error) -> GetKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for Error

    §

    fn from(e: InvalidBase58PayloadLengthError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(err: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for GetKeyError

    §

    fn from(e: Error) -> GetKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for Error

    §

    fn from(e: InvalidBase58PayloadLengthError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

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

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

    impl Eq for Error

    §

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.ChainCode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.ChainCode.html index 216f2e2a3c..b3892d5584 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.ChainCode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.ChainCode.html @@ -6,8 +6,8 @@

    §

    impl ChainCode

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

    Returns a reference the underlying bytes.

    pub fn to_bytes(self) -> [u8; 32]

    Returns the underlying bytes.

    pub fn from_hex(s: &str) -> Result<ChainCode, HexToArrayError>

    Creates Self from a hex string.

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for ChainCode

    §

    fn as_mut(&mut self) -> &mut [u8]

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

    impl AsMut<[u8; 32]> for ChainCode

    §

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

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

    impl AsRef<[u8]> for ChainCode

    §

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

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

    impl AsRef<[u8; 32]> for ChainCode

    §

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

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

    impl Borrow<[u8]> for ChainCode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Borrow<[u8; 32]> for ChainCode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for ChainCode

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8; 32]> for ChainCode

    §

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

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ChainCode

    §

    fn clone(&self) -> ChainCode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ChainCode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ChainCode

    §

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

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

    impl Display for ChainCode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [u8; 32]> for ChainCode

    §

    fn from(data: &'a [u8; 32]) -> ChainCode

    Converts to this type from the input type.
    §

    impl<'a> From<[u8; 32]> for ChainCode

    §

    fn from(data: [u8; 32]) -> ChainCode

    Converts to this type from the input type.
    §

    impl FromStr for ChainCode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ChainCode, <ChainCode as FromStr>::Err>

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

    impl Hash for ChainCode

    §

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    §

    impl AsMut<[u8]> for ChainCode

    §

    fn as_mut(&mut self) -> &mut [u8]

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

    impl AsMut<[u8; 32]> for ChainCode

    §

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

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

    impl AsRef<[u8]> for ChainCode

    §

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

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

    impl AsRef<[u8; 32]> for ChainCode

    §

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

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

    impl Borrow<[u8]> for ChainCode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Borrow<[u8; 32]> for ChainCode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for ChainCode

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8; 32]> for ChainCode

    §

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

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ChainCode

    §

    fn clone(&self) -> ChainCode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ChainCode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ChainCode

    §

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

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

    impl Display for ChainCode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [u8; 32]> for ChainCode

    §

    fn from(data: &'a [u8; 32]) -> ChainCode

    Converts to this type from the input type.
    §

    impl<'a> From<[u8; 32]> for ChainCode

    §

    fn from(data: [u8; 32]) -> ChainCode

    Converts to this type from the input type.
    §

    impl FromStr for ChainCode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ChainCode, <ChainCode as FromStr>::Err>

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

    impl Hash for ChainCode

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

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

    impl<I> Index<I> for ChainCode
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.DerivationPath.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.DerivationPath.html index 48c132249a..67dc20b4d3 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.DerivationPath.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.DerivationPath.html @@ -38,7 +38,7 @@

    Trait Implementations§

    §

    impl AsRef<[ChildNumber]> for DerivationPath

    §

    fn as_ref(&self) -> &[ChildNumber]

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

    impl Clone for DerivationPath

    §

    fn clone(&self) -> DerivationPath

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for DerivationPath

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for DerivationPath

    §

    fn default() -> DerivationPath

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

    impl<'de> Deserialize<'de> for DerivationPath

    §

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

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

    impl Display for DerivationPath

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [ChildNumber]> for DerivationPath

    §

    fn from(numbers: &'a [ChildNumber]) -> DerivationPath

    Converts to this type from the input type.
    §

    impl From<DerivationPath> for Vec<ChildNumber>

    §

    fn from(path: DerivationPath) -> Vec<ChildNumber>

    Converts to this type from the input type.
    §

    impl From<Vec<ChildNumber>> for DerivationPath

    §

    fn from(numbers: Vec<ChildNumber>) -> DerivationPath

    Converts to this type from the input type.
    §

    impl FromIterator<ChildNumber> for DerivationPath

    §

    fn from_iter<T>(iter: T) -> DerivationPath
    where + D: Deserializer<'de>,

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

    impl Display for DerivationPath

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [ChildNumber]> for DerivationPath

    §

    fn from(numbers: &'a [ChildNumber]) -> DerivationPath

    Converts to this type from the input type.
    §

    impl From<DerivationPath> for Vec<ChildNumber>

    §

    fn from(path: DerivationPath) -> Vec<ChildNumber>

    Converts to this type from the input type.
    §

    impl From<Vec<ChildNumber>> for DerivationPath

    §

    fn from(numbers: Vec<ChildNumber>) -> DerivationPath

    Converts to this type from the input type.
    §

    impl FromIterator<ChildNumber> for DerivationPath

    §

    fn from_iter<T>(iter: T) -> DerivationPath
    where T: IntoIterator<Item = ChildNumber>,

    Creates a value from an iterator. Read more
    §

    impl FromStr for DerivationPath

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(path: &str) -> Result<DerivationPath, Error>

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

    impl Hash for DerivationPath

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.XKeyIdentifier.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.XKeyIdentifier.html index cc32d66a72..3c4a2036b6 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.XKeyIdentifier.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/bip32/struct.XKeyIdentifier.html @@ -2,10 +2,10 @@

    Implementations§

    §

    impl XKeyIdentifier

    pub fn from_raw_hash(inner: Hash) -> XKeyIdentifier

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

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

    pub fn as_raw_hash(&self) -> &Hash

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

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for XKeyIdentifier

    §

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

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

    impl AsRef<[u8; 20]> for XKeyIdentifier

    §

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

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

    impl Borrow<[u8]> for XKeyIdentifier

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for XKeyIdentifier

    §

    fn clone(&self) -> XKeyIdentifier

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for XKeyIdentifier

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for XKeyIdentifier

    §

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

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

    impl AsRef<[u8; 20]> for XKeyIdentifier

    §

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

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

    impl Borrow<[u8]> for XKeyIdentifier

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for XKeyIdentifier

    §

    fn clone(&self) -> XKeyIdentifier

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for XKeyIdentifier

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

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

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

    impl Display for XKeyIdentifier

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<&Xpub> for XKeyIdentifier

    §

    fn from(key: &Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<Hash> for XKeyIdentifier

    §

    fn from(inner: Hash) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<XKeyIdentifier> for Hash

    §

    fn from(hashtype: XKeyIdentifier) -> Hash

    Converts to this type from the input type.
    §

    impl From<Xpub> for XKeyIdentifier

    §

    fn from(key: Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl FromStr for XKeyIdentifier

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XKeyIdentifier, <XKeyIdentifier as FromStr>::Err>

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

    impl Hash for XKeyIdentifier

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XKeyIdentifier

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<&Xpub> for XKeyIdentifier

    §

    fn from(key: &Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<Hash> for XKeyIdentifier

    §

    fn from(inner: Hash) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<XKeyIdentifier> for Hash

    §

    fn from(hashtype: XKeyIdentifier) -> Hash

    Converts to this type from the input type.
    §

    impl From<Xpub> for XKeyIdentifier

    §

    fn from(key: Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl FromStr for XKeyIdentifier

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XKeyIdentifier, <XKeyIdentifier as FromStr>::Err>

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

    impl Hash for XKeyIdentifier

    §

    type Engine = <Hash as Hash>::Engine

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

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.Block.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.Block.html index e67459ad86..b77bb596d1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.Block.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.Block.html @@ -36,7 +36,7 @@

    Result<Block, <__D as Deserializer<'de>>::Error>
    where __D: Deserializer<'de>,

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

    impl Encodable for Block

    §

    fn consensus_encode<R>(&self, r: &mut R) -> Result<usize, Error>
    where - R: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl PartialEq for Block

    §

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

    This method tests for self and other values to be equal, and is used + R: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl PartialEq for Block

    §

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

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

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

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

    impl Serialize for Block

    §

    fn serialize<__S>( &self, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.BlockHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.BlockHash.html index 1debbd7b2b..021e59b2de 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.BlockHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.BlockHash.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for BlockHash

    §

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

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

    impl Display for BlockHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for BlockHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<&Header> for BlockHash

    §

    fn from(header: &Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Header> for BlockHash

    §

    fn from(header: Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl FromStr for BlockHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<BlockHash, <BlockHash as FromStr>::Err>

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

    impl Hash for BlockHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<&Header> for BlockHash

    §

    fn from(header: &Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Header> for BlockHash

    §

    fn from(header: Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl FromStr for BlockHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<BlockHash, <BlockHash as FromStr>::Err>

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

    impl Hash for BlockHash

    §

    type Engine = <Hash as Hash>::Engine

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

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.TxMerkleNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.TxMerkleNode.html index 4ca5b042e2..0fdf8f5dd0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.TxMerkleNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.TxMerkleNode.html @@ -2,7 +2,7 @@

    Implementations§

    §

    impl TxMerkleNode

    pub fn from_raw_hash(inner: Hash) -> TxMerkleNode

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

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

    pub fn as_raw_hash(&self) -> &Hash

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

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TxMerkleNode

    §

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

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

    impl AsRef<[u8; 32]> for TxMerkleNode

    §

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

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

    impl Borrow<[u8]> for TxMerkleNode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TxMerkleNode

    §

    fn clone(&self) -> TxMerkleNode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for TxMerkleNode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TxMerkleNode

    Trait Implementations§

    §

    impl AsRef<[u8]> for TxMerkleNode

    §

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

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

    impl AsRef<[u8; 32]> for TxMerkleNode

    §

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

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

    impl Borrow<[u8]> for TxMerkleNode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TxMerkleNode

    §

    fn clone(&self) -> TxMerkleNode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for TxMerkleNode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TxMerkleNode

    §

    fn consensus_decode<R>(r: &mut R) -> Result<TxMerkleNode, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

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

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

    impl Display for TxMerkleNode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for TxMerkleNode

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessCommitment.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessCommitment.html index f447df1a11..862630802f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessCommitment.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessCommitment.html @@ -2,7 +2,7 @@

    Implementations§

    §

    impl WitnessCommitment

    pub fn from_raw_hash(inner: Hash) -> WitnessCommitment

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

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

    pub fn as_raw_hash(&self) -> &Hash

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

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessCommitment

    §

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

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

    impl AsRef<[u8; 32]> for WitnessCommitment

    §

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

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

    impl Borrow<[u8]> for WitnessCommitment

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessCommitment

    §

    fn clone(&self) -> WitnessCommitment

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessCommitment

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessCommitment

    §

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

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

    impl AsRef<[u8; 32]> for WitnessCommitment

    §

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

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

    impl Borrow<[u8]> for WitnessCommitment

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessCommitment

    §

    fn clone(&self) -> WitnessCommitment

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessCommitment

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

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

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

    impl Display for WitnessCommitment

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for WitnessCommitment

    §

    fn from(inner: Hash) -> WitnessCommitment

    Converts to this type from the input type.
    §

    impl From<WitnessCommitment> for Hash

    §

    fn from(hashtype: WitnessCommitment) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for WitnessCommitment

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessMerkleNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessMerkleNode.html index 6eddccd487..bb38dae8a7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessMerkleNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/block/struct.WitnessMerkleNode.html @@ -2,13 +2,13 @@

    Implementations§

    §

    impl WitnessMerkleNode

    pub fn from_raw_hash(inner: Hash) -> WitnessMerkleNode

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

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

    pub fn as_raw_hash(&self) -> &Hash

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

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessMerkleNode

    §

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

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

    impl AsRef<[u8; 32]> for WitnessMerkleNode

    §

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

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

    impl Borrow<[u8]> for WitnessMerkleNode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessMerkleNode

    §

    fn clone(&self) -> WitnessMerkleNode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessMerkleNode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for WitnessMerkleNode

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessMerkleNode

    §

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

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

    impl AsRef<[u8; 32]> for WitnessMerkleNode

    §

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

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

    impl Borrow<[u8]> for WitnessMerkleNode

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessMerkleNode

    §

    fn clone(&self) -> WitnessMerkleNode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessMerkleNode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for WitnessMerkleNode

    §

    fn consensus_decode<R>(r: &mut R) -> Result<WitnessMerkleNode, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

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

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

    impl Display for WitnessMerkleNode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for WitnessMerkleNode

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessMerkleNode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessMerkleNode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<WitnessMerkleNode, <WitnessMerkleNode as FromStr>::Err>

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

    impl Hash for WitnessMerkleNode

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/constants/struct.ChainHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/constants/struct.ChainHash.html index 0a5648f906..1ce8b7e03f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/constants/struct.ChainHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/constants/struct.ChainHash.html @@ -17,7 +17,7 @@

    See BOLT 0 for specification.

    pub fn from_genesis_block_hash(block_hash: BlockHash) -> ChainHash

    Converts genesis block hash into ChainHash.

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for ChainHash

    §

    fn as_mut(&mut self) -> &mut [u8]

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

    impl AsMut<[u8; 32]> for ChainHash

    §

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

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

    impl AsRef<[u8]> for ChainHash

    §

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

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

    impl AsRef<[u8; 32]> for ChainHash

    §

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

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

    impl Borrow<[u8]> for ChainHash

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Borrow<[u8; 32]> for ChainHash

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for ChainHash

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8; 32]> for ChainHash

    §

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

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ChainHash

    §

    fn clone(&self) -> ChainHash

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ChainHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ChainHash

    §

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

    Trait Implementations§

    §

    impl AsMut<[u8]> for ChainHash

    §

    fn as_mut(&mut self) -> &mut [u8]

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

    impl AsMut<[u8; 32]> for ChainHash

    §

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

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

    impl AsRef<[u8]> for ChainHash

    §

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

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

    impl AsRef<[u8; 32]> for ChainHash

    §

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

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

    impl Borrow<[u8]> for ChainHash

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl Borrow<[u8; 32]> for ChainHash

    §

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

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for ChainHash

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8; 32]> for ChainHash

    §

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

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ChainHash

    §

    fn clone(&self) -> ChainHash

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ChainHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ChainHash

    §

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

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

    impl Display for ChainHash

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [u8; 32]> for ChainHash

    §

    fn from(data: &'a [u8; 32]) -> ChainHash

    Converts to this type from the input type.
    §

    impl<'a> From<[u8; 32]> for ChainHash

    §

    fn from(data: [u8; 32]) -> ChainHash

    Converts to this type from the input type.
    §

    impl FromStr for ChainHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ChainHash, <ChainHash as FromStr>::Err>

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

    impl Hash for ChainHash

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/fee_rate/struct.FeeRate.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/fee_rate/struct.FeeRate.html index 6b07680099..ab5b38e42c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/fee_rate/struct.FeeRate.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/fee_rate/struct.FeeRate.html @@ -40,7 +40,7 @@
    §Errors
    __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

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

    impl Mul<FeeRate> for Weight

    Computes ceiling so that fee computation is conservative.

    -
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Ord for FeeRate

    §

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

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

    fn max(self, other: Self) -> Self
    where +
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more

    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Ord for FeeRate

    §

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

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

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for FeeRate

    §

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

    This method tests for self and other values to be equal, and is used @@ -51,9 +51,9 @@
    §Errors
    &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from(s: &str) -> Result<FeeRate, <FeeRate as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from( + __S: Serializer,

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

    impl TryFrom<&str> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from(s: &str) -> Result<FeeRate, <FeeRate as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from( s: Box<str> -) -> Result<FeeRate, <FeeRate as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for FeeRate

    §

    impl Eq for FeeRate

    §

    impl StructuralPartialEq for FeeRate

    Auto Trait Implementations§

    §

    impl Freeze for FeeRate

    §

    impl RefUnwindSafe for FeeRate

    §

    impl Send for FeeRate

    §

    impl Sync for FeeRate

    §

    impl Unpin for FeeRate

    §

    impl UnwindSafe for FeeRate

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<FeeRate, <FeeRate as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for FeeRate

    §

    impl Eq for FeeRate

    §

    impl StructuralPartialEq for FeeRate

    Auto Trait Implementations§

    §

    impl Freeze for FeeRate

    §

    impl RefUnwindSafe for FeeRate

    §

    impl Send for FeeRate

    §

    impl Sync for FeeRate

    §

    impl Unpin for FeeRate

    §

    impl UnwindSafe for FeeRate

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

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

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

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

    source§

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

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/enum.LockTime.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/enum.LockTime.html index b4eb43b4f0..f56ee9be40 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/enum.LockTime.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/enum.LockTime.html @@ -114,7 +114,7 @@
    §Examples
    deserializer: D ) -> Result<LockTime, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

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

    impl Display for LockTime

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for LockTime

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<AbsLockTime> for LockTime

    §

    fn from(lock_time: AbsLockTime) -> LockTime

    Converts to this type from the input type.
    §

    impl From<Height> for LockTime

    §

    fn from(h: Height) -> LockTime

    Converts to this type from the input type.
    §

    impl From<Time> for LockTime

    §

    fn from(t: Time) -> LockTime

    Converts to this type from the input type.
    §

    impl FromStr for LockTime

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<LockTime, <LockTime as FromStr>::Err>

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

    impl Hash for LockTime

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<AbsLockTime> for LockTime

    §

    fn from(lock_time: AbsLockTime) -> LockTime

    Converts to this type from the input type.
    §

    impl From<Height> for LockTime

    §

    fn from(h: Height) -> LockTime

    Converts to this type from the input type.
    §

    impl From<Time> for LockTime

    §

    fn from(t: Time) -> LockTime

    Converts to this type from the input type.
    §

    impl FromStr for LockTime

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<LockTime, <LockTime as FromStr>::Err>

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

    impl Hash for LockTime

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

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

    impl PartialEq for LockTime

    §

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

    This method tests for self and other values to be equal, and is used @@ -144,9 +144,9 @@
    §Examples
    &self, serializer: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where - S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from(s: &str) -> Result<LockTime, <LockTime as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from( + S: Serializer,

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

    impl TryFrom<&str> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from(s: &str) -> Result<LockTime, <LockTime as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from( s: Box<str> -) -> Result<LockTime, <LockTime as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<LockTime, <LockTime as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for LockTime

    §

    impl Eq for LockTime

    §

    impl StructuralPartialEq for LockTime

    Auto Trait Implementations§

    §

    impl Freeze for LockTime

    §

    impl RefUnwindSafe for LockTime

    §

    impl Send for LockTime

    §

    impl Sync for LockTime

    §

    impl Unpin for LockTime

    §

    impl UnwindSafe for LockTime

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<LockTime, <LockTime as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for LockTime

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<LockTime, <LockTime as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for LockTime

    §

    impl Eq for LockTime

    §

    impl StructuralPartialEq for LockTime

    Auto Trait Implementations§

    §

    impl Freeze for LockTime

    §

    impl RefUnwindSafe for LockTime

    §

    impl Send for LockTime

    §

    impl Sync for LockTime

    §

    impl Unpin for LockTime

    §

    impl UnwindSafe for LockTime

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T, Pk> AssetProvider<Pk> for T
    where T: Satisfier<Pk>, Pk: MiniscriptKey + ToPublicKey,

    §

    fn provider_lookup_ecdsa_sig(&self, pk: &Pk) -> bool

    Given a public key, look up an ECDSA signature with that key, return whether we found it
    §

    fn provider_lookup_tap_key_spend_sig(&self, _: &Pk) -> Option<usize>

    Lookup the tap key spend sig and return its size
    §

    fn provider_lookup_tap_leaf_script_sig( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Height.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Height.html index c7b8f0329b..e1540466ff 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Height.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Height.html @@ -31,7 +31,7 @@

    §Examples
    &self, serializer: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where - S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: &str) -> Result<Height, <Height as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: Box<str>) -> Result<Height, <Height as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Height

    §

    impl Eq for Height

    §

    impl StructuralPartialEq for Height

    Auto Trait Implementations§

    §

    impl Freeze for Height

    §

    impl RefUnwindSafe for Height

    §

    impl Send for Height

    §

    impl Sync for Height

    §

    impl Unpin for Height

    §

    impl UnwindSafe for Height

    Blanket Implementations§

    source§

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

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

    impl TryFrom<&str> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: &str) -> Result<Height, <Height as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: Box<str>) -> Result<Height, <Height as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseHeightError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Height

    §

    impl Eq for Height

    §

    impl StructuralPartialEq for Height

    Auto Trait Implementations§

    §

    impl Freeze for Height

    §

    impl RefUnwindSafe for Height

    §

    impl Send for Height

    §

    impl Sync for Height

    §

    impl Unpin for Height

    §

    impl UnwindSafe for Height

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

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

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

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

    source§

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

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Time.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Time.html index ac175dcd9c..5e4277286b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Time.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/absolute/struct.Time.html @@ -33,7 +33,7 @@
    §Examples
    &self, serializer: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where - S: Serializer,

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

    impl TryFrom<&str> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: &str) -> Result<Time, <Time as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: Box<str>) -> Result<Time, <Time as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: String) -> Result<Time, <Time as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Time

    §

    impl Eq for Time

    §

    impl StructuralPartialEq for Time

    Auto Trait Implementations§

    §

    impl Freeze for Time

    §

    impl RefUnwindSafe for Time

    §

    impl Send for Time

    §

    impl Sync for Time

    §

    impl Unpin for Time

    §

    impl UnwindSafe for Time

    Blanket Implementations§

    source§

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

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

    impl TryFrom<&str> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: &str) -> Result<Time, <Time as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: Box<str>) -> Result<Time, <Time as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Time

    §

    type Error = ParseTimeError

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

    fn try_from(s: String) -> Result<Time, <Time as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Time

    §

    impl Eq for Time

    §

    impl StructuralPartialEq for Time

    Auto Trait Implementations§

    §

    impl Freeze for Time

    §

    impl RefUnwindSafe for Time

    §

    impl Send for Time

    §

    impl Sync for Time

    §

    impl Unpin for Time

    §

    impl UnwindSafe for Time

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

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

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

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

    source§

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

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/enum.LockTime.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/enum.LockTime.html index 17e12ff49e..da766e47ac 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/enum.LockTime.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/enum.LockTime.html @@ -110,7 +110,7 @@
    §Examples

    Trait Implementations§

    §

    impl Clone for LockTime

    §

    fn clone(&self) -> LockTime

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for LockTime

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for LockTime

    §

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

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

    impl Display for LockTime

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<Height> for LockTime

    §

    fn from(h: Height) -> LockTime

    Converts to this type from the input type.
    §

    impl From<LockTime> for Sequence

    §

    fn from(lt: LockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<RelLockTime> for LockTime

    §

    fn from(lock_time: RelLockTime) -> LockTime

    Converts to this type from the input type.
    §

    impl From<Time> for LockTime

    §

    fn from(t: Time) -> LockTime

    Converts to this type from the input type.
    §

    impl Hash for LockTime

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

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

    impl Display for LockTime

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<Height> for LockTime

    §

    fn from(h: Height) -> LockTime

    Converts to this type from the input type.
    §

    impl From<LockTime> for Sequence

    §

    fn from(lt: LockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<RelLockTime> for LockTime

    §

    fn from(lock_time: RelLockTime) -> LockTime

    Converts to this type from the input type.
    §

    impl From<Time> for LockTime

    §

    fn from(t: Time) -> LockTime

    Converts to this type from the input type.
    §

    impl Hash for LockTime

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

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

    impl PartialEq for LockTime

    §

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

    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/struct.Height.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/struct.Height.html index cdb1160192..ad3272298e 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/struct.Height.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/locktime/relative/struct.Height.html @@ -23,7 +23,7 @@ &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: &str) -> Result<Height, <Height as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: Box<str>) -> Result<Height, <Height as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Height

    §

    impl Eq for Height

    §

    impl StructuralPartialEq for Height

    Auto Trait Implementations§

    §

    impl Freeze for Height

    §

    impl RefUnwindSafe for Height

    §

    impl Send for Height

    §

    impl Sync for Height

    §

    impl Unpin for Height

    §

    impl UnwindSafe for Height

    Blanket Implementations§

    source§

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

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

    impl TryFrom<&str> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: &str) -> Result<Height, <Height as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: Box<str>) -> Result<Height, <Height as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Height

    §

    type Error = ParseIntError

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

    fn try_from(s: String) -> Result<Height, <Height as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Height

    §

    impl Eq for Height

    §

    impl StructuralPartialEq for Height

    Auto Trait Implementations§

    §

    impl Freeze for Height

    §

    impl RefUnwindSafe for Height

    §

    impl Send for Height

    §

    impl Sync for Height

    §

    impl Unpin for Height

    §

    impl UnwindSafe for Height

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

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

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

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

    source§

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

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/opcodes/struct.Opcode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/opcodes/struct.Opcode.html index 6516c33218..3fa6ecd82b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/opcodes/struct.Opcode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/opcodes/struct.Opcode.html @@ -9,7 +9,7 @@ in contexts where only pushes are supposed to be allowed.

    Implementations§

    §

    impl Opcode

    pub fn classify(self, ctx: ClassifyContext) -> Class

    Classifies an Opcode into a broad class.

    pub const fn to_u8(self) -> u8

    Encodes Opcode as a byte.

    -

    Trait Implementations§

    §

    impl Clone for Opcode

    §

    fn clone(&self) -> Opcode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Opcode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Opcode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl From<u8> for Opcode

    §

    fn from(b: u8) -> Opcode

    Converts to this type from the input type.
    §

    impl PartialEq for Opcode

    §

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

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

    Trait Implementations§

    §

    impl Clone for Opcode

    §

    fn clone(&self) -> Opcode

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Opcode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Opcode

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl From<u8> for Opcode

    §

    fn from(b: u8) -> Opcode

    Converts to this type from the input type.
    §

    impl PartialEq for Opcode

    §

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

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

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

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

    impl Serialize for Opcode

    §

    fn serialize<S>( &self, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/enum.Error.html index 52a3b396fb..a2ccd2157d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/enum.Error.html @@ -13,7 +13,7 @@

    §

    NumericOverflow

    Tried to read an array off the stack as a number when it was more than 4 bytes.

    §

    UnknownSpentOutput(OutPoint)

    Can not find the spent output.

    §

    Serialization

    Can not serialize the spending transaction.

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<UintError> for Error

    §

    fn from(error: UintError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

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

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

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

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

    fn description(&self) -> &str

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

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

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

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

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

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<UintError> for Error

    §

    fn from(error: UintError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

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

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

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

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

    impl Eq for Error

    §

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

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

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytes.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytes.html index 473a653cbb..36575b9262 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytes.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytes.html @@ -7,7 +7,7 @@

    pub fn as_mut_bytes(&mut self) -> &mut [u8]

    Returns the underlying mutbale bytes.

    §

    impl PushBytes

    pub fn len(&self) -> usize

    Returns the number of bytes in buffer.

    pub fn is_empty(&self) -> bool

    Returns true if the buffer contains zero bytes.

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for PushBytes

    §

    fn as_mut(&mut self) -> &mut [u8]

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

    impl AsMut<PushBytes> for [u8; 0]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 1]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 10]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 11]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 12]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 13]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 14]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 15]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 16]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 17]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 18]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 19]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 2]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 20]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 21]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 22]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 23]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 24]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 25]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 26]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 27]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 28]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 29]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 3]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 30]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 31]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 32]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 33]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 34]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 35]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 36]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 37]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 38]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 39]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 4]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 40]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 41]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 42]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 43]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 44]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 45]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 46]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 47]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 48]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 49]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 5]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 50]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 51]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 52]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 53]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 54]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 55]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 56]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 57]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 58]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 59]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 6]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 60]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 61]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 62]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 63]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 64]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 65]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 66]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 67]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 68]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 69]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 7]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 70]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 71]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 72]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 73]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 8]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 9]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for PushBytes

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for PushBytesBuf

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsRef<[u8]> for PushBytes

    §

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

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

    impl AsRef<PushBytes> for [u8; 0]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 1]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 10]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 11]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 12]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 13]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 14]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 15]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 16]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 17]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 18]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 19]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 2]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 20]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 21]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 22]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 23]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 24]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 25]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 26]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 27]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 28]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 29]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 3]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 30]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 31]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 32]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 33]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 34]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 35]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 36]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 37]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 38]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 39]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 4]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 40]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 41]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 42]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 43]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 44]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 45]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 46]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 47]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 48]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 49]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 5]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 50]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 51]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 52]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 53]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 54]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 55]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 56]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 57]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 58]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 59]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 6]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 60]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 61]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 62]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 63]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 64]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 65]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 66]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 67]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 68]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 69]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 7]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 70]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 71]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 72]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 73]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 8]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for [u8; 9]

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for PubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for PushBytes

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for PushBytesBuf

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for ScriptHash

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for SerializedSignature

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for WPubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

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

    impl AsRef<PushBytes> for WScriptHash

    §

    fn as_ref(&self) -> &PushBytes

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

    impl Borrow<PushBytes> for PushBytesBuf

    §

    fn borrow(&self) -> &PushBytes

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<PushBytes> for PushBytesBuf

    §

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

    Mutably borrows from an owned value. Read more
    §

    impl Debug for PushBytes

    §

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

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [u8; 0]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 0]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 1]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 1]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 10]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 10]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 11]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 11]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 12]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 12]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 13]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 13]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 14]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 14]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 15]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 15]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 16]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 16]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 17]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 17]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 18]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 18]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 19]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 19]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 2]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 2]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 20]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 20]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 21]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 21]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 22]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 22]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 23]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 23]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 24]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 24]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 25]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 25]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 26]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 26]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 27]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 27]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 28]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 28]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 29]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 29]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 3]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 3]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 30]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 30]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 31]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 31]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 32]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 32]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 33]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 33]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 34]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 34]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 35]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 35]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 36]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 36]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 37]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 37]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 38]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 38]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 39]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 39]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 4]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 4]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 40]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 40]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 41]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 41]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 42]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 42]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 43]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 43]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 44]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 44]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 45]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 45]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 46]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 46]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 47]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 47]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 48]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 48]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 49]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 49]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 5]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 5]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 50]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 50]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 51]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 51]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 52]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 52]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 53]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 53]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 54]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 54]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 55]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 55]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 56]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 56]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 57]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 57]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 58]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 58]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 59]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 59]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 6]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 6]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 60]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 60]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 61]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 61]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 62]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 62]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 63]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 63]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 64]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 64]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 65]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 65]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 66]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 66]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 67]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 67]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 68]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 68]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 69]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 69]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 7]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 7]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 70]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 70]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 71]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 71]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 72]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 72]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 73]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 73]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 8]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 8]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 9]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 9]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 0]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 0]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 1]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 1]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 10]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 10]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 11]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 11]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 12]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 12]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 13]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 13]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 14]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 14]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 15]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 15]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 16]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 16]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 17]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 17]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 18]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 18]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 19]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 19]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 2]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 2]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 20]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 20]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 21]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 21]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 22]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 22]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 23]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 23]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 24]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 24]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 25]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 25]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 26]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 26]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 27]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 27]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 28]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 28]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 29]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 29]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 3]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 3]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 30]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 30]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 31]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 31]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 32]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 32]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 33]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 33]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 34]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 34]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 35]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 35]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 36]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 36]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 37]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 37]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 38]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 38]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 39]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 39]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 4]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 4]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 40]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 40]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 41]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 41]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 42]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 42]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 43]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 43]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 44]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 44]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 45]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 45]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 46]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 46]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 47]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 47]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 48]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 48]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 49]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 49]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 5]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 5]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 50]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 50]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 51]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 51]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 52]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 52]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 53]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 53]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 54]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 54]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 55]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 55]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 56]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 56]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 57]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 57]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 58]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 58]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 59]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 59]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 6]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 6]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 60]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 60]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 61]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 61]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 62]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 62]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 63]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 63]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 64]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 64]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 65]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 65]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 66]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 66]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 67]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 67]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 68]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 68]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 69]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 69]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 7]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 7]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 70]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 70]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 71]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 71]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 72]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 72]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 73]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 73]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 8]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 8]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 9]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 9]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl Hash for PushBytes

    §

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    §

    impl AsMut<[u8]> for PushBytes

    §

    fn as_mut(&mut self) -> &mut [u8]

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

    impl AsMut<PushBytes> for [u8; 0]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 1]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 10]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 11]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 12]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 13]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 14]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 15]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 16]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 17]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 18]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 19]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 2]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 20]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 21]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 22]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 23]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 24]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 25]

    §

    fn as_mut(&mut self) -> &mut PushBytes

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

    impl AsMut<PushBytes> for [u8; 26]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 27]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 28]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 29]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 3]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 30]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 31]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 32]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 33]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 34]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 35]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 36]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 37]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 38]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 39]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 4]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 40]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 41]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 42]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 43]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 44]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 45]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 46]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 47]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 48]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 49]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 5]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 50]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 51]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 52]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 53]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 54]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 55]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 56]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 57]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 58]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 59]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 6]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 60]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 61]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 62]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 63]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 64]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 65]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 66]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 67]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 68]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 69]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 7]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 70]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 71]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 72]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 73]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 8]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for [u8; 9]

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for PushBytes

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<PushBytes> for PushBytesBuf

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for PushBytes

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 0]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 1]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 10]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 11]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 12]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 13]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 14]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 15]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 16]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 17]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 18]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 19]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 2]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 20]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 21]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 22]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 23]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 24]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 25]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 26]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 27]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 28]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 29]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 3]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 30]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 31]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 32]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 33]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 34]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 35]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 36]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 37]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 38]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 39]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 4]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 40]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 41]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 42]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 43]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 44]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 45]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 46]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 47]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 48]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 49]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 5]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 50]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 51]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 52]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 53]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 54]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 55]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 56]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 57]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 58]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 59]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 6]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 60]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 61]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 62]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 63]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 64]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 65]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 66]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 67]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 68]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 69]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 7]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 70]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 71]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 72]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 73]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 8]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for [u8; 9]

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PushBytes

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PushBytesBuf

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for ScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for SerializedSignature

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WPubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<PushBytes> for PushBytesBuf

    §

    fn borrow(&self) -> &PushBytes

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<PushBytes> for PushBytesBuf

    §

    fn borrow_mut(&mut self) -> &mut PushBytes

    Mutably borrows from an owned value. Read more
    §

    impl Debug for PushBytes

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a [u8; 0]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 0]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 1]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 1]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 10]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 10]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 11]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 11]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 12]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 12]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 13]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 13]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 14]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 14]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 15]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 15]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 16]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 16]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 17]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 17]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 18]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 18]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 19]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 19]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 2]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 2]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 20]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 20]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 21]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 21]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 22]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 22]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 23]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 23]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 24]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 24]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 25]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 25]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 26]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 26]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 27]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 27]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 28]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 28]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 29]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 29]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 3]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 3]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 30]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 30]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 31]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 31]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 32]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 32]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 33]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 33]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 34]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 34]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 35]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 35]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 36]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 36]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 37]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 37]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 38]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 38]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 39]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 39]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 4]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 4]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 40]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 40]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 41]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 41]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 42]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 42]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 43]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 43]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 44]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 44]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 45]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 45]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 46]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 46]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 47]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 47]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 48]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 48]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 49]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 49]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 5]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 5]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 50]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 50]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 51]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 51]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 52]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 52]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 53]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 53]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 54]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 54]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 55]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 55]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 56]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 56]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 57]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 57]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 58]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 58]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 59]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 59]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 6]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 6]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 60]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 60]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 61]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 61]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 62]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 62]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 63]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 63]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 64]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 64]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 65]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 65]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 66]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 66]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 67]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 67]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 68]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 68]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 69]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 69]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 7]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 7]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 70]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 70]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 71]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 71]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 72]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 72]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 73]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 73]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 8]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 8]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 9]> for &'a PushBytes

    §

    fn from(bytes: &'a [u8; 9]) -> &'a PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 0]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 0]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 1]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 1]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 10]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 10]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 11]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 11]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 12]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 12]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 13]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 13]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 14]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 14]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 15]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 15]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 16]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 16]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 17]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 17]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 18]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 18]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 19]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 19]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 2]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 2]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 20]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 20]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 21]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 21]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 22]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 22]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 23]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 23]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 24]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 24]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 25]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 25]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 26]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 26]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 27]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 27]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 28]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 28]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 29]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 29]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 3]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 3]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 30]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 30]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 31]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 31]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 32]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 32]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 33]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 33]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 34]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 34]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 35]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 35]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 36]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 36]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 37]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 37]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 38]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 38]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 39]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 39]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 4]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 4]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 40]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 40]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 41]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 41]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 42]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 42]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 43]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 43]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 44]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 44]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 45]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 45]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 46]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 46]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 47]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 47]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 48]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 48]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 49]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 49]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 5]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 5]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 50]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 50]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 51]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 51]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 52]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 52]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 53]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 53]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 54]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 54]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 55]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 55]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 56]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 56]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 57]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 57]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 58]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 58]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 59]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 59]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 6]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 6]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 60]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 60]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 61]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 61]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 62]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 62]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 63]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 63]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 64]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 64]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 65]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 65]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 66]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 66]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 67]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 67]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 68]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 68]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 69]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 69]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 7]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 7]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 70]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 70]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 71]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 71]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 72]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 72]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 73]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 73]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 8]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 8]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl<'a> From<&'a mut [u8; 9]> for &'a mut PushBytes

    §

    fn from(bytes: &'a mut [u8; 9]) -> &'a mut PushBytes

    Converts to this type from the input type.
    §

    impl Hash for PushBytes

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    §

    impl Index<(Bound<usize>, Bound<usize>)> for PushBytes

    Script subslicing operation - read slicing safety!

    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( &self, @@ -17,29 +17,29 @@ &self, index: Range<usize> ) -> &<PushBytes as Index<Range<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFrom<usize>> for PushBytes

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( &self, index: RangeFrom<usize> ) -> &<PushBytes as Index<RangeFrom<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFull> for PushBytes

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &<PushBytes as Index<RangeFull>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeInclusive<usize>> for PushBytes

    Script subslicing operation - read slicing safety!

    +
    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &<PushBytes as Index<RangeFull>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeInclusive<usize>> for PushBytes

    Script subslicing operation - read slicing safety!

    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( &self, index: RangeInclusive<usize> ) -> &<PushBytes as Index<RangeInclusive<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeTo<usize>> for PushBytes

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( &self, index: RangeTo<usize> ) -> &<PushBytes as Index<RangeTo<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeToInclusive<usize>> for PushBytes

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = PushBytes

    The returned type after indexing.
    §

    fn index( &self, index: RangeToInclusive<usize> -) -> &<PushBytes as Index<RangeToInclusive<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<usize> for PushBytes

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &<PushBytes as Index<usize>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Ord for PushBytes

    §

    fn cmp(&self, other: &PushBytes) -> Ordering

    This method returns an Ordering between self and other. Read more
    §

    impl PartialEq for PushBytes

    §

    fn eq(&self, other: &PushBytes) -> bool

    This method tests for self and other values to be equal, and is used +) -> &<PushBytes as Index<RangeToInclusive<usize>>>::Output
    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<usize> for PushBytes

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &<PushBytes as Index<usize>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Ord for PushBytes

    §

    fn cmp(&self, other: &PushBytes) -> Ordering

    This method returns an Ordering between self and other. Read more
    §

    impl PartialEq for PushBytes

    §

    fn eq(&self, other: &PushBytes) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd for PushBytes

    §

    fn partial_cmp(&self, other: &PushBytes) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl ToOwned for PushBytes

    §

    type Owned = PushBytesBuf

    The resulting type after obtaining ownership.
    §

    fn to_owned(&self) -> <PushBytes as ToOwned>::Owned

    Creates owned data from borrowed data, usually by cloning. Read more
    1.63.0 · source§

    fn clone_into(&self, target: &mut Self::Owned)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    §

    impl<'a> TryFrom<&'a [u8]> for &'a PushBytes

    §

    type Error = PushBytesError

    The type returned in the event of a conversion error.
    §

    fn try_from( +operator. Read more

    §

    impl ToOwned for PushBytes

    §

    type Owned = PushBytesBuf

    The resulting type after obtaining ownership.
    §

    fn to_owned(&self) -> <PushBytes as ToOwned>::Owned

    Creates owned data from borrowed data, usually by cloning. Read more
    1.63.0 · source§

    fn clone_into(&self, target: &mut Self::Owned)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    §

    impl<'a> TryFrom<&'a [u8]> for &'a PushBytes

    §

    type Error = PushBytesError

    The type returned in the event of a conversion error.
    §

    fn try_from( bytes: &'a [u8] -) -> Result<&'a PushBytes, <&'a PushBytes as TryFrom<&'a [u8]>>::Error>

    Performs the conversion.
    §

    impl<'a> TryFrom<&'a mut [u8]> for &'a mut PushBytes

    §

    type Error = PushBytesError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<&'a PushBytes, <&'a PushBytes as TryFrom<&'a [u8]>>::Error>

    Performs the conversion.
    §

    impl<'a> TryFrom<&'a mut [u8]> for &'a mut PushBytes

    §

    type Error = PushBytesError

    The type returned in the event of a conversion error.
    §

    fn try_from( bytes: &'a mut [u8] ) -> Result<&'a mut PushBytes, <&'a mut PushBytes as TryFrom<&'a mut [u8]>>::Error>

    Performs the conversion.
    §

    impl Eq for PushBytes

    §

    impl StructuralPartialEq for PushBytes

    Auto Trait Implementations§

    §

    impl Freeze for PushBytes

    §

    impl RefUnwindSafe for PushBytes

    §

    impl Send for PushBytes

    §

    impl !Sized for PushBytes

    §

    impl Sync for PushBytes

    §

    impl Unpin for PushBytes

    §

    impl UnwindSafe for PushBytes

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytesBuf.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytesBuf.html index 373350f18e..6ec35874fd 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytesBuf.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.PushBytesBuf.html @@ -23,7 +23,7 @@
    §Panics

    pub fn as_mut_bytes(&mut self) -> &mut [u8]

    Returns the underlying mutbale bytes.

    pub fn len(&self) -> usize

    Returns the number of bytes in buffer.

    pub fn is_empty(&self) -> bool

    Returns true if the buffer contains zero bytes.

    -

    Trait Implementations§

    §

    impl AsMut<PushBytes> for PushBytesBuf

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PushBytesBuf

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<PushBytes> for PushBytesBuf

    §

    fn borrow(&self) -> &PushBytes

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<PushBytes> for PushBytesBuf

    §

    fn borrow_mut(&mut self) -> &mut PushBytes

    Mutably borrows from an owned value. Read more
    §

    impl Clone for PushBytesBuf

    §

    fn clone(&self) -> PushBytesBuf

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PushBytesBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for PushBytesBuf

    §

    fn default() -> PushBytesBuf

    Returns the “default value” for a type. Read more
    §

    impl Deref for PushBytesBuf

    §

    type Target = PushBytes

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<PushBytesBuf as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for PushBytesBuf

    §

    fn deref_mut(&mut self) -> &mut <PushBytesBuf as Deref>::Target

    Mutably dereferences the value.
    §

    impl<'a> From<&'a [u8; 0]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 0]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 1]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 1]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 10]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 10]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 11]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 11]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 12]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 12]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 13]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 13]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 14]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 14]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 15]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 15]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 16]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 16]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 17]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 17]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 18]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 18]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 19]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 19]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 2]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 2]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 20]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 20]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 21]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 21]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 22]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 22]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 23]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 23]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 24]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 24]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 25]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 25]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 26]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 26]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 27]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 27]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 28]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 28]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 29]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 29]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 3]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 3]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 30]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 30]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 31]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 31]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 32]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 32]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 33]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 33]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 34]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 34]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 35]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 35]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 36]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 36]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 37]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 37]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 38]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 38]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 39]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 39]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 4]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 4]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 40]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 40]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 41]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 41]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 42]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 42]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 43]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 43]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 44]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 44]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 45]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 45]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 46]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 46]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 47]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 47]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 48]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 48]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 49]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 49]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 5]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 5]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 50]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 50]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 51]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 51]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 52]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 52]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 53]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 53]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 54]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 54]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 55]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 55]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 56]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 56]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 57]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 57]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 58]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 58]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 59]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 59]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 6]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 6]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 60]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 60]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 61]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 61]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 62]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 62]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 63]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 63]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 64]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 64]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 65]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 65]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 66]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 66]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 67]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 67]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 68]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 68]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 69]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 69]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 7]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 7]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 70]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 70]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 71]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 71]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 72]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 72]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 73]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 73]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 8]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 8]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 9]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 9]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 0]> for PushBytesBuf

    §

    fn from(bytes: [u8; 0]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 1]> for PushBytesBuf

    §

    fn from(bytes: [u8; 1]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 10]> for PushBytesBuf

    §

    fn from(bytes: [u8; 10]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 11]> for PushBytesBuf

    §

    fn from(bytes: [u8; 11]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 12]> for PushBytesBuf

    §

    fn from(bytes: [u8; 12]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 13]> for PushBytesBuf

    §

    fn from(bytes: [u8; 13]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 14]> for PushBytesBuf

    §

    fn from(bytes: [u8; 14]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 15]> for PushBytesBuf

    §

    fn from(bytes: [u8; 15]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 16]> for PushBytesBuf

    §

    fn from(bytes: [u8; 16]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 17]> for PushBytesBuf

    §

    fn from(bytes: [u8; 17]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 18]> for PushBytesBuf

    §

    fn from(bytes: [u8; 18]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 19]> for PushBytesBuf

    §

    fn from(bytes: [u8; 19]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 2]> for PushBytesBuf

    §

    fn from(bytes: [u8; 2]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 20]> for PushBytesBuf

    §

    fn from(bytes: [u8; 20]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 21]> for PushBytesBuf

    §

    fn from(bytes: [u8; 21]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 22]> for PushBytesBuf

    §

    fn from(bytes: [u8; 22]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 23]> for PushBytesBuf

    §

    fn from(bytes: [u8; 23]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 24]> for PushBytesBuf

    §

    fn from(bytes: [u8; 24]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 25]> for PushBytesBuf

    §

    fn from(bytes: [u8; 25]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 26]> for PushBytesBuf

    §

    fn from(bytes: [u8; 26]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 27]> for PushBytesBuf

    §

    fn from(bytes: [u8; 27]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 28]> for PushBytesBuf

    §

    fn from(bytes: [u8; 28]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 29]> for PushBytesBuf

    §

    fn from(bytes: [u8; 29]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 3]> for PushBytesBuf

    §

    fn from(bytes: [u8; 3]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 30]> for PushBytesBuf

    §

    fn from(bytes: [u8; 30]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 31]> for PushBytesBuf

    §

    fn from(bytes: [u8; 31]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 32]> for PushBytesBuf

    §

    fn from(bytes: [u8; 32]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 33]> for PushBytesBuf

    §

    fn from(bytes: [u8; 33]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 34]> for PushBytesBuf

    §

    fn from(bytes: [u8; 34]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 35]> for PushBytesBuf

    §

    fn from(bytes: [u8; 35]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 36]> for PushBytesBuf

    §

    fn from(bytes: [u8; 36]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 37]> for PushBytesBuf

    §

    fn from(bytes: [u8; 37]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 38]> for PushBytesBuf

    §

    fn from(bytes: [u8; 38]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 39]> for PushBytesBuf

    §

    fn from(bytes: [u8; 39]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 4]> for PushBytesBuf

    §

    fn from(bytes: [u8; 4]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 40]> for PushBytesBuf

    §

    fn from(bytes: [u8; 40]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 41]> for PushBytesBuf

    §

    fn from(bytes: [u8; 41]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 42]> for PushBytesBuf

    §

    fn from(bytes: [u8; 42]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 43]> for PushBytesBuf

    §

    fn from(bytes: [u8; 43]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 44]> for PushBytesBuf

    §

    fn from(bytes: [u8; 44]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 45]> for PushBytesBuf

    §

    fn from(bytes: [u8; 45]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 46]> for PushBytesBuf

    §

    fn from(bytes: [u8; 46]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 47]> for PushBytesBuf

    §

    fn from(bytes: [u8; 47]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 48]> for PushBytesBuf

    §

    fn from(bytes: [u8; 48]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 49]> for PushBytesBuf

    §

    fn from(bytes: [u8; 49]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 5]> for PushBytesBuf

    §

    fn from(bytes: [u8; 5]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 50]> for PushBytesBuf

    §

    fn from(bytes: [u8; 50]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 51]> for PushBytesBuf

    §

    fn from(bytes: [u8; 51]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 52]> for PushBytesBuf

    §

    fn from(bytes: [u8; 52]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 53]> for PushBytesBuf

    §

    fn from(bytes: [u8; 53]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 54]> for PushBytesBuf

    §

    fn from(bytes: [u8; 54]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 55]> for PushBytesBuf

    §

    fn from(bytes: [u8; 55]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 56]> for PushBytesBuf

    §

    fn from(bytes: [u8; 56]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 57]> for PushBytesBuf

    §

    fn from(bytes: [u8; 57]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 58]> for PushBytesBuf

    §

    fn from(bytes: [u8; 58]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 59]> for PushBytesBuf

    §

    fn from(bytes: [u8; 59]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 6]> for PushBytesBuf

    §

    fn from(bytes: [u8; 6]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 60]> for PushBytesBuf

    §

    fn from(bytes: [u8; 60]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 61]> for PushBytesBuf

    §

    fn from(bytes: [u8; 61]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 62]> for PushBytesBuf

    §

    fn from(bytes: [u8; 62]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 63]> for PushBytesBuf

    §

    fn from(bytes: [u8; 63]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 64]> for PushBytesBuf

    §

    fn from(bytes: [u8; 64]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 65]> for PushBytesBuf

    §

    fn from(bytes: [u8; 65]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 66]> for PushBytesBuf

    §

    fn from(bytes: [u8; 66]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 67]> for PushBytesBuf

    §

    fn from(bytes: [u8; 67]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 68]> for PushBytesBuf

    §

    fn from(bytes: [u8; 68]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 69]> for PushBytesBuf

    §

    fn from(bytes: [u8; 69]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 7]> for PushBytesBuf

    §

    fn from(bytes: [u8; 7]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 70]> for PushBytesBuf

    §

    fn from(bytes: [u8; 70]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 71]> for PushBytesBuf

    §

    fn from(bytes: [u8; 71]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 72]> for PushBytesBuf

    §

    fn from(bytes: [u8; 72]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 73]> for PushBytesBuf

    §

    fn from(bytes: [u8; 73]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 8]> for PushBytesBuf

    §

    fn from(bytes: [u8; 8]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 9]> for PushBytesBuf

    §

    fn from(bytes: [u8; 9]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for PushBytesBuf

    §

    fn from(hash: PubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PushBytesBuf> for Vec<u8>

    §

    fn from(value: PushBytesBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for PushBytesBuf

    §

    fn from(hash: ScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for PushBytesBuf

    §

    fn from(hash: WPubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for PushBytesBuf

    §

    fn from(hash: WScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl Hash for PushBytesBuf

    §

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    §

    impl AsMut<PushBytes> for PushBytesBuf

    §

    fn as_mut(&mut self) -> &mut PushBytes

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PushBytesBuf

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<PushBytes> for PushBytesBuf

    §

    fn borrow(&self) -> &PushBytes

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<PushBytes> for PushBytesBuf

    §

    fn borrow_mut(&mut self) -> &mut PushBytes

    Mutably borrows from an owned value. Read more
    §

    impl Clone for PushBytesBuf

    §

    fn clone(&self) -> PushBytesBuf

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PushBytesBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for PushBytesBuf

    §

    fn default() -> PushBytesBuf

    Returns the “default value” for a type. Read more
    §

    impl Deref for PushBytesBuf

    §

    type Target = PushBytes

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<PushBytesBuf as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for PushBytesBuf

    §

    fn deref_mut(&mut self) -> &mut <PushBytesBuf as Deref>::Target

    Mutably dereferences the value.
    §

    impl<'a> From<&'a [u8; 0]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 0]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 1]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 1]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 10]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 10]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 11]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 11]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 12]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 12]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 13]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 13]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 14]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 14]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 15]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 15]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 16]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 16]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 17]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 17]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 18]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 18]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 19]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 19]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 2]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 2]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 20]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 20]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 21]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 21]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 22]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 22]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 23]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 23]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 24]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 24]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 25]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 25]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 26]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 26]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 27]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 27]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 28]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 28]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 29]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 29]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 3]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 3]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 30]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 30]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 31]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 31]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 32]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 32]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 33]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 33]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 34]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 34]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 35]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 35]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 36]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 36]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 37]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 37]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 38]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 38]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 39]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 39]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 4]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 4]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 40]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 40]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 41]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 41]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 42]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 42]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 43]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 43]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 44]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 44]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 45]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 45]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 46]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 46]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 47]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 47]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 48]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 48]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 49]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 49]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 5]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 5]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 50]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 50]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 51]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 51]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 52]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 52]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 53]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 53]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 54]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 54]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 55]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 55]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 56]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 56]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 57]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 57]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 58]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 58]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 59]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 59]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 6]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 6]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 60]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 60]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 61]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 61]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 62]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 62]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 63]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 63]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 64]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 64]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 65]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 65]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 66]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 66]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 67]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 67]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 68]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 68]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 69]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 69]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 7]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 7]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 70]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 70]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 71]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 71]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 72]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 72]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 73]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 73]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 8]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 8]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl<'a> From<&'a [u8; 9]> for PushBytesBuf

    §

    fn from(bytes: &'a [u8; 9]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 0]> for PushBytesBuf

    §

    fn from(bytes: [u8; 0]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 1]> for PushBytesBuf

    §

    fn from(bytes: [u8; 1]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 10]> for PushBytesBuf

    §

    fn from(bytes: [u8; 10]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 11]> for PushBytesBuf

    §

    fn from(bytes: [u8; 11]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 12]> for PushBytesBuf

    §

    fn from(bytes: [u8; 12]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 13]> for PushBytesBuf

    §

    fn from(bytes: [u8; 13]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 14]> for PushBytesBuf

    §

    fn from(bytes: [u8; 14]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 15]> for PushBytesBuf

    §

    fn from(bytes: [u8; 15]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 16]> for PushBytesBuf

    §

    fn from(bytes: [u8; 16]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 17]> for PushBytesBuf

    §

    fn from(bytes: [u8; 17]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 18]> for PushBytesBuf

    §

    fn from(bytes: [u8; 18]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 19]> for PushBytesBuf

    §

    fn from(bytes: [u8; 19]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 2]> for PushBytesBuf

    §

    fn from(bytes: [u8; 2]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 20]> for PushBytesBuf

    §

    fn from(bytes: [u8; 20]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 21]> for PushBytesBuf

    §

    fn from(bytes: [u8; 21]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 22]> for PushBytesBuf

    §

    fn from(bytes: [u8; 22]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 23]> for PushBytesBuf

    §

    fn from(bytes: [u8; 23]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 24]> for PushBytesBuf

    §

    fn from(bytes: [u8; 24]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 25]> for PushBytesBuf

    §

    fn from(bytes: [u8; 25]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 26]> for PushBytesBuf

    §

    fn from(bytes: [u8; 26]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 27]> for PushBytesBuf

    §

    fn from(bytes: [u8; 27]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 28]> for PushBytesBuf

    §

    fn from(bytes: [u8; 28]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 29]> for PushBytesBuf

    §

    fn from(bytes: [u8; 29]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 3]> for PushBytesBuf

    §

    fn from(bytes: [u8; 3]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 30]> for PushBytesBuf

    §

    fn from(bytes: [u8; 30]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 31]> for PushBytesBuf

    §

    fn from(bytes: [u8; 31]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 32]> for PushBytesBuf

    §

    fn from(bytes: [u8; 32]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 33]> for PushBytesBuf

    §

    fn from(bytes: [u8; 33]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 34]> for PushBytesBuf

    §

    fn from(bytes: [u8; 34]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 35]> for PushBytesBuf

    §

    fn from(bytes: [u8; 35]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 36]> for PushBytesBuf

    §

    fn from(bytes: [u8; 36]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 37]> for PushBytesBuf

    §

    fn from(bytes: [u8; 37]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 38]> for PushBytesBuf

    §

    fn from(bytes: [u8; 38]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 39]> for PushBytesBuf

    §

    fn from(bytes: [u8; 39]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 4]> for PushBytesBuf

    §

    fn from(bytes: [u8; 4]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 40]> for PushBytesBuf

    §

    fn from(bytes: [u8; 40]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 41]> for PushBytesBuf

    §

    fn from(bytes: [u8; 41]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 42]> for PushBytesBuf

    §

    fn from(bytes: [u8; 42]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 43]> for PushBytesBuf

    §

    fn from(bytes: [u8; 43]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 44]> for PushBytesBuf

    §

    fn from(bytes: [u8; 44]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 45]> for PushBytesBuf

    §

    fn from(bytes: [u8; 45]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 46]> for PushBytesBuf

    §

    fn from(bytes: [u8; 46]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 47]> for PushBytesBuf

    §

    fn from(bytes: [u8; 47]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 48]> for PushBytesBuf

    §

    fn from(bytes: [u8; 48]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 49]> for PushBytesBuf

    §

    fn from(bytes: [u8; 49]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 5]> for PushBytesBuf

    §

    fn from(bytes: [u8; 5]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 50]> for PushBytesBuf

    §

    fn from(bytes: [u8; 50]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 51]> for PushBytesBuf

    §

    fn from(bytes: [u8; 51]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 52]> for PushBytesBuf

    §

    fn from(bytes: [u8; 52]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 53]> for PushBytesBuf

    §

    fn from(bytes: [u8; 53]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 54]> for PushBytesBuf

    §

    fn from(bytes: [u8; 54]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 55]> for PushBytesBuf

    §

    fn from(bytes: [u8; 55]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 56]> for PushBytesBuf

    §

    fn from(bytes: [u8; 56]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 57]> for PushBytesBuf

    §

    fn from(bytes: [u8; 57]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 58]> for PushBytesBuf

    §

    fn from(bytes: [u8; 58]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 59]> for PushBytesBuf

    §

    fn from(bytes: [u8; 59]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 6]> for PushBytesBuf

    §

    fn from(bytes: [u8; 6]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 60]> for PushBytesBuf

    §

    fn from(bytes: [u8; 60]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 61]> for PushBytesBuf

    §

    fn from(bytes: [u8; 61]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 62]> for PushBytesBuf

    §

    fn from(bytes: [u8; 62]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 63]> for PushBytesBuf

    §

    fn from(bytes: [u8; 63]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 64]> for PushBytesBuf

    §

    fn from(bytes: [u8; 64]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 65]> for PushBytesBuf

    §

    fn from(bytes: [u8; 65]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 66]> for PushBytesBuf

    §

    fn from(bytes: [u8; 66]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 67]> for PushBytesBuf

    §

    fn from(bytes: [u8; 67]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 68]> for PushBytesBuf

    §

    fn from(bytes: [u8; 68]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 69]> for PushBytesBuf

    §

    fn from(bytes: [u8; 69]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 7]> for PushBytesBuf

    §

    fn from(bytes: [u8; 7]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 70]> for PushBytesBuf

    §

    fn from(bytes: [u8; 70]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 71]> for PushBytesBuf

    §

    fn from(bytes: [u8; 71]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 72]> for PushBytesBuf

    §

    fn from(bytes: [u8; 72]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 73]> for PushBytesBuf

    §

    fn from(bytes: [u8; 73]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 8]> for PushBytesBuf

    §

    fn from(bytes: [u8; 8]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<[u8; 9]> for PushBytesBuf

    §

    fn from(bytes: [u8; 9]) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for PushBytesBuf

    §

    fn from(hash: PubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PushBytesBuf> for Vec<u8>

    §

    fn from(value: PushBytesBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for PushBytesBuf

    §

    fn from(hash: ScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for PushBytesBuf

    §

    fn from(hash: WPubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for PushBytesBuf

    §

    fn from(hash: WScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl Hash for PushBytesBuf

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for PushBytesBuf

    §

    fn cmp(&self, other: &PushBytesBuf) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.Script.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.Script.html index e2e28acf51..0d4114cd93 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.Script.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.Script.html @@ -143,45 +143,45 @@
    §Returns
    required (this is common in tests) this method can be used.

    pub fn first_opcode(&self) -> Option<Opcode>

    Returns the first opcode of the script (if there is any).

    pub fn into_script_buf(self: Box<Script>) -> ScriptBuf

    Converts a Box<Script> into a ScriptBuf without copying or allocating.

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for Script

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for Script

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for Script

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for Script

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Debug for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for &'de Script

    Can only deserialize borrowed bytes.

    +

    Trait Implementations§

    §

    impl AsMut<[u8]> for Script

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for Script

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for Script

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for Script

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Debug for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for &'de Script

    Can only deserialize borrowed bytes.

    §

    fn deserialize<D>( deserializer: D ) -> Result<&'de Script, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Script

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl<'a> From<&'a Script> for Arc<Script>

    Note: This will fail to compile on old Rust for targets that don’t support atomics

    -
    §

    fn from(value: &'a Script) -> Arc<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Box<Script>

    §

    fn from(value: &'a Script) -> Box<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Cow<'a, Script>

    §

    fn from(value: &'a Script) -> Cow<'a, Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Rc<Script>

    §

    fn from(value: &'a Script) -> Rc<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for Box<Script>

    §

    fn from(value: Cow<'a, Script>) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl Hash for Script

    §

    fn hash<__H>(&self, state: &mut __H)
    where +
    §

    fn from(value: &'a Script) -> Arc<Script>

    Converts to this type from the input type.

    §

    impl<'a> From<&'a Script> for Box<Script>

    §

    fn from(value: &'a Script) -> Box<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Cow<'a, Script>

    §

    fn from(value: &'a Script) -> Cow<'a, Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Rc<Script>

    §

    fn from(value: &'a Script) -> Rc<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for Box<Script>

    §

    fn from(value: Cow<'a, Script>) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl Hash for Script

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    §

    impl Index<(Bound<usize>, Bound<usize>)> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: (Bound<usize>, Bound<usize>) ) -> &<Script as Index<(Bound<usize>, Bound<usize>)>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<Range<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &<Script as Index<Range<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFrom<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &<Script as Index<Range<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFrom<usize>> for Script

    Script subslicing operation - read slicing safety!

    +
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeFrom<usize> ) -> &<Script as Index<RangeFrom<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFull> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &<Script as Index<RangeFull>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeInclusive<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &<Script as Index<RangeFull>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeInclusive<usize>> for Script

    Script subslicing operation - read slicing safety!

    +
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeInclusive<usize> ) -> &<Script as Index<RangeInclusive<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeTo<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeTo<usize> ) -> &<Script as Index<RangeTo<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeToInclusive<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeToInclusive<usize> -) -> &<Script as Index<RangeToInclusive<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Script

    §

    fn cmp(&self, other: &Script) -> Ordering

    This method returns an Ordering between self and other. Read more
    §

    impl PartialEq<Script> for ScriptBuf

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +) -> &<Script as Index<RangeToInclusive<usize>>>::Output
    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Script

    §

    fn cmp(&self, other: &Script) -> Ordering

    This method returns an Ordering between self and other. Read more
    §

    impl PartialEq<Script> for ScriptBuf

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<ScriptBuf> for Script

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for Script

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for Script

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl PartialOrd for Script

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl Serialize for Script

    §

    fn serialize<S>( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptBuf.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptBuf.html index ba2e0cea01..2ddb1cd946 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptBuf.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptBuf.html @@ -181,14 +181,14 @@

    §Returns
    For better performance you should generally prefer displaying the script but if String is required (this is common in tests) this method can be used.

    pub fn first_opcode(&self) -> Option<Opcode>

    Returns the first opcode of the script (if there is any).

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for ScriptBuf

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ScriptBuf

    §

    fn clone(&self) -> ScriptBuf

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for ScriptBuf

    Trait Implementations§

    §

    impl AsMut<[u8]> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for ScriptBuf

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ScriptBuf

    §

    fn clone(&self) -> ScriptBuf

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for ScriptBuf

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<ScriptBuf, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Default for ScriptBuf

    §

    fn default() -> ScriptBuf

    Returns the “default value” for a type. Read more
    §

    impl Deref for ScriptBuf

    §

    type Target = Script

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<ScriptBuf as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for ScriptBuf

    §

    fn deref_mut(&mut self) -> &mut <ScriptBuf as Deref>::Target

    Mutably dereferences the value.
    §

    impl<'de> Deserialize<'de> for ScriptBuf

    §

    fn deserialize<D>( deserializer: D ) -> Result<ScriptBuf, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for ScriptBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for ScriptBuf

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl<'a> Extend<Instruction<'a>> for ScriptBuf

    §

    fn extend<T>(&mut self, iter: T)
    where - T: IntoIterator<Item = Instruction<'a>>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Address> for ScriptBuf

    §

    fn from(a: Address) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for ScriptBuf

    §

    fn from(value: Cow<'a, Script>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Cow<'_, Script>

    §

    fn from(value: ScriptBuf) -> Cow<'_, Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Vec<u8>

    §

    fn from(v: ScriptBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ScriptBuf

    §

    fn from(v: Vec<u8>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> FromIterator<Instruction<'a>> for ScriptBuf

    §

    fn from_iter<T>(iter: T) -> ScriptBuf
    where + T: IntoIterator<Item = Instruction<'a>>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Address> for ScriptBuf

    §

    fn from(a: Address) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for ScriptBuf

    §

    fn from(value: Cow<'a, Script>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Cow<'_, Script>

    §

    fn from(value: ScriptBuf) -> Cow<'_, Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Vec<u8>

    §

    fn from(v: ScriptBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ScriptBuf

    §

    fn from(v: Vec<u8>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> FromIterator<Instruction<'a>> for ScriptBuf

    §

    fn from_iter<T>(iter: T) -> ScriptBuf
    where T: IntoIterator<Item = Instruction<'a>>,

    Creates a value from an iterator. Read more
    §

    impl Hash for ScriptBuf

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, @@ -197,14 +197,14 @@
    §Returns
    Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<Script> for ScriptBuf

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<ScriptBuf> for Script

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for ScriptBuf

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<ScriptBuf> for Script

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for ScriptBuf

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl PartialOrd for ScriptBuf

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl Serialize for ScriptBuf

    §

    fn serialize<S>( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptHash.html index 5254d0cb46..da9839aef4 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.ScriptHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl ScriptHash

    pub fn from_raw_hash(inner: Hash) -> ScriptHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for ScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for ScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for ScriptHash

    §

    fn clone(&self) -> ScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    fn deserialize<D>(d: D) -> Result<ScriptHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for ScriptHash

    §

    fn from(inner: Hash) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for Hash

    §

    fn from(hashtype: ScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for PushBytesBuf

    §

    fn from(hash: ScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for ScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ScriptHash, <ScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for ScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for ScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for ScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for ScriptHash

    §

    fn clone(&self) -> ScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    fn deserialize<D>(d: D) -> Result<ScriptHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for ScriptHash

    §

    fn from(inner: Hash) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for Hash

    §

    fn from(hashtype: ScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for PushBytesBuf

    §

    fn from(hash: ScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for ScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ScriptHash, <ScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for ScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.WScriptHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.WScriptHash.html index 6587e75313..44c8afe693 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.WScriptHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/struct.WScriptHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl WScriptHash

    pub fn from_raw_hash(inner: Hash) -> WScriptHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WScriptHash

    §

    fn clone(&self) -> WScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    fn deserialize<D>(d: D) -> Result<WScriptHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WScriptHash

    §

    fn from(inner: Hash) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for Hash

    §

    fn from(hashtype: WScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for PushBytesBuf

    §

    fn from(hash: WScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WScriptHash, <WScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WScriptHash

    §

    fn clone(&self) -> WScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    fn deserialize<D>(d: D) -> Result<WScriptHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WScriptHash

    §

    fn from(inner: Hash) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for Hash

    §

    fn from(hashtype: WScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for PushBytesBuf

    §

    fn from(hash: WScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WScriptHash, <WScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_program/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_program/enum.Error.html index 2f86a33858..7ea4397f54 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_program/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_program/enum.Error.html @@ -4,7 +4,7 @@ }
    Expand description

    Witness program error.

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    InvalidLength(usize)

    The witness program must be between 2 and 40 bytes in length.

    §

    InvalidSegwitV0Length(usize)

    A v0 witness program must be either of length 20 or 32.

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for FromScriptError

    §

    fn from(e: Error) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

    fn eq(&self, other: &Error) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for FromScriptError

    §

    fn from(e: Error) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseError

    §

    fn from(e: Error) -> ParseError

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

    fn eq(&self, other: &Error) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for Error

    §

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.FromStrError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.FromStrError.html index 4b68c2ac6a..be8a7803eb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.FromStrError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.FromStrError.html @@ -4,7 +4,7 @@ }
    Expand description

    Error parsing WitnessVersion from a string.

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    Unparsable(ParseIntError)

    Unable to parse integer from string.

    §

    Invalid(TryFromError)

    String contained an invalid witness version number.

    -

    Trait Implementations§

    §

    impl Clone for FromStrError

    §

    fn clone(&self) -> FromStrError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromStrError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for FromStrError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for FromStrError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Infallible> for FromStrError

    §

    fn from(never: Infallible) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for FromStrError

    §

    fn from(e: ParseIntError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromStrError

    §

    fn from(e: TryFromError) -> FromStrError

    Converts to this type from the input type.
    §

    impl PartialEq for FromStrError

    §

    fn eq(&self, other: &FromStrError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for FromStrError

    §

    fn clone(&self) -> FromStrError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromStrError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for FromStrError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for FromStrError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Infallible> for FromStrError

    §

    fn from(never: Infallible) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for FromStrError

    §

    fn from(e: ParseIntError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromStrError

    §

    fn from(e: TryFromError) -> FromStrError

    Converts to this type from the input type.
    §

    impl PartialEq for FromStrError

    §

    fn eq(&self, other: &FromStrError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for FromStrError

    §

    impl StructuralPartialEq for FromStrError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.WitnessVersion.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.WitnessVersion.html index 1260cdcd52..97d4e170dd 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.WitnessVersion.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/enum.WitnessVersion.html @@ -44,7 +44,7 @@ into a byte since the conversion requires context (bitcoin script or just a version number).

    pub fn to_fe(self) -> Fe32

    Converts this witness version to a GF32 field element.

    Trait Implementations§

    §

    impl Clone for WitnessVersion

    §

    fn clone(&self) -> WitnessVersion

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessVersion

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for WitnessVersion

    Prints WitnessVersion number (from 0 to 16) as integer, without any prefix or suffix.

    -
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<WitnessVersion> for Fe32

    §

    fn from(version: WitnessVersion) -> Fe32

    Converts to this type from the input type.
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessVersion

    §

    type Err = FromStrError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WitnessVersion, <WitnessVersion as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WitnessVersion

    §

    fn hash<__H>(&self, state: &mut __H)
    where +
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    §

    impl From<WitnessVersion> for Fe32

    §

    fn from(version: WitnessVersion) -> Fe32

    Converts to this type from the input type.
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessVersion

    §

    type Err = FromStrError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WitnessVersion, <WitnessVersion as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WitnessVersion

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for WitnessVersion

    §

    fn cmp(&self, other: &WitnessVersion) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where @@ -54,13 +54,13 @@ by ==.

    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd for WitnessVersion

    §

    fn partial_cmp(&self, other: &WitnessVersion) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl TryFrom<Fe32> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( +operator. Read more

    §

    impl TryFrom<Fe32> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( value: Fe32 -) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Fe32>>::Error>

    Performs the conversion.
    §

    impl<'a> TryFrom<Instruction<'a>> for WitnessVersion

    §

    type Error = TryFromInstructionError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Fe32>>::Error>

    Performs the conversion.
    §

    impl<'a> TryFrom<Instruction<'a>> for WitnessVersion

    §

    type Error = TryFromInstructionError

    The type returned in the event of a conversion error.
    §

    fn try_from( instruction: Instruction<'_> -) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Instruction<'a>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Opcode> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Instruction<'a>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Opcode> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( opcode: Opcode -) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Opcode>>::Error>

    Performs the conversion.
    §

    impl TryFrom<u8> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Opcode>>::Error>

    Performs the conversion.
    §

    impl TryFrom<u8> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( no: u8 ) -> Result<WitnessVersion, <WitnessVersion as TryFrom<u8>>::Error>

    Performs the conversion.
    §

    impl Copy for WitnessVersion

    §

    impl Eq for WitnessVersion

    §

    impl StructuralPartialEq for WitnessVersion

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/struct.TryFromError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/struct.TryFromError.html index bd74195ff4..175830457b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/struct.TryFromError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/script/witness_version/struct.TryFromError.html @@ -1,6 +1,6 @@ TryFromError in bdk_chain::bitcoin::blockdata::script::witness_version - Rust
    pub struct TryFromError { /* private fields */ }
    Expand description

    Error attempting to create a WitnessVersion from an integer.

    Implementations§

    §

    impl TryFromError

    pub fn invalid_version(&self) -> u8

    Returns the invalid non-witness version integer.

    -

    Trait Implementations§

    §

    impl Clone for TryFromError

    §

    fn clone(&self) -> TryFromError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TryFromError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for TryFromError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for TryFromError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<TryFromError> for FromScriptError

    §

    fn from(e: TryFromError) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromStrError

    §

    fn from(e: TryFromError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for ParseError

    §

    fn from(e: TryFromError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for TryFromInstructionError

    §

    fn from(e: TryFromError) -> TryFromInstructionError

    Converts to this type from the input type.
    §

    impl PartialEq for TryFromError

    §

    fn eq(&self, other: &TryFromError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for TryFromError

    §

    fn clone(&self) -> TryFromError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TryFromError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for TryFromError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for TryFromError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<TryFromError> for FromScriptError

    §

    fn from(e: TryFromError) -> FromScriptError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for FromStrError

    §

    fn from(e: TryFromError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for ParseError

    §

    fn from(e: TryFromError) -> ParseError

    Converts to this type from the input type.
    §

    impl From<TryFromError> for TryFromInstructionError

    §

    fn from(e: TryFromError) -> TryFromInstructionError

    Converts to this type from the input type.
    §

    impl PartialEq for TryFromError

    §

    fn eq(&self, other: &TryFromError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for TryFromError

    §

    impl StructuralPartialEq for TryFromError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.FeeRate.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.FeeRate.html index 4ca7c53e51..16653c8a54 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.FeeRate.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.FeeRate.html @@ -40,7 +40,7 @@
    §Errors
    __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more

    §

    impl Mul<FeeRate> for Weight

    Computes ceiling so that fee computation is conservative.

    -
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Ord for FeeRate

    §

    fn cmp(&self, other: &FeeRate) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more

    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Ord for FeeRate

    §

    fn cmp(&self, other: &FeeRate) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for FeeRate

    §

    fn eq(&self, other: &FeeRate) -> bool

    This method tests for self and other values to be equal, and is used @@ -51,9 +51,9 @@
    §Errors
    &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<FeeRate, <FeeRate as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<FeeRate, <FeeRate as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( s: Box<str> -) -> Result<FeeRate, <FeeRate as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for FeeRate

    §

    impl Eq for FeeRate

    §

    impl StructuralPartialEq for FeeRate

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<FeeRate, <FeeRate as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for FeeRate

    §

    impl Eq for FeeRate

    §

    impl StructuralPartialEq for FeeRate

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.Weight.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.Weight.html index d4ebce87a4..94f5d68057 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.Weight.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/struct.Weight.html @@ -42,7 +42,7 @@
    §Panics
    __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Mul<FeeRate> for Weight

    Computes ceiling so that fee computation is conservative.

    -
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for u64

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <u64 as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<u64> for Weight

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: u64) -> <Weight as Mul<u64>>::Output

    Performs the * operation. Read more
    §

    impl MulAssign<u64> for Weight

    §

    fn mul_assign(&mut self, rhs: u64)

    Performs the *= operation. Read more
    §

    impl Ord for Weight

    §

    fn cmp(&self, other: &Weight) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more

    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for u64

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <u64 as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<u64> for Weight

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: u64) -> <Weight as Mul<u64>>::Output

    Performs the * operation. Read more
    §

    impl MulAssign<u64> for Weight

    §

    fn mul_assign(&mut self, rhs: u64)

    Performs the *= operation. Read more
    §

    impl Ord for Weight

    §

    fn cmp(&self, other: &Weight) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for Weight

    §

    fn eq(&self, other: &Weight) -> bool

    This method tests for self and other values to be equal, and is used @@ -53,11 +53,11 @@
    §Panics
    &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl Sub for Weight

    §

    type Output = Weight

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: Weight) -> <Weight as Sub>::Output

    Performs the - operation. Read more
    §

    impl SubAssign for Weight

    §

    fn sub_assign(&mut self, rhs: Weight)

    Performs the -= operation. Read more
    §

    impl<'a> Sum<&'a Weight> for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Sub for Weight

    §

    type Output = Weight

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: Weight) -> <Weight as Sub>::Output

    Performs the - operation. Read more
    §

    impl SubAssign for Weight

    §

    fn sub_assign(&mut self, rhs: Weight)

    Performs the -= operation. Read more
    §

    impl<'a> Sum<&'a Weight> for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where I: Iterator<Item = &'a Weight>,

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    §

    impl Sum for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where +“summing up” the items.

    §

    impl Sum for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where I: Iterator<Item = Weight>,

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    §

    impl TryFrom<&str> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Weight, <Weight as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: Box<str>) -> Result<Weight, <Weight as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Weight

    §

    impl Eq for Weight

    §

    impl StructuralPartialEq for Weight

    Auto Trait Implementations§

    §

    impl Freeze for Weight

    §

    impl RefUnwindSafe for Weight

    §

    impl Send for Weight

    §

    impl Sync for Weight

    §

    impl Unpin for Weight

    §

    impl UnwindSafe for Weight

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +“summing up” the items.

    §

    impl TryFrom<&str> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Weight, <Weight as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: Box<str>) -> Result<Weight, <Weight as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Weight

    §

    impl Eq for Weight

    §

    impl StructuralPartialEq for Weight

    Auto Trait Implementations§

    §

    impl Freeze for Weight

    §

    impl RefUnwindSafe for Weight

    §

    impl Send for Weight

    §

    impl Sync for Weight

    §

    impl Unpin for Weight

    §

    impl UnwindSafe for Weight

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.IndexOutOfBoundsError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.IndexOutOfBoundsError.html index 3164c097bb..d9bb7d8f05 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.IndexOutOfBoundsError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.IndexOutOfBoundsError.html @@ -4,7 +4,7 @@ }
    Expand description

    Error attempting to do an out of bounds access on a vector.

    Fields (Non-exhaustive)§

    This struct is marked as non-exhaustive
    Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
    §index: usize

    Attempted index access.

    §length: usize

    Length of the vector where access was attempted.

    -

    Trait Implementations§

    §

    impl Clone for IndexOutOfBoundsError

    §

    fn clone(&self) -> IndexOutOfBoundsError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for IndexOutOfBoundsError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for InputsIndexError

    §

    fn from(e: IndexOutOfBoundsError) -> InputsIndexError

    Converts to this type from the input type.
    §

    impl From<IndexOutOfBoundsError> for OutputsIndexError

    §

    fn from(e: IndexOutOfBoundsError) -> OutputsIndexError

    Converts to this type from the input type.
    §

    impl PartialEq for IndexOutOfBoundsError

    §

    fn eq(&self, other: &IndexOutOfBoundsError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for IndexOutOfBoundsError

    §

    fn clone(&self) -> IndexOutOfBoundsError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for IndexOutOfBoundsError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for InputsIndexError

    §

    fn from(e: IndexOutOfBoundsError) -> InputsIndexError

    Converts to this type from the input type.
    §

    impl From<IndexOutOfBoundsError> for OutputsIndexError

    §

    fn from(e: IndexOutOfBoundsError) -> OutputsIndexError

    Converts to this type from the input type.
    §

    impl PartialEq for IndexOutOfBoundsError

    §

    fn eq(&self, other: &IndexOutOfBoundsError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for IndexOutOfBoundsError

    §

    impl StructuralPartialEq for IndexOutOfBoundsError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.InputsIndexError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.InputsIndexError.html index a0a1ca9347..397999c15e 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.InputsIndexError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.InputsIndexError.html @@ -1,5 +1,5 @@ InputsIndexError in bdk_chain::bitcoin::blockdata::transaction - Rust
    pub struct InputsIndexError(pub IndexOutOfBoundsError);
    Expand description

    Error attempting to do an out of bounds access on the transaction inputs vector.

    -

    Tuple Fields§

    §0: IndexOutOfBoundsError

    Trait Implementations§

    §

    impl Clone for InputsIndexError

    §

    fn clone(&self) -> InputsIndexError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for InputsIndexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for InputsIndexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for InputsIndexError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for InputsIndexError

    §

    fn from(e: IndexOutOfBoundsError) -> InputsIndexError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for P2wpkhError

    §

    fn from(value: InputsIndexError) -> P2wpkhError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for SighashError

    §

    fn from(e: InputsIndexError) -> SighashError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for TaprootError

    §

    fn from(e: InputsIndexError) -> TaprootError

    Converts to this type from the input type.
    §

    impl PartialEq for InputsIndexError

    §

    fn eq(&self, other: &InputsIndexError) -> bool

    This method tests for self and other values to be equal, and is used +

    Tuple Fields§

    §0: IndexOutOfBoundsError

    Trait Implementations§

    §

    impl Clone for InputsIndexError

    §

    fn clone(&self) -> InputsIndexError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for InputsIndexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for InputsIndexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for InputsIndexError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for InputsIndexError

    §

    fn from(e: IndexOutOfBoundsError) -> InputsIndexError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for P2wpkhError

    §

    fn from(value: InputsIndexError) -> P2wpkhError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for SighashError

    §

    fn from(e: InputsIndexError) -> SighashError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for TaprootError

    §

    fn from(e: InputsIndexError) -> TaprootError

    Converts to this type from the input type.
    §

    impl PartialEq for InputsIndexError

    §

    fn eq(&self, other: &InputsIndexError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for InputsIndexError

    §

    impl StructuralPartialEq for InputsIndexError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Sequence.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Sequence.html index 67b78a1188..22871b3590 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Sequence.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Sequence.html @@ -59,7 +59,7 @@
    §His __deserializer: __D ) -> Result<Sequence, <__D as Deserializer<'de>>::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Sequence

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<LockTime> for Sequence

    §

    fn from(lt: LockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<RelLockTime> for Sequence

    §

    fn from(lock_time: RelLockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<Sequence> for u32

    §

    fn from(sequence: Sequence) -> u32

    Converts to this type from the input type.
    §

    impl FromStr for Sequence

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Sequence, <Sequence as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Sequence

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<LockTime> for Sequence

    §

    fn from(lt: LockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<RelLockTime> for Sequence

    §

    fn from(lock_time: RelLockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<Sequence> for u32

    §

    fn from(sequence: Sequence) -> u32

    Converts to this type from the input type.
    §

    impl FromStr for Sequence

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Sequence, <Sequence as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Sequence

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl LowerHex for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Sequence

    §

    fn cmp(&self, other: &Sequence) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where @@ -92,9 +92,9 @@
    §His &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Sequence, <Sequence as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Sequence, <Sequence as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( s: Box<str> -) -> Result<Sequence, <Sequence as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for LockTime

    §

    type Error = DisabledLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<LockTime, DisabledLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for RelLockTime

    §

    type Error = RelLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<RelLockTime, RelLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<String> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Sequence, <Sequence as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl UpperHex for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Copy for Sequence

    §

    impl Eq for Sequence

    §

    impl StructuralPartialEq for Sequence

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<Sequence, <Sequence as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for LockTime

    §

    type Error = DisabledLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<LockTime, DisabledLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for RelLockTime

    §

    type Error = RelLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<RelLockTime, RelLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<String> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Sequence, <Sequence as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl UpperHex for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Copy for Sequence

    §

    impl Eq for Sequence

    §

    impl StructuralPartialEq for Sequence

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T, Pk> AssetProvider<Pk> for T
    where T: Satisfier<Pk>, Pk: MiniscriptKey + ToPublicKey,

    §

    fn provider_lookup_ecdsa_sig(&self, pk: &Pk) -> bool

    Given a public key, look up an ECDSA signature with that key, return whether we found it
    §

    fn provider_lookup_tap_key_spend_sig(&self, _: &Pk) -> Option<usize>

    Lookup the tap key spend sig and return its size
    §

    fn provider_lookup_tap_leaf_script_sig( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Transaction.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Transaction.html index 849dae525d..5c1dd7d2b4 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Transaction.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Transaction.html @@ -148,7 +148,7 @@

    §Returns
    __deserializer: __D ) -> Result<Transaction, <__D as Deserializer<'de>>::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Encodable for Transaction

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl Hash for Transaction

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl Hash for Transaction

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Transaction

    §

    fn cmp(&self, other: &Transaction) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Txid.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Txid.html index 3253007f07..29164b740d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Txid.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Txid.html @@ -10,7 +10,7 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Txid

    §

    fn deserialize<D>(d: D) -> Result<Txid, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Txid

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Txid

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for TxMerkleNode

    §

    fn from(txid: Txid) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Txid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Txid, <Txid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Txid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for TxMerkleNode

    §

    fn from(txid: Txid) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Txid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Txid, <Txid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Txid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Wtxid.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Wtxid.html index e747ec99df..40809ec7e7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Wtxid.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/transaction/struct.Wtxid.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    fn deserialize<D>(d: D) -> Result<Wtxid, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Wtxid

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Wtxid

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Wtxid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Wtxid, <Wtxid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Wtxid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Wtxid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Wtxid, <Wtxid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Wtxid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/weight/struct.Weight.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/weight/struct.Weight.html index 4c5510b929..0485794322 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/weight/struct.Weight.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/weight/struct.Weight.html @@ -42,7 +42,7 @@
    §Panics
    __H: Hasher,
    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Mul<FeeRate> for Weight

    Computes ceiling so that fee computation is conservative.

    -
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for u64

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <u64 as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<u64> for Weight

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: u64) -> <Weight as Mul<u64>>::Output

    Performs the * operation. Read more
    §

    impl MulAssign<u64> for Weight

    §

    fn mul_assign(&mut self, rhs: u64)

    Performs the *= operation. Read more
    §

    impl Ord for Weight

    §

    fn cmp(&self, other: &Weight) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more

    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for u64

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <u64 as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<u64> for Weight

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: u64) -> <Weight as Mul<u64>>::Output

    Performs the * operation. Read more
    §

    impl MulAssign<u64> for Weight

    §

    fn mul_assign(&mut self, rhs: u64)

    Performs the *= operation. Read more
    §

    impl Ord for Weight

    §

    fn cmp(&self, other: &Weight) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for Weight

    §

    fn eq(&self, other: &Weight) -> bool

    This method tests for self and other values to be equal, and is used @@ -53,11 +53,11 @@
    §Panics
    &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl Sub for Weight

    §

    type Output = Weight

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: Weight) -> <Weight as Sub>::Output

    Performs the - operation. Read more
    §

    impl SubAssign for Weight

    §

    fn sub_assign(&mut self, rhs: Weight)

    Performs the -= operation. Read more
    §

    impl<'a> Sum<&'a Weight> for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Sub for Weight

    §

    type Output = Weight

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: Weight) -> <Weight as Sub>::Output

    Performs the - operation. Read more
    §

    impl SubAssign for Weight

    §

    fn sub_assign(&mut self, rhs: Weight)

    Performs the -= operation. Read more
    §

    impl<'a> Sum<&'a Weight> for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where I: Iterator<Item = &'a Weight>,

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    §

    impl Sum for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where +“summing up” the items.

    §

    impl Sum for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where I: Iterator<Item = Weight>,

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    §

    impl TryFrom<&str> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Weight, <Weight as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: Box<str>) -> Result<Weight, <Weight as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Weight

    §

    impl Eq for Weight

    §

    impl StructuralPartialEq for Weight

    Auto Trait Implementations§

    §

    impl Freeze for Weight

    §

    impl RefUnwindSafe for Weight

    §

    impl Send for Weight

    §

    impl Sync for Weight

    §

    impl Unpin for Weight

    §

    impl UnwindSafe for Weight

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +“summing up” the items.

    §

    impl TryFrom<&str> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Weight, <Weight as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: Box<str>) -> Result<Weight, <Weight as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Weight

    §

    impl Eq for Weight

    §

    impl StructuralPartialEq for Weight

    Auto Trait Implementations§

    §

    impl Freeze for Weight

    §

    impl RefUnwindSafe for Weight

    §

    impl Send for Weight

    §

    impl Sync for Weight

    §

    impl Unpin for Weight

    §

    impl UnwindSafe for Weight

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/witness/struct.Witness.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/witness/struct.Witness.html index 4c813de323..d384c6ce14 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/witness/struct.Witness.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/blockdata/witness/struct.Witness.html @@ -37,7 +37,7 @@ deserializer: D ) -> Result<Witness, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Encodable for Witness

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&[&[u8]]> for Witness

    §

    fn from(slice: &[&[u8]]) -> Witness

    Converts to this type from the input type.
    §

    impl From<&[Vec<u8>]> for Witness

    §

    fn from(slice: &[Vec<u8>]) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<&[u8]>> for Witness

    §

    fn from(vec: Vec<&[u8]>) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<Vec<u8>>> for Witness

    §

    fn from(vec: Vec<Vec<u8>>) -> Witness

    Converts to this type from the input type.
    §

    impl Hash for Witness

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&[&[u8]]> for Witness

    §

    fn from(slice: &[&[u8]]) -> Witness

    Converts to this type from the input type.
    §

    impl From<&[Vec<u8>]> for Witness

    §

    fn from(slice: &[Vec<u8>]) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<&[u8]>> for Witness

    §

    fn from(vec: Vec<&[u8]>) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<Vec<u8>>> for Witness

    §

    fn from(vec: Vec<Vec<u8>>) -> Witness

    Converts to this type from the input type.
    §

    impl Hash for Witness

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Index<usize> for Witness

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &<Witness as Index<usize>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl<'a> IntoIterator for &'a Witness

    §

    type IntoIter = Iter<'a>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a [u8]

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a Witness as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for Witness

    §

    fn cmp(&self, other: &Witness) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/encode/struct.VarInt.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/encode/struct.VarInt.html index f8f1ea439d..9d51c71f3c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/encode/struct.VarInt.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/encode/struct.VarInt.html @@ -5,11 +5,11 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl Encodable for VarInt

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<u16> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u16) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u32> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u32) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u64> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u64) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u8> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u8) -> VarInt

    Converts to this type from the input type.
    §

    impl From<usize> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: usize) -> VarInt

    Converts to this type from the input type.
    §

    impl Ord for VarInt

    §

    fn cmp(&self, other: &VarInt) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    fn from(x: u16) -> VarInt

    Converts to this type from the input type.

    §

    impl From<u32> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: u32) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u64> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: u64) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u8> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: u8) -> VarInt

    Converts to this type from the input type.
    §

    impl From<usize> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: usize) -> VarInt

    Converts to this type from the input type.
    §

    impl Ord for VarInt

    §

    fn cmp(&self, other: &VarInt) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for VarInt

    §

    fn eq(&self, other: &VarInt) -> bool

    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/params/struct.Params.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/params/struct.Params.html index 9db50ca0f3..5de7adda27 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/params/struct.Params.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/params/struct.Params.html @@ -43,7 +43,7 @@

    pub const REGTEST: Params = _

    The regtest parameters.

    pub const fn new(network: Network) -> Params

    Creates parameters set for the given network. /// Creates parameters set for the given network.

    pub fn difficulty_adjustment_interval(&self) -> u64

    Calculates the number of blocks between difficulty adjustments.

    -

    Trait Implementations§

    §

    impl AsRef<Params> for Network

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Params> for Params

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for Params

    §

    fn clone(&self) -> Params

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Params

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Params

    §

    impl RefUnwindSafe for Params

    §

    impl Send for Params

    §

    impl Sync for Params

    §

    impl Unpin for Params

    §

    impl UnwindSafe for Params

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    §

    impl AsRef<Params> for Network

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Params> for Params

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for Params

    §

    fn clone(&self) -> Params

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Params

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Params

    §

    impl RefUnwindSafe for Params

    §

    impl Send for Params

    §

    impl Sync for Params

    §

    impl Unpin for Params

    §

    impl UnwindSafe for Params

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/struct.Params.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/struct.Params.html index 69e1668ae9..405b8fc6a3 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/struct.Params.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/consensus/struct.Params.html @@ -43,7 +43,7 @@

    pub const REGTEST: Params = _

    The regtest parameters.

    pub const fn new(network: Network) -> Params

    Creates parameters set for the given network. /// Creates parameters set for the given network.

    pub fn difficulty_adjustment_interval(&self) -> u64

    Calculates the number of blocks between difficulty adjustments.

    -

    Trait Implementations§

    §

    impl AsRef<Params> for Network

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Params> for Params

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for Params

    §

    fn clone(&self) -> Params

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Params

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Params

    §

    impl RefUnwindSafe for Params

    §

    impl Send for Params

    §

    impl Sync for Params

    §

    impl Unpin for Params

    §

    impl UnwindSafe for Params

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    §

    impl AsRef<Params> for Network

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Params> for Params

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for Params

    §

    fn clone(&self) -> Params

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Params

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Params

    §

    impl RefUnwindSafe for Params

    §

    impl Send for Params

    §

    impl Sync for Params

    §

    impl Unpin for Params

    §

    impl UnwindSafe for Params

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/enum.Error.html index cfd22e7f15..aca67338ef 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/enum.Error.html @@ -8,7 +8,7 @@
    §

    SighashType(NonStandardSighashTypeError)

    Non-standard sighash type.

    §

    EmptySignature

    Signature was empty.

    §

    Secp256k1(Error)

    A secp256k1 error.

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<HexToBytesError> for Error

    §

    fn from(e: HexToBytesError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<NonStandardSighashTypeError> for Error

    §

    fn from(e: NonStandardSighashTypeError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

    fn eq(&self, other: &Error) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<HexToBytesError> for Error

    §

    fn from(e: HexToBytesError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.
    §

    impl From<NonStandardSighashTypeError> for Error

    §

    fn from(e: NonStandardSighashTypeError) -> Error

    Converts to this type from the input type.
    §

    impl PartialEq for Error

    §

    fn eq(&self, other: &Error) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for Error

    §

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/struct.SerializedSignature.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/struct.SerializedSignature.html index 6d42140ba4..3b71ad062f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/struct.SerializedSignature.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/ecdsa/struct.SerializedSignature.html @@ -2395,7 +2395,7 @@
    §Examples<
    §Examples
    assert_eq!(["hello", "world"].connect(" "), "hello world");
     assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for SerializedSignature

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for SerializedSignature

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for SerializedSignature

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SerializedSignature

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for SerializedSignature

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl Clone for SerializedSignature

    §

    fn clone(&self) -> SerializedSignature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for SerializedSignature

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<SerializedSignature as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for SerializedSignature

    §

    fn deref_mut(&mut self) -> &mut <SerializedSignature as Deref>::Target

    Mutably dereferences the value.
    §

    impl Display for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Hash for SerializedSignature

    §

    fn hash<H>(&self, state: &mut H)
    where +

    Trait Implementations§

    §

    impl AsMut<[u8]> for SerializedSignature

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for SerializedSignature

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for SerializedSignature

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SerializedSignature

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for SerializedSignature

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl Clone for SerializedSignature

    §

    fn clone(&self) -> SerializedSignature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for SerializedSignature

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<SerializedSignature as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for SerializedSignature

    §

    fn deref_mut(&mut self) -> &mut <SerializedSignature as Deref>::Target

    Mutably dereferences the value.
    §

    impl Display for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Hash for SerializedSignature

    §

    fn hash<H>(&self, state: &mut H)
    where H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a SerializedSignature

    §

    type IntoIter = Iter<'a, u8>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a u8

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a SerializedSignature as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl LowerHex for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.EcdsaSighashType.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.EcdsaSighashType.html index 8710f9c3c8..a449ec6b41 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.EcdsaSighashType.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.EcdsaSighashType.html @@ -34,7 +34,7 @@
    §Errors

    Trait Implementations§

    §

    impl Clone for EcdsaSighashType

    §

    fn clone(&self) -> EcdsaSighashType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for EcdsaSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for EcdsaSighashType

    §

    fn deserialize<D>( deserializer: D ) -> Result<EcdsaSighashType, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for EcdsaSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for PsbtSighashType

    §

    fn from(ecdsa_hash_ty: EcdsaSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl FromStr for EcdsaSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str( + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for EcdsaSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for PsbtSighashType

    §

    fn from(ecdsa_hash_ty: EcdsaSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl FromStr for EcdsaSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<EcdsaSighashType, <EcdsaSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for EcdsaSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.Network.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.Network.html index ba92ff2739..cd09b9ad67 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.Network.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.Network.html @@ -52,7 +52,7 @@
    §Examples

    Trait Implementations§

    §

    impl AsRef<Params> for Network

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for Network

    §

    fn clone(&self) -> Network

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Network

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Network

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<Network, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Network

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for KnownHrp

    §

    fn from(n: Network) -> KnownHrp

    Converts to this type from the input type.
    §

    impl From<Network> for Magic

    §

    fn from(network: Network) -> Magic

    Converts to this type from the input type.
    §

    impl From<Network> for NetworkKind

    §

    fn from(n: Network) -> NetworkKind

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.
    §

    impl FromStr for Network

    §

    type Err = ParseNetworkError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Network, <Network as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Network

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Network

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for KnownHrp

    §

    fn from(n: Network) -> KnownHrp

    Converts to this type from the input type.
    §

    impl From<Network> for Magic

    §

    fn from(network: Network) -> Magic

    Converts to this type from the input type.
    §

    impl From<Network> for NetworkKind

    §

    fn from(n: Network) -> NetworkKind

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.
    §

    impl FromStr for Network

    §

    type Err = ParseNetworkError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Network, <Network as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Network

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Network

    §

    fn cmp(&self, other: &Network) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.TapSighashType.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.TapSighashType.html index 4dde15c927..c841844ff2 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.TapSighashType.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.TapSighashType.html @@ -24,7 +24,7 @@

    Trait Implementations§

    §

    impl Clone for TapSighashType

    §

    fn clone(&self) -> TapSighashType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapSighashType

    §

    fn deserialize<D>( deserializer: D ) -> Result<TapSighashType, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl From<TapSighashType> for PsbtSighashType

    §

    fn from(taproot_hash_ty: TapSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl FromStr for TapSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighashType, <TapSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl From<TapSighashType> for PsbtSighashType

    §

    fn from(taproot_hash_ty: TapSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl FromStr for TapSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighashType, <TapSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for TapSighashType

    §

    fn cmp(&self, other: &TapSighashType) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.WitnessVersion.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.WitnessVersion.html index 41d2f9873f..0c5917fcd1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.WitnessVersion.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/enum.WitnessVersion.html @@ -44,7 +44,7 @@ into a byte since the conversion requires context (bitcoin script or just a version number).

    pub fn to_fe(self) -> Fe32

    Converts this witness version to a GF32 field element.

    Trait Implementations§

    §

    impl Clone for WitnessVersion

    §

    fn clone(&self) -> WitnessVersion

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessVersion

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for WitnessVersion

    Prints WitnessVersion number (from 0 to 16) as integer, without any prefix or suffix.

    -
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<WitnessVersion> for Fe32

    §

    fn from(version: WitnessVersion) -> Fe32

    Converts to this type from the input type.
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessVersion

    §

    type Err = FromStrError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WitnessVersion, <WitnessVersion as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WitnessVersion

    §

    fn hash<__H>(&self, state: &mut __H)
    where +
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    §

    impl From<WitnessVersion> for Fe32

    §

    fn from(version: WitnessVersion) -> Fe32

    Converts to this type from the input type.
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessVersion

    §

    type Err = FromStrError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WitnessVersion, <WitnessVersion as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WitnessVersion

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for WitnessVersion

    §

    fn cmp(&self, other: &WitnessVersion) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where @@ -54,13 +54,13 @@ by ==.

    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd for WitnessVersion

    §

    fn partial_cmp(&self, other: &WitnessVersion) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl TryFrom<Fe32> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( +operator. Read more

    §

    impl TryFrom<Fe32> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( value: Fe32 -) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Fe32>>::Error>

    Performs the conversion.
    §

    impl<'a> TryFrom<Instruction<'a>> for WitnessVersion

    §

    type Error = TryFromInstructionError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Fe32>>::Error>

    Performs the conversion.
    §

    impl<'a> TryFrom<Instruction<'a>> for WitnessVersion

    §

    type Error = TryFromInstructionError

    The type returned in the event of a conversion error.
    §

    fn try_from( instruction: Instruction<'_> -) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Instruction<'a>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Opcode> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Instruction<'a>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Opcode> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( opcode: Opcode -) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Opcode>>::Error>

    Performs the conversion.
    §

    impl TryFrom<u8> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<WitnessVersion, <WitnessVersion as TryFrom<Opcode>>::Error>

    Performs the conversion.
    §

    impl TryFrom<u8> for WitnessVersion

    §

    type Error = TryFromError

    The type returned in the event of a conversion error.
    §

    fn try_from( no: u8 ) -> Result<WitnessVersion, <WitnessVersion as TryFrom<u8>>::Error>

    Performs the conversion.
    §

    impl Copy for WitnessVersion

    §

    impl Eq for WitnessVersion

    §

    impl StructuralPartialEq for WitnessVersion

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/enum.PrefixedHexError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/enum.PrefixedHexError.html index 6e3ab71f91..277b8e2372 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/enum.PrefixedHexError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/enum.PrefixedHexError.html @@ -5,7 +5,7 @@ a type that can be created infallibly from an integer.

    Variants§

    §

    MissingPrefix(MissingPrefixError)

    Hex string is missing prefix.

    §

    ParseInt(ParseIntError)

    Error parsing integer from hex string.

    -

    Trait Implementations§

    §

    impl Clone for PrefixedHexError

    §

    fn clone(&self) -> PrefixedHexError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PrefixedHexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for PrefixedHexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for PrefixedHexError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<MissingPrefixError> for PrefixedHexError

    §

    fn from(e: MissingPrefixError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for PrefixedHexError

    §

    fn from(e: ParseIntError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl PartialEq for PrefixedHexError

    §

    fn eq(&self, other: &PrefixedHexError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for PrefixedHexError

    §

    fn clone(&self) -> PrefixedHexError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PrefixedHexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for PrefixedHexError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for PrefixedHexError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<MissingPrefixError> for PrefixedHexError

    §

    fn from(e: MissingPrefixError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for PrefixedHexError

    §

    fn from(e: ParseIntError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl PartialEq for PrefixedHexError

    §

    fn eq(&self, other: &PrefixedHexError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for PrefixedHexError

    §

    impl StructuralPartialEq for PrefixedHexError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/struct.ParseIntError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/struct.ParseIntError.html index a0f08c311c..4c21ab1980 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/struct.ParseIntError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/error/struct.ParseIntError.html @@ -6,7 +6,7 @@ in a performance-critical application you may want to box it or throw away the context by converting to core type.

    Implementations§

    §

    impl ParseIntError

    pub fn input(&self) -> &str

    Returns the input that was attempted to be parsed.

    -

    Trait Implementations§

    §

    impl AsRef<ParseIntError> for ParseIntError

    §

    fn as_ref(&self) -> &ParseIntError

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for ParseIntError

    §

    fn clone(&self) -> ParseIntError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseIntError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<ParseIntError> for FromStrError

    §

    fn from(e: ParseIntError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for ParseIntError

    §

    fn from(value: ParseIntError) -> ParseIntError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for PrefixedHexError

    §

    fn from(e: ParseIntError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for UnprefixedHexError

    §

    fn from(e: ParseIntError) -> UnprefixedHexError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseIntError

    §

    fn eq(&self, other: &ParseIntError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl AsRef<ParseIntError> for ParseIntError

    §

    fn as_ref(&self) -> &ParseIntError

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for ParseIntError

    §

    fn clone(&self) -> ParseIntError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseIntError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<ParseIntError> for FromStrError

    §

    fn from(e: ParseIntError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for ParseIntError

    §

    fn from(value: ParseIntError) -> ParseIntError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for PrefixedHexError

    §

    fn from(e: ParseIntError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for UnprefixedHexError

    §

    fn from(e: ParseIntError) -> UnprefixedHexError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseIntError

    §

    fn eq(&self, other: &ParseIntError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for ParseIntError

    §

    impl StructuralPartialEq for ParseIntError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.BlockHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.BlockHash.html index c541cc2f4c..341408b65f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.BlockHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.BlockHash.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for BlockHash

    §

    fn deserialize<D>(d: D) -> Result<BlockHash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for BlockHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for BlockHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<&Header> for BlockHash

    §

    fn from(header: &Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Header> for BlockHash

    §

    fn from(header: Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl FromStr for BlockHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<BlockHash, <BlockHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for BlockHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<&Header> for BlockHash

    §

    fn from(header: &Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Header> for BlockHash

    §

    fn from(header: Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl FromStr for BlockHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<BlockHash, <BlockHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for BlockHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHash.html index d09b66c3b9..54cec9a69d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHash.html @@ -6,11 +6,11 @@ &self, previous_filter_header: &FilterHeader ) -> FilterHeader

    Computes the filter header from a filter hash and previous filter header.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for FilterHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for FilterHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for FilterHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for FilterHash

    §

    fn clone(&self) -> FilterHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FilterHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FilterHash

    Trait Implementations§

    §

    impl AsRef<[u8]> for FilterHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for FilterHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for FilterHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for FilterHash

    §

    fn clone(&self) -> FilterHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FilterHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FilterHash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<FilterHash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for FilterHash

    §

    fn deserialize<D>(d: D) -> Result<FilterHash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for FilterHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FilterHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl FromStr for FilterHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHash, <FilterHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl FromStr for FilterHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHash, <FilterHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHeader.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHeader.html index e5ae4ba3d3..52e6dc28de 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHeader.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.FilterHeader.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

    fn deserialize<D>(d: D) -> Result<FilterHeader, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for FilterHeader

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FilterHeader

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl FromStr for FilterHeader

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHeader, <FilterHeader as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHeader

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl FromStr for FilterHeader

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHeader, <FilterHeader as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHeader

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.TxMerkleNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.TxMerkleNode.html index 36cdebe2eb..aee8dd44a5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.TxMerkleNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.TxMerkleNode.html @@ -2,7 +2,7 @@

    Implementations§

    §

    impl TxMerkleNode

    pub fn from_raw_hash(inner: Hash) -> TxMerkleNode

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TxMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TxMerkleNode

    §

    fn clone(&self) -> TxMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TxMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TxMerkleNode

    Trait Implementations§

    §

    impl AsRef<[u8]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TxMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TxMerkleNode

    §

    fn clone(&self) -> TxMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TxMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TxMerkleNode

    §

    fn consensus_decode<R>(r: &mut R) -> Result<TxMerkleNode, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

    fn deserialize<D>(d: D) -> Result<TxMerkleNode, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TxMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for TxMerkleNode

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Txid.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Txid.html index 9a317b2869..e4a450ffdf 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Txid.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Txid.html @@ -10,7 +10,7 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Txid

    §

    fn deserialize<D>(d: D) -> Result<Txid, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Txid

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Txid

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for TxMerkleNode

    §

    fn from(txid: Txid) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Txid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Txid, <Txid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Txid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for TxMerkleNode

    §

    fn from(txid: Txid) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Txid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Txid, <Txid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Txid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessCommitment.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessCommitment.html index f11d2b9b27..a117a7a01c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessCommitment.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessCommitment.html @@ -2,7 +2,7 @@

    Implementations§

    §

    impl WitnessCommitment

    pub fn from_raw_hash(inner: Hash) -> WitnessCommitment

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessCommitment

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessCommitment

    §

    fn clone(&self) -> WitnessCommitment

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessCommitment

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessCommitment

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessCommitment

    §

    fn clone(&self) -> WitnessCommitment

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessCommitment

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    fn deserialize<D>( d: D ) -> Result<WitnessCommitment, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WitnessCommitment

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for WitnessCommitment

    §

    fn from(inner: Hash) -> WitnessCommitment

    Converts to this type from the input type.
    §

    impl From<WitnessCommitment> for Hash

    §

    fn from(hashtype: WitnessCommitment) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for WitnessCommitment

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessMerkleNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessMerkleNode.html index f42de670ec..360604c256 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessMerkleNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.WitnessMerkleNode.html @@ -2,13 +2,13 @@

    Implementations§

    §

    impl WitnessMerkleNode

    pub fn from_raw_hash(inner: Hash) -> WitnessMerkleNode

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessMerkleNode

    §

    fn clone(&self) -> WitnessMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for WitnessMerkleNode

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessMerkleNode

    §

    fn clone(&self) -> WitnessMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for WitnessMerkleNode

    §

    fn consensus_decode<R>(r: &mut R) -> Result<WitnessMerkleNode, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

    fn deserialize<D>( d: D ) -> Result<WitnessMerkleNode, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WitnessMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for WitnessMerkleNode

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessMerkleNode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessMerkleNode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<WitnessMerkleNode, <WitnessMerkleNode as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WitnessMerkleNode

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Wtxid.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Wtxid.html index b75ccee391..5f39c023e6 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Wtxid.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hash_types/struct.Wtxid.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    fn deserialize<D>(d: D) -> Result<Wtxid, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Wtxid

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Wtxid

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Wtxid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Wtxid, <Wtxid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Wtxid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Wtxid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Wtxid, <Wtxid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Wtxid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hash160/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hash160/struct.Hash.html index 169320af23..e9be0b3c39 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hash160/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hash160/struct.Hash.html @@ -3,17 +3,17 @@ a shared reference to this Hash type.

    pub fn from_bytes_mut(bytes: &mut [u8; 20]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for Hash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for PubkeyHash

    §

    fn from(inner: Hash) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for ScriptHash

    §

    fn from(inner: Hash) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WPubkeyHash

    §

    fn from(inner: Hash) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for XKeyIdentifier

    §

    fn from(inner: Hash) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for Hash

    §

    fn from(hashtype: PubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for Hash

    §

    fn from(hashtype: ScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for Hash

    §

    fn from(hashtype: WPubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<XKeyIdentifier> for Hash

    §

    fn from(hashtype: XKeyIdentifier) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for Hash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for PubkeyHash

    §

    fn from(inner: Hash) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for ScriptHash

    §

    fn from(inner: Hash) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WPubkeyHash

    §

    fn from(inner: Hash) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for XKeyIdentifier

    §

    fn from(inner: Hash) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for Hash

    §

    fn from(hashtype: PubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for Hash

    §

    fn from(hashtype: ScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for Hash

    §

    fn from(hashtype: WPubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<XKeyIdentifier> for Hash

    §

    fn from(hashtype: XKeyIdentifier) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 20]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl IntoAssets for Hash

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hmac/struct.Hmac.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hmac/struct.Hmac.html index 2fe728d84f..da54012754 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hmac/struct.Hmac.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/hmac/struct.Hmac.html @@ -8,23 +8,23 @@ T: Hash + Deserialize<'de>,

    §

    fn deserialize<D>(d: D) -> Result<Hmac<T>, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<T> Display for Hmac<T>
    where T: Hash,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> FromStr for Hmac<T>
    where - T: Hash + FromStr,

    §

    type Err = <T as FromStr>::Err

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hmac<T>, <Hmac<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hmac<T>
    where + T: Hash + FromStr,

    §

    type Err = <T as FromStr>::Err

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hmac<T>, <Hmac<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hmac<T>
    where + T: Hash + Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Hash for Hmac<T>
    where T: Hash,

    §

    type Engine = HmacEngine<T>

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under -any conditions.
    §

    type Bytes = <T as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    fn from_engine(e: HmacEngine<T>) -> Hmac<T>

    Produces a hash from the current state of a given engine.
    §

    const LEN: usize = T::LEN

    Length of the hash, in bytes.
    §

    fn from_slice(sl: &[u8]) -> Result<Hmac<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hmac<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hmac<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <T as Hash>::Bytes) -> Hmac<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hmac<T>

    Returns an all zero hash. Read more
    §

    fn engine() -> Self::Engine

    Constructs a new engine.
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +any conditions.

    §

    type Bytes = <T as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    fn from_engine(e: HmacEngine<T>) -> Hmac<T>

    Produces a hash from the current state of a given engine.
    §

    const LEN: usize = T::LEN

    Length of the hash, in bytes.
    §

    fn from_slice(sl: &[u8]) -> Result<Hmac<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hmac<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hmac<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <T as Hash>::Bytes) -> Hmac<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hmac<T>

    Returns an all zero hash. Read more
    §

    fn engine() -> Self::Engine

    Constructs a new engine.
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    impl<T> Hash for Hmac<T>
    where - T: Hash + Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Index<Range<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFrom<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFrom<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFull> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeTo<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeTo<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<usize> for Hmac<T>
    where - T: Hash,

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &u8

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hmac<T>
    where +true for Sha256dHash, so here we are.

    §

    impl<T> Index<Range<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFrom<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFrom<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFull> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeTo<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeTo<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<usize> for Hmac<T>
    where + T: Hash,

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &u8

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hmac<T>
    where T: Hash,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> Ord for Hmac<T>
    where T: Ord + Hash,

    §

    fn cmp(&self, other: &Hmac<T>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/ripemd160/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/ripemd160/struct.Hash.html index 53ef2c69c6..050f3c9511 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/ripemd160/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/ripemd160/struct.Hash.html @@ -4,16 +4,16 @@

    pub fn from_bytes_mut(bytes: &mut [u8; 20]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for Hash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 20]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl IntoAssets for Hash

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/de/trait.Deserialize.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/de/trait.Deserialize.html index d7dc6a3733..b53d60e97c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/de/trait.Deserialize.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/de/trait.Deserialize.html @@ -730,11 +730,11 @@

    §Lifetime

    D: Deserializer<'de>,

    Implementors§

    §

    impl<'de> Deserialize<'de> for &'de Script

    Can only deserialize borrowed bytes.

    source§

    impl<'de> Deserialize<'de> for ConfirmationTime

    §

    impl<'de> Deserialize<'de> for ChildNumber

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::LockTime

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::LockTime

    §

    impl<'de> Deserialize<'de> for EcdsaSighashType

    §

    impl<'de> Deserialize<'de> for Network

    §

    impl<'de> Deserialize<'de> for TapSighashType

    §

    impl<'de> Deserialize<'de> for Parity

    The parity is deserialized as u8 - 0 for even, 1 for odd.

    §

    impl<'de> Deserialize<'de> for LeafVersion

    Deserializes LeafVersion as a u8 using consensus encoding.

    -
    §

    impl<'de> Deserialize<'de> for TapLeaf

    source§

    impl<'de> Deserialize<'de> for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl<'de> Deserialize<'de> for bdk_chain::local_chain::ChangeSet

    source§

    impl<'de> Deserialize<'de> for Balance

    source§

    impl<'de> Deserialize<'de> for BlockId

    source§

    impl<'de> Deserialize<'de> for ConfirmationBlockTime

    source§

    impl<'de> Deserialize<'de> for DescriptorId

    source§

    impl<'de> Deserialize<'de> for String

    §

    impl<'de> Deserialize<'de> for ChainCode

    §

    impl<'de> Deserialize<'de> for DerivationPath

    §

    impl<'de> Deserialize<'de> for Fingerprint

    §

    impl<'de> Deserialize<'de> for Xpriv

    §

    impl<'de> Deserialize<'de> for Xpub

    §

    impl<'de> Deserialize<'de> for ShortId

    §

    impl<'de> Deserialize<'de> for Header

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl<'de> Deserialize<'de> for ChainHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for Keypair

    §

    impl<'de> Deserialize<'de> for TweakedKeypair

    §

    impl<'de> Deserialize<'de> for TweakedPublicKey

    §

    impl<'de> Deserialize<'de> for Key

    §

    impl<'de> Deserialize<'de> for Pair

    §

    impl<'de> Deserialize<'de> for Input

    §

    impl<'de> Deserialize<'de> for Output

    §

    impl<'de> Deserialize<'de> for PsbtSighashType

    §

    impl<'de> Deserialize<'de> for SharedSecret

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl<'de> Deserialize<'de> for SecretKey

    §

    impl<'de> Deserialize<'de> for Address<NetworkUnchecked>

    §

    impl<'de> Deserialize<'de> for Amount

    §

    impl<'de> Deserialize<'de> for Block

    §

    impl<'de> Deserialize<'de> for BlockHash

    §

    impl<'de> Deserialize<'de> for CompactTarget

    §

    impl<'de> Deserialize<'de> for CompressedPublicKey

    §

    impl<'de> Deserialize<'de> for FeeRate

    §

    impl<'de> Deserialize<'de> for FilterHash

    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

    impl<'de> Deserialize<'de> for LegacySighash

    §

    impl<'de> Deserialize<'de> for OutPoint

    §

    impl<'de> Deserialize<'de> for PrivateKey

    §

    impl<'de> Deserialize<'de> for Psbt

    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::PublicKey

    §

    impl<'de> Deserialize<'de> for ScriptBuf

    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    impl<'de> Deserialize<'de> for Sequence

    §

    impl<'de> Deserialize<'de> for TapLeafHash

    §

    impl<'de> Deserialize<'de> for TapNodeHash

    §

    impl<'de> Deserialize<'de> for TapSighash

    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    impl<'de> Deserialize<'de> for Target

    §

    impl<'de> Deserialize<'de> for Transaction

    §

    impl<'de> Deserialize<'de> for TxIn

    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

    impl<'de> Deserialize<'de> for TxOut

    §

    impl<'de> Deserialize<'de> for Txid

    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    impl<'de> Deserialize<'de> for Weight

    §

    impl<'de> Deserialize<'de> for Witness

    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

    impl<'de> Deserialize<'de> for Work

    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    impl<'de> Deserialize<'de> for ControlBlock

    §

    impl<'de> Deserialize<'de> for NodeInfo

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::taproot::Signature

    §

    impl<'de> Deserialize<'de> for TapTree

    §

    impl<'de> Deserialize<'de> for TaprootMerkleBranch

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl<'de> Deserialize<'de> for Midstate

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<'de> Deserialize<'de> for IgnoredAny

    source§

    impl<'de, A> Deserialize<'de> for bdk_chain::tx_graph::ChangeSet<A>
    where +
    §

    impl<'de> Deserialize<'de> for TapLeaf

    source§

    impl<'de> Deserialize<'de> for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl<'de> Deserialize<'de> for bdk_chain::local_chain::ChangeSet

    source§

    impl<'de> Deserialize<'de> for Balance

    §

    impl<'de> Deserialize<'de> for BlockId

    §

    impl<'de> Deserialize<'de> for ConfirmationBlockTime

    source§

    impl<'de> Deserialize<'de> for DescriptorId

    source§

    impl<'de> Deserialize<'de> for String

    §

    impl<'de> Deserialize<'de> for ChainCode

    §

    impl<'de> Deserialize<'de> for DerivationPath

    §

    impl<'de> Deserialize<'de> for Fingerprint

    §

    impl<'de> Deserialize<'de> for Xpriv

    §

    impl<'de> Deserialize<'de> for Xpub

    §

    impl<'de> Deserialize<'de> for ShortId

    §

    impl<'de> Deserialize<'de> for Header

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl<'de> Deserialize<'de> for ChainHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for Keypair

    §

    impl<'de> Deserialize<'de> for TweakedKeypair

    §

    impl<'de> Deserialize<'de> for TweakedPublicKey

    §

    impl<'de> Deserialize<'de> for Key

    §

    impl<'de> Deserialize<'de> for Pair

    §

    impl<'de> Deserialize<'de> for Input

    §

    impl<'de> Deserialize<'de> for Output

    §

    impl<'de> Deserialize<'de> for PsbtSighashType

    §

    impl<'de> Deserialize<'de> for SharedSecret

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl<'de> Deserialize<'de> for SecretKey

    §

    impl<'de> Deserialize<'de> for Address<NetworkUnchecked>

    §

    impl<'de> Deserialize<'de> for Amount

    §

    impl<'de> Deserialize<'de> for Block

    §

    impl<'de> Deserialize<'de> for BlockHash

    §

    impl<'de> Deserialize<'de> for CompactTarget

    §

    impl<'de> Deserialize<'de> for CompressedPublicKey

    §

    impl<'de> Deserialize<'de> for FeeRate

    §

    impl<'de> Deserialize<'de> for FilterHash

    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

    impl<'de> Deserialize<'de> for LegacySighash

    §

    impl<'de> Deserialize<'de> for OutPoint

    §

    impl<'de> Deserialize<'de> for PrivateKey

    §

    impl<'de> Deserialize<'de> for Psbt

    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::PublicKey

    §

    impl<'de> Deserialize<'de> for ScriptBuf

    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    impl<'de> Deserialize<'de> for Sequence

    §

    impl<'de> Deserialize<'de> for TapLeafHash

    §

    impl<'de> Deserialize<'de> for TapNodeHash

    §

    impl<'de> Deserialize<'de> for TapSighash

    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    impl<'de> Deserialize<'de> for Target

    §

    impl<'de> Deserialize<'de> for Transaction

    §

    impl<'de> Deserialize<'de> for TxIn

    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

    impl<'de> Deserialize<'de> for TxOut

    §

    impl<'de> Deserialize<'de> for Txid

    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    impl<'de> Deserialize<'de> for Weight

    §

    impl<'de> Deserialize<'de> for Witness

    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

    impl<'de> Deserialize<'de> for Work

    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    impl<'de> Deserialize<'de> for ControlBlock

    §

    impl<'de> Deserialize<'de> for NodeInfo

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::taproot::Signature

    §

    impl<'de> Deserialize<'de> for TapTree

    §

    impl<'de> Deserialize<'de> for TaprootMerkleBranch

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl<'de> Deserialize<'de> for Midstate

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<'de> Deserialize<'de> for IgnoredAny

    source§

    impl<'de, A> Deserialize<'de> for bdk_chain::tx_graph::ChangeSet<A>
    where A: Ord + Deserialize<'de>,

    source§

    impl<'de, A, IA> Deserialize<'de> for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>
    where A: Ord + Deserialize<'de>, IA: Deserialize<'de>,

    §

    impl<'de, Subtype> Deserialize<'de> for ProprietaryKey<Subtype>
    where Subtype: Copy + From<u8> + Into<u8> + Deserialize<'de>,

    source§

    impl<'de, T> Deserialize<'de> for Vec<T>
    where T: Deserialize<'de>,

    §

    impl<'de, T> Deserialize<'de> for Hmac<T>
    where T: Hash + Deserialize<'de>,

    §

    impl<'de, T> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256t::Hash<T>
    where - T: Tag,

    \ No newline at end of file + T: Tag, \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/ser/trait.Serialize.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/ser/trait.Serialize.html index b1e08760fd..34da1fe154 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/ser/trait.Serialize.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/ser/trait.Serialize.html @@ -854,7 +854,7 @@ ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where S: Serializer,

    Implementors§

    source§

    impl Serialize for ConfirmationTime

    §

    impl Serialize for ChildNumber

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::LockTime

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::LockTime

    §

    impl Serialize for EcdsaSighashType

    §

    impl Serialize for Network

    §

    impl Serialize for TapSighashType

    §

    impl Serialize for Parity

    The parity is serialized as u8 - 0 for even, 1 for odd.

    §

    impl Serialize for LeafVersion

    Serializes LeafVersion as a u8 using consensus encoding.

    -
    §

    impl Serialize for TapLeaf

    source§

    impl Serialize for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl Serialize for bdk_chain::local_chain::ChangeSet

    source§

    impl Serialize for Balance

    source§

    impl Serialize for BlockId

    source§

    impl Serialize for ConfirmationBlockTime

    source§

    impl Serialize for DescriptorId

    source§

    impl Serialize for String

    §

    impl Serialize for ChainCode

    §

    impl Serialize for DerivationPath

    §

    impl Serialize for Fingerprint

    §

    impl Serialize for Xpriv

    §

    impl Serialize for Xpub

    §

    impl Serialize for ShortId

    §

    impl Serialize for Header

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl Serialize for ChainHash

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl Serialize for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl Serialize for Keypair

    §

    impl Serialize for TweakedKeypair

    §

    impl Serialize for TweakedPublicKey

    §

    impl Serialize for Key

    §

    impl Serialize for Pair

    §

    impl Serialize for Input

    §

    impl Serialize for Output

    §

    impl Serialize for PsbtSighashType

    §

    impl Serialize for SharedSecret

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl Serialize for SecretKey

    §

    impl Serialize for Amount

    §

    impl Serialize for Block

    §

    impl Serialize for BlockHash

    §

    impl Serialize for CompactTarget

    §

    impl Serialize for CompressedPublicKey

    §

    impl Serialize for FeeRate

    §

    impl Serialize for FilterHash

    §

    impl Serialize for FilterHeader

    §

    impl Serialize for LegacySighash

    §

    impl Serialize for Opcode

    §

    impl Serialize for OutPoint

    §

    impl Serialize for PrivateKey

    §

    impl Serialize for Psbt

    §

    impl Serialize for PubkeyHash

    §

    impl Serialize for bdk_chain::bitcoin::PublicKey

    §

    impl Serialize for Script

    §

    impl Serialize for ScriptBuf

    §

    impl Serialize for ScriptHash

    §

    impl Serialize for SegwitV0Sighash

    §

    impl Serialize for Sequence

    §

    impl Serialize for TapLeafHash

    §

    impl Serialize for TapNodeHash

    §

    impl Serialize for TapSighash

    §

    impl Serialize for TapTweakHash

    §

    impl Serialize for Target

    §

    impl Serialize for Transaction

    §

    impl Serialize for TxIn

    §

    impl Serialize for TxMerkleNode

    §

    impl Serialize for TxOut

    §

    impl Serialize for Txid

    §

    impl Serialize for WPubkeyHash

    §

    impl Serialize for WScriptHash

    §

    impl Serialize for Weight

    §

    impl Serialize for Witness

    §

    impl Serialize for WitnessCommitment

    §

    impl Serialize for WitnessMerkleNode

    §

    impl Serialize for Work

    §

    impl Serialize for Wtxid

    §

    impl Serialize for XKeyIdentifier

    §

    impl Serialize for XOnlyPublicKey

    §

    impl Serialize for ControlBlock

    §

    impl Serialize for NodeInfo

    §

    impl Serialize for bdk_chain::bitcoin::taproot::Signature

    §

    impl Serialize for TapTree

    §

    impl Serialize for TaprootMerkleBranch

    §

    impl Serialize for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl Serialize for Midstate

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<A> Serialize for bdk_chain::tx_graph::ChangeSet<A>
    where +
    §

    impl Serialize for TapLeaf

    source§

    impl Serialize for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl Serialize for bdk_chain::local_chain::ChangeSet

    source§

    impl Serialize for Balance

    §

    impl Serialize for BlockId

    §

    impl Serialize for ConfirmationBlockTime

    source§

    impl Serialize for DescriptorId

    source§

    impl Serialize for String

    §

    impl Serialize for ChainCode

    §

    impl Serialize for DerivationPath

    §

    impl Serialize for Fingerprint

    §

    impl Serialize for Xpriv

    §

    impl Serialize for Xpub

    §

    impl Serialize for ShortId

    §

    impl Serialize for Header

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl Serialize for ChainHash

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl Serialize for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl Serialize for Keypair

    §

    impl Serialize for TweakedKeypair

    §

    impl Serialize for TweakedPublicKey

    §

    impl Serialize for Key

    §

    impl Serialize for Pair

    §

    impl Serialize for Input

    §

    impl Serialize for Output

    §

    impl Serialize for PsbtSighashType

    §

    impl Serialize for SharedSecret

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl Serialize for SecretKey

    §

    impl Serialize for Amount

    §

    impl Serialize for Block

    §

    impl Serialize for BlockHash

    §

    impl Serialize for CompactTarget

    §

    impl Serialize for CompressedPublicKey

    §

    impl Serialize for FeeRate

    §

    impl Serialize for FilterHash

    §

    impl Serialize for FilterHeader

    §

    impl Serialize for LegacySighash

    §

    impl Serialize for Opcode

    §

    impl Serialize for OutPoint

    §

    impl Serialize for PrivateKey

    §

    impl Serialize for Psbt

    §

    impl Serialize for PubkeyHash

    §

    impl Serialize for bdk_chain::bitcoin::PublicKey

    §

    impl Serialize for Script

    §

    impl Serialize for ScriptBuf

    §

    impl Serialize for ScriptHash

    §

    impl Serialize for SegwitV0Sighash

    §

    impl Serialize for Sequence

    §

    impl Serialize for TapLeafHash

    §

    impl Serialize for TapNodeHash

    §

    impl Serialize for TapSighash

    §

    impl Serialize for TapTweakHash

    §

    impl Serialize for Target

    §

    impl Serialize for Transaction

    §

    impl Serialize for TxIn

    §

    impl Serialize for TxMerkleNode

    §

    impl Serialize for TxOut

    §

    impl Serialize for Txid

    §

    impl Serialize for WPubkeyHash

    §

    impl Serialize for WScriptHash

    §

    impl Serialize for Weight

    §

    impl Serialize for Witness

    §

    impl Serialize for WitnessCommitment

    §

    impl Serialize for WitnessMerkleNode

    §

    impl Serialize for Work

    §

    impl Serialize for Wtxid

    §

    impl Serialize for XKeyIdentifier

    §

    impl Serialize for XOnlyPublicKey

    §

    impl Serialize for ControlBlock

    §

    impl Serialize for NodeInfo

    §

    impl Serialize for bdk_chain::bitcoin::taproot::Signature

    §

    impl Serialize for TapTree

    §

    impl Serialize for TaprootMerkleBranch

    §

    impl Serialize for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl Serialize for Midstate

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<A> Serialize for bdk_chain::tx_graph::ChangeSet<A>
    where A: Ord + Serialize,

    source§

    impl<A, IA> Serialize for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>
    where A: Ord + Serialize, IA: Serialize,

    §

    impl<N> Serialize for Address<N>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Deserialize.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Deserialize.html index 71484e7e6c..2bf13e567a 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Deserialize.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Deserialize.html @@ -730,11 +730,11 @@

    §Lifetime

    D: Deserializer<'de>,

    Implementors§

    §

    impl<'de> Deserialize<'de> for &'de Script

    Can only deserialize borrowed bytes.

    source§

    impl<'de> Deserialize<'de> for ConfirmationTime

    §

    impl<'de> Deserialize<'de> for ChildNumber

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::LockTime

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::LockTime

    §

    impl<'de> Deserialize<'de> for EcdsaSighashType

    §

    impl<'de> Deserialize<'de> for Network

    §

    impl<'de> Deserialize<'de> for TapSighashType

    §

    impl<'de> Deserialize<'de> for Parity

    The parity is deserialized as u8 - 0 for even, 1 for odd.

    §

    impl<'de> Deserialize<'de> for LeafVersion

    Deserializes LeafVersion as a u8 using consensus encoding.

    -
    §

    impl<'de> Deserialize<'de> for TapLeaf

    source§

    impl<'de> Deserialize<'de> for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl<'de> Deserialize<'de> for bdk_chain::local_chain::ChangeSet

    source§

    impl<'de> Deserialize<'de> for Balance

    source§

    impl<'de> Deserialize<'de> for BlockId

    source§

    impl<'de> Deserialize<'de> for ConfirmationBlockTime

    source§

    impl<'de> Deserialize<'de> for DescriptorId

    source§

    impl<'de> Deserialize<'de> for String

    §

    impl<'de> Deserialize<'de> for ChainCode

    §

    impl<'de> Deserialize<'de> for DerivationPath

    §

    impl<'de> Deserialize<'de> for Fingerprint

    §

    impl<'de> Deserialize<'de> for Xpriv

    §

    impl<'de> Deserialize<'de> for Xpub

    §

    impl<'de> Deserialize<'de> for ShortId

    §

    impl<'de> Deserialize<'de> for Header

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl<'de> Deserialize<'de> for ChainHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for Keypair

    §

    impl<'de> Deserialize<'de> for TweakedKeypair

    §

    impl<'de> Deserialize<'de> for TweakedPublicKey

    §

    impl<'de> Deserialize<'de> for Key

    §

    impl<'de> Deserialize<'de> for Pair

    §

    impl<'de> Deserialize<'de> for Input

    §

    impl<'de> Deserialize<'de> for Output

    §

    impl<'de> Deserialize<'de> for PsbtSighashType

    §

    impl<'de> Deserialize<'de> for SharedSecret

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl<'de> Deserialize<'de> for SecretKey

    §

    impl<'de> Deserialize<'de> for Address<NetworkUnchecked>

    §

    impl<'de> Deserialize<'de> for Amount

    §

    impl<'de> Deserialize<'de> for Block

    §

    impl<'de> Deserialize<'de> for BlockHash

    §

    impl<'de> Deserialize<'de> for CompactTarget

    §

    impl<'de> Deserialize<'de> for CompressedPublicKey

    §

    impl<'de> Deserialize<'de> for FeeRate

    §

    impl<'de> Deserialize<'de> for FilterHash

    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

    impl<'de> Deserialize<'de> for LegacySighash

    §

    impl<'de> Deserialize<'de> for OutPoint

    §

    impl<'de> Deserialize<'de> for PrivateKey

    §

    impl<'de> Deserialize<'de> for Psbt

    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::PublicKey

    §

    impl<'de> Deserialize<'de> for ScriptBuf

    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    impl<'de> Deserialize<'de> for Sequence

    §

    impl<'de> Deserialize<'de> for TapLeafHash

    §

    impl<'de> Deserialize<'de> for TapNodeHash

    §

    impl<'de> Deserialize<'de> for TapSighash

    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    impl<'de> Deserialize<'de> for Target

    §

    impl<'de> Deserialize<'de> for Transaction

    §

    impl<'de> Deserialize<'de> for TxIn

    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

    impl<'de> Deserialize<'de> for TxOut

    §

    impl<'de> Deserialize<'de> for Txid

    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    impl<'de> Deserialize<'de> for Weight

    §

    impl<'de> Deserialize<'de> for Witness

    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

    impl<'de> Deserialize<'de> for Work

    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    impl<'de> Deserialize<'de> for ControlBlock

    §

    impl<'de> Deserialize<'de> for NodeInfo

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::taproot::Signature

    §

    impl<'de> Deserialize<'de> for TapTree

    §

    impl<'de> Deserialize<'de> for TaprootMerkleBranch

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl<'de> Deserialize<'de> for Midstate

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<'de> Deserialize<'de> for IgnoredAny

    source§

    impl<'de, A> Deserialize<'de> for bdk_chain::tx_graph::ChangeSet<A>
    where +
    §

    impl<'de> Deserialize<'de> for TapLeaf

    source§

    impl<'de> Deserialize<'de> for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl<'de> Deserialize<'de> for bdk_chain::local_chain::ChangeSet

    source§

    impl<'de> Deserialize<'de> for Balance

    §

    impl<'de> Deserialize<'de> for BlockId

    §

    impl<'de> Deserialize<'de> for ConfirmationBlockTime

    source§

    impl<'de> Deserialize<'de> for DescriptorId

    source§

    impl<'de> Deserialize<'de> for String

    §

    impl<'de> Deserialize<'de> for ChainCode

    §

    impl<'de> Deserialize<'de> for DerivationPath

    §

    impl<'de> Deserialize<'de> for Fingerprint

    §

    impl<'de> Deserialize<'de> for Xpriv

    §

    impl<'de> Deserialize<'de> for Xpub

    §

    impl<'de> Deserialize<'de> for ShortId

    §

    impl<'de> Deserialize<'de> for Header

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl<'de> Deserialize<'de> for ChainHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for Keypair

    §

    impl<'de> Deserialize<'de> for TweakedKeypair

    §

    impl<'de> Deserialize<'de> for TweakedPublicKey

    §

    impl<'de> Deserialize<'de> for Key

    §

    impl<'de> Deserialize<'de> for Pair

    §

    impl<'de> Deserialize<'de> for Input

    §

    impl<'de> Deserialize<'de> for Output

    §

    impl<'de> Deserialize<'de> for PsbtSighashType

    §

    impl<'de> Deserialize<'de> for SharedSecret

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl<'de> Deserialize<'de> for SecretKey

    §

    impl<'de> Deserialize<'de> for Address<NetworkUnchecked>

    §

    impl<'de> Deserialize<'de> for Amount

    §

    impl<'de> Deserialize<'de> for Block

    §

    impl<'de> Deserialize<'de> for BlockHash

    §

    impl<'de> Deserialize<'de> for CompactTarget

    §

    impl<'de> Deserialize<'de> for CompressedPublicKey

    §

    impl<'de> Deserialize<'de> for FeeRate

    §

    impl<'de> Deserialize<'de> for FilterHash

    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

    impl<'de> Deserialize<'de> for LegacySighash

    §

    impl<'de> Deserialize<'de> for OutPoint

    §

    impl<'de> Deserialize<'de> for PrivateKey

    §

    impl<'de> Deserialize<'de> for Psbt

    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::PublicKey

    §

    impl<'de> Deserialize<'de> for ScriptBuf

    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    impl<'de> Deserialize<'de> for Sequence

    §

    impl<'de> Deserialize<'de> for TapLeafHash

    §

    impl<'de> Deserialize<'de> for TapNodeHash

    §

    impl<'de> Deserialize<'de> for TapSighash

    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    impl<'de> Deserialize<'de> for Target

    §

    impl<'de> Deserialize<'de> for Transaction

    §

    impl<'de> Deserialize<'de> for TxIn

    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

    impl<'de> Deserialize<'de> for TxOut

    §

    impl<'de> Deserialize<'de> for Txid

    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    impl<'de> Deserialize<'de> for Weight

    §

    impl<'de> Deserialize<'de> for Witness

    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

    impl<'de> Deserialize<'de> for Work

    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    impl<'de> Deserialize<'de> for ControlBlock

    §

    impl<'de> Deserialize<'de> for NodeInfo

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::taproot::Signature

    §

    impl<'de> Deserialize<'de> for TapTree

    §

    impl<'de> Deserialize<'de> for TaprootMerkleBranch

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl<'de> Deserialize<'de> for Midstate

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl<'de> Deserialize<'de> for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<'de> Deserialize<'de> for IgnoredAny

    source§

    impl<'de, A> Deserialize<'de> for bdk_chain::tx_graph::ChangeSet<A>
    where A: Ord + Deserialize<'de>,

    source§

    impl<'de, A, IA> Deserialize<'de> for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>
    where A: Ord + Deserialize<'de>, IA: Deserialize<'de>,

    §

    impl<'de, Subtype> Deserialize<'de> for ProprietaryKey<Subtype>
    where Subtype: Copy + From<u8> + Into<u8> + Deserialize<'de>,

    source§

    impl<'de, T> Deserialize<'de> for Vec<T>
    where T: Deserialize<'de>,

    §

    impl<'de, T> Deserialize<'de> for Hmac<T>
    where T: Hash + Deserialize<'de>,

    §

    impl<'de, T> Deserialize<'de> for bdk_chain::bitcoin::hashes::sha256t::Hash<T>
    where - T: Tag,

    \ No newline at end of file + T: Tag, \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Serialize.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Serialize.html index cef0e6d785..2b01a1fa81 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Serialize.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/serde/trait.Serialize.html @@ -854,7 +854,7 @@ ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where S: Serializer,

    Implementors§

    source§

    impl Serialize for ConfirmationTime

    §

    impl Serialize for ChildNumber

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::LockTime

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::LockTime

    §

    impl Serialize for EcdsaSighashType

    §

    impl Serialize for Network

    §

    impl Serialize for TapSighashType

    §

    impl Serialize for Parity

    The parity is serialized as u8 - 0 for even, 1 for odd.

    §

    impl Serialize for LeafVersion

    Serializes LeafVersion as a u8 using consensus encoding.

    -
    §

    impl Serialize for TapLeaf

    source§

    impl Serialize for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl Serialize for bdk_chain::local_chain::ChangeSet

    source§

    impl Serialize for Balance

    source§

    impl Serialize for BlockId

    source§

    impl Serialize for ConfirmationBlockTime

    source§

    impl Serialize for DescriptorId

    source§

    impl Serialize for String

    §

    impl Serialize for ChainCode

    §

    impl Serialize for DerivationPath

    §

    impl Serialize for Fingerprint

    §

    impl Serialize for Xpriv

    §

    impl Serialize for Xpub

    §

    impl Serialize for ShortId

    §

    impl Serialize for Header

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl Serialize for ChainHash

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl Serialize for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl Serialize for Keypair

    §

    impl Serialize for TweakedKeypair

    §

    impl Serialize for TweakedPublicKey

    §

    impl Serialize for Key

    §

    impl Serialize for Pair

    §

    impl Serialize for Input

    §

    impl Serialize for Output

    §

    impl Serialize for PsbtSighashType

    §

    impl Serialize for SharedSecret

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl Serialize for SecretKey

    §

    impl Serialize for Amount

    §

    impl Serialize for Block

    §

    impl Serialize for BlockHash

    §

    impl Serialize for CompactTarget

    §

    impl Serialize for CompressedPublicKey

    §

    impl Serialize for FeeRate

    §

    impl Serialize for FilterHash

    §

    impl Serialize for FilterHeader

    §

    impl Serialize for LegacySighash

    §

    impl Serialize for Opcode

    §

    impl Serialize for OutPoint

    §

    impl Serialize for PrivateKey

    §

    impl Serialize for Psbt

    §

    impl Serialize for PubkeyHash

    §

    impl Serialize for bdk_chain::bitcoin::PublicKey

    §

    impl Serialize for Script

    §

    impl Serialize for ScriptBuf

    §

    impl Serialize for ScriptHash

    §

    impl Serialize for SegwitV0Sighash

    §

    impl Serialize for Sequence

    §

    impl Serialize for TapLeafHash

    §

    impl Serialize for TapNodeHash

    §

    impl Serialize for TapSighash

    §

    impl Serialize for TapTweakHash

    §

    impl Serialize for Target

    §

    impl Serialize for Transaction

    §

    impl Serialize for TxIn

    §

    impl Serialize for TxMerkleNode

    §

    impl Serialize for TxOut

    §

    impl Serialize for Txid

    §

    impl Serialize for WPubkeyHash

    §

    impl Serialize for WScriptHash

    §

    impl Serialize for Weight

    §

    impl Serialize for Witness

    §

    impl Serialize for WitnessCommitment

    §

    impl Serialize for WitnessMerkleNode

    §

    impl Serialize for Work

    §

    impl Serialize for Wtxid

    §

    impl Serialize for XKeyIdentifier

    §

    impl Serialize for XOnlyPublicKey

    §

    impl Serialize for ControlBlock

    §

    impl Serialize for NodeInfo

    §

    impl Serialize for bdk_chain::bitcoin::taproot::Signature

    §

    impl Serialize for TapTree

    §

    impl Serialize for TaprootMerkleBranch

    §

    impl Serialize for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl Serialize for Midstate

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<A> Serialize for bdk_chain::tx_graph::ChangeSet<A>
    where +
    §

    impl Serialize for TapLeaf

    source§

    impl Serialize for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl Serialize for bdk_chain::local_chain::ChangeSet

    source§

    impl Serialize for Balance

    §

    impl Serialize for BlockId

    §

    impl Serialize for ConfirmationBlockTime

    source§

    impl Serialize for DescriptorId

    source§

    impl Serialize for String

    §

    impl Serialize for ChainCode

    §

    impl Serialize for DerivationPath

    §

    impl Serialize for Fingerprint

    §

    impl Serialize for Xpriv

    §

    impl Serialize for Xpub

    §

    impl Serialize for ShortId

    §

    impl Serialize for Header

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::block::Version

    §

    impl Serialize for ChainHash

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::absolute::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Height

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::locktime::relative::Time

    §

    impl Serialize for bdk_chain::bitcoin::blockdata::transaction::Version

    §

    impl Serialize for bdk_chain::bitcoin::ecdsa::Signature

    §

    impl Serialize for Keypair

    §

    impl Serialize for TweakedKeypair

    §

    impl Serialize for TweakedPublicKey

    §

    impl Serialize for Key

    §

    impl Serialize for Pair

    §

    impl Serialize for Input

    §

    impl Serialize for Output

    §

    impl Serialize for PsbtSighashType

    §

    impl Serialize for SharedSecret

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::ecdsa::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::schnorr::Signature

    §

    impl Serialize for bdk_chain::bitcoin::secp256k1::PublicKey

    §

    impl Serialize for SecretKey

    §

    impl Serialize for Amount

    §

    impl Serialize for Block

    §

    impl Serialize for BlockHash

    §

    impl Serialize for CompactTarget

    §

    impl Serialize for CompressedPublicKey

    §

    impl Serialize for FeeRate

    §

    impl Serialize for FilterHash

    §

    impl Serialize for FilterHeader

    §

    impl Serialize for LegacySighash

    §

    impl Serialize for Opcode

    §

    impl Serialize for OutPoint

    §

    impl Serialize for PrivateKey

    §

    impl Serialize for Psbt

    §

    impl Serialize for PubkeyHash

    §

    impl Serialize for bdk_chain::bitcoin::PublicKey

    §

    impl Serialize for Script

    §

    impl Serialize for ScriptBuf

    §

    impl Serialize for ScriptHash

    §

    impl Serialize for SegwitV0Sighash

    §

    impl Serialize for Sequence

    §

    impl Serialize for TapLeafHash

    §

    impl Serialize for TapNodeHash

    §

    impl Serialize for TapSighash

    §

    impl Serialize for TapTweakHash

    §

    impl Serialize for Target

    §

    impl Serialize for Transaction

    §

    impl Serialize for TxIn

    §

    impl Serialize for TxMerkleNode

    §

    impl Serialize for TxOut

    §

    impl Serialize for Txid

    §

    impl Serialize for WPubkeyHash

    §

    impl Serialize for WScriptHash

    §

    impl Serialize for Weight

    §

    impl Serialize for Witness

    §

    impl Serialize for WitnessCommitment

    §

    impl Serialize for WitnessMerkleNode

    §

    impl Serialize for Work

    §

    impl Serialize for Wtxid

    §

    impl Serialize for XKeyIdentifier

    §

    impl Serialize for XOnlyPublicKey

    §

    impl Serialize for ControlBlock

    §

    impl Serialize for NodeInfo

    §

    impl Serialize for bdk_chain::bitcoin::taproot::Signature

    §

    impl Serialize for TapTree

    §

    impl Serialize for TaprootMerkleBranch

    §

    impl Serialize for bdk_chain::bitcoin::hashes::hash160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::ripemd160::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha1::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256::Hash

    §

    impl Serialize for Midstate

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha256d::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha384::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::sha512_256::Hash

    §

    impl Serialize for bdk_chain::bitcoin::hashes::siphash24::Hash

    source§

    impl<A> Serialize for bdk_chain::tx_graph::ChangeSet<A>
    where A: Ord + Serialize,

    source§

    impl<A, IA> Serialize for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>
    where A: Ord + Serialize, IA: Serialize,

    §

    impl<N> Serialize for Address<N>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha1/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha1/struct.Hash.html index b4f860c802..ebd4f3decd 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha1/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha1/struct.Hash.html @@ -4,16 +4,16 @@

    pub fn from_bytes_mut(bytes: &mut [u8; 20]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for Hash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 20]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256/struct.Hash.html index 08eccf06f1..8b1e0bf53d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256/struct.Hash.html @@ -6,20 +6,20 @@

    §

    impl Hash

    pub fn hash_again(&self) -> Hash

    Iterate the sha256 algorithm to turn a sha256 hash into a sha256d hash

    pub const fn const_hash(bytes: &[u8]) -> Hash

    Computes hash from bytes in const context.

    Warning: this function is inefficient. It should be only used in const context.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for Hash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Hash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<Hash, Error>
    where +

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for Hash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Hash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<Hash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Hash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    source§

    impl From<DescriptorId> for Hash

    source§

    fn from(hashtype: DescriptorId) -> Hash

    Converts to this type from the input type.
    source§

    impl From<Hash> for DescriptorId

    source§

    fn from(inner: Hash) -> DescriptorId

    Converts to this type from the input type.
    §

    impl From<Hash> for WScriptHash

    §

    fn from(inner: Hash) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for Hash

    §

    fn from(hashtype: WScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    source§

    impl From<DescriptorId> for Hash

    source§

    fn from(hashtype: DescriptorId) -> Hash

    Converts to this type from the input type.
    source§

    impl From<Hash> for DescriptorId

    source§

    fn from(inner: Hash) -> DescriptorId

    Converts to this type from the input type.
    §

    impl From<Hash> for WScriptHash

    §

    fn from(inner: Hash) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for Hash

    §

    fn from(hashtype: WScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 32]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl IntoAssets for Hash

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256d/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256d/struct.Hash.html index 4eeddde8c6..1fd0f201d1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256d/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256d/struct.Hash.html @@ -3,20 +3,20 @@ a shared reference to this Hash type.

    pub fn from_bytes_mut(bytes: &mut [u8; 32]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for Hash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Hash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<Hash, Error>
    where +

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for Hash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Hash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<Hash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Hash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl From<Hash> for Hash

    §

    fn from(inner: Hash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for Hash

    §

    fn from(hashtype: Hash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for LegacySighash

    §

    fn from(inner: Hash) -> LegacySighash

    Converts to this type from the input type.
    §

    impl From<Hash> for SegwitV0Sighash

    §

    fn from(inner: Hash) -> SegwitV0Sighash

    Converts to this type from the input type.
    §

    impl From<Hash> for TxMerkleNode

    §

    fn from(inner: Hash) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for WitnessCommitment

    §

    fn from(inner: Hash) -> WitnessCommitment

    Converts to this type from the input type.
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Hash

    §

    fn from(hashtype: LegacySighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Hash

    §

    fn from(hashtype: SegwitV0Sighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<TxMerkleNode> for Hash

    §

    fn from(hashtype: TxMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<WitnessCommitment> for Hash

    §

    fn from(hashtype: WitnessCommitment) -> Hash

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl From<Hash> for Hash

    §

    fn from(inner: Hash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for Hash

    §

    fn from(hashtype: Hash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for LegacySighash

    §

    fn from(inner: Hash) -> LegacySighash

    Converts to this type from the input type.
    §

    impl From<Hash> for SegwitV0Sighash

    §

    fn from(inner: Hash) -> SegwitV0Sighash

    Converts to this type from the input type.
    §

    impl From<Hash> for TxMerkleNode

    §

    fn from(inner: Hash) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for WitnessCommitment

    §

    fn from(inner: Hash) -> WitnessCommitment

    Converts to this type from the input type.
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Hash

    §

    fn from(hashtype: LegacySighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Hash

    §

    fn from(hashtype: SegwitV0Sighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<TxMerkleNode> for Hash

    §

    fn from(hashtype: TxMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<WitnessCommitment> for Hash

    §

    fn from(hashtype: WitnessCommitment) -> Hash

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 32]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256t/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256t/struct.Hash.html index d6c893f500..a70963e0c2 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256t/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha256t/struct.Hash.html @@ -7,27 +7,27 @@

    pub fn from_bytes_mut(bytes: &mut [u8; 32]) -> &mut Hash<T>

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    Trait Implementations§

    §

    impl<T> AsRef<[u8]> for Hash<T>
    where - T: Tag,

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl<T> AsRef<[u8; 32]> for Hash<T>
    where - T: Tag,

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl<T> Borrow<[u8]> for Hash<T>
    where + T: Tag,

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl<T> AsRef<[u8; 32]> for Hash<T>
    where + T: Tag,

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl<T> Borrow<[u8]> for Hash<T>
    where T: Tag,

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl<T> Clone for Hash<T>
    where T: Tag,

    §

    fn clone(&self) -> Hash<T>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<T> Debug for Hash<T>
    where T: Tag,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> Default for Hash<T>
    where T: Tag,

    §

    fn default() -> Hash<T>

    Returns the “default value” for a type. Read more
    §

    impl<'de, T> Deserialize<'de> for Hash<T>
    where T: Tag,

    §

    fn deserialize<D>(d: D) -> Result<Hash<T>, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<T> Display for Hash<T>
    where - T: Tag,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash<TapBranchTag>> for TapNodeHash

    §

    fn from(inner: Hash<TapBranchTag>) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapLeafTag>> for TapLeafHash

    §

    fn from(inner: Hash<TapLeafTag>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapSighashTag>> for TapSighash

    §

    fn from(inner: Hash<TapSighashTag>) -> TapSighash

    Converts to this type from the input type.
    §

    impl From<Hash<TapTweakTag>> for TapTweakHash

    §

    fn from(inner: Hash<TapTweakTag>) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for Hash<TapLeafTag>

    §

    fn from(hashtype: TapLeafHash) -> Hash<TapLeafTag>

    Converts to this type from the input type.
    §

    impl From<TapNodeHash> for Hash<TapBranchTag>

    §

    fn from(hashtype: TapNodeHash) -> Hash<TapBranchTag>

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Hash<TapSighashTag>

    §

    fn from(hashtype: TapSighash) -> Hash<TapSighashTag>

    Converts to this type from the input type.
    §

    impl From<TapTweakHash> for Hash<TapTweakTag>

    §

    fn from(hashtype: TapTweakHash) -> Hash<TapTweakTag>

    Converts to this type from the input type.
    §

    impl<T> FromStr for Hash<T>
    where - T: Tag,

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash<T>, <Hash<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hash<T>
    where + T: Tag,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash<TapBranchTag>> for TapNodeHash

    §

    fn from(inner: Hash<TapBranchTag>) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapLeafTag>> for TapLeafHash

    §

    fn from(inner: Hash<TapLeafTag>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapSighashTag>> for TapSighash

    §

    fn from(inner: Hash<TapSighashTag>) -> TapSighash

    Converts to this type from the input type.
    §

    impl From<Hash<TapTweakTag>> for TapTweakHash

    §

    fn from(inner: Hash<TapTweakTag>) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for Hash<TapLeafTag>

    §

    fn from(hashtype: TapLeafHash) -> Hash<TapLeafTag>

    Converts to this type from the input type.
    §

    impl From<TapNodeHash> for Hash<TapBranchTag>

    §

    fn from(hashtype: TapNodeHash) -> Hash<TapBranchTag>

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Hash<TapSighashTag>

    §

    fn from(hashtype: TapSighash) -> Hash<TapSighashTag>

    Converts to this type from the input type.
    §

    impl From<TapTweakHash> for Hash<TapTweakTag>

    §

    fn from(hashtype: TapTweakHash) -> Hash<TapTweakTag>

    Converts to this type from the input type.
    §

    impl<T> FromStr for Hash<T>
    where + T: Tag,

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash<T>, <Hash<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hash<T>
    where + T: Tag,

    §

    fn hash<H>(&self, h: &mut H)
    where + H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Hash for Hash<T>
    where T: Tag,

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 32]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash<T> as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash<T>

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash<T> as Hash>::Bytes) -> Hash<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash<T>

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash<T> as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash<T>

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash<T> as Hash>::Bytes) -> Hash<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash<T>

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<T> Hash for Hash<T>
    where - T: Tag,

    §

    fn hash<H>(&self, h: &mut H)
    where - H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I, T> Index<I> for Hash<T>
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I, T> Index<I> for Hash<T>
    where I: SliceIndex<[u8]>, T: Tag,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash<T> as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hash<T>
    where T: Tag,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> Ord for Hash<T>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha384/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha384/struct.Hash.html index 0c0d518242..390b4b0b61 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha384/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha384/struct.Hash.html @@ -3,17 +3,17 @@ a shared reference to this Hash type.

    pub fn from_bytes_mut(bytes: &mut [u8; 48]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 48]> for Hash

    §

    fn as_ref(&self) -> &[u8; 48]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 48]> for Hash

    §

    fn as_ref(&self) -> &[u8; 48]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 48]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 48usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512/struct.Hash.html index 033e846c5c..bba66c458f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512/struct.Hash.html @@ -4,16 +4,16 @@

    pub fn from_bytes_mut(bytes: &mut [u8; 64]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 64]> for Hash

    §

    fn as_ref(&self) -> &[u8; 64]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 64]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 64usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512_256/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512_256/struct.Hash.html index e3e51bc20e..3718a34519 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512_256/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/sha512_256/struct.Hash.html @@ -5,16 +5,16 @@

    pub fn from_bytes_mut(bytes: &mut [u8; 32]) -> &mut Hash

    Zero cost conversion between a fixed length byte array exclusive reference and an exclusive reference to this Hash type.

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for Hash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 32]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/siphash24/struct.Hash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/siphash24/struct.Hash.html index 8ae1b6e485..b1bea4ffe2 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/siphash24/struct.Hash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/siphash24/struct.Hash.html @@ -8,17 +8,17 @@

    pub fn from_engine_to_u64(e: HashEngine) -> u64

    Produces a hash as u64 from the current state of a given engine.

    pub fn as_u64(&self) -> u64

    Returns the (little endian) 64-bit integer representation of the hash value.

    pub fn from_u64(hash: u64) -> Hash

    Creates a hash from its (little endian) 64-bit integer representation.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 8]> for Hash

    §

    fn as_ref(&self) -> &[u8; 8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for Hash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 8]> for Hash

    §

    fn as_ref(&self) -> &[u8; 8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Hash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for Hash

    §

    fn clone(&self) -> Hash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Hash

    §

    fn deserialize<D>(d: D) -> Result<Hash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl FromStr for Hash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hash, <Hash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Hash for Hash

    §

    type Engine = HashEngine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = [u8; 8]

    The byte array that represents the hash internally.
    §

    const LEN: usize = 8usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +true for Sha256dHash, so here we are.

    §

    fn engine() -> <Hash as Hash>::Engine

    Constructs a new engine.
    §

    fn from_engine(e: HashEngine) -> Hash

    Produces a hash from the current state of a given engine.
    §

    fn from_slice(sl: &[u8]) -> Result<Hash, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hash as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hash as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <Hash as Hash>::Bytes) -> Hash

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hash

    Returns an all zero hash. Read more
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, - I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl Hash for Hash

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<I> Index<I> for Hash
    where + I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    impl<I> Index<I> for Hash
    where I: SliceIndex<[u8]>,

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<Hash as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Hash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Hash

    §

    fn cmp(&self, other: &Hash) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/struct.Hmac.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/struct.Hmac.html index 857c4d8a32..9494dd6177 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/struct.Hmac.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/hashes/struct.Hmac.html @@ -8,23 +8,23 @@ T: Hash + Deserialize<'de>,

    §

    fn deserialize<D>(d: D) -> Result<Hmac<T>, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<T> Display for Hmac<T>
    where T: Hash,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> FromStr for Hmac<T>
    where - T: Hash + FromStr,

    §

    type Err = <T as FromStr>::Err

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hmac<T>, <Hmac<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hmac<T>
    where + T: Hash + FromStr,

    §

    type Err = <T as FromStr>::Err

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hmac<T>, <Hmac<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hmac<T>
    where + T: Hash + Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Hash for Hmac<T>
    where T: Hash,

    §

    type Engine = HmacEngine<T>

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under -any conditions.
    §

    type Bytes = <T as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    fn from_engine(e: HmacEngine<T>) -> Hmac<T>

    Produces a hash from the current state of a given engine.
    §

    const LEN: usize = T::LEN

    Length of the hash, in bytes.
    §

    fn from_slice(sl: &[u8]) -> Result<Hmac<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hmac<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hmac<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <T as Hash>::Bytes) -> Hmac<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hmac<T>

    Returns an all zero hash. Read more
    §

    fn engine() -> Self::Engine

    Constructs a new engine.
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +any conditions.

    §

    type Bytes = <T as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    fn from_engine(e: HmacEngine<T>) -> Hmac<T>

    Produces a hash from the current state of a given engine.
    §

    const LEN: usize = T::LEN

    Length of the hash, in bytes.
    §

    fn from_slice(sl: &[u8]) -> Result<Hmac<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hmac<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hmac<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <T as Hash>::Bytes) -> Hmac<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hmac<T>

    Returns an all zero hash. Read more
    §

    fn engine() -> Self::Engine

    Constructs a new engine.
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    impl<T> Hash for Hmac<T>
    where - T: Hash + Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Index<Range<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFrom<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFrom<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFull> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeTo<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeTo<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<usize> for Hmac<T>
    where - T: Hash,

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &u8

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hmac<T>
    where +true for Sha256dHash, so here we are.

    §

    impl<T> Index<Range<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFrom<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFrom<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFull> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeTo<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeTo<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<usize> for Hmac<T>
    where + T: Hash,

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &u8

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hmac<T>
    where T: Hash,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> Ord for Hmac<T>
    where T: Ord + Hash,

    §

    fn cmp(&self, other: &Hmac<T>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/io/struct.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/io/struct.Error.html index 9fc41a8f06..c19fc87d93 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/io/struct.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/io/struct.Error.html @@ -3,7 +3,7 @@ E: Into<Box<dyn Error + Sync + Send>>,

    Creates a new I/O error.

    pub fn kind(&self) -> ErrorKind

    Returns the error kind for this error.

    pub fn get_ref(&self) -> Option<&(dyn Error + Sync + Send + 'static)>

    Returns a reference to this error.

    -

    Trait Implementations§

    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    §

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    §

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(error: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(io: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(o: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(o: Error) -> Error

    Converts to this type from the input type.
    §

    impl<E> From<Error> for SigningDataError<E>

    §

    fn from(value: Error) -> SigningDataError<E>

    Converts to this type from the input type.
    §

    impl From<ErrorKind> for Error

    §

    fn from(kind: ErrorKind) -> Error

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl !RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl !UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    §

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    §

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(io: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(error: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(o: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(o: Error) -> Error

    Converts to this type from the input type.
    §

    impl<E> From<Error> for SigningDataError<E>

    §

    fn from(value: Error) -> SigningDataError<E>

    Converts to this type from the input type.
    §

    impl From<ErrorKind> for Error

    §

    fn from(kind: ErrorKind) -> Error

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl !RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl !UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromSliceError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromSliceError.html index 3d2423d74e..54309bb8ae 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromSliceError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromSliceError.html @@ -6,7 +6,7 @@

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    InvalidKeyPrefix(u8)

    Invalid key prefix error.

    §

    Secp256k1(Error)

    A Secp256k1 error.

    §

    InvalidLength(usize)

    Invalid Length of the slice.

    -

    Trait Implementations§

    §

    impl Clone for FromSliceError

    §

    fn clone(&self) -> FromSliceError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for FromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for FromSliceError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for FromSliceError

    §

    fn from(e: Error) -> FromSliceError

    Converts to this type from the input type.
    §

    impl From<FromSliceError> for ParsePublicKeyError

    §

    fn from(e: FromSliceError) -> ParsePublicKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromSliceError

    §

    fn from(never: Infallible) -> FromSliceError

    Converts to this type from the input type.
    §

    impl PartialEq for FromSliceError

    §

    fn eq(&self, other: &FromSliceError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for FromSliceError

    §

    fn clone(&self) -> FromSliceError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for FromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for FromSliceError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for FromSliceError

    §

    fn from(e: Error) -> FromSliceError

    Converts to this type from the input type.
    §

    impl From<FromSliceError> for ParsePublicKeyError

    §

    fn from(e: FromSliceError) -> ParsePublicKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromSliceError

    §

    fn from(never: Infallible) -> FromSliceError

    Converts to this type from the input type.
    §

    impl PartialEq for FromSliceError

    §

    fn eq(&self, other: &FromSliceError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for FromSliceError

    §

    impl StructuralPartialEq for FromSliceError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromWifError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromWifError.html index ef86acb170..2298152c47 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromWifError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.FromWifError.html @@ -8,7 +8,7 @@
    §

    InvalidBase58PayloadLength(InvalidBase58PayloadLengthError)

    Base58 decoded data was an invalid length.

    §

    InvalidAddressVersion(InvalidAddressVersionError)

    Base58 decoded data contained an invalid address version byte.

    §

    Secp256k1(Error)

    A secp256k1 error.

    -

    Trait Implementations§

    §

    impl Clone for FromWifError

    §

    fn clone(&self) -> FromWifError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromWifError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for FromWifError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for FromWifError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromWifError

    §

    fn from(never: Infallible) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<InvalidAddressVersionError> for FromWifError

    §

    fn from(e: InvalidAddressVersionError) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for FromWifError

    §

    fn from(e: InvalidBase58PayloadLengthError) -> FromWifError

    Converts to this type from the input type.
    §

    impl PartialEq for FromWifError

    §

    fn eq(&self, other: &FromWifError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for FromWifError

    §

    fn clone(&self) -> FromWifError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FromWifError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for FromWifError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for FromWifError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Infallible> for FromWifError

    §

    fn from(never: Infallible) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<InvalidAddressVersionError> for FromWifError

    §

    fn from(e: InvalidAddressVersionError) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<InvalidBase58PayloadLengthError> for FromWifError

    §

    fn from(e: InvalidBase58PayloadLengthError) -> FromWifError

    Converts to this type from the input type.
    §

    impl PartialEq for FromWifError

    §

    fn eq(&self, other: &FromWifError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for FromWifError

    §

    impl StructuralPartialEq for FromWifError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParseCompressedPublicKeyError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParseCompressedPublicKeyError.html index 31c911f08b..9afac91e2f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParseCompressedPublicKeyError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParseCompressedPublicKeyError.html @@ -4,7 +4,7 @@ }
    Expand description

    Error returned when parsing a CompressedPublicKey from a string.

    Variants§

    §

    Secp256k1(Error)

    Secp256k1 Error.

    §

    Hex(HexToArrayError)

    hex to array conversion error.

    -

    Trait Implementations§

    §

    impl Clone for ParseCompressedPublicKeyError

    §

    fn clone(&self) -> ParseCompressedPublicKeyError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseCompressedPublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseCompressedPublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseCompressedPublicKeyError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for ParseCompressedPublicKeyError

    §

    fn from(e: Error) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl From<HexToArrayError> for ParseCompressedPublicKeyError

    §

    fn from(e: HexToArrayError) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParseCompressedPublicKeyError

    §

    fn from(never: Infallible) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseCompressedPublicKeyError

    §

    fn eq(&self, other: &ParseCompressedPublicKeyError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for ParseCompressedPublicKeyError

    §

    fn clone(&self) -> ParseCompressedPublicKeyError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseCompressedPublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseCompressedPublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseCompressedPublicKeyError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for ParseCompressedPublicKeyError

    §

    fn from(e: Error) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl From<HexToArrayError> for ParseCompressedPublicKeyError

    §

    fn from(e: HexToArrayError) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParseCompressedPublicKeyError

    §

    fn from(never: Infallible) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseCompressedPublicKeyError

    §

    fn eq(&self, other: &ParseCompressedPublicKeyError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for ParseCompressedPublicKeyError

    §

    impl StructuralPartialEq for ParseCompressedPublicKeyError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParsePublicKeyError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParsePublicKeyError.html index d5328a6049..fcc7aae254 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParsePublicKeyError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/enum.ParsePublicKeyError.html @@ -6,7 +6,7 @@

    Variants§

    §

    Encoding(FromSliceError)

    Error originated while parsing string.

    §

    InvalidChar(u8)

    Hex decoding error.

    §

    InvalidHexLength(usize)

    PublicKey hex should be 66 or 130 digits long.

    -

    Trait Implementations§

    §

    impl Clone for ParsePublicKeyError

    §

    fn clone(&self) -> ParsePublicKeyError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParsePublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParsePublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParsePublicKeyError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<FromSliceError> for ParsePublicKeyError

    §

    fn from(e: FromSliceError) -> ParsePublicKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParsePublicKeyError

    §

    fn from(never: Infallible) -> ParsePublicKeyError

    Converts to this type from the input type.
    §

    impl PartialEq for ParsePublicKeyError

    §

    fn eq(&self, other: &ParsePublicKeyError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for ParsePublicKeyError

    §

    fn clone(&self) -> ParsePublicKeyError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParsePublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParsePublicKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParsePublicKeyError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<FromSliceError> for ParsePublicKeyError

    §

    fn from(e: FromSliceError) -> ParsePublicKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for ParsePublicKeyError

    §

    fn from(never: Infallible) -> ParsePublicKeyError

    Converts to this type from the input type.
    §

    impl PartialEq for ParsePublicKeyError

    §

    fn eq(&self, other: &ParsePublicKeyError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for ParsePublicKeyError

    §

    impl StructuralPartialEq for ParsePublicKeyError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.CompressedPublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.CompressedPublicKey.html index b2ac553abf..f5ddaaea25 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.CompressedPublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.CompressedPublicKey.html @@ -28,7 +28,7 @@

    Trait Implementations§

    §

    impl Clone for CompressedPublicKey

    §

    fn clone(&self) -> CompressedPublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for CompressedPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for CompressedPublicKey

    §

    fn deserialize<D>( d: D ) -> Result<CompressedPublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for CompressedPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for CompressedPublicKey

    §

    type Err = ParseCompressedPublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str( + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for CompressedPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for CompressedPublicKey

    §

    type Err = ParseCompressedPublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<CompressedPublicKey, <CompressedPublicKey as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for CompressedPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.Keypair.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.Keypair.html index 3a3a5f6f07..00f35e4817 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.Keypair.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.Keypair.html @@ -98,7 +98,7 @@
    §Examples
    For more discussion on this, please see the documentation of the zeroize crate.

    Trait Implementations§

    §

    impl CPtr for Keypair

    §

    impl Clone for Keypair

    §

    fn clone(&self) -> Keypair

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Keypair

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Keypair

    §

    fn deserialize<D>(d: D) -> Result<Keypair, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<'a> From<&'a Keypair> for PublicKey

    §

    fn from(pair: &'a Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Keypair> for SecretKey

    §

    fn from(pair: &'a Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for PublicKey

    §

    fn from(pair: Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for SecretKey

    §

    fn from(pair: Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<TweakedKeypair> for Keypair

    §

    fn from(pair: TweakedKeypair) -> Keypair

    Converts to this type from the input type.
    §

    impl FromStr for Keypair

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Keypair, <Keypair as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Keypair

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<'a> From<&'a Keypair> for PublicKey

    §

    fn from(pair: &'a Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Keypair> for SecretKey

    §

    fn from(pair: &'a Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for PublicKey

    §

    fn from(pair: Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for SecretKey

    §

    fn from(pair: Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<TweakedKeypair> for Keypair

    §

    fn from(pair: TweakedKeypair) -> Keypair

    Converts to this type from the input type.
    §

    impl FromStr for Keypair

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Keypair, <Keypair as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Keypair

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Keypair

    §

    fn cmp(&self, other: &Keypair) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PubkeyHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PubkeyHash.html index 53191aa2bb..062811209f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PubkeyHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PubkeyHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl PubkeyHash

    pub fn from_raw_hash(inner: Hash) -> PubkeyHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for PubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for PubkeyHash

    §

    fn clone(&self) -> PubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<PubkeyHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for PubkeyHash

    §

    fn from(inner: Hash) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for Hash

    §

    fn from(hashtype: PubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for PushBytesBuf

    §

    fn from(hash: PubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl FromStr for PubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PubkeyHash, <PubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for PubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for PubkeyHash

    §

    fn clone(&self) -> PubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<PubkeyHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for PubkeyHash

    §

    fn from(inner: Hash) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for Hash

    §

    fn from(hashtype: PubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for PushBytesBuf

    §

    fn from(hash: PubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl FromStr for PubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PubkeyHash, <PubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PublicKey.html index 2ccfebd80a..9a50f2e238 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.PublicKey.html @@ -73,7 +73,7 @@
    Result<(), Error>
    where C: Verification,

    Checks that sig is a valid ECDSA signature for msg using this public key.

    Trait Implementations§

    §

    impl Clone for PublicKey

    §

    fn clone(&self) -> PublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PublicKey

    §

    fn deserialize<D>(d: D) -> Result<PublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for PublicKey

    §

    type Err = ParsePublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PublicKey, ParsePublicKeyError>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for PublicKey

    §

    type Err = ParsePublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PublicKey, ParsePublicKeyError>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl MiniscriptKey for PublicKey

    §

    fn is_uncompressed(&self) -> bool

    Returns the compressed-ness of the underlying secp256k1 key.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.WPubkeyHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.WPubkeyHash.html index edf6b61cc6..425e2317c1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.WPubkeyHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.WPubkeyHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl WPubkeyHash

    pub fn from_raw_hash(inner: Hash) -> WPubkeyHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WPubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WPubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WPubkeyHash

    §

    fn clone(&self) -> WPubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<WPubkeyHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WPubkeyHash

    §

    fn from(inner: Hash) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for Hash

    §

    fn from(hashtype: WPubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for PushBytesBuf

    §

    fn from(hash: WPubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WPubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WPubkeyHash, <WPubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WPubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WPubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WPubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WPubkeyHash

    §

    fn clone(&self) -> WPubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<WPubkeyHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WPubkeyHash

    §

    fn from(inner: Hash) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for Hash

    §

    fn from(hashtype: WPubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for PushBytesBuf

    §

    fn from(hash: WPubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WPubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WPubkeyHash, <WPubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WPubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.XOnlyPublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.XOnlyPublicKey.html index 411bb24480..d384d3acc5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.XOnlyPublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/key/struct.XOnlyPublicKey.html @@ -86,8 +86,8 @@
    §Examples

    Trait Implementations§

    §

    impl CPtr for XOnlyPublicKey

    §

    impl Clone for XOnlyPublicKey

    §

    fn clone(&self) -> XOnlyPublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    fn deserialize<D>( d: D ) -> Result<XOnlyPublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<TweakedPublicKey> for XOnlyPublicKey

    §

    fn from(pair: TweakedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<XOnlyPublicKey> for XOnlyPublicKey

    Creates a new schnorr public key from a FFI x-only public key.

    -
    §

    fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for XOnlyPublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XOnlyPublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XOnlyPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<TweakedPublicKey> for XOnlyPublicKey

    §

    fn from(pair: TweakedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<XOnlyPublicKey> for XOnlyPublicKey

    Creates a new schnorr public key from a FFI x-only public key.

    +
    §

    fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for XOnlyPublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XOnlyPublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XOnlyPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl LowerHex for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl MiniscriptKey for XOnlyPublicKey

    §

    type Sha256 = Hash

    The associated bitcoin::hashes::sha256::Hash for this [MiniscriptKey], used in the diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/network/enum.Network.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/network/enum.Network.html index 44b24c3c8f..860d1b0cbd 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/network/enum.Network.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/network/enum.Network.html @@ -52,7 +52,7 @@
    §Examples

    Trait Implementations§

    §

    impl AsRef<Params> for Network

    §

    fn as_ref(&self) -> &Params

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for Network

    §

    fn clone(&self) -> Network

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Network

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Network

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<Network, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Network

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for KnownHrp

    §

    fn from(n: Network) -> KnownHrp

    Converts to this type from the input type.
    §

    impl From<Network> for Magic

    §

    fn from(network: Network) -> Magic

    Converts to this type from the input type.
    §

    impl From<Network> for NetworkKind

    §

    fn from(n: Network) -> NetworkKind

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.
    §

    impl FromStr for Network

    §

    type Err = ParseNetworkError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Network, <Network as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Network

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Network

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Network> for &'static Params

    §

    fn from(value: &Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<&Network> for Params

    §

    fn from(value: &Network) -> Params

    Converts to this type from the input type.
    §

    impl From<Network> for &'static Params

    §

    fn from(value: Network) -> &'static Params

    Converts to this type from the input type.
    §

    impl From<Network> for KnownHrp

    §

    fn from(n: Network) -> KnownHrp

    Converts to this type from the input type.
    §

    impl From<Network> for Magic

    §

    fn from(network: Network) -> Magic

    Converts to this type from the input type.
    §

    impl From<Network> for NetworkKind

    §

    fn from(n: Network) -> NetworkKind

    Converts to this type from the input type.
    §

    impl From<Network> for Params

    §

    fn from(value: Network) -> Params

    Converts to this type from the input type.
    §

    impl FromStr for Network

    §

    type Err = ParseNetworkError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Network, <Network as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Network

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Network

    §

    fn cmp(&self, other: &Network) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/message/struct.CommandString.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/message/struct.CommandString.html index c7d494bfa6..557a56d99e 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/message/struct.CommandString.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/message/struct.CommandString.html @@ -12,11 +12,11 @@
    §Errors
    R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl Display for CommandString

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for CommandString

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl FromStr for CommandString

    §

    type Err = CommandStringError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<CommandString, <CommandString as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl PartialEq for CommandString

    §

    fn eq(&self, other: &CommandString) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl<'a> TryFrom<&'a str> for CommandString

    §

    type Error = CommandStringError

    The type returned in the event of a conversion error.
    §

    fn try_from( +sufficient, and should not be overridden without very good reason.

    §

    impl<'a> TryFrom<&'a str> for CommandString

    §

    type Error = CommandStringError

    The type returned in the event of a conversion error.
    §

    fn try_from( value: &'a str -) -> Result<CommandString, <CommandString as TryFrom<&'a str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for CommandString

    §

    type Error = CommandStringError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<CommandString, <CommandString as TryFrom<&'a str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for CommandString

    §

    type Error = CommandStringError

    The type returned in the event of a conversion error.
    §

    fn try_from( value: Box<str> -) -> Result<CommandString, <CommandString as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for CommandString

    §

    type Error = CommandStringError

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<CommandString, <CommandString as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for CommandString

    §

    type Error = CommandStringError

    The type returned in the event of a conversion error.
    §

    fn try_from( value: String ) -> Result<CommandString, <CommandString as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Eq for CommandString

    §

    impl StructuralPartialEq for CommandString

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/struct.Magic.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/struct.Magic.html index ffaaf9ccea..bcda3276ce 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/struct.Magic.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/p2p/struct.Magic.html @@ -6,7 +6,7 @@

    pub fn from_bytes(bytes: [u8; 4]) -> Magic

    Create network magic from bytes.

    pub fn to_bytes(self) -> [u8; 4]

    Get network magic bytes.

    pub fn from_params(params: impl AsRef<Params>) -> Magic

    Returns the magic bytes for the network defined by params.

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for Magic

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<[u8; 4]> for Magic

    §

    fn as_mut(&mut self) -> &mut [u8; 4]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for Magic

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 4]> for Magic

    §

    fn as_ref(&self) -> &[u8; 4]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Magic

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Borrow<[u8; 4]> for Magic

    §

    fn borrow(&self) -> &[u8; 4]

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for Magic

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8; 4]> for Magic

    §

    fn borrow_mut(&mut self) -> &mut [u8; 4]

    Mutably borrows from an owned value. Read more
    §

    impl Clone for Magic

    §

    fn clone(&self) -> Magic

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Magic

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Magic

    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Magic, Error>
    where +

    Trait Implementations§

    §

    impl AsMut<[u8]> for Magic

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<[u8; 4]> for Magic

    §

    fn as_mut(&mut self) -> &mut [u8; 4]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for Magic

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 4]> for Magic

    §

    fn as_ref(&self) -> &[u8; 4]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for Magic

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Borrow<[u8; 4]> for Magic

    §

    fn borrow(&self) -> &[u8; 4]

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8]> for Magic

    §

    fn borrow_mut(&mut self) -> &mut [u8]

    Mutably borrows from an owned value. Read more
    §

    impl BorrowMut<[u8; 4]> for Magic

    §

    fn borrow_mut(&mut self) -> &mut [u8; 4]

    Mutably borrows from an owned value. Read more
    §

    impl Clone for Magic

    §

    fn clone(&self) -> Magic

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Magic

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Magic

    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Magic, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl Display for Magic

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Magic

    §

    fn consensus_encode<W>(&self, writer: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Network> for Magic

    §

    fn from(network: Network) -> Magic

    Converts to this type from the input type.
    §

    impl FromStr for Magic

    §

    type Err = ParseMagicError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Magic, <Magic as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Magic

    §

    fn hash<__H>(&self, state: &mut __H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/parse/struct.ParseIntError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/parse/struct.ParseIntError.html index fcd86d8fe5..d468422dea 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/parse/struct.ParseIntError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/parse/struct.ParseIntError.html @@ -6,7 +6,7 @@ in a performance-critical application you may want to box it or throw away the context by converting to core type.

    Implementations§

    §

    impl ParseIntError

    pub fn input(&self) -> &str

    Returns the input that was attempted to be parsed.

    -

    Trait Implementations§

    §

    impl AsRef<ParseIntError> for ParseIntError

    §

    fn as_ref(&self) -> &ParseIntError

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for ParseIntError

    §

    fn clone(&self) -> ParseIntError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseIntError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<ParseIntError> for FromStrError

    §

    fn from(e: ParseIntError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for ParseIntError

    §

    fn from(value: ParseIntError) -> ParseIntError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for PrefixedHexError

    §

    fn from(e: ParseIntError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for UnprefixedHexError

    §

    fn from(e: ParseIntError) -> UnprefixedHexError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseIntError

    §

    fn eq(&self, other: &ParseIntError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl AsRef<ParseIntError> for ParseIntError

    §

    fn as_ref(&self) -> &ParseIntError

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Clone for ParseIntError

    §

    fn clone(&self) -> ParseIntError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for ParseIntError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for ParseIntError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<ParseIntError> for FromStrError

    §

    fn from(e: ParseIntError) -> FromStrError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for ParseIntError

    §

    fn from(value: ParseIntError) -> ParseIntError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for PrefixedHexError

    §

    fn from(e: ParseIntError) -> PrefixedHexError

    Converts to this type from the input type.
    §

    impl From<ParseIntError> for UnprefixedHexError

    §

    fn from(e: ParseIntError) -> UnprefixedHexError

    Converts to this type from the input type.
    §

    impl PartialEq for ParseIntError

    §

    fn eq(&self, other: &ParseIntError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for ParseIntError

    §

    impl StructuralPartialEq for ParseIntError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.Error.html index fc4131af4d..dec6d5a9b1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.Error.html @@ -79,7 +79,7 @@
    §

    Version(&'static str)

    Error related to PSBT version

    §

    PartialDataConsumption

    PSBT data is not consumed entirely

    §

    Io(Error)

    I/O error.

    -

    Trait Implementations§

    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<FromSliceError> for Error

    §

    fn from(e: FromSliceError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl !RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl !UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<FromSliceError> for Error

    §

    fn from(e: FromSliceError) -> Error

    Converts to this type from the input type.
    §

    impl From<Infallible> for Error

    §

    fn from(never: Infallible) -> Error

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl !RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl !UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.GetKeyError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.GetKeyError.html index 07ed76e516..177f5dfcd9 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.GetKeyError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.GetKeyError.html @@ -4,7 +4,7 @@ }
    Expand description

    Errors when getting a key.

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    Bip32(Error)

    A bip32 error.

    §

    NotSupported

    The GetKey operation is not supported for this key request.

    -

    Trait Implementations§

    §

    impl Clone for GetKeyError

    §

    fn clone(&self) -> GetKeyError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for GetKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for GetKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for GetKeyError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for GetKeyError

    §

    fn from(e: Error) -> GetKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for GetKeyError

    §

    fn from(never: Infallible) -> GetKeyError

    Converts to this type from the input type.
    §

    impl PartialEq for GetKeyError

    §

    fn eq(&self, other: &GetKeyError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for GetKeyError

    §

    fn clone(&self) -> GetKeyError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for GetKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for GetKeyError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for GetKeyError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for GetKeyError

    §

    fn from(e: Error) -> GetKeyError

    Converts to this type from the input type.
    §

    impl From<Infallible> for GetKeyError

    §

    fn from(never: Infallible) -> GetKeyError

    Converts to this type from the input type.
    §

    impl PartialEq for GetKeyError

    §

    fn eq(&self, other: &GetKeyError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for GetKeyError

    §

    impl StructuralPartialEq for GetKeyError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.IndexOutOfBoundsError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.IndexOutOfBoundsError.html index 82f2010952..11beab2b14 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.IndexOutOfBoundsError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.IndexOutOfBoundsError.html @@ -14,7 +14,7 @@

    §

    TxInput

    The index is out of bounds for the psbt.unsigned_tx.input vector.

    Fields

    §index: usize

    Attempted index access.

    §length: usize

    Length of the PBST’s unsigned transaction input vector.

    -

    Trait Implementations§

    §

    impl Clone for IndexOutOfBoundsError

    §

    fn clone(&self) -> IndexOutOfBoundsError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for IndexOutOfBoundsError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for SignError

    §

    fn from(e: IndexOutOfBoundsError) -> SignError

    Converts to this type from the input type.
    §

    impl From<Infallible> for IndexOutOfBoundsError

    §

    fn from(never: Infallible) -> IndexOutOfBoundsError

    Converts to this type from the input type.
    §

    impl PartialEq for IndexOutOfBoundsError

    §

    fn eq(&self, other: &IndexOutOfBoundsError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for IndexOutOfBoundsError

    §

    fn clone(&self) -> IndexOutOfBoundsError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for IndexOutOfBoundsError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for IndexOutOfBoundsError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for SignError

    §

    fn from(e: IndexOutOfBoundsError) -> SignError

    Converts to this type from the input type.
    §

    impl From<Infallible> for IndexOutOfBoundsError

    §

    fn from(never: Infallible) -> IndexOutOfBoundsError

    Converts to this type from the input type.
    §

    impl PartialEq for IndexOutOfBoundsError

    §

    fn eq(&self, other: &IndexOutOfBoundsError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for IndexOutOfBoundsError

    §

    impl StructuralPartialEq for IndexOutOfBoundsError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.SignError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.SignError.html index 336ba467fe..a4fa389018 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.SignError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/enum.SignError.html @@ -32,7 +32,7 @@
    §

    KeyNotFound

    Unable to find key.

    §

    WrongSigningAlgorithm

    Attempt to sign an input with the wrong signing algorithm.

    §

    Unsupported

    Signing request currently unsupported.

    -

    Trait Implementations§

    §

    impl Clone for SignError

    §

    fn clone(&self) -> SignError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SignError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for SignError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for SignError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for SignError

    §

    fn from(e: IndexOutOfBoundsError) -> SignError

    Converts to this type from the input type.
    §

    impl From<Infallible> for SignError

    §

    fn from(never: Infallible) -> SignError

    Converts to this type from the input type.
    §

    impl From<P2wpkhError> for SignError

    §

    fn from(e: P2wpkhError) -> SignError

    Converts to this type from the input type.
    §

    impl From<TaprootError> for SignError

    §

    fn from(e: TaprootError) -> SignError

    Converts to this type from the input type.
    §

    impl PartialEq for SignError

    §

    fn eq(&self, other: &SignError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for SignError

    §

    fn clone(&self) -> SignError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SignError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for SignError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for SignError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<IndexOutOfBoundsError> for SignError

    §

    fn from(e: IndexOutOfBoundsError) -> SignError

    Converts to this type from the input type.
    §

    impl From<Infallible> for SignError

    §

    fn from(never: Infallible) -> SignError

    Converts to this type from the input type.
    §

    impl From<P2wpkhError> for SignError

    §

    fn from(e: P2wpkhError) -> SignError

    Converts to this type from the input type.
    §

    impl From<TaprootError> for SignError

    §

    fn from(e: TaprootError) -> SignError

    Converts to this type from the input type.
    §

    impl PartialEq for SignError

    §

    fn eq(&self, other: &SignError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for SignError

    §

    impl StructuralPartialEq for SignError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/struct.PsbtSighashType.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/struct.PsbtSighashType.html index 9db16e5c67..9bf9eb278c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/struct.PsbtSighashType.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/psbt/struct.PsbtSighashType.html @@ -16,7 +16,7 @@

    Trait Implementations§

    §

    impl Clone for PsbtSighashType

    §

    fn clone(&self) -> PsbtSighashType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PsbtSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PsbtSighashType

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<PsbtSighashType, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PsbtSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for PsbtSighashType

    §

    fn from(ecdsa_hash_ty: EcdsaSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl From<TapSighashType> for PsbtSighashType

    §

    fn from(taproot_hash_ty: TapSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl FromStr for PsbtSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str( + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PsbtSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for PsbtSighashType

    §

    fn from(ecdsa_hash_ty: EcdsaSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl From<TapSighashType> for PsbtSighashType

    §

    fn from(taproot_hash_ty: TapSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl FromStr for PsbtSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<PsbtSighashType, <PsbtSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PsbtSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/serialized_signature/struct.SerializedSignature.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/serialized_signature/struct.SerializedSignature.html index e3e606be62..34ea813867 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/serialized_signature/struct.SerializedSignature.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/serialized_signature/struct.SerializedSignature.html @@ -1102,27 +1102,27 @@
    §Examples§Examples
    assert_eq!(["hello", "world"].connect(" "), "hello world");
     assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for SerializedSignature

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SerializedSignature

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SerializedSignature

    §

    fn clone(&self) -> SerializedSignature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for SerializedSignature

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &[u8]

    Dereferences the value.
    §

    impl Display for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Signature> for SerializedSignature

    §

    fn from(value: &'a Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for SerializedSignature

    §

    fn from(value: Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl Hash for SerializedSignature

    §

    fn hash<H>(&self, state: &mut H)
    where +

    Trait Implementations§

    §

    impl AsRef<[u8]> for SerializedSignature

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SerializedSignature

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SerializedSignature

    §

    fn clone(&self) -> SerializedSignature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for SerializedSignature

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &[u8]

    Dereferences the value.
    §

    impl Display for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Signature> for SerializedSignature

    §

    fn from(value: &'a Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for SerializedSignature

    §

    fn from(value: Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl Hash for SerializedSignature

    §

    fn hash<H>(&self, state: &mut H)
    where H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a SerializedSignature

    §

    type IntoIter = Iter<'a, u8>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a u8

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a SerializedSignature as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl IntoIterator for SerializedSignature

    §

    type IntoIter = IntoIter

    Which kind of iterator are we turning this into?
    §

    type Item = u8

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <SerializedSignature as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for SerializedSignature

    §

    fn cmp(&self, other: &SerializedSignature) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<[u8]> for SerializedSignature

    §

    fn eq(&self, other: &[u8]) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<SerializedSignature> for [u8]

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<[u8]> for SerializedSignature

    §

    fn eq(&self, other: &[u8]) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<SerializedSignature> for [u8]

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<[u8]> for SerializedSignature

    §

    fn partial_cmp(&self, other: &[u8]) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<SerializedSignature> for [u8]

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<[u8]> for SerializedSignature

    §

    fn partial_cmp(&self, other: &[u8]) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd for SerializedSignature

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    §

    impl PartialOrd<SerializedSignature> for [u8]

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( +operator. Read more

    §

    impl PartialOrd for SerializedSignature

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( value: &'a SerializedSignature -) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( value: SerializedSignature ) -> Result<Signature, <Signature as TryFrom<SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl Copy for SerializedSignature

    §

    impl Eq for SerializedSignature

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.SerializedSignature.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.SerializedSignature.html index cf981d8387..7e4fd662ba 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.SerializedSignature.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.SerializedSignature.html @@ -1102,27 +1102,27 @@
    §Examples§Examples
    assert_eq!(["hello", "world"].connect(" "), "hello world");
     assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for SerializedSignature

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SerializedSignature

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SerializedSignature

    §

    fn clone(&self) -> SerializedSignature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for SerializedSignature

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &[u8]

    Dereferences the value.
    §

    impl Display for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Signature> for SerializedSignature

    §

    fn from(value: &'a Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for SerializedSignature

    §

    fn from(value: Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl Hash for SerializedSignature

    §

    fn hash<H>(&self, state: &mut H)
    where +

    Trait Implementations§

    §

    impl AsRef<[u8]> for SerializedSignature

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SerializedSignature

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SerializedSignature

    §

    fn clone(&self) -> SerializedSignature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for SerializedSignature

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &[u8]

    Dereferences the value.
    §

    impl Display for SerializedSignature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Signature> for SerializedSignature

    §

    fn from(value: &'a Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for SerializedSignature

    §

    fn from(value: Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl Hash for SerializedSignature

    §

    fn hash<H>(&self, state: &mut H)
    where H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a SerializedSignature

    §

    type IntoIter = Iter<'a, u8>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a u8

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a SerializedSignature as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl IntoIterator for SerializedSignature

    §

    type IntoIter = IntoIter

    Which kind of iterator are we turning this into?
    §

    type Item = u8

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <SerializedSignature as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for SerializedSignature

    §

    fn cmp(&self, other: &SerializedSignature) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<[u8]> for SerializedSignature

    §

    fn eq(&self, other: &[u8]) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<SerializedSignature> for [u8]

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,
    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<[u8]> for SerializedSignature

    §

    fn eq(&self, other: &[u8]) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<SerializedSignature> for [u8]

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<[u8]> for SerializedSignature

    §

    fn partial_cmp(&self, other: &[u8]) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<SerializedSignature> for [u8]

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<[u8]> for SerializedSignature

    §

    fn partial_cmp(&self, other: &[u8]) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd for SerializedSignature

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    §

    impl PartialOrd<SerializedSignature> for [u8]

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( +operator. Read more

    §

    impl PartialOrd for SerializedSignature

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( value: &'a SerializedSignature -) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( value: SerializedSignature ) -> Result<Signature, <Signature as TryFrom<SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl Copy for SerializedSignature

    §

    impl Eq for SerializedSignature

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.Signature.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.Signature.html index 90d0d0d243..2a337c09ab 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.Signature.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/ecdsa/struct.Signature.html @@ -34,8 +34,8 @@

    pub fn serialize_der(&self) -> SerializedSignature

    Serializes the signature in DER format

    pub fn serialize_compact(&self) -> [u8; 64]

    Serializes the signature in compact format

    Trait Implementations§

    §

    impl CPtr for Signature

    §

    impl Clone for Signature

    §

    fn clone(&self) -> Signature

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Signature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Signature

    §

    fn deserialize<D>(d: D) -> Result<Signature, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Signature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Signature> for SerializedSignature

    §

    fn from(value: &'a Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for SerializedSignature

    §

    fn from(value: Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for Signature

    Creates a new signature from a FFI signature

    -
    §

    fn from(sig: Signature) -> Signature

    Converts to this type from the input type.
    §

    impl FromStr for Signature

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Signature, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Signature

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Signature

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Signature> for SerializedSignature

    §

    fn from(value: &'a Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for SerializedSignature

    §

    fn from(value: Signature) -> SerializedSignature

    Converts to this type from the input type.
    §

    impl From<Signature> for Signature

    Creates a new signature from a FFI signature

    +
    §

    fn from(sig: Signature) -> Signature

    Converts to this type from the input type.
    §

    impl FromStr for Signature

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Signature, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Signature

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Signature

    §

    fn cmp(&self, other: &Signature) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where @@ -49,9 +49,9 @@ &self, s: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where - S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( + S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( value: &'a SerializedSignature -) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from( value: SerializedSignature ) -> Result<Signature, <Signature as TryFrom<SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl Copy for Signature

    §

    impl Eq for Signature

    §

    impl StructuralPartialEq for Signature

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/enum.Error.html index 1f2d034dc7..1b5642450b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/enum.Error.html @@ -24,7 +24,7 @@
    §

    InvalidPublicKeySum

    Bad set of public keys.

    §

    InvalidParityValue(InvalidParityValue)

    The only valid parity values are 0 or 1.

    §

    InvalidEllSwift

    Bad EllSwift value

    -

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for FromSliceError

    §

    fn from(e: Error) -> FromSliceError

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for MessageSignatureError

    §

    fn from(e: Error) -> MessageSignatureError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseCompressedPublicKeyError

    §

    fn from(e: Error) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl From<Error> for SigFromSliceError

    §

    fn from(e: Error) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl From<InvalidParityValue> for Error

    §

    fn from(error: InvalidParityValue) -> Error

    Converts to this type from the input type.
    §

    impl Hash for Error

    §

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    §

    impl Clone for Error

    §

    fn clone(&self) -> Error

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Error

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for Error

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for Error

    §

    fn from(e: Error) -> Error

    Converts to this type from the input type.
    §

    impl From<Error> for FromSliceError

    §

    fn from(e: Error) -> FromSliceError

    Converts to this type from the input type.
    §

    impl From<Error> for FromWifError

    §

    fn from(e: Error) -> FromWifError

    Converts to this type from the input type.
    §

    impl From<Error> for MessageSignatureError

    §

    fn from(e: Error) -> MessageSignatureError

    Converts to this type from the input type.
    §

    impl From<Error> for ParseCompressedPublicKeyError

    §

    fn from(e: Error) -> ParseCompressedPublicKeyError

    Converts to this type from the input type.
    §

    impl From<Error> for SigFromSliceError

    §

    fn from(e: Error) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl From<InvalidParityValue> for Error

    §

    fn from(error: InvalidParityValue) -> Error

    Converts to this type from the input type.
    §

    impl Hash for Error

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Error

    §

    fn cmp(&self, other: &Error) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/hashes/struct.Hmac.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/hashes/struct.Hmac.html index 384480cb05..0c87c60f75 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/hashes/struct.Hmac.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/hashes/struct.Hmac.html @@ -8,23 +8,23 @@ T: Hash + Deserialize<'de>,

    §

    fn deserialize<D>(d: D) -> Result<Hmac<T>, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<T> Display for Hmac<T>
    where T: Hash,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> FromStr for Hmac<T>
    where - T: Hash + FromStr,

    §

    type Err = <T as FromStr>::Err

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hmac<T>, <Hmac<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hmac<T>
    where + T: Hash + FromStr,

    §

    type Err = <T as FromStr>::Err

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Hmac<T>, <Hmac<T> as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl<T> Hash for Hmac<T>
    where + T: Hash + Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + H: Hasher, + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Hash for Hmac<T>
    where T: Hash,

    §

    type Engine = HmacEngine<T>

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under -any conditions.
    §

    type Bytes = <T as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    fn from_engine(e: HmacEngine<T>) -> Hmac<T>

    Produces a hash from the current state of a given engine.
    §

    const LEN: usize = T::LEN

    Length of the hash, in bytes.
    §

    fn from_slice(sl: &[u8]) -> Result<Hmac<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hmac<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hmac<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <T as Hash>::Bytes) -> Hmac<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hmac<T>

    Returns an all zero hash. Read more
    §

    fn engine() -> Self::Engine

    Constructs a new engine.
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where +any conditions.

    §

    type Bytes = <T as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    fn from_engine(e: HmacEngine<T>) -> Hmac<T>

    Produces a hash from the current state of a given engine.
    §

    const LEN: usize = T::LEN

    Length of the hash, in bytes.
    §

    fn from_slice(sl: &[u8]) -> Result<Hmac<T>, FromSliceError>

    Copies a byte slice into a hash object.
    §

    fn to_byte_array(self) -> <Hmac<T> as Hash>::Bytes

    Returns the underlying byte array.
    §

    fn as_byte_array(&self) -> &<Hmac<T> as Hash>::Bytes

    Returns a reference to the underlying byte array.
    §

    fn from_byte_array(bytes: <T as Hash>::Bytes) -> Hmac<T>

    Constructs a hash from the underlying byte array.
    §

    fn all_zeros() -> Hmac<T>

    Returns an all zero hash. Read more
    §

    fn engine() -> Self::Engine

    Constructs a new engine.
    §

    fn hash(data: &[u8]) -> Self

    Hashes some bytes.
    §

    fn hash_byte_chunks<B, I>(byte_slices: I) -> Self
    where B: AsRef<[u8]>, I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be -true for Sha256dHash, so here we are.
    §

    impl<T> Hash for Hmac<T>
    where - T: Hash + Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where - __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where - H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<T> Index<Range<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFrom<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFrom<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFull> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeTo<usize>> for Hmac<T>
    where - T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeTo<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<usize> for Hmac<T>
    where - T: Hash,

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &u8

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hmac<T>
    where +true for Sha256dHash, so here we are.

    §

    impl<T> Index<Range<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFrom<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFrom<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeFull> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<RangeTo<usize>> for Hmac<T>
    where + T: Hash,

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: RangeTo<usize>) -> &[u8]

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> Index<usize> for Hmac<T>
    where + T: Hash,

    §

    type Output = u8

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &u8

    Performs the indexing (container[index]) operation. Read more
    §

    impl<T> LowerHex for Hmac<T>
    where T: Hash,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<T> Ord for Hmac<T>
    where T: Ord + Hash,

    §

    fn cmp(&self, other: &Hmac<T>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Open01.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Open01.html index 26a28c2c43..24ceaa4687 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Open01.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Open01.html @@ -12,18 +12,18 @@

    §Example

    let val: f32 = thread_rng().sample(Open01); println!("f32 from (0, 1): {}", val);
    -

    Trait Implementations§

    source§

    impl Clone for Open01

    source§

    fn clone(&self) -> Open01

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Open01

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Distribution<f32> for Open01

    source§

    fn sample<R>(&self, rng: &mut R) -> f32
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +

    Trait Implementations§

    source§

    impl Clone for Open01

    source§

    fn clone(&self) -> Open01

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Open01

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Distribution<f32> for Open01

    source§

    fn sample<R>(&self, rng: &mut R) -> f32
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<f64> for Open01

    source§

    fn sample<R>(&self, rng: &mut R) -> f64
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<f64> for Open01

    source§

    fn sample<R>(&self, rng: &mut R) -> f64
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl Copy for Open01

    Auto Trait Implementations§

    §

    impl Freeze for Open01

    §

    impl RefUnwindSafe for Open01

    §

    impl Send for Open01

    §

    impl Sync for Open01

    §

    impl Unpin for Open01

    §

    impl UnwindSafe for Open01

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.OpenClosed01.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.OpenClosed01.html index 185b8d9739..3fc21cd581 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.OpenClosed01.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.OpenClosed01.html @@ -13,18 +13,18 @@

    §Example

    let val: f32 = thread_rng().sample(OpenClosed01); println!("f32 from (0, 1): {}", val);
    -

    Trait Implementations§

    source§

    impl Clone for OpenClosed01

    source§

    fn clone(&self) -> OpenClosed01

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenClosed01

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Distribution<f32> for OpenClosed01

    source§

    fn sample<R>(&self, rng: &mut R) -> f32
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +

    Trait Implementations§

    source§

    impl Clone for OpenClosed01

    source§

    fn clone(&self) -> OpenClosed01

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for OpenClosed01

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Distribution<f32> for OpenClosed01

    source§

    fn sample<R>(&self, rng: &mut R) -> f32
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<f64> for OpenClosed01

    source§

    fn sample<R>(&self, rng: &mut R) -> f64
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<f64> for OpenClosed01

    source§

    fn sample<R>(&self, rng: &mut R) -> f64
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl Copy for OpenClosed01

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Standard.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Standard.html index c8f4e697ae..f39433d37b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Standard.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Standard.html @@ -71,329 +71,329 @@

    source§

    fn append_string<R>(&self, rng: &mut R, s: &mut String, len: usize)
    where R: Rng + ?Sized,

    Append len random chars to string
    source§

    fn sample_string<R>(&self, rng: &mut R, len: usize) -> String
    where R: Rng + ?Sized,

    Generate a String of len random chars

    source§

    impl<T> Distribution<[T; 32]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 32]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 32]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 31]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 31]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 31]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 30]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 30]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 30]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 29]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 29]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 29]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 28]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 28]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 28]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 27]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 27]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 27]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 26]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 26]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 26]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 25]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 25]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 25]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 24]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 24]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 24]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 23]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 23]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 23]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 22]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 22]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 22]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 21]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 21]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 21]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 20]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 20]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 20]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 19]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 19]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 19]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 18]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 18]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 18]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 17]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 17]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 17]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 16]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 16]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 16]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 15]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 15]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 15]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 14]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 14]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 14]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 13]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 13]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 13]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 12]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 12]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 12]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 11]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 11]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 11]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 10]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 10]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 10]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 9]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 9]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 9]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 8]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 8]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 8]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 7]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 7]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 7]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 6]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 6]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 6]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 5]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 5]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 5]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 4]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 4]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 4]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 3]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 3]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 3]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 2]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 2]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 2]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<[T; 1]> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 1]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 1]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl<T> Distribution<[T; 0]> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 0]
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl<T> Distribution<[T; 0]> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> [T; 0]
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<()> for Standard

    source§

    fn sample<R>(&self, _: &mut R)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<()> for Standard

    source§

    fn sample<R>(&self, _: &mut R)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A> Distribution<(A,)> for Standard
    where - Standard: Distribution<A>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A,)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<A>,

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A,)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B> Distribution<(A, B)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C> Distribution<(A, B, C)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D> Distribution<(A, B, C, D)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E> Distribution<(A, B, C, D, E)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F> Distribution<(A, B, C, D, E, F)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F, G> Distribution<(A, B, C, D, E, F, G)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F, G, H> Distribution<(A, B, C, D, E, F, G, H)> for Standard
    where @@ -405,205 +405,205 @@

    Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F, G, H, I> Distribution<(A, B, C, D, E, F, G, H, I)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F, G, H, I, J> Distribution<(A, B, C, D, E, F, G, H, I, J)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I, J)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I, J)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F, G, H, I, J, K> Distribution<(A, B, C, D, E, F, G, H, I, J, K)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I, J, K)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I, J, K)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<A, B, C, D, E, F, G, H, I, J, K, L> Distribution<(A, B, C, D, E, F, G, H, I, J, K, L)> for Standard

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I, J, K, L)
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>

    source§

    fn sample<R>(&self, _rng: &mut R) -> (A, B, C, D, E, F, G, H, I, J, K, L)
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<NonZero<u128>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u128>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<NonZero<u128>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u128>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<NonZero<u16>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u16>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<NonZero<u16>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u16>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<NonZero<u32>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u32>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<NonZero<u32>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u32>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<NonZero<u64>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u64>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<NonZero<u64>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u64>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<NonZero<u8>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u8>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<NonZero<u8>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<u8>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<NonZero<usize>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<usize>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<NonZero<usize>> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> NonZero<usize>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<Option<T>> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, rng: &mut R) -> Option<T>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, rng: &mut R) -> Option<T>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<T> Distribution<Wrapping<T>> for Standard
    where - Standard: Distribution<T>,

    source§

    fn sample<R>(&self, rng: &mut R) -> Wrapping<T>
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where + Standard: Distribution<T>,

    source§

    fn sample<R>(&self, rng: &mut R) -> Wrapping<T>
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<bool> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> bool
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<bool> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> bool
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<char> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> char
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<char> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> char
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<f32> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> f32
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<f32> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> f32
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<f64> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> f64
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<f64> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> f64
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<i128> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i128
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<i128> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i128
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<i16> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i16
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<i16> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i16
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<i32> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i32
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<i32> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i32
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<i64> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i64
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<i64> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i64
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<i8> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i8
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<i8> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> i8
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<isize> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> isize
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<isize> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> isize
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<u128> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u128
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<u128> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u128
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<u16> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u16
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<u16> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u16
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<u32> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u32
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<u32> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u32
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<u64> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u64
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<u64> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u64
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<u8> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u8
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<u8> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> u8
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self -through the closure F Read more
    source§

    impl Distribution<usize> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> usize
    where - R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where +through the closure F Read more

    source§

    impl Distribution<usize> for Standard

    source§

    fn sample<R>(&self, rng: &mut R) -> usize
    where + R: Rng + ?Sized,

    Generate a random value of T, using rng as the source of randomness.
    source§

    fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
    where R: Rng, Self: Sized,

    Create an iterator that generates random values of T, using rng as -the source of randomness. Read more
    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where +the source of randomness. Read more

    source§

    fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
    where F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl Copy for Standard

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Uniform.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Uniform.html index c4a9cb95fd..0013813633 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Uniform.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/struct.Uniform.html @@ -56,8 +56,8 @@

    §Example

    F: Fn(T) -> S, Self: Sized,

    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<X> From<Range<X>> for Uniform<X>
    where - X: SampleUniform,

    source§

    fn from(r: Range<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> From<RangeInclusive<X>> for Uniform<X>
    where - X: SampleUniform,

    source§

    fn from(r: RangeInclusive<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> PartialEq for Uniform<X>
    where + X: SampleUniform,

    source§

    fn from(r: Range<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> From<RangeInclusive<X>> for Uniform<X>
    where + X: SampleUniform,

    source§

    fn from(r: RangeInclusive<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> PartialEq for Uniform<X>

    source§

    fn eq(&self, other: &Uniform<X>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.Uniform.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.Uniform.html index 8bff8f9ec4..f1bdb33596 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.Uniform.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.Uniform.html @@ -56,8 +56,8 @@

    §Example

    F: Fn(T) -> S, Self: Sized,
    Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
    source§

    impl<X> From<Range<X>> for Uniform<X>
    where - X: SampleUniform,

    source§

    fn from(r: Range<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> From<RangeInclusive<X>> for Uniform<X>
    where - X: SampleUniform,

    source§

    fn from(r: RangeInclusive<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> PartialEq for Uniform<X>
    where + X: SampleUniform,

    source§

    fn from(r: Range<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> From<RangeInclusive<X>> for Uniform<X>
    where + X: SampleUniform,

    source§

    fn from(r: RangeInclusive<X>) -> Uniform<X>

    Converts to this type from the input type.
    source§

    impl<X> PartialEq for Uniform<X>

    source§

    fn eq(&self, other: &Uniform<X>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.UniformInt.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.UniformInt.html index deddc63779..c017cd50c8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.UniformInt.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/distributions/uniform/struct.UniformInt.html @@ -29,13 +29,13 @@

    Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<X> PartialEq for UniformInt<X>
    where X: PartialEq,

    source§

    fn eq(&self, other: &UniformInt<X>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl UniformSampler for UniformInt<i128>

    §

    type X = i128

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i128>
    where +sufficient, and should not be overridden without very good reason.

    source§

    impl UniformSampler for UniformInt<i128>

    §

    type X = i128

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i128>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i128>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i128>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i128> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<i128> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i128> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -43,7 +43,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i128> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i128> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -51,13 +51,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i128> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i128> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<i16>

    §

    type X = i16

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i16>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<i16>

    §

    type X = i16

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i16>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i16>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i16>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i16> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<i16> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i16> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -65,7 +65,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i16> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i16> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -73,13 +73,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i16> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i16> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<i32>

    §

    type X = i32

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i32>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<i32>

    §

    type X = i32

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i32>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i32>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i32>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i32> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<i32> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i32> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -87,7 +87,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i32> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i32> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -117,13 +117,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i64> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i64> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<i8>

    §

    type X = i8

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i8>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<i8>

    §

    type X = i8

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i8>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i8>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<i8>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i8> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<i8> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<i8> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -131,7 +131,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i8> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i8> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -139,13 +139,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<i8> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<i8> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<isize>

    §

    type X = isize

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<isize>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<isize>

    §

    type X = isize

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<isize>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<isize>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<isize>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<isize> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<isize> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<isize> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -153,7 +153,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<isize> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<isize> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -183,13 +183,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u128> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u128> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<u16>

    §

    type X = u16

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u16>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<u16>

    §

    type X = u16

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u16>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u16>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u16>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u16> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<u16> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u16> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -197,7 +197,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u16> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u16> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -205,13 +205,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u16> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u16> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<u32>

    §

    type X = u32

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u32>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<u32>

    §

    type X = u32

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u32>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u32>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u32>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u32> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<u32> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u32> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -219,7 +219,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u32> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u32> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -227,13 +227,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u32> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u32> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<u64>

    §

    type X = u64

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u64>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<u64>

    §

    type X = u64

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u64>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u64>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u64>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u64> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<u64> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u64> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -241,7 +241,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u64> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u64> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -249,13 +249,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u64> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u64> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<u8>

    §

    type X = u8

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u8>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<u8>

    §

    type X = u8

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u8>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u8>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<u8>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u8> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<u8> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<u8> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -263,7 +263,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u8> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u8> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -271,13 +271,13 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<u8> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<u8> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and inclusive upper bound [low, high]. Read more
    source§

    impl UniformSampler for UniformInt<usize>

    §

    type X = usize

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<usize>
    where +and inclusive upper bound [low, high]. Read more

    source§

    impl UniformSampler for UniformInt<usize>

    §

    type X = usize

    The type sampled by this implementation.
    source§

    fn new<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<usize>

    Construct self, with inclusive lower bound and exclusive upper bound -[low, high). Read more
    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<usize>
    where +[low, high). Read more

    source§

    fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> UniformInt<usize>

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<usize> as UniformSampler>::X
    where - R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( + B2: SampleBorrow<<UniformInt<usize> as UniformSampler>::X>,

    Construct self, with inclusive bounds [low, high]. Read more
    source§

    fn sample<R>(&self, rng: &mut R) -> <UniformInt<usize> as UniformSampler>::X
    where + R: Rng + ?Sized,

    Sample a value.
    source§

    fn sample_single<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R @@ -285,7 +285,7 @@

    Rng + ?Sized, B1: SampleBorrow<<UniformInt<usize> as UniformSampler>::X>, B2: SampleBorrow<<UniformInt<usize> as UniformSampler>::X>,

    Sample a single value uniformly from a range with inclusive lower bound -and exclusive upper bound [low, high). Read more
    source§

    fn sample_single_inclusive<R, B1, B2>( +and exclusive upper bound [low, high). Read more

    source§

    fn sample_single_inclusive<R, B1, B2>( low_b: B1, high_b: B2, rng: &mut R diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/seq/index/enum.IndexVec.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/seq/index/enum.IndexVec.html index e73e6eb1b2..8025c6fdc0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/seq/index/enum.IndexVec.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/rand/seq/index/enum.IndexVec.html @@ -9,7 +9,7 @@ restrictions.)

    source

    pub fn into_vec(self) -> Vec<usize>

    Return result as a Vec<usize>. Conversion may or may not be trivial.

    source

    pub fn iter(&self) -> IndexVecIter<'_>

    Iterate over the indices as a sequence of usize values

    -

    Trait Implementations§

    source§

    impl Clone for IndexVec

    source§

    fn clone(&self) -> IndexVec

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for IndexVec

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl From<Vec<u32>> for IndexVec

    source§

    fn from(v: Vec<u32>) -> IndexVec

    Converts to this type from the input type.
    source§

    impl From<Vec<usize>> for IndexVec

    source§

    fn from(v: Vec<usize>) -> IndexVec

    Converts to this type from the input type.
    source§

    impl IntoIterator for IndexVec

    source§

    fn into_iter(self) -> IndexVecIntoIter

    Convert into an iterator over the indices as a sequence of usize values

    +

    Trait Implementations§

    source§

    impl Clone for IndexVec

    source§

    fn clone(&self) -> IndexVec

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for IndexVec

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl From<Vec<u32>> for IndexVec

    source§

    fn from(v: Vec<u32>) -> IndexVec

    Converts to this type from the input type.
    source§

    impl From<Vec<usize>> for IndexVec

    source§

    fn from(v: Vec<usize>) -> IndexVec

    Converts to this type from the input type.
    source§

    impl IntoIterator for IndexVec

    source§

    fn into_iter(self) -> IndexVecIntoIter

    Convert into an iterator over the indices as a sequence of usize values

    §

    type Item = usize

    The type of the elements being iterated over.
    §

    type IntoIter = IndexVecIntoIter

    Which kind of iterator are we turning this into?
    source§

    impl PartialEq for IndexVec

    source§

    fn eq(&self, other: &IndexVec) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Keypair.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Keypair.html index efd091709c..908013b606 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Keypair.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Keypair.html @@ -98,7 +98,7 @@
    §Examples
    For more discussion on this, please see the documentation of the zeroize crate.

    Trait Implementations§

    §

    impl CPtr for Keypair

    §

    impl Clone for Keypair

    §

    fn clone(&self) -> Keypair

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Keypair

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for Keypair

    §

    fn deserialize<D>(d: D) -> Result<Keypair, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<'a> From<&'a Keypair> for PublicKey

    §

    fn from(pair: &'a Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Keypair> for SecretKey

    §

    fn from(pair: &'a Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for PublicKey

    §

    fn from(pair: Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for SecretKey

    §

    fn from(pair: Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<TweakedKeypair> for Keypair

    §

    fn from(pair: TweakedKeypair) -> Keypair

    Converts to this type from the input type.
    §

    impl FromStr for Keypair

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Keypair, <Keypair as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Keypair

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<'a> From<&'a Keypair> for PublicKey

    §

    fn from(pair: &'a Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Keypair> for SecretKey

    §

    fn from(pair: &'a Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for PublicKey

    §

    fn from(pair: Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for SecretKey

    §

    fn from(pair: Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<TweakedKeypair> for Keypair

    §

    fn from(pair: TweakedKeypair) -> Keypair

    Converts to this type from the input type.
    §

    impl FromStr for Keypair

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Keypair, <Keypair as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Keypair

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Keypair

    §

    fn cmp(&self, other: &Keypair) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Message.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Message.html index 657adee740..9b1c36abbf 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Message.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.Message.html @@ -14,7 +14,7 @@
    §Errors

    If digest is not exactly 32 bytes long.

    Trait Implementations§

    §

    impl AsRef<[u8; 32]> for Message

    §

    fn as_ref(&self) -> &[u8; 32]

    Gets a reference to the underlying array

    -
    §

    impl CPtr for Message

    §

    type Target = u8

    §

    fn as_c_ptr(&self) -> *const <Message as CPtr>::Target

    §

    fn as_mut_c_ptr(&mut self) -> *mut <Message as CPtr>::Target

    §

    impl Clone for Message

    §

    fn clone(&self) -> Message

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Message

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Message

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<LegacySighash> for Message

    §

    fn from(hash: LegacySighash) -> Message

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Message

    §

    fn from(hash: SegwitV0Sighash) -> Message

    Converts to this type from the input type.
    §

    impl<T> From<T> for Message
    where +

    §

    impl CPtr for Message

    §

    type Target = u8

    §

    fn as_c_ptr(&self) -> *const <Message as CPtr>::Target

    §

    fn as_mut_c_ptr(&mut self) -> *mut <Message as CPtr>::Target

    §

    impl Clone for Message

    §

    fn clone(&self) -> Message

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Message

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Message

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<LegacySighash> for Message

    §

    fn from(hash: LegacySighash) -> Message

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Message

    §

    fn from(hash: SegwitV0Sighash) -> Message

    Converts to this type from the input type.
    §

    impl<T> From<T> for Message

    §

    fn from(t: T) -> Message

    Converts a 32-byte hash directly to a message without error paths.

    §

    impl From<TapSighash> for Message

    §

    fn from(hash: TapSighash) -> Message

    Converts to this type from the input type.
    §

    impl Hash for Message

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.PublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.PublicKey.html index 1501a95801..78b13f8cce 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.PublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.PublicKey.html @@ -101,9 +101,9 @@
    §Examples
    §

    fn as_c_ptr(&self) -> *const <PublicKey as CPtr>::Target

    Obtains a const pointer suitable for use with FFI functions.

    §

    fn as_mut_c_ptr(&mut self) -> *mut <PublicKey as CPtr>::Target

    Obtains a mutable pointer suitable for use with FFI functions.

    §

    type Target = PublicKey

    §

    impl Clone for PublicKey

    §

    fn clone(&self) -> PublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PublicKey

    §

    fn deserialize<D>(d: D) -> Result<PublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Keypair> for PublicKey

    §

    fn from(pair: &'a Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for PublicKey

    §

    fn from(pair: Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    Creates a new public key from a FFI public key.

    + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'a> From<&'a Keypair> for PublicKey

    §

    fn from(pair: &'a Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for PublicKey

    §

    fn from(pair: Keypair) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    Creates a new public key from a FFI public key.

    Note, normal users should never need to interact directly with FFI types.

    -
    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for PublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where +
    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.

    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for PublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl LowerHex for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl MiniscriptKey for PublicKey

    §

    type Sha256 = Hash

    The associated bitcoin::hashes::sha256::Hash for this [MiniscriptKey], used in the diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.SecretKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.SecretKey.html index ce3533d026..390793a35c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.SecretKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.SecretKey.html @@ -85,8 +85,8 @@
    SecretKey::eq is implemented using a constant time algorithm, please consider using it to do comparisons of secret keys.

    §

    impl CPtr for SecretKey

    §

    type Target = u8

    §

    fn as_c_ptr(&self) -> *const <SecretKey as CPtr>::Target

    §

    fn as_mut_c_ptr(&mut self) -> *mut <SecretKey as CPtr>::Target

    §

    impl Clone for SecretKey

    §

    fn clone(&self) -> SecretKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SecretKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for SecretKey

    §

    fn deserialize<D>(d: D) -> Result<SecretKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<'a> From<&'a Keypair> for SecretKey

    §

    fn from(pair: &'a Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for SecretKey

    §

    fn from(pair: Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<SecretKey> for Scalar

    §

    fn from(value: SecretKey) -> Scalar

    Converts to this type from the input type.
    §

    impl<T> From<T> for SecretKey
    where - T: ThirtyTwoByteHash,

    §

    fn from(t: T) -> SecretKey

    Converts a 32-byte hash directly to a secret key without error paths.

    + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl<'a> From<&'a Keypair> for SecretKey

    §

    fn from(pair: &'a Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<Keypair> for SecretKey

    §

    fn from(pair: Keypair) -> SecretKey

    Converts to this type from the input type.
    §

    impl From<SecretKey> for Scalar

    §

    fn from(value: SecretKey) -> Scalar

    Converts to this type from the input type.
    §

    impl<T> From<T> for SecretKey
    where + T: ThirtyTwoByteHash,

    §

    fn from(t: T) -> SecretKey

    Converts a 32-byte hash directly to a secret key without error paths.

    §

    impl FromStr for SecretKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<SecretKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl<I> Index<I> for SecretKey
    where [u8]: Index<I>,

    §

    type Output = <[u8] as Index<I>>::Output

    The returned type after indexing.
    §

    fn index(&self, index: I) -> &<SecretKey as Index<I>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl PartialEq for SecretKey

    §

    fn eq(&self, other: &SecretKey) -> bool

    This implementation is designed to be constant time to help prevent side channel attacks.

    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.XOnlyPublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.XOnlyPublicKey.html index 266133209e..0dbc95bfdf 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.XOnlyPublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/secp256k1/struct.XOnlyPublicKey.html @@ -86,8 +86,8 @@
    §Examples

    Trait Implementations§

    §

    impl CPtr for XOnlyPublicKey

    §

    impl Clone for XOnlyPublicKey

    §

    fn clone(&self) -> XOnlyPublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    fn deserialize<D>( d: D ) -> Result<XOnlyPublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<TweakedPublicKey> for XOnlyPublicKey

    §

    fn from(pair: TweakedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<XOnlyPublicKey> for XOnlyPublicKey

    Creates a new schnorr public key from a FFI x-only public key.

    -
    §

    fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for XOnlyPublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XOnlyPublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XOnlyPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<TweakedPublicKey> for XOnlyPublicKey

    §

    fn from(pair: TweakedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<XOnlyPublicKey> for XOnlyPublicKey

    Creates a new schnorr public key from a FFI x-only public key.

    +
    §

    fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for XOnlyPublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XOnlyPublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XOnlyPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl LowerHex for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl MiniscriptKey for XOnlyPublicKey

    §

    type Sha256 = Hash

    The associated bitcoin::hashes::sha256::Hash for this [MiniscriptKey], used in the diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.EcdsaSighashType.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.EcdsaSighashType.html index 583dcede5c..7fc1190fd8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.EcdsaSighashType.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.EcdsaSighashType.html @@ -34,7 +34,7 @@
    §Errors

    Trait Implementations§

    §

    impl Clone for EcdsaSighashType

    §

    fn clone(&self) -> EcdsaSighashType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for EcdsaSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for EcdsaSighashType

    §

    fn deserialize<D>( deserializer: D ) -> Result<EcdsaSighashType, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for EcdsaSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for PsbtSighashType

    §

    fn from(ecdsa_hash_ty: EcdsaSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl FromStr for EcdsaSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str( + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for EcdsaSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for PsbtSighashType

    §

    fn from(ecdsa_hash_ty: EcdsaSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl FromStr for EcdsaSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<EcdsaSighashType, <EcdsaSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for EcdsaSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TapSighashType.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TapSighashType.html index de464f9087..df1803bd96 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TapSighashType.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TapSighashType.html @@ -24,7 +24,7 @@

    Trait Implementations§

    §

    impl Clone for TapSighashType

    §

    fn clone(&self) -> TapSighashType

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapSighashType

    §

    fn deserialize<D>( deserializer: D ) -> Result<TapSighashType, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl From<TapSighashType> for PsbtSighashType

    §

    fn from(taproot_hash_ty: TapSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl FromStr for TapSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighashType, <TapSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighashType

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<EcdsaSighashType> for TapSighashType

    §

    fn from(s: EcdsaSighashType) -> TapSighashType

    Converts to this type from the input type.
    §

    impl From<TapSighashType> for PsbtSighashType

    §

    fn from(taproot_hash_ty: TapSighashType) -> PsbtSighashType

    Converts to this type from the input type.
    §

    impl FromStr for TapSighashType

    §

    type Err = SighashTypeParseError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighashType, <TapSighashType as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighashType

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for TapSighashType

    §

    fn cmp(&self, other: &TapSighashType) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TaprootError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TaprootError.html index 91b693c9f0..0b1b79a747 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TaprootError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/enum.TaprootError.html @@ -12,7 +12,7 @@
    §

    PrevoutsIndex(PrevoutsIndexError)

    Prevouts index error.

    §

    PrevoutsKind(PrevoutsKindError)

    Prevouts kind error.

    §

    InvalidSighashType(u32)

    Invalid Sighash type.

    -

    Trait Implementations§

    §

    impl Clone for TaprootError

    §

    fn clone(&self) -> TaprootError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TaprootError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for TaprootError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for TaprootError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Infallible> for TaprootError

    §

    fn from(never: Infallible) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for TaprootError

    §

    fn from(e: InputsIndexError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<PrevoutsIndexError> for TaprootError

    §

    fn from(e: PrevoutsIndexError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<PrevoutsKindError> for TaprootError

    §

    fn from(e: PrevoutsKindError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<PrevoutsSizeError> for TaprootError

    §

    fn from(e: PrevoutsSizeError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<TaprootError> for SighashError

    §

    fn from(e: TaprootError) -> SighashError

    Converts to this type from the input type.
    §

    impl From<TaprootError> for SignError

    §

    fn from(e: TaprootError) -> SignError

    Converts to this type from the input type.
    §

    impl PartialEq for TaprootError

    §

    fn eq(&self, other: &TaprootError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for TaprootError

    §

    fn clone(&self) -> TaprootError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TaprootError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for TaprootError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for TaprootError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Infallible> for TaprootError

    §

    fn from(never: Infallible) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<InputsIndexError> for TaprootError

    §

    fn from(e: InputsIndexError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<PrevoutsIndexError> for TaprootError

    §

    fn from(e: PrevoutsIndexError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<PrevoutsKindError> for TaprootError

    §

    fn from(e: PrevoutsKindError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<PrevoutsSizeError> for TaprootError

    §

    fn from(e: PrevoutsSizeError) -> TaprootError

    Converts to this type from the input type.
    §

    impl From<TaprootError> for SighashError

    §

    fn from(e: TaprootError) -> SighashError

    Converts to this type from the input type.
    §

    impl From<TaprootError> for SignError

    §

    fn from(e: TaprootError) -> SignError

    Converts to this type from the input type.
    §

    impl PartialEq for TaprootError

    §

    fn eq(&self, other: &TaprootError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for TaprootError

    §

    impl StructuralPartialEq for TaprootError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.LegacySighash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.LegacySighash.html index 6c7f62b0ad..e4dce9a781 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.LegacySighash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.LegacySighash.html @@ -5,7 +5,7 @@

    Trait Implementations§

    §

    impl AsRef<[u8]> for LegacySighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for LegacySighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for LegacySighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for LegacySighash

    §

    fn clone(&self) -> LegacySighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for LegacySighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for LegacySighash

    §

    fn deserialize<D>( d: D ) -> Result<LegacySighash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for LegacySighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for LegacySighash

    §

    fn from(inner: Hash) -> LegacySighash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Hash

    §

    fn from(hashtype: LegacySighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Message

    §

    fn from(hash: LegacySighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for LegacySighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<LegacySighash, <LegacySighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for LegacySighash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for LegacySighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for LegacySighash

    §

    fn from(inner: Hash) -> LegacySighash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Hash

    §

    fn from(hashtype: LegacySighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Message

    §

    fn from(hash: LegacySighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for LegacySighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<LegacySighash, <LegacySighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for LegacySighash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.SegwitV0Sighash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.SegwitV0Sighash.html index 10fc470ded..0eafb82358 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.SegwitV0Sighash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.SegwitV0Sighash.html @@ -2,10 +2,10 @@

    Implementations§

    §

    impl SegwitV0Sighash

    pub fn from_raw_hash(inner: Hash) -> SegwitV0Sighash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SegwitV0Sighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SegwitV0Sighash

    §

    fn clone(&self) -> SegwitV0Sighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SegwitV0Sighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SegwitV0Sighash

    §

    fn clone(&self) -> SegwitV0Sighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    fn deserialize<D>( d: D ) -> Result<SegwitV0Sighash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for SegwitV0Sighash

    §

    fn from(inner: Hash) -> SegwitV0Sighash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Hash

    §

    fn from(hashtype: SegwitV0Sighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Message

    §

    fn from(hash: SegwitV0Sighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for SegwitV0Sighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for SegwitV0Sighash

    §

    fn from(inner: Hash) -> SegwitV0Sighash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Hash

    §

    fn from(hashtype: SegwitV0Sighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Message

    §

    fn from(hash: SegwitV0Sighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for SegwitV0Sighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<SegwitV0Sighash, <SegwitV0Sighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for SegwitV0Sighash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.TapSighash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.TapSighash.html index ef0463681f..e56c89e3aa 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.TapSighash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/sighash/struct.TapSighash.html @@ -4,7 +4,7 @@

    pub fn to_raw_hash(self) -> Hash<TapSighashTag>

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash<TapSighashTag>

    Returns a reference to the inner hash (sha256, sh256d etc.).

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapSighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapSighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapSighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapSighash

    §

    fn clone(&self) -> TapSighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapSighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapSighash

    §

    fn deserialize<D>(d: D) -> Result<TapSighash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash<TapSighashTag>> for TapSighash

    §

    fn from(inner: Hash<TapSighashTag>) -> TapSighash

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Hash<TapSighashTag>

    §

    fn from(hashtype: TapSighash) -> Hash<TapSighashTag>

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Message

    §

    fn from(hash: TapSighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for TapSighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighash, <TapSighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighash

    §

    type Engine = <Hash<TapSighashTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash<TapSighashTag>> for TapSighash

    §

    fn from(inner: Hash<TapSighashTag>) -> TapSighash

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Hash<TapSighashTag>

    §

    fn from(hashtype: TapSighash) -> Hash<TapSighashTag>

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Message

    §

    fn from(hash: TapSighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for TapSighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighash, <TapSighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighash

    §

    type Engine = <Hash<TapSighashTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapSighashTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Block.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Block.html index c1339f113e..828002ee45 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Block.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Block.html @@ -36,7 +36,7 @@

    Result<Block, <__D as Deserializer<'de>>::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Encodable for Block

    §

    fn consensus_encode<R>(&self, r: &mut R) -> Result<usize, Error>
    where - R: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl PartialEq for Block

    §

    fn eq(&self, other: &Block) -> bool

    This method tests for self and other values to be equal, and is used + R: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl PartialEq for Block

    §

    fn eq(&self, other: &Block) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Serialize for Block

    §

    fn serialize<__S>( &self, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.BlockHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.BlockHash.html index c66019202f..f24a0efd79 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.BlockHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.BlockHash.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for BlockHash

    §

    fn deserialize<D>(d: D) -> Result<BlockHash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for BlockHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for BlockHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<&Header> for BlockHash

    §

    fn from(header: &Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Header> for BlockHash

    §

    fn from(header: Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl FromStr for BlockHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<BlockHash, <BlockHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for BlockHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Block> for BlockHash

    §

    fn from(block: &Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<&Header> for BlockHash

    §

    fn from(header: &Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Block> for BlockHash

    §

    fn from(block: Block) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<BlockHash> for Hash

    §

    fn from(hashtype: BlockHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for BlockHash

    §

    fn from(inner: Hash) -> BlockHash

    Converts to this type from the input type.
    §

    impl From<Header> for BlockHash

    §

    fn from(header: Header) -> BlockHash

    Converts to this type from the input type.
    §

    impl FromStr for BlockHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<BlockHash, <BlockHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for BlockHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.CompressedPublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.CompressedPublicKey.html index a306d23a39..7512431d69 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.CompressedPublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.CompressedPublicKey.html @@ -28,7 +28,7 @@

    Trait Implementations§

    §

    impl Clone for CompressedPublicKey

    §

    fn clone(&self) -> CompressedPublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for CompressedPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for CompressedPublicKey

    §

    fn deserialize<D>( d: D ) -> Result<CompressedPublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for CompressedPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for CompressedPublicKey

    §

    type Err = ParseCompressedPublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str( + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for CompressedPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for CompressedPublicKey

    §

    type Err = ParseCompressedPublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<CompressedPublicKey, <CompressedPublicKey as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for CompressedPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FeeRate.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FeeRate.html index 054dfc2201..255ab62a05 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FeeRate.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FeeRate.html @@ -40,7 +40,7 @@
    §Errors
    __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Mul<FeeRate> for Weight

    Computes ceiling so that fee computation is conservative.

    -
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Ord for FeeRate

    §

    fn cmp(&self, other: &FeeRate) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more

    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Ord for FeeRate

    §

    fn cmp(&self, other: &FeeRate) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for FeeRate

    §

    fn eq(&self, other: &FeeRate) -> bool

    This method tests for self and other values to be equal, and is used @@ -51,9 +51,9 @@
    §Errors
    &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<FeeRate, <FeeRate as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<FeeRate, <FeeRate as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( s: Box<str> -) -> Result<FeeRate, <FeeRate as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for FeeRate

    §

    impl Eq for FeeRate

    §

    impl StructuralPartialEq for FeeRate

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<FeeRate, <FeeRate as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for FeeRate

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<FeeRate, <FeeRate as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for FeeRate

    §

    impl Eq for FeeRate

    §

    impl StructuralPartialEq for FeeRate

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHash.html index d362e28518..7debc5faa0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHash.html @@ -6,11 +6,11 @@ &self, previous_filter_header: &FilterHeader ) -> FilterHeader

    Computes the filter header from a filter hash and previous filter header.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for FilterHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for FilterHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for FilterHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for FilterHash

    §

    fn clone(&self) -> FilterHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FilterHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FilterHash

    Trait Implementations§

    §

    impl AsRef<[u8]> for FilterHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for FilterHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for FilterHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for FilterHash

    §

    fn clone(&self) -> FilterHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FilterHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FilterHash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<FilterHash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for FilterHash

    §

    fn deserialize<D>(d: D) -> Result<FilterHash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for FilterHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FilterHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl FromStr for FilterHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHash, <FilterHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHash> for Hash

    §

    fn from(hashtype: FilterHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHash

    §

    fn from(inner: Hash) -> FilterHash

    Converts to this type from the input type.
    §

    impl FromStr for FilterHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHash, <FilterHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHeader.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHeader.html index 423813116b..295f02d45c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHeader.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.FilterHeader.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for FilterHeader

    §

    fn deserialize<D>(d: D) -> Result<FilterHeader, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for FilterHeader

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FilterHeader

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl FromStr for FilterHeader

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHeader, <FilterHeader as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHeader

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<FilterHeader> for Hash

    §

    fn from(hashtype: FilterHeader) -> Hash

    Converts to this type from the input type.
    §

    impl From<Hash> for FilterHeader

    §

    fn from(inner: Hash) -> FilterHeader

    Converts to this type from the input type.
    §

    impl FromStr for FilterHeader

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<FilterHeader, <FilterHeader as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for FilterHeader

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.LegacySighash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.LegacySighash.html index 2d17046a53..ab35209932 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.LegacySighash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.LegacySighash.html @@ -5,7 +5,7 @@

    Trait Implementations§

    §

    impl AsRef<[u8]> for LegacySighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for LegacySighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for LegacySighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for LegacySighash

    §

    fn clone(&self) -> LegacySighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for LegacySighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for LegacySighash

    §

    fn deserialize<D>( d: D ) -> Result<LegacySighash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for LegacySighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for LegacySighash

    §

    fn from(inner: Hash) -> LegacySighash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Hash

    §

    fn from(hashtype: LegacySighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Message

    §

    fn from(hash: LegacySighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for LegacySighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<LegacySighash, <LegacySighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for LegacySighash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for LegacySighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for LegacySighash

    §

    fn from(inner: Hash) -> LegacySighash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Hash

    §

    fn from(hashtype: LegacySighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<LegacySighash> for Message

    §

    fn from(hash: LegacySighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for LegacySighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<LegacySighash, <LegacySighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for LegacySighash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Opcode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Opcode.html index a48933f49f..10a5c80e3c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Opcode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Opcode.html @@ -9,7 +9,7 @@ in contexts where only pushes are supposed to be allowed.

    Implementations§

    §

    impl Opcode

    pub fn classify(self, ctx: ClassifyContext) -> Class

    Classifies an Opcode into a broad class.

    pub const fn to_u8(self) -> u8

    Encodes Opcode as a byte.

    -

    Trait Implementations§

    §

    impl Clone for Opcode

    §

    fn clone(&self) -> Opcode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Opcode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Opcode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl From<u8> for Opcode

    §

    fn from(b: u8) -> Opcode

    Converts to this type from the input type.
    §

    impl PartialEq for Opcode

    §

    fn eq(&self, other: &Opcode) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for Opcode

    §

    fn clone(&self) -> Opcode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Opcode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for Opcode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<WitnessVersion> for Opcode

    §

    fn from(version: WitnessVersion) -> Opcode

    Converts to this type from the input type.
    §

    impl From<u8> for Opcode

    §

    fn from(b: u8) -> Opcode

    Converts to this type from the input type.
    §

    impl PartialEq for Opcode

    §

    fn eq(&self, other: &Opcode) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Serialize for Opcode

    §

    fn serialize<S>( &self, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PubkeyHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PubkeyHash.html index 541372b685..73e5e97d33 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PubkeyHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PubkeyHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl PubkeyHash

    pub fn from_raw_hash(inner: Hash) -> PubkeyHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for PubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for PubkeyHash

    §

    fn clone(&self) -> PubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<PubkeyHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for PubkeyHash

    §

    fn from(inner: Hash) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for Hash

    §

    fn from(hashtype: PubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for PushBytesBuf

    §

    fn from(hash: PubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl FromStr for PubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PubkeyHash, <PubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for PubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for PubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for PubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for PubkeyHash

    §

    fn clone(&self) -> PubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<PubkeyHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for PubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PubkeyHash

    §

    fn from(key: CompressedPublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for PubkeyHash

    §

    fn from(inner: Hash) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for Hash

    §

    fn from(hashtype: PubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<PubkeyHash> for PushBytesBuf

    §

    fn from(hash: PubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl FromStr for PubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PubkeyHash, <PubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PublicKey.html index e79972a9d6..2137baba5f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.PublicKey.html @@ -73,7 +73,7 @@
    Result<(), Error>
    where C: Verification,

    Checks that sig is a valid ECDSA signature for msg using this public key.

    Trait Implementations§

    §

    impl Clone for PublicKey

    §

    fn clone(&self) -> PublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for PublicKey

    §

    fn deserialize<D>(d: D) -> Result<PublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for PublicKey

    §

    type Err = ParsePublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PublicKey, ParsePublicKeyError>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for PublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&PublicKey> for PubkeyHash

    §

    fn from(key: &PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for PublicKey

    §

    fn from(value: CompressedPublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PubkeyHash

    §

    fn from(key: PublicKey) -> PubkeyHash

    Converts to this type from the input type.
    §

    impl From<PublicKey> for PublicKey

    §

    fn from(pk: PublicKey) -> PublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for PublicKey

    §

    type Err = ParsePublicKeyError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<PublicKey, ParsePublicKeyError>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for PublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl MiniscriptKey for PublicKey

    §

    fn is_uncompressed(&self) -> bool

    Returns the compressed-ness of the underlying secp256k1 key.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Script.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Script.html index 5ae13f5330..4754e91a63 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Script.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Script.html @@ -143,45 +143,45 @@
    §Returns
    required (this is common in tests) this method can be used.

    pub fn first_opcode(&self) -> Option<Opcode>

    Returns the first opcode of the script (if there is any).

    pub fn into_script_buf(self: Box<Script>) -> ScriptBuf

    Converts a Box<Script> into a ScriptBuf without copying or allocating.

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for Script

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for Script

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for Script

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for Script

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Debug for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for &'de Script

    Can only deserialize borrowed bytes.

    +

    Trait Implementations§

    §

    impl AsMut<[u8]> for Script

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for Script

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for Script

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for Script

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Debug for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for &'de Script

    Can only deserialize borrowed bytes.

    §

    fn deserialize<D>( deserializer: D ) -> Result<&'de Script, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Script

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl<'a> From<&'a Script> for Arc<Script>

    Note: This will fail to compile on old Rust for targets that don’t support atomics

    -
    §

    fn from(value: &'a Script) -> Arc<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Box<Script>

    §

    fn from(value: &'a Script) -> Box<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Cow<'a, Script>

    §

    fn from(value: &'a Script) -> Cow<'a, Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Rc<Script>

    §

    fn from(value: &'a Script) -> Rc<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for Box<Script>

    §

    fn from(value: Cow<'a, Script>) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl Hash for Script

    §

    fn hash<__H>(&self, state: &mut __H)
    where +
    §

    fn from(value: &'a Script) -> Arc<Script>

    Converts to this type from the input type.

    §

    impl<'a> From<&'a Script> for Box<Script>

    §

    fn from(value: &'a Script) -> Box<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Cow<'a, Script>

    §

    fn from(value: &'a Script) -> Cow<'a, Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for Rc<Script>

    §

    fn from(value: &'a Script) -> Rc<Script>

    Converts to this type from the input type.
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for Box<Script>

    §

    fn from(value: Cow<'a, Script>) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl Hash for Script

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    §

    impl Index<(Bound<usize>, Bound<usize>)> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: (Bound<usize>, Bound<usize>) ) -> &<Script as Index<(Bound<usize>, Bound<usize>)>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<Range<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &<Script as Index<Range<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFrom<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: Range<usize>) -> &<Script as Index<Range<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFrom<usize>> for Script

    Script subslicing operation - read slicing safety!

    +
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeFrom<usize> ) -> &<Script as Index<RangeFrom<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeFull> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &<Script as Index<RangeFull>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeInclusive<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index(&self, index: RangeFull) -> &<Script as Index<RangeFull>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeInclusive<usize>> for Script

    Script subslicing operation - read slicing safety!

    +
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeInclusive<usize> ) -> &<Script as Index<RangeInclusive<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeTo<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeTo<usize> ) -> &<Script as Index<RangeTo<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl Index<RangeToInclusive<usize>> for Script

    Script subslicing operation - read slicing safety!

    -
    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( +

    §

    type Output = Script

    The returned type after indexing.
    §

    fn index( &self, index: RangeToInclusive<usize> -) -> &<Script as Index<RangeToInclusive<usize>>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Script

    §

    fn cmp(&self, other: &Script) -> Ordering

    This method returns an Ordering between self and other. Read more
    §

    impl PartialEq<Script> for ScriptBuf

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +) -> &<Script as Index<RangeToInclusive<usize>>>::Output
    Performs the indexing (container[index]) operation. Read more
    §

    impl LowerHex for Script

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Script

    §

    fn cmp(&self, other: &Script) -> Ordering

    This method returns an Ordering between self and other. Read more
    §

    impl PartialEq<Script> for ScriptBuf

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<ScriptBuf> for Script

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for Script

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for Script

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl PartialOrd for Script

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl Serialize for Script

    §

    fn serialize<S>( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptBuf.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptBuf.html index c547887d4c..d9c8b43673 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptBuf.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptBuf.html @@ -181,14 +181,14 @@

    §Returns
    For better performance you should generally prefer displaying the script but if String is required (this is common in tests) this method can be used.

    pub fn first_opcode(&self) -> Option<Opcode>

    Returns the first opcode of the script (if there is any).

    -

    Trait Implementations§

    §

    impl AsMut<[u8]> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for ScriptBuf

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ScriptBuf

    §

    fn clone(&self) -> ScriptBuf

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for ScriptBuf

    Trait Implementations§

    §

    impl AsMut<[u8]> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut [u8]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsMut<Script> for ScriptBuf

    §

    fn as_mut(&mut self) -> &mut Script

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[u8]> for ScriptBuf

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<Script> for ScriptBuf

    §

    fn as_ref(&self) -> &Script

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<Script> for ScriptBuf

    §

    fn borrow(&self) -> &Script

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<Script> for ScriptBuf

    §

    fn borrow_mut(&mut self) -> &mut Script

    Mutably borrows from an owned value. Read more
    §

    impl Clone for ScriptBuf

    §

    fn clone(&self) -> ScriptBuf

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for ScriptBuf

    §

    fn consensus_decode_from_finite_reader<R>(r: &mut R) -> Result<ScriptBuf, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    fn consensus_decode<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    impl Default for ScriptBuf

    §

    fn default() -> ScriptBuf

    Returns the “default value” for a type. Read more
    §

    impl Deref for ScriptBuf

    §

    type Target = Script

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<ScriptBuf as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for ScriptBuf

    §

    fn deref_mut(&mut self) -> &mut <ScriptBuf as Deref>::Target

    Mutably dereferences the value.
    §

    impl<'de> Deserialize<'de> for ScriptBuf

    §

    fn deserialize<D>( deserializer: D ) -> Result<ScriptBuf, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for ScriptBuf

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for ScriptBuf

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl<'a> Extend<Instruction<'a>> for ScriptBuf

    §

    fn extend<T>(&mut self, iter: T)
    where - T: IntoIterator<Item = Instruction<'a>>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Address> for ScriptBuf

    §

    fn from(a: Address) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for ScriptBuf

    §

    fn from(value: Cow<'a, Script>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Cow<'_, Script>

    §

    fn from(value: ScriptBuf) -> Cow<'_, Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Vec<u8>

    §

    fn from(v: ScriptBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ScriptBuf

    §

    fn from(v: Vec<u8>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> FromIterator<Instruction<'a>> for ScriptBuf

    §

    fn from_iter<T>(iter: T) -> ScriptBuf
    where + T: IntoIterator<Item = Instruction<'a>>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, item: A)

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    §

    impl<'a> From<&'a Script> for ScriptBuf

    §

    fn from(value: &'a Script) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Address> for ScriptBuf

    §

    fn from(a: Address) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> From<Cow<'a, Script>> for ScriptBuf

    §

    fn from(value: Cow<'a, Script>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Box<Script>

    §

    fn from(v: ScriptBuf) -> Box<Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Cow<'_, Script>

    §

    fn from(value: ScriptBuf) -> Cow<'_, Script>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for Vec<u8>

    §

    fn from(v: ScriptBuf) -> Vec<u8>

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Vec<u8>> for ScriptBuf

    §

    fn from(v: Vec<u8>) -> ScriptBuf

    Converts to this type from the input type.
    §

    impl<'a> FromIterator<Instruction<'a>> for ScriptBuf

    §

    fn from_iter<T>(iter: T) -> ScriptBuf
    where T: IntoIterator<Item = Instruction<'a>>,

    Creates a value from an iterator. Read more
    §

    impl Hash for ScriptBuf

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, @@ -197,14 +197,14 @@
    §Returns
    Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<Script> for ScriptBuf

    §

    fn eq(&self, other: &Script) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<ScriptBuf> for Script

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for ScriptBuf

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<ScriptBuf> for Script

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for ScriptBuf

    §

    fn eq(&self, other: &ScriptBuf) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<Script> for ScriptBuf

    §

    fn partial_cmp(&self, other: &Script) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl PartialOrd<ScriptBuf> for Script

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl PartialOrd for ScriptBuf

    §

    fn partial_cmp(&self, other: &ScriptBuf) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl Serialize for ScriptBuf

    §

    fn serialize<S>( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptHash.html index 73d20f099d..fc1ebeb519 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.ScriptHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl ScriptHash

    pub fn from_raw_hash(inner: Hash) -> ScriptHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for ScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for ScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for ScriptHash

    §

    fn clone(&self) -> ScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    fn deserialize<D>(d: D) -> Result<ScriptHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for ScriptHash

    §

    fn from(inner: Hash) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for Hash

    §

    fn from(hashtype: ScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for PushBytesBuf

    §

    fn from(hash: ScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for ScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ScriptHash, <ScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for ScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for ScriptHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for ScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for ScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for ScriptHash

    §

    fn clone(&self) -> ScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for ScriptHash

    §

    fn deserialize<D>(d: D) -> Result<ScriptHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for ScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for ScriptHash

    §

    fn from(script: &Script) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for ScriptHash

    §

    fn from(script: &ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for ScriptHash

    §

    fn from(inner: Hash) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for ScriptHash

    §

    fn from(script: ScriptBuf) -> ScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for Hash

    §

    fn from(hashtype: ScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<ScriptHash> for PushBytesBuf

    §

    fn from(hash: ScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for ScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<ScriptHash, <ScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for ScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.SegwitV0Sighash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.SegwitV0Sighash.html index 5347249ad9..5f6737f151 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.SegwitV0Sighash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.SegwitV0Sighash.html @@ -2,10 +2,10 @@

    Implementations§

    §

    impl SegwitV0Sighash

    pub fn from_raw_hash(inner: Hash) -> SegwitV0Sighash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SegwitV0Sighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SegwitV0Sighash

    §

    fn clone(&self) -> SegwitV0Sighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for SegwitV0Sighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for SegwitV0Sighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for SegwitV0Sighash

    §

    fn clone(&self) -> SegwitV0Sighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for SegwitV0Sighash

    §

    fn deserialize<D>( d: D ) -> Result<SegwitV0Sighash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for SegwitV0Sighash

    §

    fn from(inner: Hash) -> SegwitV0Sighash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Hash

    §

    fn from(hashtype: SegwitV0Sighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Message

    §

    fn from(hash: SegwitV0Sighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for SegwitV0Sighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for SegwitV0Sighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for SegwitV0Sighash

    §

    fn from(inner: Hash) -> SegwitV0Sighash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Hash

    §

    fn from(hashtype: SegwitV0Sighash) -> Hash

    Converts to this type from the input type.
    §

    impl From<SegwitV0Sighash> for Message

    §

    fn from(hash: SegwitV0Sighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for SegwitV0Sighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<SegwitV0Sighash, <SegwitV0Sighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for SegwitV0Sighash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Sequence.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Sequence.html index 354bfcfe07..142da1ce7b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Sequence.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Sequence.html @@ -59,7 +59,7 @@
    §His __deserializer: __D ) -> Result<Sequence, <__D as Deserializer<'de>>::Error>
    where __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Sequence

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<LockTime> for Sequence

    §

    fn from(lt: LockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<RelLockTime> for Sequence

    §

    fn from(lock_time: RelLockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<Sequence> for u32

    §

    fn from(sequence: Sequence) -> u32

    Converts to this type from the input type.
    §

    impl FromStr for Sequence

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Sequence, <Sequence as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Sequence

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<LockTime> for Sequence

    §

    fn from(lt: LockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<RelLockTime> for Sequence

    §

    fn from(lock_time: RelLockTime) -> Sequence

    Converts to this type from the input type.
    §

    impl From<Sequence> for u32

    §

    fn from(sequence: Sequence) -> u32

    Converts to this type from the input type.
    §

    impl FromStr for Sequence

    §

    type Err = ParseIntError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Sequence, <Sequence as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Sequence

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl LowerHex for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Ord for Sequence

    §

    fn cmp(&self, other: &Sequence) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where @@ -92,9 +92,9 @@
    §His &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Sequence, <Sequence as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl TryFrom<&str> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Sequence, <Sequence as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from( s: Box<str> -) -> Result<Sequence, <Sequence as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for LockTime

    §

    type Error = DisabledLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<LockTime, DisabledLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for RelLockTime

    §

    type Error = RelLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<RelLockTime, RelLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<String> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Sequence, <Sequence as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl UpperHex for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Copy for Sequence

    §

    impl Eq for Sequence

    §

    impl StructuralPartialEq for Sequence

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +) -> Result<Sequence, <Sequence as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for LockTime

    §

    type Error = DisabledLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<LockTime, DisabledLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<Sequence> for RelLockTime

    §

    type Error = RelLockTimeError

    The type returned in the event of a conversion error.
    §

    fn try_from(seq: Sequence) -> Result<RelLockTime, RelLockTimeError>

    Performs the conversion.
    §

    impl TryFrom<String> for Sequence

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Sequence, <Sequence as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl UpperHex for Sequence

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Copy for Sequence

    §

    impl Eq for Sequence

    §

    impl StructuralPartialEq for Sequence

    Auto Trait Implementations§

    §

    impl Freeze for Sequence

    §

    impl RefUnwindSafe for Sequence

    §

    impl Send for Sequence

    §

    impl Sync for Sequence

    §

    impl Unpin for Sequence

    §

    impl UnwindSafe for Sequence

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    §

    impl<T, Pk> AssetProvider<Pk> for T
    where T: Satisfier<Pk>, Pk: MiniscriptKey + ToPublicKey,

    §

    fn provider_lookup_ecdsa_sig(&self, pk: &Pk) -> bool

    Given a public key, look up an ECDSA signature with that key, return whether we found it
    §

    fn provider_lookup_tap_key_spend_sig(&self, _: &Pk) -> Option<usize>

    Lookup the tap key spend sig and return its size
    §

    fn provider_lookup_tap_leaf_script_sig( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapLeafHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapLeafHash.html index 88b0948180..d2c5e45315 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapLeafHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapLeafHash.html @@ -4,11 +4,11 @@

    pub fn to_raw_hash(self) -> Hash<TapLeafTag>

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash<TapLeafTag>

    Returns a reference to the inner hash (sha256, sh256d etc.).

    §

    impl TapLeafHash

    pub fn from_script(script: &Script, ver: LeafVersion) -> TapLeafHash

    Computes the leaf hash from components.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapLeafHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapLeafHash

    §

    fn clone(&self) -> TapLeafHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapLeafHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TapLeafHash

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapLeafHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapLeafHash

    §

    fn clone(&self) -> TapLeafHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapLeafHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TapLeafHash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<TapLeafHash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for TapLeafHash

    §

    fn deserialize<D>(d: D) -> Result<TapLeafHash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapLeafHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for TapLeafHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash<TapLeafTag>> for TapLeafHash

    §

    fn from(inner: Hash<TapLeafTag>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl<'s> From<ScriptPath<'s>> for TapLeafHash

    §

    fn from(script_path: ScriptPath<'s>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for Hash<TapLeafTag>

    §

    fn from(hashtype: TapLeafHash) -> Hash<TapLeafTag>

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl FromStr for TapLeafHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapLeafHash, <TapLeafHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapLeafHash

    §

    type Engine = <Hash<TapLeafTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash<TapLeafTag>> for TapLeafHash

    §

    fn from(inner: Hash<TapLeafTag>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl<'s> From<ScriptPath<'s>> for TapLeafHash

    §

    fn from(script_path: ScriptPath<'s>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for Hash<TapLeafTag>

    §

    fn from(hashtype: TapLeafHash) -> Hash<TapLeafTag>

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl FromStr for TapLeafHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapLeafHash, <TapLeafHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapLeafHash

    §

    type Engine = <Hash<TapLeafTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapLeafTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapNodeHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapNodeHash.html index 654a24e6e5..be2d26a324 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapNodeHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapNodeHash.html @@ -10,7 +10,7 @@ because it does not require the caller to import the Hash trait.

    pub fn from_script(script: &Script, ver: LeafVersion) -> TapNodeHash

    Computes the TapNodeHash from a script and a leaf version.

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapNodeHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapNodeHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapNodeHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapNodeHash

    §

    fn clone(&self) -> TapNodeHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapNodeHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapNodeHash

    §

    fn deserialize<D>(d: D) -> Result<TapNodeHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapNodeHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&LeafNode> for TapNodeHash

    §

    fn from(leaf: &LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapBranchTag>> for TapNodeHash

    §

    fn from(inner: Hash<TapBranchTag>) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<LeafNode> for TapNodeHash

    §

    fn from(leaf: LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapNodeHash> for Hash<TapBranchTag>

    §

    fn from(hashtype: TapNodeHash) -> Hash<TapBranchTag>

    Converts to this type from the input type.
    §

    impl FromStr for TapNodeHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapNodeHash, <TapNodeHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapNodeHash

    §

    type Engine = <Hash<TapBranchTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapNodeHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&LeafNode> for TapNodeHash

    §

    fn from(leaf: &LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapBranchTag>> for TapNodeHash

    §

    fn from(inner: Hash<TapBranchTag>) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<LeafNode> for TapNodeHash

    §

    fn from(leaf: LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapNodeHash> for Hash<TapBranchTag>

    §

    fn from(hashtype: TapNodeHash) -> Hash<TapBranchTag>

    Converts to this type from the input type.
    §

    impl FromStr for TapNodeHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapNodeHash, <TapNodeHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapNodeHash

    §

    type Engine = <Hash<TapBranchTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapBranchTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapSighash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapSighash.html index 8f03ec6ca8..f7cc08a831 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapSighash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapSighash.html @@ -4,7 +4,7 @@

    pub fn to_raw_hash(self) -> Hash<TapSighashTag>

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash<TapSighashTag>

    Returns a reference to the inner hash (sha256, sh256d etc.).

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapSighash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapSighash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapSighash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapSighash

    §

    fn clone(&self) -> TapSighash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapSighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapSighash

    §

    fn deserialize<D>(d: D) -> Result<TapSighash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash<TapSighashTag>> for TapSighash

    §

    fn from(inner: Hash<TapSighashTag>) -> TapSighash

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Hash<TapSighashTag>

    §

    fn from(hashtype: TapSighash) -> Hash<TapSighashTag>

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Message

    §

    fn from(hash: TapSighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for TapSighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighash, <TapSighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighash

    §

    type Engine = <Hash<TapSighashTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapSighash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash<TapSighashTag>> for TapSighash

    §

    fn from(inner: Hash<TapSighashTag>) -> TapSighash

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Hash<TapSighashTag>

    §

    fn from(hashtype: TapSighash) -> Hash<TapSighashTag>

    Converts to this type from the input type.
    §

    impl From<TapSighash> for Message

    §

    fn from(hash: TapSighash) -> Message

    Converts to this type from the input type.
    §

    impl FromStr for TapSighash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapSighash, <TapSighash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapSighash

    §

    type Engine = <Hash<TapSighashTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapSighashTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapTweakHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapTweakHash.html index 3ec92da28f..082b60f02b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapTweakHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TapTweakHash.html @@ -9,8 +9,8 @@ ) -> TapTweakHash

    Creates a new BIP341 TapTweakHash from key and tweak. Produces H_taptweak(P||R) where P is the internal key and R is the merkle root.

    pub fn to_scalar(self) -> Scalar

    Converts a TapTweakHash into a Scalar ready for use with key tweaking API.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapTweakHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapTweakHash

    §

    fn clone(&self) -> TapTweakHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    fn deserialize<D>(d: D) -> Result<TapTweakHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: &TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapTweakTag>> for TapTweakHash

    §

    fn from(inner: Hash<TapTweakTag>) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<TapTweakHash> for Hash<TapTweakTag>

    §

    fn from(hashtype: TapTweakHash) -> Hash<TapTweakTag>

    Converts to this type from the input type.
    §

    impl From<TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl FromStr for TapTweakHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapTweakHash, <TapTweakHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapTweakHash

    §

    type Engine = <Hash<TapTweakTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapTweakHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapTweakHash

    §

    fn clone(&self) -> TapTweakHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    fn deserialize<D>(d: D) -> Result<TapTweakHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: &TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapTweakTag>> for TapTweakHash

    §

    fn from(inner: Hash<TapTweakTag>) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<TapTweakHash> for Hash<TapTweakTag>

    §

    fn from(hashtype: TapTweakHash) -> Hash<TapTweakTag>

    Converts to this type from the input type.
    §

    impl From<TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl FromStr for TapTweakHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapTweakHash, <TapTweakHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapTweakHash

    §

    type Engine = <Hash<TapTweakTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapTweakTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Transaction.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Transaction.html index 3f1416fab9..f580db37e0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Transaction.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Transaction.html @@ -148,7 +148,7 @@
    §Returns
    __deserializer: __D ) -> Result<Transaction, <__D as Deserializer<'de>>::Error>
    where __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Encodable for Transaction

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl Hash for Transaction

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl Hash for Transaction

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Transaction

    §

    fn cmp(&self, other: &Transaction) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TxMerkleNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TxMerkleNode.html index dad7bae660..9f7179984d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TxMerkleNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.TxMerkleNode.html @@ -2,7 +2,7 @@

    Implementations§

    §

    impl TxMerkleNode

    pub fn from_raw_hash(inner: Hash) -> TxMerkleNode

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TxMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TxMerkleNode

    §

    fn clone(&self) -> TxMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TxMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TxMerkleNode

    Trait Implementations§

    §

    impl AsRef<[u8]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TxMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TxMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TxMerkleNode

    §

    fn clone(&self) -> TxMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TxMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TxMerkleNode

    §

    fn consensus_decode<R>(r: &mut R) -> Result<TxMerkleNode, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for TxMerkleNode

    §

    fn deserialize<D>(d: D) -> Result<TxMerkleNode, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TxMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for TxMerkleNode

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Txid.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Txid.html index bd557f8aa1..c4fe6f5eda 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Txid.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Txid.html @@ -10,7 +10,7 @@ R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Txid

    §

    fn deserialize<D>(d: D) -> Result<Txid, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Txid

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Txid

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for TxMerkleNode

    §

    fn from(txid: Txid) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Txid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Txid, <Txid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Txid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Txid

    §

    fn from(tx: &Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Hash> for Txid

    §

    fn from(inner: Hash) -> Txid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Txid

    §

    fn from(tx: Transaction) -> Txid

    Converts to this type from the input type.
    §

    impl From<Txid> for Hash

    §

    fn from(hashtype: Txid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Txid> for TxMerkleNode

    §

    fn from(txid: Txid) -> TxMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Txid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Txid, <Txid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Txid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.VarInt.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.VarInt.html index 94386bf30b..9f638e4485 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.VarInt.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.VarInt.html @@ -5,11 +5,11 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl Encodable for VarInt

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<u16> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u16) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u32> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u32) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u64> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u64) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u8> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: u8) -> VarInt

    Converts to this type from the input type.
    §

    impl From<usize> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    -
    §

    fn from(x: usize) -> VarInt

    Converts to this type from the input type.
    §

    impl Ord for VarInt

    §

    fn cmp(&self, other: &VarInt) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    fn from(x: u16) -> VarInt

    Converts to this type from the input type.

    §

    impl From<u32> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: u32) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u64> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: u64) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u8> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: u8) -> VarInt

    Converts to this type from the input type.
    §

    impl From<usize> for VarInt

    Creates a VarInt from a usize by casting the to a u64.

    +
    §

    fn from(x: usize) -> VarInt

    Converts to this type from the input type.
    §

    impl Ord for VarInt

    §

    fn cmp(&self, other: &VarInt) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for VarInt

    §

    fn eq(&self, other: &VarInt) -> bool

    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WPubkeyHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WPubkeyHash.html index eba146d475..ced05bfb3d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WPubkeyHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WPubkeyHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl WPubkeyHash

    pub fn from_raw_hash(inner: Hash) -> WPubkeyHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WPubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WPubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WPubkeyHash

    §

    fn clone(&self) -> WPubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<WPubkeyHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WPubkeyHash

    §

    fn from(inner: Hash) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for Hash

    §

    fn from(hashtype: WPubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for PushBytesBuf

    §

    fn from(hash: WPubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WPubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WPubkeyHash, <WPubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WPubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for WPubkeyHash

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WPubkeyHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WPubkeyHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WPubkeyHash

    §

    fn clone(&self) -> WPubkeyHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WPubkeyHash

    §

    fn deserialize<D>(d: D) -> Result<WPubkeyHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WPubkeyHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: &CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<CompressedPublicKey> for WPubkeyHash

    §

    fn from(key: CompressedPublicKey) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WPubkeyHash

    §

    fn from(inner: Hash) -> WPubkeyHash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for Hash

    §

    fn from(hashtype: WPubkeyHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WPubkeyHash> for PushBytesBuf

    §

    fn from(hash: WPubkeyHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WPubkeyHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WPubkeyHash, <WPubkeyHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WPubkeyHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WScriptHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WScriptHash.html index 113850dad4..9947ad3e94 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WScriptHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WScriptHash.html @@ -2,8 +2,8 @@

    Implementations§

    §

    impl WScriptHash

    pub fn from_raw_hash(inner: Hash) -> WScriptHash

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WScriptHash

    §

    fn clone(&self) -> WScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    fn deserialize<D>(d: D) -> Result<WScriptHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WScriptHash

    §

    fn from(inner: Hash) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for Hash

    §

    fn from(hashtype: WScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for PushBytesBuf

    §

    fn from(hash: WScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WScriptHash, <WScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WScriptHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<PushBytes> for WScriptHash

    §

    fn as_ref(&self) -> &PushBytes

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WScriptHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WScriptHash

    §

    fn clone(&self) -> WScriptHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WScriptHash

    §

    fn deserialize<D>(d: D) -> Result<WScriptHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WScriptHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Script> for WScriptHash

    §

    fn from(script: &Script) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<&ScriptBuf> for WScriptHash

    §

    fn from(script: &ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<Hash> for WScriptHash

    §

    fn from(inner: Hash) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<ScriptBuf> for WScriptHash

    §

    fn from(script: ScriptBuf) -> WScriptHash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for Hash

    §

    fn from(hashtype: WScriptHash) -> Hash

    Converts to this type from the input type.
    §

    impl From<WScriptHash> for PushBytesBuf

    §

    fn from(hash: WScriptHash) -> PushBytesBuf

    Converts to this type from the input type.
    §

    impl FromStr for WScriptHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<WScriptHash, <WScriptHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WScriptHash

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Weight.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Weight.html index a50d04e23c..b1f61556eb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Weight.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Weight.html @@ -42,7 +42,7 @@
    §Panics
    __H: Hasher,
    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Mul<FeeRate> for Weight

    Computes ceiling so that fee computation is conservative.

    -
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for u64

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <u64 as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<u64> for Weight

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: u64) -> <Weight as Mul<u64>>::Output

    Performs the * operation. Read more
    §

    impl MulAssign<u64> for Weight

    §

    fn mul_assign(&mut self, rhs: u64)

    Performs the *= operation. Read more
    §

    impl Ord for Weight

    §

    fn cmp(&self, other: &Weight) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where +
    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: FeeRate) -> <Weight as Mul<FeeRate>>::Output

    Performs the * operation. Read more

    §

    impl Mul<Weight> for FeeRate

    §

    type Output = Amount

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <FeeRate as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<Weight> for u64

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: Weight) -> <u64 as Mul<Weight>>::Output

    Performs the * operation. Read more
    §

    impl Mul<u64> for Weight

    §

    type Output = Weight

    The resulting type after applying the * operator.
    §

    fn mul(self, rhs: u64) -> <Weight as Mul<u64>>::Output

    Performs the * operation. Read more
    §

    impl MulAssign<u64> for Weight

    §

    fn mul_assign(&mut self, rhs: u64)

    Performs the *= operation. Read more
    §

    impl Ord for Weight

    §

    fn cmp(&self, other: &Weight) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for Weight

    §

    fn eq(&self, other: &Weight) -> bool

    This method tests for self and other values to be equal, and is used @@ -53,11 +53,11 @@
    §Panics
    &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,
    Serialize this value into the given Serde serializer. Read more
    §

    impl Sub for Weight

    §

    type Output = Weight

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: Weight) -> <Weight as Sub>::Output

    Performs the - operation. Read more
    §

    impl SubAssign for Weight

    §

    fn sub_assign(&mut self, rhs: Weight)

    Performs the -= operation. Read more
    §

    impl<'a> Sum<&'a Weight> for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Sub for Weight

    §

    type Output = Weight

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: Weight) -> <Weight as Sub>::Output

    Performs the - operation. Read more
    §

    impl SubAssign for Weight

    §

    fn sub_assign(&mut self, rhs: Weight)

    Performs the -= operation. Read more
    §

    impl<'a> Sum<&'a Weight> for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where I: Iterator<Item = &'a Weight>,

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    §

    impl Sum for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where +“summing up” the items.

    §

    impl Sum for Weight

    §

    fn sum<I>(iter: I) -> Weight
    where I: Iterator<Item = Weight>,

    Method which takes an iterator and generates Self from the elements by -“summing up” the items.
    §

    impl TryFrom<&str> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Weight, <Weight as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: Box<str>) -> Result<Weight, <Weight as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Weight

    §

    impl Eq for Weight

    §

    impl StructuralPartialEq for Weight

    Auto Trait Implementations§

    §

    impl Freeze for Weight

    §

    impl RefUnwindSafe for Weight

    §

    impl Send for Weight

    §

    impl Sync for Weight

    §

    impl Unpin for Weight

    §

    impl UnwindSafe for Weight

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +“summing up” the items.

    §

    impl TryFrom<&str> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: &str) -> Result<Weight, <Weight as TryFrom<&str>>::Error>

    Performs the conversion.
    §

    impl TryFrom<Box<str>> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: Box<str>) -> Result<Weight, <Weight as TryFrom<Box<str>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<String> for Weight

    §

    type Error = ParseIntError

    The type returned in the event of a conversion error.
    §

    fn try_from(s: String) -> Result<Weight, <Weight as TryFrom<String>>::Error>

    Performs the conversion.
    §

    impl Copy for Weight

    §

    impl Eq for Weight

    §

    impl StructuralPartialEq for Weight

    Auto Trait Implementations§

    §

    impl Freeze for Weight

    §

    impl RefUnwindSafe for Weight

    §

    impl Send for Weight

    §

    impl Sync for Weight

    §

    impl Unpin for Weight

    §

    impl UnwindSafe for Weight

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Witness.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Witness.html index 70a7b34adc..ac40fa4ccb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Witness.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Witness.html @@ -37,7 +37,7 @@ deserializer: D ) -> Result<Witness, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Encodable for Witness

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&[&[u8]]> for Witness

    §

    fn from(slice: &[&[u8]]) -> Witness

    Converts to this type from the input type.
    §

    impl From<&[Vec<u8>]> for Witness

    §

    fn from(slice: &[Vec<u8>]) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<&[u8]>> for Witness

    §

    fn from(vec: Vec<&[u8]>) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<Vec<u8>>> for Witness

    §

    fn from(vec: Vec<Vec<u8>>) -> Witness

    Converts to this type from the input type.
    §

    impl Hash for Witness

    §

    fn hash<__H>(&self, state: &mut __H)
    where + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&[&[u8]]> for Witness

    §

    fn from(slice: &[&[u8]]) -> Witness

    Converts to this type from the input type.
    §

    impl From<&[Vec<u8>]> for Witness

    §

    fn from(slice: &[Vec<u8>]) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<&[u8]>> for Witness

    §

    fn from(vec: Vec<&[u8]>) -> Witness

    Converts to this type from the input type.
    §

    impl From<Vec<Vec<u8>>> for Witness

    §

    fn from(vec: Vec<Vec<u8>>) -> Witness

    Converts to this type from the input type.
    §

    impl Hash for Witness

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Index<usize> for Witness

    §

    type Output = [u8]

    The returned type after indexing.
    §

    fn index(&self, index: usize) -> &<Witness as Index<usize>>::Output

    Performs the indexing (container[index]) operation. Read more
    §

    impl<'a> IntoIterator for &'a Witness

    §

    type IntoIter = Iter<'a>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a [u8]

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a Witness as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for Witness

    §

    fn cmp(&self, other: &Witness) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessCommitment.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessCommitment.html index b903f4e90b..0c02f9d272 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessCommitment.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessCommitment.html @@ -2,7 +2,7 @@

    Implementations§

    §

    impl WitnessCommitment

    pub fn from_raw_hash(inner: Hash) -> WitnessCommitment

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessCommitment

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessCommitment

    §

    fn clone(&self) -> WitnessCommitment

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessCommitment

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessCommitment

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessCommitment

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessCommitment

    §

    fn clone(&self) -> WitnessCommitment

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessCommitment

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for WitnessCommitment

    §

    fn deserialize<D>( d: D ) -> Result<WitnessCommitment, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WitnessCommitment

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<Hash> for WitnessCommitment

    §

    fn from(inner: Hash) -> WitnessCommitment

    Converts to this type from the input type.
    §

    impl From<WitnessCommitment> for Hash

    §

    fn from(hashtype: WitnessCommitment) -> Hash

    Converts to this type from the input type.
    §

    impl FromStr for WitnessCommitment

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessMerkleNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessMerkleNode.html index 03a28f3f08..fc9ece7984 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessMerkleNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.WitnessMerkleNode.html @@ -2,13 +2,13 @@

    Implementations§

    §

    impl WitnessMerkleNode

    pub fn from_raw_hash(inner: Hash) -> WitnessMerkleNode

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessMerkleNode

    §

    fn clone(&self) -> WitnessMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for WitnessMerkleNode

    Trait Implementations§

    §

    impl AsRef<[u8]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for WitnessMerkleNode

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for WitnessMerkleNode

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for WitnessMerkleNode

    §

    fn clone(&self) -> WitnessMerkleNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for WitnessMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for WitnessMerkleNode

    §

    fn consensus_decode<R>(r: &mut R) -> Result<WitnessMerkleNode, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for WitnessMerkleNode

    §

    fn deserialize<D>( d: D ) -> Result<WitnessMerkleNode, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for WitnessMerkleNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for WitnessMerkleNode

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessMerkleNode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( + W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash> for WitnessMerkleNode

    §

    fn from(inner: Hash) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl From<WitnessMerkleNode> for Hash

    §

    fn from(hashtype: WitnessMerkleNode) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for WitnessMerkleNode

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str( s: &str ) -> Result<WitnessMerkleNode, <WitnessMerkleNode as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for WitnessMerkleNode

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Wtxid.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Wtxid.html index 37beffc1ed..c6465281fb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Wtxid.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.Wtxid.html @@ -6,7 +6,7 @@ R: BufRead + ?Sized,
    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for Wtxid

    §

    fn deserialize<D>(d: D) -> Result<Wtxid, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Wtxid

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Wtxid

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Wtxid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Wtxid, <Wtxid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Wtxid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<&Transaction> for Wtxid

    §

    fn from(tx: &Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Hash> for Wtxid

    §

    fn from(inner: Hash) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Transaction> for Wtxid

    §

    fn from(tx: Transaction) -> Wtxid

    Converts to this type from the input type.
    §

    impl From<Wtxid> for Hash

    §

    fn from(hashtype: Wtxid) -> Hash

    Converts to this type from the input type.
    §

    impl From<Wtxid> for WitnessMerkleNode

    §

    fn from(wtxid: Wtxid) -> WitnessMerkleNode

    Converts to this type from the input type.
    §

    impl FromStr for Wtxid

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Wtxid, <Wtxid as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for Wtxid

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = true

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XKeyIdentifier.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XKeyIdentifier.html index 98a842fbbb..8d7147d075 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XKeyIdentifier.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XKeyIdentifier.html @@ -2,10 +2,10 @@

    Implementations§

    §

    impl XKeyIdentifier

    pub fn from_raw_hash(inner: Hash) -> XKeyIdentifier

    Creates this wrapper type from the inner hash type.

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for XKeyIdentifier

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for XKeyIdentifier

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for XKeyIdentifier

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for XKeyIdentifier

    §

    fn clone(&self) -> XKeyIdentifier

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for XKeyIdentifier

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    fn deserialize<D>( +

    Trait Implementations§

    §

    impl AsRef<[u8]> for XKeyIdentifier

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 20]> for XKeyIdentifier

    §

    fn as_ref(&self) -> &[u8; 20]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for XKeyIdentifier

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for XKeyIdentifier

    §

    fn clone(&self) -> XKeyIdentifier

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for XKeyIdentifier

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XKeyIdentifier

    §

    fn deserialize<D>( d: D ) -> Result<XKeyIdentifier, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XKeyIdentifier

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Xpub> for XKeyIdentifier

    §

    fn from(key: &Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<Hash> for XKeyIdentifier

    §

    fn from(inner: Hash) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<XKeyIdentifier> for Hash

    §

    fn from(hashtype: XKeyIdentifier) -> Hash

    Converts to this type from the input type.
    §

    impl From<Xpub> for XKeyIdentifier

    §

    fn from(key: Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl FromStr for XKeyIdentifier

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XKeyIdentifier, <XKeyIdentifier as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XKeyIdentifier

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XKeyIdentifier

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&Xpub> for XKeyIdentifier

    §

    fn from(key: &Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<Hash> for XKeyIdentifier

    §

    fn from(inner: Hash) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl From<XKeyIdentifier> for Hash

    §

    fn from(hashtype: XKeyIdentifier) -> Hash

    Converts to this type from the input type.
    §

    impl From<Xpub> for XKeyIdentifier

    §

    fn from(key: Xpub) -> XKeyIdentifier

    Converts to this type from the input type.
    §

    impl FromStr for XKeyIdentifier

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XKeyIdentifier, <XKeyIdentifier as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XKeyIdentifier

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 20usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XOnlyPublicKey.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XOnlyPublicKey.html index ee9c89faeb..da74090ae9 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XOnlyPublicKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/struct.XOnlyPublicKey.html @@ -86,8 +86,8 @@
    §Examples

    Trait Implementations§

    §

    impl CPtr for XOnlyPublicKey

    §

    impl Clone for XOnlyPublicKey

    §

    fn clone(&self) -> XOnlyPublicKey

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for XOnlyPublicKey

    §

    fn deserialize<D>( d: D ) -> Result<XOnlyPublicKey, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<TweakedPublicKey> for XOnlyPublicKey

    §

    fn from(pair: TweakedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<XOnlyPublicKey> for XOnlyPublicKey

    Creates a new schnorr public key from a FFI x-only public key.

    -
    §

    fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for XOnlyPublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XOnlyPublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XOnlyPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<CompressedPublicKey> for XOnlyPublicKey

    §

    fn from(pk: CompressedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(pk: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<PublicKey> for XOnlyPublicKey

    §

    fn from(src: PublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<TweakedPublicKey> for XOnlyPublicKey

    §

    fn from(pair: TweakedPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl From<XOnlyPublicKey> for XOnlyPublicKey

    Creates a new schnorr public key from a FFI x-only public key.

    +
    §

    fn from(pk: XOnlyPublicKey) -> XOnlyPublicKey

    Converts to this type from the input type.
    §

    impl FromStr for XOnlyPublicKey

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<XOnlyPublicKey, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for XOnlyPublicKey

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl LowerHex for XOnlyPublicKey

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl MiniscriptKey for XOnlyPublicKey

    §

    type Sha256 = Hash

    The associated bitcoin::hashes::sha256::Hash for this [MiniscriptKey], used in the diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/enum.SigFromSliceError.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/enum.SigFromSliceError.html index 508b9bcfd3..2b90b29c16 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/enum.SigFromSliceError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/enum.SigFromSliceError.html @@ -6,7 +6,7 @@

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    SighashType(InvalidSighashTypeError)

    Invalid signature hash type.

    §

    Secp256k1(Error)

    A secp256k1 error.

    §

    InvalidSignatureSize(usize)

    Invalid taproot signature size

    -

    Trait Implementations§

    §

    impl Clone for SigFromSliceError

    §

    fn clone(&self) -> SigFromSliceError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SigFromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for SigFromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for SigFromSliceError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for SigFromSliceError

    §

    fn from(e: Error) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl From<Infallible> for SigFromSliceError

    §

    fn from(never: Infallible) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl From<InvalidSighashTypeError> for SigFromSliceError

    §

    fn from(err: InvalidSighashTypeError) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl PartialEq for SigFromSliceError

    §

    fn eq(&self, other: &SigFromSliceError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for SigFromSliceError

    §

    fn clone(&self) -> SigFromSliceError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SigFromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Display for SigFromSliceError

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Error for SigFromSliceError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    §

    impl From<Error> for SigFromSliceError

    §

    fn from(e: Error) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl From<Infallible> for SigFromSliceError

    §

    fn from(never: Infallible) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl From<InvalidSighashTypeError> for SigFromSliceError

    §

    fn from(err: InvalidSighashTypeError) -> SigFromSliceError

    Converts to this type from the input type.
    §

    impl PartialEq for SigFromSliceError

    §

    fn eq(&self, other: &SigFromSliceError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for SigFromSliceError

    §

    impl StructuralPartialEq for SigFromSliceError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/merkle_branch/struct.TaprootMerkleBranch.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/merkle_branch/struct.TaprootMerkleBranch.html index be004f9875..7f49b57668 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/merkle_branch/struct.TaprootMerkleBranch.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/merkle_branch/struct.TaprootMerkleBranch.html @@ -2407,10 +2407,10 @@
    §Examples<

    Trait Implementations§

    §

    impl AsMut<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn as_mut(&mut self) -> &mut [TapNodeHash]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn as_ref(&self) -> &[TapNodeHash]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn borrow(&self) -> &[TapNodeHash]

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn borrow_mut(&mut self) -> &mut [TapNodeHash]

    Mutably borrows from an owned value. Read more
    §

    impl Clone for TaprootMerkleBranch

    §

    fn clone(&self) -> TaprootMerkleBranch

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TaprootMerkleBranch

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for TaprootMerkleBranch

    §

    fn default() -> TaprootMerkleBranch

    Returns the “default value” for a type. Read more
    §

    impl Deref for TaprootMerkleBranch

    §

    type Target = [TapNodeHash]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<TaprootMerkleBranch as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for TaprootMerkleBranch

    §

    fn deref_mut(&mut self) -> &mut <TaprootMerkleBranch as Deref>::Target

    Mutably dereferences the value.
    §

    impl<'de> Deserialize<'de> for TaprootMerkleBranch

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<TaprootMerkleBranch, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl From<[TapNodeHash; 0]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 0]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 1]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 1]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 10]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 10]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 100]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 100]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 101]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 101]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 102]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 102]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 103]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 103]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 104]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 104]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 105]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 105]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 106]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 106]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 107]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 107]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 108]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 108]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 109]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 109]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 11]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 11]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 110]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 110]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 111]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 111]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 112]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 112]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 113]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 113]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 114]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 114]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 115]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 115]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 116]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 116]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 117]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 117]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 118]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 118]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 119]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 119]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 12]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 12]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 120]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 120]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 121]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 121]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 122]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 122]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 123]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 123]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 124]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 124]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 125]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 125]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 126]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 126]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 127]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 127]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 128]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 128]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 13]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 13]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 14]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 14]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 15]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 15]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 16]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 16]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 17]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 17]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 18]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 18]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 19]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 19]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 2]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 2]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 20]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 20]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 21]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 21]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 22]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 22]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 23]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 23]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 24]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 24]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 25]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 25]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 26]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 26]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 27]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 27]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 28]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 28]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 29]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 29]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 3]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 3]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 30]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 30]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 31]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 31]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 32]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 32]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 33]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 33]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 34]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 34]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 35]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 35]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 36]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 36]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 37]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 37]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 38]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 38]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 39]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 39]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 4]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 4]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 40]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 40]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 41]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 41]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 42]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 42]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 43]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 43]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 44]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 44]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 45]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 45]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 46]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 46]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 47]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 47]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 48]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 48]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 49]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 49]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 5]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 5]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 50]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 50]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 51]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 51]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 52]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 52]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 53]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 53]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 54]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 54]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 55]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 55]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 56]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 56]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 57]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 57]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 58]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 58]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 59]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 59]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 6]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 6]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 60]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 60]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 61]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 61]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 62]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 62]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 63]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 63]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 64]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 64]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 65]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 65]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 66]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 66]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 67]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 67]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 68]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 68]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 69]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 69]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 7]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 7]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 70]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 70]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 71]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 71]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 72]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 72]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 73]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 73]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 74]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 74]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 75]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 75]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 76]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 76]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 77]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 77]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 78]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 78]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 79]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 79]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 8]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 8]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 80]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 80]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 81]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 81]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 82]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 82]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 83]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 83]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 84]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 84]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 85]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 85]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 86]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 86]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 87]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 87]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 88]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 88]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 89]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 89]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 9]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 9]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 90]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 90]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 91]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 91]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 92]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 92]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 93]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 93]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 94]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 94]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 95]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 95]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 96]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 96]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 97]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 97]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 98]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 98]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 99]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 99]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<TaprootMerkleBranch> for Vec<TapNodeHash>

    §

    fn from(branch: TaprootMerkleBranch) -> Vec<TapNodeHash>

    Converts to this type from the input type.
    §

    impl Hash for TaprootMerkleBranch

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl From<[TapNodeHash; 0]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 0]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 1]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 1]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 10]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 10]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 100]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 100]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 101]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 101]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 102]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 102]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 103]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 103]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 104]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 104]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 105]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 105]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 106]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 106]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 107]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 107]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 108]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 108]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 109]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 109]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 11]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 11]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 110]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 110]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 111]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 111]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 112]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 112]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 113]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 113]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 114]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 114]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 115]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 115]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 116]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 116]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 117]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 117]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 118]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 118]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 119]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 119]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 12]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 12]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 120]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 120]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 121]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 121]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 122]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 122]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 123]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 123]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 124]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 124]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 125]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 125]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 126]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 126]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 127]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 127]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 128]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 128]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 13]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 13]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 14]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 14]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 15]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 15]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 16]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 16]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 17]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 17]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 18]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 18]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 19]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 19]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 2]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 2]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 20]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 20]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 21]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 21]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 22]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 22]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 23]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 23]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 24]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 24]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 25]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 25]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 26]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 26]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 27]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 27]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 28]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 28]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 29]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 29]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 3]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 3]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 30]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 30]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 31]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 31]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 32]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 32]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 33]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 33]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 34]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 34]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 35]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 35]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 36]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 36]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 37]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 37]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 38]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 38]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 39]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 39]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 4]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 4]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 40]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 40]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 41]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 41]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 42]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 42]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 43]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 43]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 44]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 44]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 45]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 45]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 46]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 46]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 47]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 47]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 48]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 48]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 49]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 49]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 5]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 5]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 50]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 50]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 51]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 51]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 52]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 52]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 53]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 53]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 54]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 54]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 55]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 55]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 56]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 56]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 57]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 57]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 58]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 58]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 59]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 59]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 6]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 6]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 60]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 60]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 61]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 61]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 62]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 62]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 63]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 63]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 64]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 64]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 65]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 65]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 66]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 66]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 67]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 67]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 68]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 68]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 69]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 69]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 7]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 7]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 70]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 70]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 71]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 71]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 72]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 72]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 73]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 73]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 74]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 74]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 75]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 75]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 76]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 76]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 77]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 77]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 78]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 78]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 79]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 79]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 8]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 8]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 80]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 80]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 81]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 81]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 82]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 82]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 83]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 83]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 84]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 84]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 85]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 85]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 86]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 86]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 87]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 87]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 88]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 88]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 89]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 89]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 9]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 9]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 90]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 90]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 91]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 91]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 92]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 92]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 93]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 93]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 94]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 94]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 95]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 95]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 96]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 96]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 97]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 97]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 98]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 98]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 99]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 99]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<TaprootMerkleBranch> for Vec<TapNodeHash>

    §

    fn from(branch: TaprootMerkleBranch) -> Vec<TapNodeHash>

    Converts to this type from the input type.
    §

    impl Hash for TaprootMerkleBranch

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a TaprootMerkleBranch

    §

    type IntoIter = Iter<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl<'a> IntoIterator for &'a mut TaprootMerkleBranch

    §

    type IntoIter = IterMut<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a mut TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a mut TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl IntoIterator for TaprootMerkleBranch

    §

    type IntoIter = IntoIter

    Which kind of iterator are we turning this into?
    §

    type Item = TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for TaprootMerkleBranch

    §

    fn cmp(&self, other: &TaprootMerkleBranch) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a TaprootMerkleBranch

    §

    type IntoIter = Iter<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl<'a> IntoIterator for &'a mut TaprootMerkleBranch

    §

    type IntoIter = IterMut<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a mut TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a mut TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl IntoIterator for TaprootMerkleBranch

    §

    type IntoIter = IntoIter

    Which kind of iterator are we turning this into?
    §

    type Item = TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for TaprootMerkleBranch

    §

    fn cmp(&self, other: &TaprootMerkleBranch) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for TaprootMerkleBranch

    §

    fn eq(&self, other: &TaprootMerkleBranch) -> bool

    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/serialized_signature/struct.SerializedSignature.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/serialized_signature/struct.SerializedSignature.html index 68db18bfc0..15538f4fb5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/serialized_signature/struct.SerializedSignature.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/serialized_signature/struct.SerializedSignature.html @@ -1110,16 +1110,16 @@
    §ExamplesSized,
    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq<[u8]> for SerializedSignature

    §

    fn eq(&self, other: &[u8]) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<SerializedSignature> for [u8]

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used -by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq<SerializedSignature> for [u8]

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl PartialEq for SerializedSignature

    §

    fn eq(&self, other: &SerializedSignature) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<[u8]> for SerializedSignature

    §

    fn partial_cmp(&self, other: &[u8]) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd<SerializedSignature> for [u8]

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl PartialOrd for SerializedSignature

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    §

    impl PartialOrd<SerializedSignature> for [u8]

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    §

    impl PartialOrd for SerializedSignature

    §

    fn partial_cmp(&self, other: &SerializedSignature) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
    §

    impl<'a> TryFrom<&'a SerializedSignature> for Signature

    §

    type Error = SigFromSliceError

    The type returned in the event of a conversion error.
    §

    fn try_from( value: &'a SerializedSignature ) -> Result<Signature, <Signature as TryFrom<&'a SerializedSignature>>::Error>

    Performs the conversion.
    §

    impl TryFrom<SerializedSignature> for Signature

    §

    type Error = SigFromSliceError

    The type returned in the event of a conversion error.
    §

    fn try_from( diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.LeafNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.LeafNode.html index 4b1f52cefd..f4af9f7141 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.LeafNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.LeafNode.html @@ -15,7 +15,7 @@

    pub fn merkle_branch(&self) -> &TaprootMerkleBranch

    Returns reference to the merkle proof (hashing partners) to get this node in form of TaprootMerkleBranch.

    pub fn leaf(&self) -> &TapLeaf

    Returns a reference to the leaf of this ScriptLeaf.

    -

    Trait Implementations§

    §

    impl Clone for LeafNode

    §

    fn clone(&self) -> LeafNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for LeafNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&LeafNode> for TapNodeHash

    §

    fn from(leaf: &LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<LeafNode> for TapNodeHash

    §

    fn from(leaf: LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl Hash for LeafNode

    §

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    §

    impl Clone for LeafNode

    §

    fn clone(&self) -> LeafNode

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for LeafNode

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&LeafNode> for TapNodeHash

    §

    fn from(leaf: &LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<LeafNode> for TapNodeHash

    §

    fn from(leaf: LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl Hash for LeafNode

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for LeafNode

    §

    fn cmp(&self, other: &LeafNode) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapLeafHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapLeafHash.html index 139a9a0140..49ad85bc19 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapLeafHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapLeafHash.html @@ -4,11 +4,11 @@

    pub fn to_raw_hash(self) -> Hash<TapLeafTag>

    Returns the inner hash (sha256, sh256d etc.).

    pub fn as_raw_hash(&self) -> &Hash<TapLeafTag>

    Returns a reference to the inner hash (sha256, sh256d etc.).

    §

    impl TapLeafHash

    pub fn from_script(script: &Script, ver: LeafVersion) -> TapLeafHash

    Computes the leaf hash from components.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapLeafHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapLeafHash

    §

    fn clone(&self) -> TapLeafHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapLeafHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TapLeafHash

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapLeafHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapLeafHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapLeafHash

    §

    fn clone(&self) -> TapLeafHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapLeafHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Decodable for TapLeafHash

    §

    fn consensus_decode<R>(r: &mut R) -> Result<TapLeafHash, Error>
    where R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    §

    impl<'de> Deserialize<'de> for TapLeafHash

    §

    fn deserialize<D>(d: D) -> Result<TapLeafHash, <D as Deserializer<'de>>::Error>
    where D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapLeafHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Encodable for TapLeafHash

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where - W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash<TapLeafTag>> for TapLeafHash

    §

    fn from(inner: Hash<TapLeafTag>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl<'s> From<ScriptPath<'s>> for TapLeafHash

    §

    fn from(script_path: ScriptPath<'s>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for Hash<TapLeafTag>

    §

    fn from(hashtype: TapLeafHash) -> Hash<TapLeafTag>

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl FromStr for TapLeafHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapLeafHash, <TapLeafHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapLeafHash

    §

    type Engine = <Hash<TapLeafTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + W: Write + ?Sized,
    Encodes an object with a well-defined format. Read more
    §

    impl From<Hash<TapLeafTag>> for TapLeafHash

    §

    fn from(inner: Hash<TapLeafTag>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl<'s> From<ScriptPath<'s>> for TapLeafHash

    §

    fn from(script_path: ScriptPath<'s>) -> TapLeafHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for Hash<TapLeafTag>

    §

    fn from(hashtype: TapLeafHash) -> Hash<TapLeafTag>

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl FromStr for TapLeafHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapLeafHash, <TapLeafHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapLeafHash

    §

    type Engine = <Hash<TapLeafTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapLeafTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapNodeHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapNodeHash.html index 23df56fade..13b724d0bb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapNodeHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapNodeHash.html @@ -10,7 +10,7 @@ because it does not require the caller to import the Hash trait.

    pub fn from_script(script: &Script, ver: LeafVersion) -> TapNodeHash

    Computes the TapNodeHash from a script and a leaf version.

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapNodeHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapNodeHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapNodeHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapNodeHash

    §

    fn clone(&self) -> TapNodeHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapNodeHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapNodeHash

    §

    fn deserialize<D>(d: D) -> Result<TapNodeHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapNodeHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&LeafNode> for TapNodeHash

    §

    fn from(leaf: &LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapBranchTag>> for TapNodeHash

    §

    fn from(inner: Hash<TapBranchTag>) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<LeafNode> for TapNodeHash

    §

    fn from(leaf: LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapNodeHash> for Hash<TapBranchTag>

    §

    fn from(hashtype: TapNodeHash) -> Hash<TapBranchTag>

    Converts to this type from the input type.
    §

    impl FromStr for TapNodeHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapNodeHash, <TapNodeHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapNodeHash

    §

    type Engine = <Hash<TapBranchTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected + D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapNodeHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&LeafNode> for TapNodeHash

    §

    fn from(leaf: &LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapBranchTag>> for TapNodeHash

    §

    fn from(inner: Hash<TapBranchTag>) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<LeafNode> for TapNodeHash

    §

    fn from(leaf: LeafNode) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapLeafHash> for TapNodeHash

    §

    fn from(leaf: TapLeafHash) -> TapNodeHash

    Converts to this type from the input type.
    §

    impl From<TapNodeHash> for Hash<TapBranchTag>

    §

    fn from(hashtype: TapNodeHash) -> Hash<TapBranchTag>

    Converts to this type from the input type.
    §

    impl FromStr for TapNodeHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapNodeHash, <TapNodeHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapNodeHash

    §

    type Engine = <Hash<TapBranchTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapBranchTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapTweakHash.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapTweakHash.html index 8768e4bd4c..baf725a6ad 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapTweakHash.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TapTweakHash.html @@ -9,8 +9,8 @@ ) -> TapTweakHash

    Creates a new BIP341 TapTweakHash from key and tweak. Produces H_taptweak(P||R) where P is the internal key and R is the merkle root.

    pub fn to_scalar(self) -> Scalar

    Converts a TapTweakHash into a Scalar ready for use with key tweaking API.

    -

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapTweakHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapTweakHash

    §

    fn clone(&self) -> TapTweakHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    fn deserialize<D>(d: D) -> Result<TapTweakHash, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: &TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapTweakTag>> for TapTweakHash

    §

    fn from(inner: Hash<TapTweakTag>) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<TapTweakHash> for Hash<TapTweakTag>

    §

    fn from(hashtype: TapTweakHash) -> Hash<TapTweakTag>

    Converts to this type from the input type.
    §

    impl From<TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl FromStr for TapTweakHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapTweakHash, <TapTweakHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapTweakHash

    §

    type Engine = <Hash<TapTweakTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    §

    impl AsRef<[u8]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl AsRef<[u8; 32]> for TapTweakHash

    §

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[u8]> for TapTweakHash

    §

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    §

    impl Clone for TapTweakHash

    §

    fn clone(&self) -> TapTweakHash

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'de> Deserialize<'de> for TapTweakHash

    §

    fn deserialize<D>(d: D) -> Result<TapTweakHash, <D as Deserializer<'de>>::Error>
    where + D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for TapTweakHash

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl From<&TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: &TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<Hash<TapTweakTag>> for TapTweakHash

    §

    fn from(inner: Hash<TapTweakTag>) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl From<TapTweakHash> for Hash<TapTweakTag>

    §

    fn from(hashtype: TapTweakHash) -> Hash<TapTweakTag>

    Converts to this type from the input type.
    §

    impl From<TaprootSpendInfo> for TapTweakHash

    §

    fn from(spend_info: TaprootSpendInfo) -> TapTweakHash

    Converts to this type from the input type.
    §

    impl FromStr for TapTweakHash

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<TapTweakHash, <TapTweakHash as FromStr>::Err>

    Parses a string s to return a value of this type. Read more
    §

    impl Hash for TapTweakHash

    §

    type Engine = <Hash<TapTweakTag> as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash<TapTweakTag> as Hash>::Bytes

    The byte array that represents the hash internally.
    §

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    §

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TaprootMerkleBranch.html b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TaprootMerkleBranch.html index 8369a8a509..0a93890f10 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TaprootMerkleBranch.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/bitcoin/taproot/struct.TaprootMerkleBranch.html @@ -2407,10 +2407,10 @@
    §Examples<

    Trait Implementations§

    §

    impl AsMut<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn as_mut(&mut self) -> &mut [TapNodeHash]

    Converts this type into a mutable reference of the (usually inferred) input type.
    §

    impl AsRef<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn as_ref(&self) -> &[TapNodeHash]

    Converts this type into a shared reference of the (usually inferred) input type.
    §

    impl Borrow<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn borrow(&self) -> &[TapNodeHash]

    Immutably borrows from an owned value. Read more
    §

    impl BorrowMut<[TapNodeHash]> for TaprootMerkleBranch

    §

    fn borrow_mut(&mut self) -> &mut [TapNodeHash]

    Mutably borrows from an owned value. Read more
    §

    impl Clone for TaprootMerkleBranch

    §

    fn clone(&self) -> TaprootMerkleBranch

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for TaprootMerkleBranch

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for TaprootMerkleBranch

    §

    fn default() -> TaprootMerkleBranch

    Returns the “default value” for a type. Read more
    §

    impl Deref for TaprootMerkleBranch

    §

    type Target = [TapNodeHash]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &<TaprootMerkleBranch as Deref>::Target

    Dereferences the value.
    §

    impl DerefMut for TaprootMerkleBranch

    §

    fn deref_mut(&mut self) -> &mut <TaprootMerkleBranch as Deref>::Target

    Mutably dereferences the value.
    §

    impl<'de> Deserialize<'de> for TaprootMerkleBranch

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<TaprootMerkleBranch, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl From<[TapNodeHash; 0]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 0]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 1]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 1]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 10]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 10]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 100]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 100]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 101]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 101]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 102]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 102]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 103]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 103]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 104]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 104]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 105]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 105]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 106]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 106]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 107]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 107]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 108]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 108]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 109]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 109]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 11]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 11]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 110]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 110]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 111]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 111]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 112]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 112]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 113]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 113]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 114]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 114]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 115]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 115]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 116]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 116]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 117]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 117]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 118]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 118]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 119]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 119]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 12]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 12]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 120]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 120]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 121]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 121]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 122]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 122]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 123]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 123]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 124]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 124]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 125]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 125]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 126]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 126]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 127]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 127]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 128]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 128]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 13]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 13]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 14]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 14]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 15]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 15]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 16]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 16]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 17]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 17]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 18]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 18]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 19]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 19]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 2]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 2]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 20]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 20]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 21]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 21]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 22]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 22]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 23]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 23]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 24]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 24]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 25]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 25]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 26]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 26]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 27]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 27]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 28]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 28]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 29]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 29]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 3]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 3]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 30]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 30]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 31]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 31]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 32]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 32]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 33]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 33]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 34]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 34]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 35]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 35]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 36]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 36]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 37]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 37]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 38]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 38]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 39]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 39]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 4]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 4]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 40]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 40]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 41]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 41]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 42]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 42]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 43]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 43]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 44]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 44]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 45]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 45]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 46]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 46]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 47]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 47]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 48]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 48]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 49]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 49]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 5]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 5]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 50]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 50]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 51]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 51]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 52]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 52]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 53]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 53]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 54]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 54]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 55]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 55]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 56]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 56]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 57]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 57]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 58]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 58]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 59]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 59]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 6]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 6]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 60]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 60]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 61]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 61]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 62]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 62]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 63]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 63]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 64]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 64]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 65]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 65]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 66]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 66]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 67]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 67]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 68]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 68]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 69]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 69]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 7]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 7]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 70]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 70]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 71]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 71]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 72]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 72]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 73]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 73]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 74]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 74]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 75]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 75]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 76]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 76]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 77]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 77]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 78]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 78]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 79]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 79]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 8]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 8]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 80]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 80]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 81]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 81]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 82]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 82]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 83]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 83]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 84]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 84]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 85]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 85]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 86]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 86]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 87]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 87]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 88]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 88]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 89]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 89]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 9]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 9]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 90]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 90]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 91]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 91]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 92]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 92]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 93]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 93]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 94]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 94]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 95]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 95]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 96]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 96]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 97]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 97]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 98]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 98]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 99]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 99]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<TaprootMerkleBranch> for Vec<TapNodeHash>

    §

    fn from(branch: TaprootMerkleBranch) -> Vec<TapNodeHash>

    Converts to this type from the input type.
    §

    impl Hash for TaprootMerkleBranch

    §

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl From<[TapNodeHash; 0]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 0]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 1]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 1]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 10]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 10]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 100]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 100]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 101]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 101]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 102]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 102]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 103]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 103]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 104]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 104]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 105]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 105]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 106]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 106]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 107]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 107]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 108]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 108]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 109]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 109]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 11]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 11]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 110]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 110]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 111]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 111]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 112]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 112]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 113]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 113]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 114]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 114]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 115]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 115]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 116]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 116]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 117]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 117]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 118]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 118]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 119]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 119]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 12]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 12]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 120]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 120]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 121]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 121]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 122]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 122]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 123]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 123]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 124]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 124]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 125]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 125]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 126]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 126]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 127]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 127]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 128]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 128]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 13]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 13]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 14]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 14]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 15]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 15]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 16]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 16]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 17]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 17]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 18]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 18]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 19]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 19]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 2]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 2]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 20]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 20]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 21]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 21]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 22]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 22]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 23]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 23]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 24]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 24]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 25]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 25]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 26]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 26]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 27]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 27]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 28]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 28]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 29]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 29]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 3]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 3]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 30]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 30]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 31]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 31]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 32]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 32]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 33]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 33]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 34]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 34]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 35]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 35]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 36]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 36]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 37]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 37]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 38]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 38]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 39]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 39]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 4]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 4]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 40]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 40]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 41]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 41]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 42]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 42]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 43]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 43]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 44]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 44]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 45]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 45]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 46]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 46]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 47]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 47]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 48]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 48]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 49]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 49]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 5]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 5]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 50]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 50]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 51]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 51]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 52]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 52]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 53]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 53]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 54]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 54]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 55]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 55]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 56]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 56]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 57]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 57]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 58]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 58]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 59]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 59]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 6]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 6]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 60]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 60]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 61]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 61]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 62]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 62]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 63]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 63]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 64]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 64]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 65]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 65]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 66]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 66]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 67]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 67]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 68]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 68]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 69]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 69]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 7]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 7]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 70]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 70]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 71]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 71]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 72]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 72]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 73]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 73]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 74]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 74]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 75]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 75]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 76]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 76]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 77]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 77]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 78]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 78]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 79]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 79]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 8]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 8]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 80]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 80]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 81]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 81]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 82]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 82]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 83]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 83]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 84]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 84]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 85]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 85]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 86]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 86]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 87]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 87]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 88]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 88]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 89]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 89]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 9]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 9]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 90]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 90]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 91]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 91]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 92]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 92]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 93]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 93]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 94]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 94]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 95]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 95]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 96]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 96]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 97]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 97]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 98]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 98]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<[TapNodeHash; 99]> for TaprootMerkleBranch

    §

    fn from(a: [TapNodeHash; 99]) -> TaprootMerkleBranch

    Converts to this type from the input type.
    §

    impl From<TaprootMerkleBranch> for Vec<TapNodeHash>

    §

    fn from(branch: TaprootMerkleBranch) -> Vec<TapNodeHash>

    Converts to this type from the input type.
    §

    impl Hash for TaprootMerkleBranch

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a TaprootMerkleBranch

    §

    type IntoIter = Iter<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl<'a> IntoIterator for &'a mut TaprootMerkleBranch

    §

    type IntoIter = IterMut<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a mut TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a mut TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl IntoIterator for TaprootMerkleBranch

    §

    type IntoIter = IntoIter

    Which kind of iterator are we turning this into?
    §

    type Item = TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for TaprootMerkleBranch

    §

    fn cmp(&self, other: &TaprootMerkleBranch) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'a> IntoIterator for &'a TaprootMerkleBranch

    §

    type IntoIter = Iter<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl<'a> IntoIterator for &'a mut TaprootMerkleBranch

    §

    type IntoIter = IterMut<'a, TapNodeHash>

    Which kind of iterator are we turning this into?
    §

    type Item = &'a mut TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'a mut TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl IntoIterator for TaprootMerkleBranch

    §

    type IntoIter = IntoIter

    Which kind of iterator are we turning this into?
    §

    type Item = TapNodeHash

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <TaprootMerkleBranch as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl Ord for TaprootMerkleBranch

    §

    fn cmp(&self, other: &TaprootMerkleBranch) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for TaprootMerkleBranch

    §

    fn eq(&self, other: &TaprootMerkleBranch) -> bool

    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/index.html b/docs-rs/bdk/nightly/latest/bdk_chain/index.html index fb97725595..3450e015c7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/index.html @@ -14,6 +14,6 @@
  • Data persistence agnostic – bdk_chain does not care where you cache on-chain data, what you cache or how you retrieve it from persistent storage.
  • -

    Re-exports§

    Modules§

    Re-exports§

    Modules§

    Structs§

    • A wrapper that we use to impl remote traits for types in our crate or dependency crates that impl Anchor.
    • Balance, differentiated into various categories.
    • A reference to a block in the canonical chain.
    • A checkpoint is a node of a reference-counted linked list of BlockIds.
    • Iterates over checkpoints backwards.
    • Represents the confirmation block and time of a transaction.
    • Represents the unique ID of a descriptor.
    • A TxOut with as much data as we can retrieve about it
    • A wrapper that we use to impl remote traits for types in our crate or dependency crates.
    • An iterator for derived script pubkeys.
    • Set of parameters sufficient to construct an Anchor.
    • Data object used to communicate updates about relevant transactions from some chain data source to the core model (usually a bdk_chain::TxGraph).

    Enums§

    Constants§

    Traits§

    • Trait that “anchors” blockchain data to a specific block of height and hash.
    • Represents a service that tracks the blockchain.
    • A trait to extend the functionality of a miniscript descriptor.
    • Trait that makes an object mergeable.

    Type Aliases§

    • A tuple of keychain index and T representing the indexed value.
    • A tuple of keychain K, derivation index (u32) and a T associated with them.
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html index 499adc17a9..bd81334ba0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/struct.ChangeSet.html @@ -7,7 +7,7 @@

    Trait Implementations§

    source§

    impl<A: Clone, IA: Clone> Clone for ChangeSet<A, IA>

    source§

    fn clone(&self) -> ChangeSet<A, IA>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Debug, IA: Debug> Debug for ChangeSet<A, IA>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A, IA: Default> Default for ChangeSet<A, IA>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de, A, IA> Deserialize<'de> for ChangeSet<A, IA>
    where A: Ord + Deserialize<'de>, IA: Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

    source§

    fn from(graph: ChangeSet<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A> From<ChangeSet> for ChangeSet<A, ChangeSet>

    source§

    fn from(indexer: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Anchor, IA: Merge> Merge for ChangeSet<A, IA>

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>

    source§

    fn eq(&self, other: &ChangeSet<A, IA>) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

    source§

    fn from(graph: ChangeSet<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A> From<ChangeSet> for ChangeSet<A, ChangeSet>

    source§

    fn from(indexer: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Anchor, IA: Merge> Merge for ChangeSet<A, IA>

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>

    source§

    fn eq(&self, other: &ChangeSet<A, IA>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl<A, IA> Serialize for ChangeSet<A, IA>
    where A: Ord + Serialize, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html b/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html index 6f1ac9f36a..6a9796b649 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/enum.InsertDescriptorError.html @@ -14,7 +14,7 @@

    §

    KeychainAlreadyAssigned

    The keychain is already assigned to a descriptor so you can’t reassign it

    Fields

    §keychain: K

    The keychain that you have attempted to reassign

    §existing_assignment: Descriptor<DescriptorPublicKey>

    The descriptor that the keychain is already assigned to

    -

    Trait Implementations§

    source§

    impl<K: Clone> Clone for InsertDescriptorError<K>

    source§

    fn clone(&self) -> InsertDescriptorError<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for InsertDescriptorError<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K: Debug> Display for InsertDescriptorError<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K: Debug> Error for InsertDescriptorError<K>

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl<K: PartialEq> PartialEq for InsertDescriptorError<K>

    source§

    fn eq(&self, other: &InsertDescriptorError<K>) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl<K: Clone> Clone for InsertDescriptorError<K>

    source§

    fn clone(&self) -> InsertDescriptorError<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for InsertDescriptorError<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K: Debug> Display for InsertDescriptorError<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K: Debug> Error for InsertDescriptorError<K>

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl<K: PartialEq> PartialEq for InsertDescriptorError<K>

    source§

    fn eq(&self, other: &InsertDescriptorError<K>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl<K> StructuralPartialEq for InsertDescriptorError<K>

    Auto Trait Implementations§

    §

    impl<K> !Freeze for InsertDescriptorError<K>

    §

    impl<K> RefUnwindSafe for InsertDescriptorError<K>
    where K: RefUnwindSafe,

    §

    impl<K> Send for InsertDescriptorError<K>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html index 9b648deef7..b17bd6cff1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/indexer/keychain_txout/struct.ChangeSet.html @@ -19,7 +19,7 @@

    Trait Implementations§

    source§

    impl Clone for ChangeSet

    source§

    fn clone(&self) -> ChangeSet

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ChangeSet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for ChangeSet

    source§

    fn default() -> ChangeSet

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for ChangeSet

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A> From<ChangeSet> for ChangeSet<A, ChangeSet>

    source§

    fn from(indexer: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another ChangeSet into self.

    source§

    fn is_empty(&self) -> bool

    Returns whether the changeset are empty.

    -
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used +
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ChangeSet

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl StructuralPartialEq for ChangeSet

    Auto Trait Implementations§

    §

    impl Freeze for ChangeSet

    §

    impl RefUnwindSafe for ChangeSet

    §

    impl Send for ChangeSet

    §

    impl Sync for ChangeSet

    §

    impl Unpin for ChangeSet

    §

    impl UnwindSafe for ChangeSet

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html index bcb835e1b8..7ea36b3ea0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.ChangeSet.html @@ -12,7 +12,7 @@

    source

    pub fn persist_to_sqlite(&self, db_tx: &Transaction<'_>) -> Result<()>

    Persist changeset to the sqlite database.

    Remember to call Self::init_sqlite_tables beforehand.

    Trait Implementations§

    source§

    impl Clone for ChangeSet

    source§

    fn clone(&self) -> ChangeSet

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ChangeSet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for ChangeSet

    source§

    fn default() -> ChangeSet

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for ChangeSet

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet

    source§

    fn from(blocks: B) -> Self

    Converts to this type from the input type.
    source§

    impl FromIterator<(u32, BlockHash)> for ChangeSet

    source§

    fn from_iter<T: IntoIterator<Item = (u32, BlockHash)>>(iter: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl FromIterator<(u32, Option<BlockHash>)> for ChangeSet

    source§

    fn from_iter<T: IntoIterator<Item = (u32, Option<BlockHash>)>>(iter: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet

    source§

    fn from(blocks: B) -> Self

    Converts to this type from the input type.
    source§

    impl FromIterator<(u32, BlockHash)> for ChangeSet

    source§

    fn from_iter<T: IntoIterator<Item = (u32, BlockHash)>>(iter: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl FromIterator<(u32, Option<BlockHash>)> for ChangeSet

    source§

    fn from_iter<T: IntoIterator<Item = (u32, Option<BlockHash>)>>(iter: T) -> Self

    Creates a value from an iterator. Read more
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ChangeSet

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl StructuralPartialEq for ChangeSet

    Auto Trait Implementations§

    §

    impl Freeze for ChangeSet

    §

    impl RefUnwindSafe for ChangeSet

    §

    impl Send for ChangeSet

    §

    impl Sync for ChangeSet

    §

    impl Unpin for ChangeSet

    §

    impl UnwindSafe for ChangeSet

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html index c135581548..64442e4c28 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPoint.html @@ -1,8 +1,8 @@ -CheckPoint in bdk_chain::local_chain - Rust

    Struct bdk_chain::local_chain::CheckPoint

    source ·
    pub struct CheckPoint(/* private fields */);
    Expand description

    A checkpoint is a node of a reference-counted linked list of BlockIds.

    +CheckPoint in bdk_chain::local_chain - Rust

    Struct bdk_chain::local_chain::CheckPoint

    pub struct CheckPoint(/* private fields */);
    Expand description

    A checkpoint is a node of a reference-counted linked list of BlockIds.

    Checkpoints are cheaply cloneable and are useful to find the agreement point between two sparse block chains.

    -

    Implementations§

    source§

    impl CheckPoint

    source

    pub fn new(block: BlockId) -> CheckPoint

    Construct a new base block at the front of a linked list.

    -
    source

    pub fn from_block_ids( +

    Implementations§

    §

    impl CheckPoint

    pub fn new(block: BlockId) -> CheckPoint

    Construct a new base block at the front of a linked list.

    +

    pub fn from_block_ids( block_ids: impl IntoIterator<Item = BlockId> ) -> Result<CheckPoint, Option<CheckPoint>>

    Construct a checkpoint from a list of BlockIds in ascending height order.

    §Errors
    @@ -13,30 +13,30 @@
    §Errors
  • The blocks iterator contains multiple BlockIds of the same height.
  • The error type is the last successful checkpoint constructed (if any).

    -
    source

    pub fn from_header(header: &Header, height: u32) -> CheckPoint

    Construct a checkpoint from the given header and block height.

    +

    pub fn from_header(header: &Header, height: u32) -> CheckPoint

    Construct a checkpoint from the given header and block height.

    If header is of the genesis block, the checkpoint won’t have a prev node. Otherwise, we return a checkpoint linked with the previous block.

    -
    source

    pub fn push(self, block: BlockId) -> Result<CheckPoint, CheckPoint>

    Puts another checkpoint onto the linked list representing the blockchain.

    +

    pub fn push(self, block: BlockId) -> Result<CheckPoint, CheckPoint>

    Puts another checkpoint onto the linked list representing the blockchain.

    Returns an Err(self) if the block you are pushing on is not at a greater height that the one you are pushing on to.

    -
    source

    pub fn extend( +

    pub fn extend( self, blocks: impl IntoIterator<Item = BlockId> ) -> Result<CheckPoint, CheckPoint>

    Extends the checkpoint linked list by a iterator of block ids.

    Returns an Err(self) if there is block which does not have a greater height than the previous one.

    -
    source

    pub fn block_id(&self) -> BlockId

    Get the BlockId of the checkpoint.

    -
    source

    pub fn height(&self) -> u32

    Get the height of the checkpoint.

    -
    source

    pub fn hash(&self) -> BlockHash

    Get the block hash of the checkpoint.

    -
    source

    pub fn prev(&self) -> Option<CheckPoint>

    Get the previous checkpoint in the chain

    -
    source

    pub fn iter(&self) -> CheckPointIter

    Iterate from this checkpoint in descending height.

    -
    source

    pub fn get(&self, height: u32) -> Option<CheckPoint>

    Get checkpoint at height.

    +

    pub fn block_id(&self) -> BlockId

    Get the BlockId of the checkpoint.

    +

    pub fn height(&self) -> u32

    Get the height of the checkpoint.

    +

    pub fn hash(&self) -> BlockHash

    Get the block hash of the checkpoint.

    +

    pub fn prev(&self) -> Option<CheckPoint>

    Get the previous checkpoint in the chain

    +

    pub fn iter(&self) -> CheckPointIter

    Iterate from this checkpoint in descending height.

    +

    pub fn get(&self, height: u32) -> Option<CheckPoint>

    Get checkpoint at height.

    Returns None if checkpoint at height does not exist`.

    -
    source

    pub fn range<R>(&self, range: R) -> impl Iterator<Item = CheckPoint>
    where +

    pub fn range<R>(&self, range: R) -> impl Iterator<Item = CheckPoint>
    where R: RangeBounds<u32>,

    Iterate checkpoints over a height range.

    Note that we always iterate checkpoints in reverse height order (iteration starts at tip height).

    -
    source

    pub fn insert(self, block_id: BlockId) -> CheckPoint

    Inserts block_id at its height within the chain.

    +

    pub fn insert(self, block_id: BlockId) -> CheckPoint

    Inserts block_id at its height within the chain.

    The effect of insert depends on whether a height already exists. If it doesn’t the block_id we inserted and all pre-existing blocks higher than it will be re-inserted after it. If the height already existed and has a conflicting block hash then it will be purged @@ -44,8 +44,8 @@

    §Errors
    passed in. Of course, if the block_id was already present then this just returns self.

    §Panics

    This panics if called with a genesis block that differs from that of self.

    -
    source

    pub fn eq_ptr(&self, other: &CheckPoint) -> bool

    This method tests for self and other to have equal internal pointers.

    -

    Trait Implementations§

    source§

    impl Clone for CheckPoint

    source§

    fn clone(&self) -> CheckPoint

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CheckPoint

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl IntoIterator for CheckPoint

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    §

    type IntoIter = CheckPointIter

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> <CheckPoint as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq for CheckPoint

    source§

    fn eq(&self, other: &CheckPoint) -> bool

    This method tests for self and other values to be equal, and is used +

    pub fn eq_ptr(&self, other: &CheckPoint) -> bool

    This method tests for self and other to have equal internal pointers.

    +

    Trait Implementations§

    §

    impl Clone for CheckPoint

    §

    fn clone(&self) -> CheckPoint

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for CheckPoint

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl IntoIterator for CheckPoint

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    §

    type IntoIter = CheckPointIter

    Which kind of iterator are we turning this into?
    §

    fn into_iter(self) -> <CheckPoint as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl PartialEq for CheckPoint

    §

    fn eq(&self, other: &CheckPoint) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html index 81ae32ddc4..35f78b9462 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.CheckPointIter.html @@ -1,5 +1,5 @@ -CheckPointIter in bdk_chain::local_chain - Rust

    Struct bdk_chain::local_chain::CheckPointIter

    source ·
    pub struct CheckPointIter { /* private fields */ }
    Expand description

    Iterates over checkpoints backwards.

    -

    Trait Implementations§

    source§

    impl Iterator for CheckPointIter

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<<CheckPointIter as Iterator>::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +CheckPointIter in bdk_chain::local_chain - Rust

    Struct bdk_chain::local_chain::CheckPointIter

    pub struct CheckPointIter { /* private fields */ }
    Expand description

    Iterates over checkpoints backwards.

    +

    Trait Implementations§

    §

    impl Iterator for CheckPointIter

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    §

    fn next(&mut self) -> Option<<CheckPointIter as Iterator>::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
    where Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usize
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html index df07b6fc4d..4b013596d5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/local_chain/struct.MissingGenesisError.html @@ -1,5 +1,5 @@ MissingGenesisError in bdk_chain::local_chain - Rust

    Struct bdk_chain::local_chain::MissingGenesisError

    source ·
    pub struct MissingGenesisError;
    Expand description

    An error which occurs when a LocalChain is constructed without a genesis checkpoint.

    -

    Trait Implementations§

    source§

    impl Clone for MissingGenesisError

    source§

    fn clone(&self) -> MissingGenesisError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MissingGenesisError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for MissingGenesisError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for MissingGenesisError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl PartialEq for MissingGenesisError

    source§

    fn eq(&self, other: &MissingGenesisError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for MissingGenesisError

    source§

    fn clone(&self) -> MissingGenesisError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MissingGenesisError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for MissingGenesisError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for MissingGenesisError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl PartialEq for MissingGenesisError

    source§

    fn eq(&self, other: &MissingGenesisError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl StructuralPartialEq for MissingGenesisError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/enum.SyncItem.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/enum.SyncItem.html index d0701de1fa..332f8054e9 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/enum.SyncItem.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/enum.SyncItem.html @@ -1,4 +1,4 @@ -SyncItem in bdk_chain::spk_client - Rust

    Enum bdk_chain::spk_client::SyncItem

    source ·
    pub enum SyncItem<'i, I> {
    +SyncItem in bdk_chain::spk_client - Rust

    Enum bdk_chain::spk_client::SyncItem

    pub enum SyncItem<'i, I> {
         Spk(I, &'i Script),
         Txid(Txid),
         OutPoint(OutPoint),
    @@ -6,26 +6,26 @@
     

    Variants§

    §

    Spk(I, &'i Script)

    Script pubkey sync item.

    §

    Txid(Txid)

    Txid sync item.

    §

    OutPoint(OutPoint)

    Outpoint sync item.

    -

    Trait Implementations§

    source§

    impl<'i, I> Clone for SyncItem<'i, I>
    where - I: Clone,

    source§

    fn clone(&self) -> SyncItem<'i, I>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'i, I> Debug for SyncItem<'i, I>
    where - I: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<'i, I> Display for SyncItem<'i, I>
    where - I: Debug + Any,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<'i, I> Hash for SyncItem<'i, I>
    where - I: Hash,

    source§

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    §

    impl<'i, I> Clone for SyncItem<'i, I>
    where + I: Clone,

    §

    fn clone(&self) -> SyncItem<'i, I>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<'i, I> Debug for SyncItem<'i, I>
    where + I: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'i, I> Display for SyncItem<'i, I>
    where + I: Debug + Any,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<'i, I> Hash for SyncItem<'i, I>
    where + I: Hash,

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<'i, I> Ord for SyncItem<'i, I>
    where - I: Ord,

    source§

    fn cmp(&self, other: &SyncItem<'i, I>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl<'i, I> Ord for SyncItem<'i, I>
    where + I: Ord,

    §

    fn cmp(&self, other: &SyncItem<'i, I>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl<'i, I> PartialEq for SyncItem<'i, I>
    where - I: PartialEq,

    source§

    fn eq(&self, other: &SyncItem<'i, I>) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl<'i, I> PartialEq for SyncItem<'i, I>
    where + I: PartialEq,

    §

    fn eq(&self, other: &SyncItem<'i, I>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<'i, I> PartialOrd for SyncItem<'i, I>
    where - I: PartialOrd,

    source§

    fn partial_cmp(&self, other: &SyncItem<'i, I>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl<'i, I> PartialOrd for SyncItem<'i, I>
    where + I: PartialOrd,

    §

    fn partial_cmp(&self, other: &SyncItem<'i, I>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl<'i, I> Copy for SyncItem<'i, I>
    where - I: Copy,

    source§

    impl<'i, I> Eq for SyncItem<'i, I>
    where - I: Eq,

    source§

    impl<'i, I> StructuralPartialEq for SyncItem<'i, I>

    Auto Trait Implementations§

    §

    impl<'i, I> Freeze for SyncItem<'i, I>
    where +operator. Read more

    §

    impl<'i, I> Copy for SyncItem<'i, I>
    where + I: Copy,

    §

    impl<'i, I> Eq for SyncItem<'i, I>
    where + I: Eq,

    §

    impl<'i, I> StructuralPartialEq for SyncItem<'i, I>

    Auto Trait Implementations§

    §

    impl<'i, I> Freeze for SyncItem<'i, I>
    where I: Freeze,

    §

    impl<'i, I> RefUnwindSafe for SyncItem<'i, I>
    where I: RefUnwindSafe,

    §

    impl<'i, I> Send for SyncItem<'i, I>
    where I: Send,

    §

    impl<'i, I> Sync for SyncItem<'i, I>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html index 27c63cece8..3acc4d3157 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html @@ -1,2 +1,2 @@ -bdk_chain::spk_client - Rust

    Module bdk_chain::spk_client

    source ·
    Expand description

    Helper types for spk-based blockchain clients.

    +bdk_chain::spk_client - Rust

    Module bdk_chain::spk_client

    Expand description

    Helper types for spk-based blockchain clients.

    Structs§

    Enums§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html index 7bce6e861a..32948802f3 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html @@ -1,20 +1,20 @@ -FullScanRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanRequest

    source ·
    pub struct FullScanRequest<K> { /* private fields */ }
    Expand description

    Data required to perform a spk-based blockchain client full scan.

    +FullScanRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanRequest

    pub struct FullScanRequest<K> { /* private fields */ }
    Expand description

    Data required to perform a spk-based blockchain client full scan.

    A client full scan iterates through all the scripts for the given keychains, fetching relevant data until some stop gap number of scripts is found that have no data. This operation is generally only used when importing or restoring previously used keychains in which the list of used scripts is not known. The full scan process also updates the chain from the given chain_tip (if provided).

    -

    Implementations§

    source§

    impl<K> FullScanRequest<K>
    where - K: Ord + Clone,

    source

    pub fn builder() -> FullScanRequestBuilder<K>

    Start building a FullScanRequest.

    -
    source

    pub fn chain_tip(&self) -> Option<CheckPoint>

    Get the chain tip CheckPoint of this request (if any).

    -
    source

    pub fn keychains(&self) -> Vec<K>

    List all keychains contained in this request.

    -
    source

    pub fn next_spk(&mut self, keychain: K) -> Option<(u32, ScriptBuf)>

    Advances the full scan request and returns the next indexed ScriptBuf of the given +

    Implementations§

    §

    impl<K> FullScanRequest<K>
    where + K: Ord + Clone,

    pub fn builder() -> FullScanRequestBuilder<K>

    Start building a FullScanRequest.

    +

    pub fn chain_tip(&self) -> Option<CheckPoint>

    Get the chain tip CheckPoint of this request (if any).

    +

    pub fn keychains(&self) -> Vec<K>

    List all keychains contained in this request.

    +

    pub fn next_spk(&mut self, keychain: K) -> Option<(u32, ScriptBuf)>

    Advances the full scan request and returns the next indexed ScriptBuf of the given keychain.

    -
    source

    pub fn iter_spks( +

    pub fn iter_spks( &mut self, keychain: K ) -> impl Iterator<Item = (u32, ScriptBuf)>

    Iterate over indexed ScriptBufs contained in this request of the given keychain.

    -

    Trait Implementations§

    source§

    impl<K> Default for FullScanRequest<K>

    source§

    fn default() -> FullScanRequest<K>

    Returns the “default value” for a type. Read more
    source§

    impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>

    source§

    fn from(builder: FullScanRequestBuilder<K>) -> FullScanRequest<K>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<K> Freeze for FullScanRequest<K>

    §

    impl<K> !RefUnwindSafe for FullScanRequest<K>

    §

    impl<K> Send for FullScanRequest<K>
    where +

    Trait Implementations§

    §

    impl<K> Default for FullScanRequest<K>

    §

    fn default() -> FullScanRequest<K>

    Returns the “default value” for a type. Read more
    §

    impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>

    §

    fn from(builder: FullScanRequestBuilder<K>) -> FullScanRequest<K>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<K> Freeze for FullScanRequest<K>

    §

    impl<K> !RefUnwindSafe for FullScanRequest<K>

    §

    impl<K> Send for FullScanRequest<K>
    where K: Send,

    §

    impl<K> !Sync for FullScanRequest<K>

    §

    impl<K> Unpin for FullScanRequest<K>

    §

    impl<K> !UnwindSafe for FullScanRequest<K>

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html index 54ee8a3b30..6f549a2b01 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequestBuilder.html @@ -1,16 +1,16 @@ -FullScanRequestBuilder in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanRequestBuilder

    source ·
    pub struct FullScanRequestBuilder<K> { /* private fields */ }
    Expand description

    Builds a FullScanRequest.

    -

    Implementations§

    source§

    impl<K> FullScanRequestBuilder<K>
    where - K: Ord,

    source

    pub fn chain_tip(self, tip: CheckPoint) -> FullScanRequestBuilder<K>

    Set the initial chain tip for the full scan request.

    +FullScanRequestBuilder in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanRequestBuilder

    pub struct FullScanRequestBuilder<K> { /* private fields */ }
    Expand description

    Builds a FullScanRequest.

    +

    Implementations§

    §

    impl<K> FullScanRequestBuilder<K>
    where + K: Ord,

    pub fn chain_tip(self, tip: CheckPoint) -> FullScanRequestBuilder<K>

    Set the initial chain tip for the full scan request.

    This is used to update LocalChain.

    -
    source

    pub fn spks_for_keychain( +

    pub fn spks_for_keychain( self, keychain: K, spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static> ) -> FullScanRequestBuilder<K>

    Set the spk iterator for a given keychain.

    -
    source

    pub fn inspect<F>(self, inspect: F) -> FullScanRequestBuilder<K>
    where +

    pub fn inspect<F>(self, inspect: F) -> FullScanRequestBuilder<K>
    where F: FnMut(K, u32, &Script) + Send + 'static,

    Set the closure that will inspect every sync item visited.

    -
    source

    pub fn build(self) -> FullScanRequest<K>

    Build the FullScanRequest.

    -

    Trait Implementations§

    source§

    impl<K> Default for FullScanRequestBuilder<K>

    source§

    fn default() -> FullScanRequestBuilder<K>

    Returns the “default value” for a type. Read more
    source§

    impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>

    source§

    fn from(builder: FullScanRequestBuilder<K>) -> FullScanRequest<K>

    Converts to this type from the input type.
    source§

    impl<K: Clone + Ord + Debug> FullScanRequestBuilderExt<K> for FullScanRequestBuilder<K>

    source§

    fn spks_from_indexer(self, indexer: &KeychainTxOutIndex<K>) -> Self

    Add spk iterators for each keychain tracked in indexer.

    Auto Trait Implementations§

    pub fn build(self) -> FullScanRequest<K>

    Build the FullScanRequest.

    +

    Trait Implementations§

    §

    impl<K> Default for FullScanRequestBuilder<K>

    §

    fn default() -> FullScanRequestBuilder<K>

    Returns the “default value” for a type. Read more
    §

    impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>

    §

    fn from(builder: FullScanRequestBuilder<K>) -> FullScanRequest<K>

    Converts to this type from the input type.
    source§

    impl<K: Clone + Ord + Debug> FullScanRequestBuilderExt<K> for FullScanRequestBuilder<K>

    source§

    fn spks_from_indexer(self, indexer: &KeychainTxOutIndex<K>) -> Self

    Add spk iterators for each keychain tracked in indexer.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html index 417cb2c794..a4231f4a61 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html @@ -1,4 +1,4 @@ -FullScanResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanResult

    source ·
    pub struct FullScanResult<K, A = ConfirmationBlockTime> {
    +FullScanResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanResult

    pub struct FullScanResult<K, A = ConfirmationBlockTime> {
         pub tx_update: TxUpdate<A>,
         pub last_active_indices: BTreeMap<K, u32>,
         pub chain_update: Option<CheckPoint>,
    @@ -8,9 +8,9 @@
     
    §last_active_indices: BTreeMap<K, u32>

    Last active indices for the corresponding keychains (K). An index is active if it had a transaction associated with the script pubkey at that index.

    §chain_update: Option<CheckPoint>

    Changes to the chain discovered during the scan.

    -

    Trait Implementations§

    source§

    impl<K, A> Debug for FullScanResult<K, A>
    where +

    Trait Implementations§

    §

    impl<K, A> Debug for FullScanResult<K, A>
    where K: Debug, - A: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<K, A> Default for FullScanResult<K, A>

    source§

    fn default() -> FullScanResult<K, A>

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    §

    impl<K, A> Freeze for FullScanResult<K, A>

    §

    impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where + A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<K, A> Default for FullScanResult<K, A>

    §

    fn default() -> FullScanResult<K, A>

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    §

    impl<K, A> Freeze for FullScanResult<K, A>

    §

    impl<K, A> RefUnwindSafe for FullScanResult<K, A>

    §

    impl<K, A> Send for FullScanResult<K, A>
    where K: Send, diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html index b9609509a5..4aaa02ff37 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncProgress.html @@ -1,4 +1,4 @@ -SyncProgress in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncProgress

    source ·
    pub struct SyncProgress {
    +SyncProgress in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncProgress

    pub struct SyncProgress {
         pub spks_consumed: usize,
         pub spks_remaining: usize,
         pub txids_consumed: usize,
    @@ -12,13 +12,13 @@
     
    §txids_remaining: usize

    Txids remaining in the request.

    §outpoints_consumed: usize

    Outpoints consumed by the request.

    §outpoints_remaining: usize

    Outpoints remaining in the request.

    -

    Implementations§

    source§

    impl SyncProgress

    source

    pub fn total(&self) -> usize

    Total items, consumed and remaining, of the request.

    -
    source

    pub fn total_spks(&self) -> usize

    Total script pubkeys, consumed and remaining, of the request.

    -
    source

    pub fn total_txids(&self) -> usize

    Total txids, consumed and remaining, of the request.

    -
    source

    pub fn total_outpoints(&self) -> usize

    Total outpoints, consumed and remaining, of the request.

    -
    source

    pub fn consumed(&self) -> usize

    Total consumed items of the request.

    -
    source

    pub fn remaining(&self) -> usize

    Total remaining items of the request.

    -

    Trait Implementations§

    source§

    impl Clone for SyncProgress

    source§

    fn clone(&self) -> SyncProgress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SyncProgress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Implementations§

    §

    impl SyncProgress

    pub fn total(&self) -> usize

    Total items, consumed and remaining, of the request.

    +

    pub fn total_spks(&self) -> usize

    Total script pubkeys, consumed and remaining, of the request.

    +

    pub fn total_txids(&self) -> usize

    Total txids, consumed and remaining, of the request.

    +

    pub fn total_outpoints(&self) -> usize

    Total outpoints, consumed and remaining, of the request.

    +

    pub fn consumed(&self) -> usize

    Total consumed items of the request.

    +

    pub fn remaining(&self) -> usize

    Total remaining items of the request.

    +

    Trait Implementations§

    §

    impl Clone for SyncProgress

    §

    fn clone(&self) -> SyncProgress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for SyncProgress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html index 9608b4ef31..dccbc18d01 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html @@ -1,4 +1,4 @@ -SyncRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncRequest

    source ·
    pub struct SyncRequest<I = ()> { /* private fields */ }
    Expand description

    Data required to perform a spk-based blockchain client sync.

    +SyncRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncRequest

    pub struct SyncRequest<I = ()> { /* private fields */ }
    Expand description

    Data required to perform a spk-based blockchain client sync.

    A client sync fetches relevant chain data for a known list of scripts, transaction ids and outpoints. The sync process also updates the chain from the given chain_tip (if provided).

    @@ -13,19 +13,19 @@ .inspect(|item, progress| println!("{} (remaining: {})", item, progress.remaining())) // Finish constructing the sync request. .build();
    -

    Implementations§

    source§

    impl<I> SyncRequest<I>

    source

    pub fn builder() -> SyncRequestBuilder<I>

    Start building a SyncRequest.

    -
    source

    pub fn progress(&self) -> SyncProgress

    Get the SyncProgress of this request.

    -
    source

    pub fn chain_tip(&self) -> Option<CheckPoint>

    Get the chain tip CheckPoint of this request (if any).

    -
    source

    pub fn next_spk(&mut self) -> Option<ScriptBuf>

    Advances the sync request and returns the next ScriptBuf.

    +

    Implementations§

    §

    impl<I> SyncRequest<I>

    pub fn builder() -> SyncRequestBuilder<I>

    Start building a SyncRequest.

    +

    pub fn progress(&self) -> SyncProgress

    Get the SyncProgress of this request.

    +

    pub fn chain_tip(&self) -> Option<CheckPoint>

    Get the chain tip CheckPoint of this request (if any).

    +

    pub fn next_spk(&mut self) -> Option<ScriptBuf>

    Advances the sync request and returns the next ScriptBuf.

    Returns None when there are no more scripts remaining in the request.

    -
    source

    pub fn next_txid(&mut self) -> Option<Txid>

    Advances the sync request and returns the next Txid.

    +

    pub fn next_txid(&mut self) -> Option<Txid>

    Advances the sync request and returns the next Txid.

    Returns None when there are no more txids remaining in the request.

    -
    source

    pub fn next_outpoint(&mut self) -> Option<OutPoint>

    Advances the sync request and returns the next OutPoint.

    +

    pub fn next_outpoint(&mut self) -> Option<OutPoint>

    Advances the sync request and returns the next OutPoint.

    Returns None when there are no more outpoints in the request.

    -
    source

    pub fn iter_spks(&mut self) -> impl ExactSizeIterator

    Iterate over ScriptBufs contained in this request.

    -
    source

    pub fn iter_txids(&mut self) -> impl ExactSizeIterator

    Iterate over Txids contained in this request.

    -
    source

    pub fn iter_outpoints(&mut self) -> impl ExactSizeIterator

    Iterate over OutPoints contained in this request.

    -

    Trait Implementations§

    source§

    impl<I> Default for SyncRequest<I>

    source§

    fn default() -> SyncRequest<I>

    Returns the “default value” for a type. Read more
    source§

    impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>

    source§

    fn from(builder: SyncRequestBuilder<I>) -> SyncRequest<I>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<I> Freeze for SyncRequest<I>

    §

    impl<I = ()> !RefUnwindSafe for SyncRequest<I>

    §

    impl<I> Send for SyncRequest<I>
    where +

    pub fn iter_spks(&mut self) -> impl ExactSizeIterator

    Iterate over ScriptBufs contained in this request.

    +

    pub fn iter_txids(&mut self) -> impl ExactSizeIterator

    Iterate over Txids contained in this request.

    +

    pub fn iter_outpoints(&mut self) -> impl ExactSizeIterator

    Iterate over OutPoints contained in this request.

    +

    Trait Implementations§

    §

    impl<I> Default for SyncRequest<I>

    §

    fn default() -> SyncRequest<I>

    Returns the “default value” for a type. Read more
    §

    impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>

    §

    fn from(builder: SyncRequestBuilder<I>) -> SyncRequest<I>

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<I> Freeze for SyncRequest<I>

    §

    impl<I = ()> !RefUnwindSafe for SyncRequest<I>

    §

    impl<I> Send for SyncRequest<I>
    where I: Send,

    §

    impl<I = ()> !Sync for SyncRequest<I>

    §

    impl<I> Unpin for SyncRequest<I>
    where I: Unpin,

    §

    impl<I = ()> !UnwindSafe for SyncRequest<I>

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html index 09d743949b..0e9eeef819 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequestBuilder.html @@ -1,11 +1,11 @@ -SyncRequestBuilder in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncRequestBuilder

    source ·
    pub struct SyncRequestBuilder<I = ()> { /* private fields */ }
    Expand description

    Builds a SyncRequest.

    -

    Implementations§

    source§

    impl SyncRequestBuilder

    source

    pub fn spks( +SyncRequestBuilder in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncRequestBuilder

    pub struct SyncRequestBuilder<I = ()> { /* private fields */ }
    Expand description

    Builds a SyncRequest.

    +

    Implementations§

    §

    impl SyncRequestBuilder

    pub fn spks( self, spks: impl IntoIterator<Item = ScriptBuf> ) -> SyncRequestBuilder

    Add Scripts that will be synced against.

    -
    source§

    impl<I> SyncRequestBuilder<I>

    source

    pub fn chain_tip(self, cp: CheckPoint) -> SyncRequestBuilder<I>

    Set the initial chain tip for the sync request.

    +
    §

    impl<I> SyncRequestBuilder<I>

    pub fn chain_tip(self, cp: CheckPoint) -> SyncRequestBuilder<I>

    Set the initial chain tip for the sync request.

    This is used to update LocalChain.

    -
    source

    pub fn spks_with_indexes( +

    pub fn spks_with_indexes( self, spks: impl IntoIterator<Item = (I, ScriptBuf)> ) -> SyncRequestBuilder<I>

    Add Scripts coupled with associated indexes that will be synced against.

    @@ -35,18 +35,18 @@
    §Example
    let _request = SyncRequest::builder() .spks_with_indexes(all_revealed_spks) .build();
    -

    source

    pub fn txids( +

    pub fn txids( self, txids: impl IntoIterator<Item = Txid> ) -> SyncRequestBuilder<I>

    Add Txids that will be synced against.

    -
    source

    pub fn outpoints( +

    pub fn outpoints( self, outpoints: impl IntoIterator<Item = OutPoint> ) -> SyncRequestBuilder<I>

    Add OutPoints that will be synced against.

    -
    source

    pub fn inspect<F>(self, inspect: F) -> SyncRequestBuilder<I>
    where +

    pub fn inspect<F>(self, inspect: F) -> SyncRequestBuilder<I>
    where F: FnMut(SyncItem<'_, I>, SyncProgress) + Send + 'static,

    Set the closure that will inspect every sync item visited.

    -
    source

    pub fn build(self) -> SyncRequest<I>

    Build the SyncRequest.

    -

    Trait Implementations§

    source§

    impl<I> Default for SyncRequestBuilder<I>

    source§

    fn default() -> SyncRequestBuilder<I>

    Returns the “default value” for a type. Read more
    source§

    impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>

    source§

    fn from(builder: SyncRequestBuilder<I>) -> SyncRequest<I>

    Converts to this type from the input type.
    source§

    impl<K: Clone + Ord + Debug> SyncRequestBuilderExt<K> for SyncRequestBuilder<(K, u32)>

    pub fn build(self) -> SyncRequest<I>

    Build the SyncRequest.

    +

    Trait Implementations§

    §

    impl<I> Default for SyncRequestBuilder<I>

    §

    fn default() -> SyncRequestBuilder<I>

    Returns the “default value” for a type. Read more
    §

    impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>

    §

    fn from(builder: SyncRequestBuilder<I>) -> SyncRequest<I>

    Converts to this type from the input type.
    source§

    impl<K: Clone + Ord + Debug> SyncRequestBuilderExt<K> for SyncRequestBuilder<(K, u32)>

    source§

    fn revealed_spks_from_indexer<R>( self, indexer: &KeychainTxOutIndex<K>, spk_range: R diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html index 0c225e165f..e5aaeb6562 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html @@ -1,12 +1,12 @@ -SyncResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncResult

    source ·
    pub struct SyncResult<A = ConfirmationBlockTime> {
    +SyncResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncResult

    pub struct SyncResult<A = ConfirmationBlockTime> {
         pub tx_update: TxUpdate<A>,
         pub chain_update: Option<CheckPoint>,
     }
    Expand description

    Data returned from a spk-based blockchain client sync.

    See also SyncRequest.

    Fields§

    §tx_update: TxUpdate<A>

    Relevant transaction data discovered during the scan.

    §chain_update: Option<CheckPoint>

    Changes to the chain discovered during the scan.

    -

    Trait Implementations§

    source§

    impl<A> Debug for SyncResult<A>
    where - A: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<A> Default for SyncResult<A>

    source§

    fn default() -> SyncResult<A>

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    §

    impl<A> Freeze for SyncResult<A>

    §

    impl<A> RefUnwindSafe for SyncResult<A>
    where +

    Trait Implementations§

    §

    impl<A> Debug for SyncResult<A>
    where + A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<A> Default for SyncResult<A>

    §

    fn default() -> SyncResult<A>

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    §

    impl<A> Freeze for SyncResult<A>

    §

    impl<A> RefUnwindSafe for SyncResult<A>
    where A: RefUnwindSafe,

    §

    impl<A> Send for SyncResult<A>
    where A: Send,

    §

    impl<A> Sync for SyncResult<A>
    where A: Sync,

    §

    impl<A> Unpin for SyncResult<A>

    §

    impl<A> UnwindSafe for SyncResult<A>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html index 4d527a9719..662077eef8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.BlockId.html @@ -1,27 +1,27 @@ -BlockId in bdk_chain - Rust

    Struct bdk_chain::BlockId

    source ·
    pub struct BlockId {
    +BlockId in bdk_chain - Rust

    Struct bdk_chain::BlockId

    pub struct BlockId {
         pub height: u32,
         pub hash: BlockHash,
     }
    Expand description

    A reference to a block in the canonical chain.

    Fields§

    §height: u32

    The height of the block.

    §hash: BlockHash

    The hash of the block.

    -

    Trait Implementations§

    source§

    impl Anchor for BlockId

    source§

    fn anchor_block(&self) -> Self

    Returns the BlockId that the associated blockchain data is “anchored” in.
    source§

    fn confirmation_height_upper_bound(&self) -> u32

    Get the upper bound of the chain data’s confirmation height. Read more
    source§

    impl Clone for BlockId

    source§

    fn clone(&self) -> BlockId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for BlockId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Default for BlockId

    source§

    fn default() -> BlockId

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for BlockId

    Trait Implementations§

    source§

    impl Anchor for BlockId

    source§

    fn anchor_block(&self) -> Self

    Returns the BlockId that the associated blockchain data is “anchored” in.
    source§

    fn confirmation_height_upper_bound(&self) -> u32

    Get the upper bound of the chain data’s confirmation height. Read more
    §

    impl Clone for BlockId

    §

    fn clone(&self) -> BlockId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for BlockId

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for BlockId

    §

    fn default() -> BlockId

    Returns the “default value” for a type. Read more
    §

    impl<'de> Deserialize<'de> for BlockId

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<BlockId, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<(&u32, &BlockHash)> for BlockId

    source§

    fn from(_: (&u32, &BlockHash)) -> BlockId

    Converts to this type from the input type.
    source§

    impl From<(u32, BlockHash)> for BlockId

    source§

    fn from(_: (u32, BlockHash)) -> BlockId

    Converts to this type from the input type.
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> (u32, BlockHash)

    Converts to this type from the input type.
    source§

    impl<'b> From<TxPosInBlock<'b>> for BlockId

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for BlockId

    source§

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl From<(&u32, &BlockHash)> for BlockId

    §

    fn from(_: (&u32, &BlockHash)) -> BlockId

    Converts to this type from the input type.
    §

    impl From<(u32, BlockHash)> for BlockId

    §

    fn from(_: (u32, BlockHash)) -> BlockId

    Converts to this type from the input type.
    §

    impl From<BlockId> for (u32, BlockHash)

    §

    fn from(block_id: BlockId) -> (u32, BlockHash)

    Converts to this type from the input type.
    source§

    impl<'b> From<TxPosInBlock<'b>> for BlockId

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    §

    impl Hash for BlockId

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for BlockId

    source§

    fn cmp(&self, other: &BlockId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for BlockId

    §

    fn cmp(&self, other: &BlockId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for BlockId

    source§

    fn eq(&self, other: &BlockId) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for BlockId

    §

    fn eq(&self, other: &BlockId) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for BlockId

    source§

    fn partial_cmp(&self, other: &BlockId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd for BlockId

    §

    fn partial_cmp(&self, other: &BlockId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for BlockId

    source§

    fn serialize<__S>( +operator. Read more

    §

    impl Serialize for BlockId

    §

    fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for BlockId

    source§

    impl Eq for BlockId

    source§

    impl StructuralPartialEq for BlockId

    Auto Trait Implementations§

    §

    impl Freeze for BlockId

    §

    impl RefUnwindSafe for BlockId

    §

    impl Send for BlockId

    §

    impl Sync for BlockId

    §

    impl Unpin for BlockId

    §

    impl UnwindSafe for BlockId

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Copy for BlockId

    §

    impl Eq for BlockId

    §

    impl StructuralPartialEq for BlockId

    Auto Trait Implementations§

    §

    impl Freeze for BlockId

    §

    impl RefUnwindSafe for BlockId

    §

    impl Send for BlockId

    §

    impl Sync for BlockId

    §

    impl Unpin for BlockId

    §

    impl UnwindSafe for BlockId

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPoint.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPoint.html index 6d5b518ac3..fe4e4e4e25 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPoint.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPoint.html @@ -1,8 +1,8 @@ -CheckPoint in bdk_chain - Rust

    Struct bdk_chain::CheckPoint

    source ·
    pub struct CheckPoint(/* private fields */);
    Expand description

    A checkpoint is a node of a reference-counted linked list of BlockIds.

    +CheckPoint in bdk_chain - Rust

    Struct bdk_chain::CheckPoint

    pub struct CheckPoint(/* private fields */);
    Expand description

    A checkpoint is a node of a reference-counted linked list of BlockIds.

    Checkpoints are cheaply cloneable and are useful to find the agreement point between two sparse block chains.

    -

    Implementations§

    source§

    impl CheckPoint

    source

    pub fn new(block: BlockId) -> CheckPoint

    Construct a new base block at the front of a linked list.

    -
    source

    pub fn from_block_ids( +

    Implementations§

    §

    impl CheckPoint

    pub fn new(block: BlockId) -> CheckPoint

    Construct a new base block at the front of a linked list.

    +

    pub fn from_block_ids( block_ids: impl IntoIterator<Item = BlockId> ) -> Result<CheckPoint, Option<CheckPoint>>

    Construct a checkpoint from a list of BlockIds in ascending height order.

    §Errors
    @@ -13,30 +13,30 @@
    §Errors
  • The blocks iterator contains multiple BlockIds of the same height.
  • The error type is the last successful checkpoint constructed (if any).

    -
    source

    pub fn from_header(header: &Header, height: u32) -> CheckPoint

    Construct a checkpoint from the given header and block height.

    +

    pub fn from_header(header: &Header, height: u32) -> CheckPoint

    Construct a checkpoint from the given header and block height.

    If header is of the genesis block, the checkpoint won’t have a prev node. Otherwise, we return a checkpoint linked with the previous block.

    -
    source

    pub fn push(self, block: BlockId) -> Result<CheckPoint, CheckPoint>

    Puts another checkpoint onto the linked list representing the blockchain.

    +

    pub fn push(self, block: BlockId) -> Result<CheckPoint, CheckPoint>

    Puts another checkpoint onto the linked list representing the blockchain.

    Returns an Err(self) if the block you are pushing on is not at a greater height that the one you are pushing on to.

    -
    source

    pub fn extend( +

    pub fn extend( self, blocks: impl IntoIterator<Item = BlockId> ) -> Result<CheckPoint, CheckPoint>

    Extends the checkpoint linked list by a iterator of block ids.

    Returns an Err(self) if there is block which does not have a greater height than the previous one.

    -
    source

    pub fn block_id(&self) -> BlockId

    Get the BlockId of the checkpoint.

    -
    source

    pub fn height(&self) -> u32

    Get the height of the checkpoint.

    -
    source

    pub fn hash(&self) -> BlockHash

    Get the block hash of the checkpoint.

    -
    source

    pub fn prev(&self) -> Option<CheckPoint>

    Get the previous checkpoint in the chain

    -
    source

    pub fn iter(&self) -> CheckPointIter

    Iterate from this checkpoint in descending height.

    -
    source

    pub fn get(&self, height: u32) -> Option<CheckPoint>

    Get checkpoint at height.

    +

    pub fn block_id(&self) -> BlockId

    Get the BlockId of the checkpoint.

    +

    pub fn height(&self) -> u32

    Get the height of the checkpoint.

    +

    pub fn hash(&self) -> BlockHash

    Get the block hash of the checkpoint.

    +

    pub fn prev(&self) -> Option<CheckPoint>

    Get the previous checkpoint in the chain

    +

    pub fn iter(&self) -> CheckPointIter

    Iterate from this checkpoint in descending height.

    +

    pub fn get(&self, height: u32) -> Option<CheckPoint>

    Get checkpoint at height.

    Returns None if checkpoint at height does not exist`.

    -
    source

    pub fn range<R>(&self, range: R) -> impl Iterator<Item = CheckPoint>
    where +

    pub fn range<R>(&self, range: R) -> impl Iterator<Item = CheckPoint>
    where R: RangeBounds<u32>,

    Iterate checkpoints over a height range.

    Note that we always iterate checkpoints in reverse height order (iteration starts at tip height).

    -
    source

    pub fn insert(self, block_id: BlockId) -> CheckPoint

    Inserts block_id at its height within the chain.

    +

    pub fn insert(self, block_id: BlockId) -> CheckPoint

    Inserts block_id at its height within the chain.

    The effect of insert depends on whether a height already exists. If it doesn’t the block_id we inserted and all pre-existing blocks higher than it will be re-inserted after it. If the height already existed and has a conflicting block hash then it will be purged @@ -44,8 +44,8 @@

    §Errors
    passed in. Of course, if the block_id was already present then this just returns self.

    §Panics

    This panics if called with a genesis block that differs from that of self.

    -
    source

    pub fn eq_ptr(&self, other: &CheckPoint) -> bool

    This method tests for self and other to have equal internal pointers.

    -

    Trait Implementations§

    source§

    impl Clone for CheckPoint

    source§

    fn clone(&self) -> CheckPoint

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for CheckPoint

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl IntoIterator for CheckPoint

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    §

    type IntoIter = CheckPointIter

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> <CheckPoint as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq for CheckPoint

    source§

    fn eq(&self, other: &CheckPoint) -> bool

    This method tests for self and other values to be equal, and is used +

    pub fn eq_ptr(&self, other: &CheckPoint) -> bool

    This method tests for self and other to have equal internal pointers.

    +

    Trait Implementations§

    §

    impl Clone for CheckPoint

    §

    fn clone(&self) -> CheckPoint

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for CheckPoint

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl IntoIterator for CheckPoint

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    §

    type IntoIter = CheckPointIter

    Which kind of iterator are we turning this into?
    §

    fn into_iter(self) -> <CheckPoint as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl PartialEq for CheckPoint

    §

    fn eq(&self, other: &CheckPoint) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPointIter.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPointIter.html index 17a9e33ea7..345880e1fa 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPointIter.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.CheckPointIter.html @@ -1,5 +1,5 @@ -CheckPointIter in bdk_chain - Rust

    Struct bdk_chain::CheckPointIter

    source ·
    pub struct CheckPointIter { /* private fields */ }
    Expand description

    Iterates over checkpoints backwards.

    -

    Trait Implementations§

    source§

    impl Iterator for CheckPointIter

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<<CheckPointIter as Iterator>::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +CheckPointIter in bdk_chain - Rust

    Struct bdk_chain::CheckPointIter

    pub struct CheckPointIter { /* private fields */ }
    Expand description

    Iterates over checkpoints backwards.

    +

    Trait Implementations§

    §

    impl Iterator for CheckPointIter

    §

    type Item = CheckPoint

    The type of the elements being iterated over.
    §

    fn next(&mut self) -> Option<<CheckPointIter as Iterator>::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
    where Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usize
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.ConfirmationBlockTime.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.ConfirmationBlockTime.html index 95cd336931..c86ea53149 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.ConfirmationBlockTime.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.ConfirmationBlockTime.html @@ -1,27 +1,27 @@ -ConfirmationBlockTime in bdk_chain - Rust

    Struct bdk_chain::ConfirmationBlockTime

    source ·
    pub struct ConfirmationBlockTime {
    +ConfirmationBlockTime in bdk_chain - Rust

    Struct bdk_chain::ConfirmationBlockTime

    pub struct ConfirmationBlockTime {
         pub block_id: BlockId,
         pub confirmation_time: u64,
     }
    Expand description

    Represents the confirmation block and time of a transaction.

    Fields§

    §block_id: BlockId

    The anchor block.

    §confirmation_time: u64

    The confirmation time of the transaction being anchored.

    -

    Trait Implementations§

    source§

    impl Anchor for ConfirmationBlockTime

    source§

    fn anchor_block(&self) -> BlockId

    Returns the BlockId that the associated blockchain data is “anchored” in.
    source§

    fn confirmation_height_upper_bound(&self) -> u32

    Get the upper bound of the chain data’s confirmation height. Read more
    source§

    impl Clone for ConfirmationBlockTime

    source§

    fn clone(&self) -> ConfirmationBlockTime

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ConfirmationBlockTime

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Default for ConfirmationBlockTime

    source§

    fn default() -> ConfirmationBlockTime

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for ConfirmationBlockTime

    Trait Implementations§

    source§

    impl Anchor for ConfirmationBlockTime

    source§

    fn anchor_block(&self) -> BlockId

    Returns the BlockId that the associated blockchain data is “anchored” in.
    source§

    fn confirmation_height_upper_bound(&self) -> u32

    Get the upper bound of the chain data’s confirmation height. Read more
    §

    impl Clone for ConfirmationBlockTime

    §

    fn clone(&self) -> ConfirmationBlockTime

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConfirmationBlockTime

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for ConfirmationBlockTime

    §

    fn default() -> ConfirmationBlockTime

    Returns the “default value” for a type. Read more
    §

    impl<'de> Deserialize<'de> for ConfirmationBlockTime

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<ConfirmationBlockTime, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<'b> From<TxPosInBlock<'b>> for ConfirmationBlockTime

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for ConfirmationBlockTime

    source§

    fn hash<__H>(&self, state: &mut __H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<'b> From<TxPosInBlock<'b>> for ConfirmationBlockTime

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    §

    impl Hash for ConfirmationBlockTime

    §

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for ConfirmationBlockTime

    source§

    fn cmp(&self, other: &ConfirmationBlockTime) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for ConfirmationBlockTime

    §

    fn cmp(&self, other: &ConfirmationBlockTime) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for ConfirmationBlockTime

    source§

    fn eq(&self, other: &ConfirmationBlockTime) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for ConfirmationBlockTime

    §

    fn eq(&self, other: &ConfirmationBlockTime) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for ConfirmationBlockTime

    source§

    fn partial_cmp(&self, other: &ConfirmationBlockTime) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd for ConfirmationBlockTime

    §

    fn partial_cmp(&self, other: &ConfirmationBlockTime) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Serialize for ConfirmationBlockTime

    source§

    fn serialize<__S>( +operator. Read more

    §

    impl Serialize for ConfirmationBlockTime

    §

    fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Copy for ConfirmationBlockTime

    source§

    impl Eq for ConfirmationBlockTime

    source§

    impl StructuralPartialEq for ConfirmationBlockTime

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Copy for ConfirmationBlockTime

    §

    impl Eq for ConfirmationBlockTime

    §

    impl StructuralPartialEq for ConfirmationBlockTime

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html index 3626acab09..e2e512c301 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.DescriptorId.html @@ -5,7 +5,7 @@

    Tuple Fields§

    §0: Hash

    Implementations§

    source§

    impl DescriptorId

    source

    pub fn from_raw_hash(inner: Hash) -> DescriptorId

    Creates this wrapper type from the inner hash type.

    source

    pub fn to_raw_hash(self) -> Hash

    Returns the inner hash (sha256, sh256d etc.).

    source

    pub fn as_raw_hash(&self) -> &Hash

    Returns a reference to the inner hash (sha256, sh256d etc.).

    -

    Trait Implementations§

    source§

    impl AsRef<[u8]> for DescriptorId

    source§

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl AsRef<[u8; 32]> for DescriptorId

    source§

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Borrow<[u8]> for DescriptorId

    source§

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    source§

    impl Clone for DescriptorId

    source§

    fn clone(&self) -> DescriptorId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for DescriptorId

    source§

    fn deserialize<D: Deserializer<'de>>(d: D) -> Result<DescriptorId, D::Error>

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<DescriptorId> for Hash

    source§

    fn from(hashtype: DescriptorId) -> Hash

    Converts to this type from the input type.
    source§

    impl From<Hash> for DescriptorId

    source§

    fn from(inner: Hash) -> DescriptorId

    Converts to this type from the input type.
    source§

    impl FromStr for DescriptorId

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<DescriptorId, Self::Err>

    Parses a string s to return a value of this type. Read more
    source§

    impl Hash for DescriptorId

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected +

    Trait Implementations§

    source§

    impl AsRef<[u8]> for DescriptorId

    source§

    fn as_ref(&self) -> &[u8]

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl AsRef<[u8; 32]> for DescriptorId

    source§

    fn as_ref(&self) -> &[u8; 32]

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Borrow<[u8]> for DescriptorId

    source§

    fn borrow(&self) -> &[u8]

    Immutably borrows from an owned value. Read more
    source§

    impl Clone for DescriptorId

    source§

    fn clone(&self) -> DescriptorId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for DescriptorId

    source§

    fn deserialize<D: Deserializer<'de>>(d: D) -> Result<DescriptorId, D::Error>

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<DescriptorId> for Hash

    source§

    fn from(hashtype: DescriptorId) -> Hash

    Converts to this type from the input type.
    source§

    impl From<Hash> for DescriptorId

    source§

    fn from(inner: Hash) -> DescriptorId

    Converts to this type from the input type.
    source§

    impl FromStr for DescriptorId

    §

    type Err = HexToArrayError

    The associated error which can be returned from parsing.
    source§

    fn from_str(s: &str) -> Result<DescriptorId, Self::Err>

    Parses a string s to return a value of this type. Read more
    source§

    impl Hash for DescriptorId

    §

    type Engine = <Hash as Hash>::Engine

    A hashing engine which bytes can be serialized into. It is expected to implement the io::Write trait, and to never return errors under any conditions.
    §

    type Bytes = <Hash as Hash>::Bytes

    The byte array that represents the hash internally.
    source§

    const LEN: usize = 32usize

    Length of the hash, in bytes.
    source§

    const DISPLAY_BACKWARD: bool = false

    Flag indicating whether user-visible serializations of this hash should be backward. For some reason Satoshi decided this should be @@ -13,19 +13,19 @@ B: AsRef<[u8]>, I: IntoIterator<Item = B>,

    Hashes all the byte slices retrieved from the iterator together.

    source§

    impl Hash for DescriptorId

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<I: SliceIndex<[u8]>> Index<I> for DescriptorId

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    source§

    fn index(&self, index: I) -> &Self::Output

    Performs the indexing (container[index]) operation. Read more
    source§

    impl LowerHex for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Ord for DescriptorId

    source§

    fn cmp(&self, other: &DescriptorId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<I: SliceIndex<[u8]>> Index<I> for DescriptorId

    §

    type Output = <I as SliceIndex<[u8]>>::Output

    The returned type after indexing.
    source§

    fn index(&self, index: I) -> &Self::Output

    Performs the indexing (container[index]) operation. Read more
    source§

    impl LowerHex for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Ord for DescriptorId

    source§

    fn cmp(&self, other: &DescriptorId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq for DescriptorId

    source§

    fn eq(&self, other: &DescriptorId) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd for DescriptorId

    source§

    fn partial_cmp(&self, other: &DescriptorId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl SerdeHash for DescriptorId

    source§

    const N: usize = 32usize

    Size, in bits, of the hash.
    source§

    fn from_slice_delegated(sl: &[u8]) -> Result<Self, FromSliceError>

    Helper function to turn a deserialized slice into the correct hash type.
    §

    fn serialize<S>( +operator. Read more

    source§

    impl SerdeHash for DescriptorId

    source§

    const N: usize = 32usize

    Size, in bits, of the hash.
    source§

    fn from_slice_delegated(sl: &[u8]) -> Result<Self, FromSliceError>

    Helper function to turn a deserialized slice into the correct hash type.
    §

    fn serialize<S>( &self, s: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where S: Serializer,

    Do serde serialization.
    §

    fn deserialize<'de, D>(d: D) -> Result<Self, <D as Deserializer<'de>>::Error>
    where - D: Deserializer<'de>,

    Do serde deserialization.
    source§

    impl Serialize for DescriptorId

    source§

    fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error>

    Serialize this value into the given Serde serializer. Read more
    source§

    impl UpperHex for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Copy for DescriptorId

    source§

    impl Eq for DescriptorId

    source§

    impl StructuralPartialEq for DescriptorId

    Auto Trait Implementations§

    §

    impl Freeze for DescriptorId

    §

    impl RefUnwindSafe for DescriptorId

    §

    impl Send for DescriptorId

    §

    impl Sync for DescriptorId

    §

    impl Unpin for DescriptorId

    §

    impl UnwindSafe for DescriptorId

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + D: Deserializer<'de>,

    Do serde deserialization.
    source§

    impl Serialize for DescriptorId

    source§

    fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error>

    Serialize this value into the given Serde serializer. Read more
    source§

    impl UpperHex for DescriptorId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Copy for DescriptorId

    source§

    impl Eq for DescriptorId

    source§

    impl StructuralPartialEq for DescriptorId

    Auto Trait Implementations§

    §

    impl Freeze for DescriptorId

    §

    impl RefUnwindSafe for DescriptorId

    §

    impl Send for DescriptorId

    §

    impl Sync for DescriptorId

    §

    impl Unpin for DescriptorId

    §

    impl UnwindSafe for DescriptorId

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html index 20e222b615..21e1af90c7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.Impl.html @@ -1,6 +1,6 @@ Impl in bdk_chain - Rust

    Struct bdk_chain::Impl

    source ·
    pub struct Impl<T>(pub T);
    Expand description

    A wrapper that we use to impl remote traits for types in our crate or dependency crates.

    Tuple Fields§

    §0: T

    Implementations§

    source§

    impl<T> Impl<T>

    source

    pub fn into_inner(self) -> T

    Returns the inner T.

    -

    Trait Implementations§

    source§

    impl<T> Deref for Impl<T>

    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<T> From<T> for Impl<T>

    source§

    fn from(value: T) -> Self

    Converts to this type from the input type.
    source§

    impl FromSql for Impl<Amount>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<BlockHash>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Descriptor<DescriptorPublicKey>>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<DescriptorId>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Network>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<ScriptBuf>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Transaction>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Txid>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl ToSql for Impl<Amount>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<BlockHash>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Descriptor<DescriptorPublicKey>>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<DescriptorId>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Network>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<ScriptBuf>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Transaction>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Txid>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value

    Auto Trait Implementations§

    §

    impl<T> Freeze for Impl<T>
    where +

    Trait Implementations§

    source§

    impl<T> Deref for Impl<T>

    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<T> From<T> for Impl<T>

    source§

    fn from(value: T) -> Self

    Converts to this type from the input type.
    source§

    impl FromSql for Impl<Amount>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<BlockHash>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Descriptor<DescriptorPublicKey>>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<DescriptorId>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Network>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<ScriptBuf>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Transaction>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl FromSql for Impl<Txid>

    source§

    fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self>

    Converts SQLite value into Rust value.
    source§

    impl ToSql for Impl<Amount>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<BlockHash>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Descriptor<DescriptorPublicKey>>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<DescriptorId>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Network>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<ScriptBuf>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Transaction>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value
    source§

    impl ToSql for Impl<Txid>

    source§

    fn to_sql(&self) -> Result<ToSqlOutput<'_>>

    Converts Rust value to SQLite value

    Auto Trait Implementations§

    §

    impl<T> Freeze for Impl<T>
    where T: Freeze,

    §

    impl<T> RefUnwindSafe for Impl<T>
    where T: RefUnwindSafe,

    §

    impl<T> Send for Impl<T>
    where T: Send,

    §

    impl<T> Sync for Impl<T>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxPosInBlock.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxPosInBlock.html index daa35cc2e6..559bfd0551 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxPosInBlock.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxPosInBlock.html @@ -8,7 +8,7 @@

    Fields§

    §block: &'b Block

    Block in which the transaction appeared.

    §block_id: BlockId

    Block’s BlockId.

    §tx_pos: usize

    Position in the block on which the transaction appeared.

    -

    Trait Implementations§

    source§

    impl<'b> Clone for TxPosInBlock<'b>

    source§

    fn clone(&self) -> TxPosInBlock<'b>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'b> Debug for TxPosInBlock<'b>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'b> From<TxPosInBlock<'b>> for BlockId

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    source§

    impl<'b> From<TxPosInBlock<'b>> for ConfirmationBlockTime

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    source§

    impl<'b> PartialEq for TxPosInBlock<'b>

    source§

    fn eq(&self, other: &TxPosInBlock<'b>) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl<'b> Clone for TxPosInBlock<'b>

    source§

    fn clone(&self) -> TxPosInBlock<'b>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<'b> Debug for TxPosInBlock<'b>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'b> From<TxPosInBlock<'b>> for BlockId

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    source§

    impl<'b> From<TxPosInBlock<'b>> for ConfirmationBlockTime

    source§

    fn from(pos: TxPosInBlock<'_>) -> Self

    Converts to this type from the input type.
    source§

    impl<'b> PartialEq for TxPosInBlock<'b>

    source§

    fn eq(&self, other: &TxPosInBlock<'b>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl<'b> Copy for TxPosInBlock<'b>

    source§

    impl<'b> Eq for TxPosInBlock<'b>

    source§

    impl<'b> StructuralPartialEq for TxPosInBlock<'b>

    Auto Trait Implementations§

    §

    impl<'b> Freeze for TxPosInBlock<'b>

    §

    impl<'b> RefUnwindSafe for TxPosInBlock<'b>

    §

    impl<'b> Send for TxPosInBlock<'b>

    §

    impl<'b> Sync for TxPosInBlock<'b>

    §

    impl<'b> Unpin for TxPosInBlock<'b>

    §

    impl<'b> UnwindSafe for TxPosInBlock<'b>

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxUpdate.html b/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxUpdate.html index 14bd9d64aa..2eaf7a4230 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxUpdate.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/struct.TxUpdate.html @@ -1,4 +1,4 @@ -TxUpdate in bdk_chain - Rust

    Struct bdk_chain::TxUpdate

    source ·
    pub struct TxUpdate<A = ()> {
    +TxUpdate in bdk_chain - Rust

    Struct bdk_chain::TxUpdate

    pub struct TxUpdate<A = ()> {
         pub txs: Vec<Arc<Transaction>>,
         pub txouts: BTreeMap<OutPoint, TxOut>,
         pub anchors: BTreeSet<(A, Txid)>,
    @@ -14,16 +14,16 @@
     confirmed.

    §seen_ats: HashMap<Txid, u64>

    Seen at times for transactions. This records when a transaction was most recently seen in the user’s mempool for the sake of tie-breaking other conflicting transactions.

    -

    Implementations§

    source§

    impl<A> TxUpdate<A>
    where - A: Ord,

    source

    pub fn map_anchors<A2, F>(self, map: F) -> TxUpdate<A2>
    where +

    Implementations§

    §

    impl<A> TxUpdate<A>
    where + A: Ord,

    pub fn map_anchors<A2, F>(self, map: F) -> TxUpdate<A2>
    where A2: Ord, F: FnMut(A) -> A2,

    Transforms the TxUpdate to have anchors (A) of another type (A2).

    This takes in a closure with signature FnMut(A) -> A2 which is called for each anchor to transform it.

    -
    source

    pub fn extend(&mut self, other: TxUpdate<A>)

    Extend this update with other.

    -

    Trait Implementations§

    source§

    impl<A> Clone for TxUpdate<A>
    where - A: Clone,

    source§

    fn clone(&self) -> TxUpdate<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A> Debug for TxUpdate<A>
    where - A: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<A> Default for TxUpdate<A>

    source§

    fn default() -> TxUpdate<A>

    Returns the “default value” for a type. Read more
    source§

    impl<A> From<TxGraph<A>> for TxUpdate<A>

    source§

    fn from(graph: TxGraph<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Ord + Clone> From<TxUpdate<A>> for TxGraph<A>

    source§

    fn from(update: TxUpdate<A>) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<A> Freeze for TxUpdate<A>

    §

    impl<A> RefUnwindSafe for TxUpdate<A>
    where +

    pub fn extend(&mut self, other: TxUpdate<A>)

    Extend this update with other.

    +

    Trait Implementations§

    §

    impl<A> Clone for TxUpdate<A>
    where + A: Clone,

    §

    fn clone(&self) -> TxUpdate<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<A> Debug for TxUpdate<A>
    where + A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<A> Default for TxUpdate<A>

    §

    fn default() -> TxUpdate<A>

    Returns the “default value” for a type. Read more
    source§

    impl<A> From<TxGraph<A>> for TxUpdate<A>

    source§

    fn from(graph: TxGraph<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Ord + Clone> From<TxUpdate<A>> for TxGraph<A>

    source§

    fn from(update: TxUpdate<A>) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<A> Freeze for TxUpdate<A>

    §

    impl<A> RefUnwindSafe for TxUpdate<A>
    where A: RefUnwindSafe,

    §

    impl<A> Send for TxUpdate<A>
    where A: Send,

    §

    impl<A> Sync for TxUpdate<A>
    where A: Sync,

    §

    impl<A> Unpin for TxUpdate<A>

    §

    impl<A> UnwindSafe for TxUpdate<A>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/trait.Merge.html b/docs-rs/bdk/nightly/latest/bdk_chain/trait.Merge.html index 615941ae81..7e1c0d3a20 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/trait.Merge.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/trait.Merge.html @@ -1,4 +1,4 @@ -Merge in bdk_chain - Rust

    Trait bdk_chain::Merge

    source ·
    pub trait Merge: Default {
    +Merge in bdk_chain - Rust

    Trait bdk_chain::Merge

    pub trait Merge: Default {
         // Required methods
         fn merge(&mut self, other: Self);
         fn is_empty(&self) -> bool;
    @@ -6,39 +6,39 @@
         // Provided method
         fn take(&mut self) -> Option<Self> { ... }
     }
    Expand description

    Trait that makes an object mergeable.

    -

    Required Methods§

    source

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.

    -
    source

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.

    -

    Provided Methods§

    source

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.

    -

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl Merge for ()

    source§

    fn merge(&mut self, _other: ())

    source§

    fn is_empty(&self) -> bool

    source§

    impl<K, V> Merge for BTreeMap<K, V>
    where - K: Ord,

    source§

    fn merge(&mut self, other: BTreeMap<K, V>)

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0> Merge for (T0,)
    where - T0: Merge,

    source§

    fn merge(&mut self, _other: (T0,))

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0, T1> Merge for (T0, T1)
    where +

    Required Methods§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.

    +

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.

    +

    Provided Methods§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.

    +

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    §

    impl Merge for ()

    §

    fn merge(&mut self, _other: ())

    §

    fn is_empty(&self) -> bool

    §

    impl<K, V> Merge for BTreeMap<K, V>
    where + K: Ord,

    §

    fn merge(&mut self, other: BTreeMap<K, V>)

    §

    fn is_empty(&self) -> bool

    §

    impl<T0> Merge for (T0,)
    where + T0: Merge,

    §

    fn merge(&mut self, _other: (T0,))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1> Merge for (T0, T1)
    where T0: Merge, - T1: Merge,

    source§

    fn merge(&mut self, _other: (T0, T1))

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0, T1, T2> Merge for (T0, T1, T2)
    where + T1: Merge,

    §

    fn merge(&mut self, _other: (T0, T1))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2> Merge for (T0, T1, T2)
    where T0: Merge, T1: Merge, - T2: Merge,

    source§

    fn merge(&mut self, _other: (T0, T1, T2))

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0, T1, T2, T3> Merge for (T0, T1, T2, T3)
    where + T2: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3> Merge for (T0, T1, T2, T3)
    where T0: Merge, T1: Merge, T2: Merge, - T3: Merge,

    source§

    fn merge(&mut self, _other: (T0, T1, T2, T3))

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0, T1, T2, T3, T4> Merge for (T0, T1, T2, T3, T4)
    where + T3: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2, T3))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3, T4> Merge for (T0, T1, T2, T3, T4)
    where T0: Merge, T1: Merge, T2: Merge, T3: Merge, - T4: Merge,

    source§

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4))

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0, T1, T2, T3, T4, T5> Merge for (T0, T1, T2, T3, T4, T5)
    where + T4: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3, T4, T5> Merge for (T0, T1, T2, T3, T4, T5)
    where T0: Merge, T1: Merge, T2: Merge, T3: Merge, T4: Merge, - T5: Merge,

    source§

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4, T5))

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T0, T1, T2, T3, T4, T5, T6> Merge for (T0, T1, T2, T3, T4, T5, T6)
    where + T5: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4, T5))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3, T4, T5, T6> Merge for (T0, T1, T2, T3, T4, T5, T6)
    where T0: Merge, T1: Merge, T2: Merge, T3: Merge, T4: Merge, T5: Merge, - T6: Merge,

    source§

    impl<T0, T1, T2, T3, T4, T5, T6, T7> Merge for (T0, T1, T2, T3, T4, T5, T6, T7)
    where + T6: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4, T5, T6))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3, T4, T5, T6, T7> Merge for (T0, T1, T2, T3, T4, T5, T6, T7)
    where T0: Merge, T1: Merge, T2: Merge, @@ -46,7 +46,7 @@ T4: Merge, T5: Merge, T6: Merge, - T7: Merge,

    source§

    impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> Merge for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
    where + T7: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4, T5, T6, T7))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> Merge for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
    where T0: Merge, T1: Merge, T2: Merge, @@ -55,7 +55,7 @@ T5: Merge, T6: Merge, T7: Merge, - T8: Merge,

    source§

    impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> Merge for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
    where + T8: Merge,

    §

    fn merge(&mut self, _other: (T0, T1, T2, T3, T4, T5, T6, T7, T8))

    §

    fn is_empty(&self) -> bool

    §

    impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> Merge for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
    where T0: Merge, T1: Merge, T2: Merge, @@ -65,7 +65,7 @@ T6: Merge, T7: Merge, T8: Merge, - T9: Merge,

    source§

    impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Merge for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
    where + T9: Merge,

    §

    impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Merge for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
    where T0: Merge, T1: Merge, T2: Merge, @@ -76,5 +76,5 @@ T7: Merge, T8: Merge, T9: Merge, - T10: Merge,

    source§

    impl<T> Merge for BTreeSet<T>
    where - T: Ord,

    source§

    fn merge(&mut self, other: BTreeSet<T>)

    source§

    fn is_empty(&self) -> bool

    Implementors§

    source§

    impl Merge for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl Merge for bdk_chain::local_chain::ChangeSet

    source§

    impl<A: Ord> Merge for bdk_chain::tx_graph::ChangeSet<A>

    source§

    impl<A: Anchor, IA: Merge> Merge for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>

    source§

    impl<T> Merge for Vec<T>

    \ No newline at end of file + T10: Merge,

    §

    impl<T> Merge for BTreeSet<T>
    where + T: Ord,

    §

    fn merge(&mut self, other: BTreeSet<T>)

    §

    fn is_empty(&self) -> bool

    Implementors§

    source§

    impl Merge for bdk_chain::indexer::keychain_txout::ChangeSet

    source§

    impl Merge for bdk_chain::local_chain::ChangeSet

    source§

    impl<A: Ord> Merge for bdk_chain::tx_graph::ChangeSet<A>

    source§

    impl<A: Anchor, IA: Merge> Merge for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>

    §

    impl<T> Merge for Vec<T>

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html index f1bfa6c7c1..9b5614455a 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.ChangeSet.html @@ -32,7 +32,7 @@

    Remember to call Self::init_sqlite_tables beforehand.

    Trait Implementations§

    source§

    impl<A: Clone> Clone for ChangeSet<A>

    source§

    fn clone(&self) -> ChangeSet<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A: Debug> Debug for ChangeSet<A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<A> Default for ChangeSet<A>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de, A> Deserialize<'de> for ChangeSet<A>
    where A: Ord + Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

    source§

    fn from(graph: ChangeSet<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Ord> Merge for ChangeSet<A>

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl<A: PartialEq> PartialEq for ChangeSet<A>

    source§

    fn eq(&self, other: &ChangeSet<A>) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>

    source§

    fn from(graph: ChangeSet<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Ord> Merge for ChangeSet<A>

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl<A: PartialEq> PartialEq for ChangeSet<A>

    source§

    fn eq(&self, other: &ChangeSet<A>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl<A> Serialize for ChangeSet<A>
    where A: Ord + Serialize,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxUpdate.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxUpdate.html index ce3d4183f9..1076de73e8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxUpdate.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxUpdate.html @@ -1,4 +1,4 @@ -TxUpdate in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxUpdate

    source ·
    pub struct TxUpdate<A = ()> {
    +TxUpdate in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxUpdate

    pub struct TxUpdate<A = ()> {
         pub txs: Vec<Arc<Transaction>>,
         pub txouts: BTreeMap<OutPoint, TxOut>,
         pub anchors: BTreeSet<(A, Txid)>,
    @@ -14,16 +14,16 @@
     confirmed.

    §seen_ats: HashMap<Txid, u64>

    Seen at times for transactions. This records when a transaction was most recently seen in the user’s mempool for the sake of tie-breaking other conflicting transactions.

    -

    Implementations§

    source§

    impl<A> TxUpdate<A>
    where - A: Ord,

    source

    pub fn map_anchors<A2, F>(self, map: F) -> TxUpdate<A2>
    where +

    Implementations§

    §

    impl<A> TxUpdate<A>
    where + A: Ord,

    pub fn map_anchors<A2, F>(self, map: F) -> TxUpdate<A2>
    where A2: Ord, F: FnMut(A) -> A2,

    Transforms the TxUpdate to have anchors (A) of another type (A2).

    This takes in a closure with signature FnMut(A) -> A2 which is called for each anchor to transform it.

    -
    source

    pub fn extend(&mut self, other: TxUpdate<A>)

    Extend this update with other.

    -

    Trait Implementations§

    source§

    impl<A> Clone for TxUpdate<A>
    where - A: Clone,

    source§

    fn clone(&self) -> TxUpdate<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<A> Debug for TxUpdate<A>
    where - A: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl<A> Default for TxUpdate<A>

    source§

    fn default() -> TxUpdate<A>

    Returns the “default value” for a type. Read more
    source§

    impl<A> From<TxGraph<A>> for TxUpdate<A>

    source§

    fn from(graph: TxGraph<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Ord + Clone> From<TxUpdate<A>> for TxGraph<A>

    source§

    fn from(update: TxUpdate<A>) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<A> Freeze for TxUpdate<A>

    §

    impl<A> RefUnwindSafe for TxUpdate<A>
    where +

    pub fn extend(&mut self, other: TxUpdate<A>)

    Extend this update with other.

    +

    Trait Implementations§

    §

    impl<A> Clone for TxUpdate<A>
    where + A: Clone,

    §

    fn clone(&self) -> TxUpdate<A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<A> Debug for TxUpdate<A>
    where + A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl<A> Default for TxUpdate<A>

    §

    fn default() -> TxUpdate<A>

    Returns the “default value” for a type. Read more
    source§

    impl<A> From<TxGraph<A>> for TxUpdate<A>

    source§

    fn from(graph: TxGraph<A>) -> Self

    Converts to this type from the input type.
    source§

    impl<A: Ord + Clone> From<TxUpdate<A>> for TxGraph<A>

    source§

    fn from(update: TxUpdate<A>) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<A> Freeze for TxUpdate<A>

    §

    impl<A> RefUnwindSafe for TxUpdate<A>
    where A: RefUnwindSafe,

    §

    impl<A> Send for TxUpdate<A>
    where A: Send,

    §

    impl<A> Sync for TxUpdate<A>
    where A: Sync,

    §

    impl<A> Unpin for TxUpdate<A>

    §

    impl<A> UnwindSafe for TxUpdate<A>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html b/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html index 887786be48..85d8a74bc0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/type.Indexed.html @@ -1,2 +1,2 @@ -Indexed in bdk_chain - Rust

    Type Alias bdk_chain::Indexed

    source ·
    pub type Indexed<T> = (u32, T);
    Expand description

    A tuple of keychain index and T representing the indexed value.

    +Indexed in bdk_chain - Rust

    Type Alias bdk_chain::Indexed

    pub type Indexed<T> = (u32, T);
    Expand description

    A tuple of keychain index and T representing the indexed value.

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html b/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html index 31eedd4dda..b488422e44 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/type.KeychainIndexed.html @@ -1,2 +1,2 @@ -KeychainIndexed in bdk_chain - Rust

    Type Alias bdk_chain::KeychainIndexed

    source ·
    pub type KeychainIndexed<K, T> = ((K, u32), T);
    Expand description

    A tuple of keychain K, derivation index (u32) and a T associated with them.

    +KeychainIndexed in bdk_chain - Rust

    Type Alias bdk_chain::KeychainIndexed

    pub type KeychainIndexed<K, T> = ((K, u32), T);
    Expand description

    A tuple of keychain K, derivation index (u32) and a T associated with them.

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_core/struct.BlockId.html b/docs-rs/bdk/nightly/latest/bdk_core/struct.BlockId.html index 83b452c569..8761982c28 100644 --- a/docs-rs/bdk/nightly/latest/bdk_core/struct.BlockId.html +++ b/docs-rs/bdk/nightly/latest/bdk_core/struct.BlockId.html @@ -5,7 +5,7 @@

    Fields§

    §height: u32

    The height of the block.

    §hash: BlockHash

    The hash of the block.

    Trait Implementations§

    source§

    impl Clone for BlockId

    source§

    fn clone(&self) -> BlockId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for BlockId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for BlockId

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for BlockId

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<(&u32, &BlockHash)> for BlockId

    source§

    fn from((height, hash): (&u32, &BlockHash)) -> Self

    Converts to this type from the input type.
    source§

    impl From<(u32, BlockHash)> for BlockId

    source§

    fn from((height, hash): (u32, BlockHash)) -> Self

    Converts to this type from the input type.
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for BlockId

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<(&u32, &BlockHash)> for BlockId

    source§

    fn from((height, hash): (&u32, &BlockHash)) -> Self

    Converts to this type from the input type.
    source§

    impl From<(u32, BlockHash)> for BlockId

    source§

    fn from((height, hash): (u32, BlockHash)) -> Self

    Converts to this type from the input type.
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> Self

    Converts to this type from the input type.
    source§

    impl Hash for BlockId

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for BlockId

    source§

    fn cmp(&self, other: &BlockId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_esplora/index.html b/docs-rs/bdk/nightly/latest/bdk_esplora/index.html index 4e677d468e..118bbef644 100644 --- a/docs-rs/bdk/nightly/latest/bdk_esplora/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_esplora/index.html @@ -1,8 +1,8 @@ bdk_esplora - Rust

    Crate bdk_esplora

    source ·
    Expand description

    §BDK Esplora

    BDK Esplora extends esplora-client (with extension traits: EsploraExt and EsploraAsyncExt) to update bdk_chain structures from an Esplora server.

    -

    The extension traits are primarily intended to satisfy SyncRequests with sync and -FullScanRequests with full_scan.

    +

    The extension traits are primarily intended to satisfy SyncRequests with sync and +FullScanRequests with full_scan.

    §Usage

    For blocking-only:

    bdk_esplora = { version = "0.3", features = ["blocking"] }
    diff --git a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html
    index 2f714a1780..918071f8be 100644
    --- a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html
    +++ b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html
    @@ -5,18 +5,18 @@
             request: R,
             stop_gap: usize,
             parallel_requests: usize
    -    ) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    +    ) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
            where K: 'async_trait + Ord + Clone + Send,
    -             R: 'async_trait + Into<FullScanRequest<K>> + Send,
    +             R: 'async_trait + Into<FullScanRequest<K>> + Send,
                  Self: 'async_trait,
                  'life0: 'async_trait;
         fn sync<'life0, 'async_trait, I, R>(
             &'life0 self,
             request: R,
             parallel_requests: usize
    -    ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    +    ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
            where I: 'async_trait + Send,
    -             R: 'async_trait + Into<SyncRequest<I>> + Send,
    +             R: 'async_trait + Into<SyncRequest<I>> + Send,
                  Self: 'async_trait,
                  'life0: 'async_trait;
     }
    Expand description

    Trait to extend the functionality of [esplora_client::AsyncClient].

    @@ -26,14 +26,14 @@ request: R, stop_gap: usize, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where K: 'async_trait + Ord + Clone + Send, - R: 'async_trait + Into<FullScanRequest<K>> + Send, + R: 'async_trait + Into<FullScanRequest<K>> + Send, Self: 'async_trait, 'life0: 'async_trait,

    Scan keychain scripts for transactions against Esplora, returning an update that can be applied to the receiving structures.

    request provides the data required to perform a script-pubkey-based full scan -(see FullScanRequest). The full scan for each keychain (K) stops after a gap of +(see [FullScanRequest]). The full scan for each keychain (K) stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the maximum number of HTTP requests to make in parallel.

    Refer to crate-level docs for more.

    @@ -41,13 +41,13 @@ &'life0 self, request: R, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where I: 'async_trait + Send, - R: 'async_trait + Into<SyncRequest<I>> + Send, + R: 'async_trait + Into<SyncRequest<I>> + Send, Self: 'async_trait, 'life0: 'async_trait,

    Sync a set of scripts, txids, and/or outpoints against Esplora.

    request provides the data required to perform a script-pubkey-based sync (see -SyncRequest). parallel_requests specifies the maximum number of HTTP requests to make +[SyncRequest]). parallel_requests specifies the maximum number of HTTP requests to make in parallel.

    Refer to crate-level docs for more.

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraAsyncExt for AsyncClient

    source§

    fn full_scan<'life0, 'async_trait, K, R>( @@ -55,16 +55,16 @@ request: R, stop_gap: usize, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where K: 'async_trait + Ord + Clone + Send, - R: 'async_trait + Into<FullScanRequest<K>> + Send, + R: 'async_trait + Into<FullScanRequest<K>> + Send, Self: 'async_trait, 'life0: 'async_trait,

    source§

    fn sync<'life0, 'async_trait, I, R>( &'life0 self, request: R, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where I: 'async_trait + Send, - R: 'async_trait + Into<SyncRequest<I>> + Send, + R: 'async_trait + Into<SyncRequest<I>> + Send, Self: 'async_trait, 'life0: 'async_trait,

    Implementors§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html index c0fc7a6095..4856efe2d1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html +++ b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html @@ -1,46 +1,46 @@ EsploraExt in bdk_esplora - Rust

    Trait bdk_esplora::EsploraExt

    source ·
    pub trait EsploraExt {
         // Required methods
    -    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>(
    +    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>(
             &self,
             request: R,
             stop_gap: usize,
             parallel_requests: usize
    -    ) -> Result<FullScanResult<K>, Error>;
    -    fn sync<I: 'static, R: Into<SyncRequest<I>>>(
    +    ) -> Result<FullScanResult<K>, Error>;
    +    fn sync<I: 'static, R: Into<SyncRequest<I>>>(
             &self,
             request: R,
             parallel_requests: usize
    -    ) -> Result<SyncResult, Error>;
    +    ) -> Result<SyncResult, Error>;
     }
    Expand description

    Trait to extend the functionality of [esplora_client::BlockingClient].

    Refer to crate-level documentation for more.

    -

    Required Methods§

    Required Methods§

    source

    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>( &self, request: R, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

    Scan keychain scripts for transactions against Esplora, returning an update that can be +) -> Result<FullScanResult<K>, Error>

    Scan keychain scripts for transactions against Esplora, returning an update that can be applied to the receiving structures.

    request provides the data required to perform a script-pubkey-based full scan -(see FullScanRequest). The full scan for each keychain (K) stops after a gap of +(see [FullScanRequest]). The full scan for each keychain (K) stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the maximum number of HTTP requests to make in parallel.

    Refer to crate-level docs for more.

    -
    source

    fn sync<I: 'static, R: Into<SyncRequest<I>>>( +

    source

    fn sync<I: 'static, R: Into<SyncRequest<I>>>( &self, request: R, parallel_requests: usize -) -> Result<SyncResult, Error>

    Sync a set of scripts, txids, and/or outpoints against Esplora.

    +) -> Result<SyncResult, Error>

    Sync a set of scripts, txids, and/or outpoints against Esplora.

    request provides the data required to perform a script-pubkey-based sync (see -SyncRequest). parallel_requests specifies the maximum number of HTTP requests to make +[SyncRequest]). parallel_requests specifies the maximum number of HTTP requests to make in parallel.

    Refer to crate-level docs for more.

    -

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraExt for BlockingClient

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraExt for BlockingClient

    source§

    fn full_scan<K: Ord + Clone, R: Into<FullScanRequest<K>>>( &self, request: R, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

    source§

    fn sync<I: 'static, R: Into<SyncRequest<I>>>( +) -> Result<FullScanResult<K>, Error>

    source§

    fn sync<I: 'static, R: Into<SyncRequest<I>>>( &self, request: R, parallel_requests: usize -) -> Result<SyncResult, Error>

    Implementors§

    \ No newline at end of file +) -> Result<SyncResult, Error>

    Implementors§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html b/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html index 4d0e670f51..7eba4479d6 100644 --- a/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html +++ b/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html @@ -1,7 +1,7 @@ Store in bdk_file_store - Rust

    Struct bdk_file_store::Store

    source ·
    pub struct Store<C>
    where C: Sync + Send,
    { /* private fields */ }
    Expand description

    Persists an append-only list of changesets (C) to a single file.

    Implementations§

    source§

    impl<C> Store<C>

    source

    pub fn create_new<P>(magic: &[u8], file_path: P) -> Result<Self, FileError>
    where + C: Merge + Serialize + DeserializeOwned + Send + Sync,

    source

    pub fn create_new<P>(magic: &[u8], file_path: P) -> Result<Self, FileError>
    where P: AsRef<Path>,

    Create a new Store file in write-only mode; error if the file exists.

    magic is the prefixed bytes to write to the new file. This will be checked when opening the Store in the future with open.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/all.html b/docs-rs/bdk/nightly/latest/bdk_testenv/all.html index bec6147d4f..5f0a9d972c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_testenv/all.html +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/all.html @@ -1 +1 @@ -List of all items in this crate

    List of all items

    Structs

    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/index.html b/docs-rs/bdk/nightly/latest/bdk_testenv/index.html index 1e5e7db1ee..941db741d3 100644 --- a/docs-rs/bdk/nightly/latest/bdk_testenv/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/index.html @@ -1,2 +1,2 @@ -bdk_testenv - Rust

    Crate bdk_testenv

    source ·

    Re-exports§

    • pub use electrsd;
    • pub use electrsd::bitcoind;
    • pub use electrsd::bitcoind::anyhow;
    • pub use electrsd::bitcoind::bitcoincore_rpc;
    • pub use electrsd::electrum_client;

    Structs§

    • Configuration parameters.
    • Struct for running a regtest environment with a single bitcoind node with an electrs +bdk_testenv - Rust

      Crate bdk_testenv

      source ·

      Re-exports§

      • pub use electrsd;
      • pub use electrsd::bitcoind;
      • pub use electrsd::bitcoind::anyhow;
      • pub use electrsd::bitcoind::bitcoincore_rpc;
      • pub use electrsd::electrum_client;

      Modules§

      Macros§

      Structs§

      • Configuration parameters.
      • Struct for running a regtest environment with a single bitcoind node with an electrs instance connected to it.
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.block_id!.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.block_id!.html new file mode 100644 index 0000000000..13f1ef40cc --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.block_id!.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

      Redirecting to macro.block_id.html...

      + + + \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.block_id.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.block_id.html new file mode 100644 index 0000000000..bec9da7e74 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.block_id.html @@ -0,0 +1,3 @@ +block_id in bdk_testenv - Rust

      Macro bdk_testenv::block_id

      source ·
      macro_rules! block_id {
      +    ($height:expr, $hash:literal) => { ... };
      +}
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.chain_update!.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.chain_update!.html new file mode 100644 index 0000000000..55857b2d65 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.chain_update!.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

      Redirecting to macro.chain_update.html...

      + + + \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.chain_update.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.chain_update.html new file mode 100644 index 0000000000..7052a95527 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.chain_update.html @@ -0,0 +1,3 @@ +chain_update in bdk_testenv - Rust

      Macro bdk_testenv::chain_update

      source ·
      macro_rules! chain_update {
      +    [ $(($height:expr, $hash:expr)), * ] => { ... };
      +}
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.changeset!.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.changeset!.html new file mode 100644 index 0000000000..41abb0b5ff --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.changeset!.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

      Redirecting to macro.changeset.html...

      + + + \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.changeset.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.changeset.html new file mode 100644 index 0000000000..a7c19bb2ae --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.changeset.html @@ -0,0 +1,8 @@ +changeset in bdk_testenv - Rust

      Macro bdk_testenv::changeset

      source ·
      macro_rules! changeset {
      +    (checkpoints: $($tail:tt)*) => { ... };
      +    (
      +        index: $ind:ty,
      +        checkpoints: [ $(( $height:expr, $cp_to:expr )),* ]
      +        $(,txids: [ $(( $txid:expr, $tx_to:expr )),* ])?
      +    ) => { ... };
      +}
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.hash!.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.hash!.html new file mode 100644 index 0000000000..1ff6542f38 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.hash!.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

      Redirecting to macro.hash.html...

      + + + \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.hash.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.hash.html new file mode 100644 index 0000000000..e73a8eae01 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.hash.html @@ -0,0 +1,3 @@ +hash in bdk_testenv - Rust

      Macro bdk_testenv::hash

      source ·
      macro_rules! hash {
      +    ($index:literal) => { ... };
      +}
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.local_chain!.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.local_chain!.html new file mode 100644 index 0000000000..f0947c358d --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.local_chain!.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

      Redirecting to macro.local_chain.html...

      + + + \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/macro.local_chain.html b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.local_chain.html new file mode 100644 index 0000000000..acd2460d68 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/macro.local_chain.html @@ -0,0 +1,3 @@ +local_chain in bdk_testenv - Rust

      Macro bdk_testenv::local_chain

      source ·
      macro_rules! local_chain {
      +    [ $(($height:expr, $hash:expr)), * ] => { ... };
      +}
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/sidebar-items.js b/docs-rs/bdk/nightly/latest/bdk_testenv/sidebar-items.js index 66d1833d86..492eba810d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_testenv/sidebar-items.js +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","TestEnv"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"macro":["block_id","chain_update","changeset","hash","local_chain"],"mod":["utils"],"struct":["Config","TestEnv"]}; \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/struct.Config.html b/docs-rs/bdk/nightly/latest/bdk_testenv/struct.Config.html index 16fdf03ff8..69e816e0f1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_testenv/struct.Config.html +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/struct.Config.html @@ -1,10 +1,10 @@ -Config in bdk_testenv - Rust

      Struct bdk_testenv::Config

      source ·
      pub struct Config<'a> {
      +Config in bdk_testenv - Rust

      Struct bdk_testenv::Config

      source ·
      pub struct Config<'a> {
           pub bitcoind: Conf<'a>,
           pub electrsd: Conf<'a>,
       }
      Expand description

      Configuration parameters.

      Fields§

      §bitcoind: Conf<'a>

      [bitcoind::Conf]

      §electrsd: Conf<'a>

      [electrsd::Conf]

      -

      Trait Implementations§

      source§

      impl<'a> Debug for Config<'a>

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result

      Formats the value using the given formatter. Read more
      source§

      impl<'a> Default for Config<'a>

      source§

      fn default() -> Self

      Use the default configuration plus set http_enabled = true for [electrsd::Conf] +

      Trait Implementations§

      source§

      impl<'a> Debug for Config<'a>

      source§

      fn fmt(&self, f: &mut Formatter<'_>) -> Result

      Formats the value using the given formatter. Read more
      source§

      impl<'a> Default for Config<'a>

      source§

      fn default() -> Self

      Use the default configuration plus set http_enabled = true for [electrsd::Conf] which is required for testing bdk_esplora.

      Auto Trait Implementations§

      §

      impl<'a> Freeze for Config<'a>

      §

      impl<'a> RefUnwindSafe for Config<'a>

      §

      impl<'a> Send for Config<'a>

      §

      impl<'a> Sync for Config<'a>

      §

      impl<'a> Unpin for Config<'a>

      §

      impl<'a> UnwindSafe for Config<'a>

      Blanket Implementations§

      source§

      impl<T> Any for T
      where T: 'static + ?Sized,

      source§

      fn type_id(&self) -> TypeId

      Gets the TypeId of self. Read more
      source§

      impl<T> Borrow<T> for T
      where diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/struct.TestEnv.html b/docs-rs/bdk/nightly/latest/bdk_testenv/struct.TestEnv.html index 9c5f4afef7..5814a9196b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_testenv/struct.TestEnv.html +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/struct.TestEnv.html @@ -1,41 +1,41 @@ -TestEnv in bdk_testenv - Rust

      Struct bdk_testenv::TestEnv

      source ·
      pub struct TestEnv {
      +TestEnv in bdk_testenv - Rust

      Struct bdk_testenv::TestEnv

      source ·
      pub struct TestEnv {
           pub bitcoind: BitcoinD,
           pub electrsd: ElectrsD,
       }
      Expand description

      Struct for running a regtest environment with a single bitcoind node with an electrs instance connected to it.

      -

      Fields§

      §bitcoind: BitcoinD§electrsd: ElectrsD

      Implementations§

      source§

      impl TestEnv

      source

      pub fn new() -> Result<Self>

      Construct a new TestEnv instance with the default configuration used by BDK.

      -
      source

      pub fn new_with_config(config: Config<'_>) -> Result<Self>

      Construct a new TestEnv instance with the provided Config.

      -
      source

      pub fn electrum_client(&self) -> &impl ElectrumApi

      Exposes the [ElectrumApi] calls from the Electrum client.

      -
      source

      pub fn rpc_client(&self) -> &impl RpcApi

      Exposes the [RpcApi] calls from [bitcoincore_rpc].

      -
      source

      pub fn reset_electrsd(self) -> Result<Self>

      source

      pub fn mine_blocks( +

      Fields§

      §bitcoind: BitcoinD§electrsd: ElectrsD

      Implementations§

      source§

      impl TestEnv

      source

      pub fn new() -> Result<Self>

      Construct a new TestEnv instance with the default configuration used by BDK.

      +
      source

      pub fn new_with_config(config: Config<'_>) -> Result<Self>

      Construct a new TestEnv instance with the provided Config.

      +
      source

      pub fn electrum_client(&self) -> &impl ElectrumApi

      Exposes the [ElectrumApi] calls from the Electrum client.

      +
      source

      pub fn rpc_client(&self) -> &impl RpcApi

      Exposes the [RpcApi] calls from [bitcoincore_rpc].

      +
      source

      pub fn reset_electrsd(self) -> Result<Self>

      source

      pub fn mine_blocks( &self, count: usize, address: Option<Address> ) -> Result<Vec<BlockHash>>

      Mine a number of blocks of a given size count, which may be specified to a given coinbase address.

      -
      source

      pub fn mine_empty_block(&self) -> Result<(usize, BlockHash)>

      Mine a block that is guaranteed to be empty even with transactions in the mempool.

      -
      source

      pub fn wait_until_electrum_sees_block(&self, timeout: Duration) -> Result<()>

      This method waits for the Electrum notification indicating that a new block has been mined. +

      source

      pub fn mine_empty_block(&self) -> Result<(usize, BlockHash)>

      Mine a block that is guaranteed to be empty even with transactions in the mempool.

      +
      source

      pub fn wait_until_electrum_sees_block(&self, timeout: Duration) -> Result<()>

      This method waits for the Electrum notification indicating that a new block has been mined. timeout is the maximum Duration we want to wait for a response from Electrsd.

      -
      source

      pub fn wait_until_electrum_sees_txid( +

      source

      pub fn wait_until_electrum_sees_txid( &self, txid: Txid, timeout: Duration ) -> Result<()>

      This method waits for Electrsd to see a transaction with given txid. timeout is the maximum Duration we want to wait for a response from Electrsd.

      -
      source

      pub fn invalidate_blocks(&self, count: usize) -> Result<()>

      Invalidate a number of blocks of a given size count.

      -
      source

      pub fn reorg(&self, count: usize) -> Result<Vec<BlockHash>>

      Reorg a number of blocks of a given size count. +

      source

      pub fn invalidate_blocks(&self, count: usize) -> Result<()>

      Invalidate a number of blocks of a given size count.

      +
      source

      pub fn reorg(&self, count: usize) -> Result<Vec<BlockHash>>

      Reorg a number of blocks of a given size count. Refer to TestEnv::mine_empty_block for more information.

      -
      source

      pub fn reorg_empty_blocks( +

      source

      pub fn reorg_empty_blocks( &self, count: usize ) -> Result<Vec<(usize, BlockHash)>>

      Reorg with a number of empty blocks of a given size count.

      -
      source

      pub fn send( +

      source

      pub fn send( &self, address: &Address<NetworkChecked>, amount: Amount ) -> Result<Txid>

      Send a tx of a given amount to a given address.

      -
      source

      pub fn make_checkpoint_tip(&self) -> CheckPoint

      Create a checkpoint linked list of all the blocks in the chain.

      -
      source

      pub fn genesis_hash(&self) -> Result<BlockHash>

      Get the genesis hash of the blockchain.

      +
      source

      pub fn make_checkpoint_tip(&self) -> CheckPoint

      Create a checkpoint linked list of all the blocks in the chain.

      +
      source

      pub fn genesis_hash(&self) -> Result<BlockHash>

      Get the genesis hash of the blockchain.

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for T
      where T: 'static + ?Sized,

      source§

      fn type_id(&self) -> TypeId

      Gets the TypeId of self. Read more
      source§

      impl<T> Borrow<T> for T
      where T: ?Sized,

      source§

      fn borrow(&self) -> &T

      Immutably borrows from an owned value. Read more
      source§

      impl<T> BorrowMut<T> for T
      where diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/utils/constant.DESCRIPTORS.html b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/constant.DESCRIPTORS.html new file mode 100644 index 0000000000..9c077bcdc3 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/constant.DESCRIPTORS.html @@ -0,0 +1 @@ +DESCRIPTORS in bdk_testenv::utils - Rust

      Constant bdk_testenv::utils::DESCRIPTORS

      source ·
      pub const DESCRIPTORS: [&str; 7];
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/utils/fn.new_tx.html b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/fn.new_tx.html new file mode 100644 index 0000000000..65d71248f0 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/fn.new_tx.html @@ -0,0 +1 @@ +new_tx in bdk_testenv::utils - Rust

      Function bdk_testenv::utils::new_tx

      source ·
      pub fn new_tx(lt: u32) -> Transaction
      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/utils/index.html b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/index.html new file mode 100644 index 0000000000..7d78a299e4 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/index.html @@ -0,0 +1 @@ +bdk_testenv::utils - Rust

      Module bdk_testenv::utils

      source ·

      Constants§

      Functions§

      \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_testenv/utils/sidebar-items.js b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/sidebar-items.js new file mode 100644 index 0000000000..ba021d98d2 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_testenv/utils/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"constant":["DESCRIPTORS"],"fn":["new_tx"]}; \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html b/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html index 5a7a5bd838..32c9ea40f0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html @@ -236,8 +236,8 @@
      §Errors

      This function will return an error if hardened derivation is attempted.

    Trait Implementations§

    §

    impl<Pk> Clone for Descriptor<Pk>
    where Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<Pk> Debug for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    source§

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable. -Panics if the descriptor wildcard is hardened.
    source§

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the + Pk: MiniscriptKey,
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    §

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable. +Panics if the descriptor wildcard is hardened.
    §

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the descriptor at index 0.
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where Pk: FromStrKey,

    §

    fn deserialize<D>( deserializer: D @@ -255,12 +255,12 @@

    §Errors
    F: FnMut(&'a Pk) -> bool, Pk: 'a,
    Run a predicate on every key in the descriptor, returning whether the predicate returned true for any key
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where + Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where + Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where + Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where + Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    §

    impl<Pk> Hash for Descriptor<Pk>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html b/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html index 7504590d3c..8ce51dbf4c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html @@ -26,7 +26,7 @@
    §

    Miniscript(Error)

    Miniscript error

    §

    Hex(HexToBytesError)

    Hex decoding error

    §

    ExternalAndInternalAreTheSame

    The provided wallet descriptors are identical

    -

    Trait Implementations§

    source§

    impl Debug for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for Error

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<HexToBytesError> for Error

    source§

    fn from(err: HexToBytesError) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.
    source§

    impl From<ParsePublicKeyError> for Error

    source§

    fn from(err: ParsePublicKeyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for Error

    source§

    fn eq(&self, other: &Error) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Debug for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for Error

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<HexToBytesError> for Error

    source§

    fn from(err: HexToBytesError) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.
    source§

    impl From<ParsePublicKeyError> for Error

    source§

    fn from(err: ParsePublicKeyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for Error

    source§

    fn eq(&self, other: &Error) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl StructuralPartialEq for Error

    Auto Trait Implementations§

    §

    impl Freeze for Error

    §

    impl RefUnwindSafe for Error

    §

    impl Send for Error

    §

    impl Sync for Error

    §

    impl Unpin for Error

    §

    impl UnwindSafe for Error

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html index 41f49aaa33..61ba63e9bb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html @@ -12,7 +12,7 @@
    §

    AddOnPartialComplete

    Can not add to an item that is Satisfaction::PartialComplete

    §

    MixedTimelockUnits

    Can not merge CSV or timelock values unless both are less than or both are equal or greater than 500_000_000

    §

    IncompatibleConditions

    Incompatible conditions (not currently used)

    -

    Trait Implementations§

    source§

    impl Debug for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for PolicyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<PolicyError> for CreateTxError

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for PolicyError

    source§

    fn eq(&self, other: &PolicyError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Debug for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for PolicyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<PolicyError> for CreateTxError

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for PolicyError

    source§

    fn eq(&self, other: &PolicyError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PolicyError

    source§

    impl StructuralPartialEq for PolicyError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddForeignUtxoError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddForeignUtxoError.html index 6f657e9ca7..e1f47a923c 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddForeignUtxoError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddForeignUtxoError.html @@ -11,7 +11,7 @@

    §foreign_utxo: OutPoint

    Foreign UTXO outpoint

    §

    InvalidOutpoint(OutPoint)

    Requested outpoint doesn’t exist in the tx (vout greater than available outputs)

    §

    MissingUtxo

    Foreign utxo missing witness_utxo or non_witness_utxo

    -

    Trait Implementations§

    source§

    impl Debug for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddForeignUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddForeignUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html index f536898238..d3700a7057 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.AddUtxoError.html @@ -2,7 +2,7 @@ UnknownUtxo(OutPoint), }
    Expand description

    Error returned from TxBuilder::add_utxo and TxBuilder::add_utxos

    Variants§

    §

    UnknownUtxo(OutPoint)

    Happens when trying to spend an UTXO that is not in the internal database

    -

    Trait Implementations§

    source§

    impl Debug for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html index 93123a0a2a..88254d663d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.ApplyBlockError.html @@ -1,11 +1,11 @@ ApplyBlockError in bdk_wallet - Rust

    Enum bdk_wallet::ApplyBlockError

    source ·
    pub enum ApplyBlockError {
    -    CannotConnect(CannotConnectError),
    +    CannotConnect(CannotConnectError),
         UnexpectedConnectedToHash {
             connected_to_hash: BlockHash,
             expected_hash: BlockHash,
         },
     }
    Expand description

    An error that may occur when applying a block to Wallet.

    -

    Variants§

    §

    CannotConnect(CannotConnectError)

    Occurs when the update chain cannot connect with original chain.

    +

    Variants§

    §

    CannotConnect(CannotConnectError)

    Occurs when the update chain cannot connect with original chain.

    §

    UnexpectedConnectedToHash

    Occurs when the connected_to hash does not match the hash derived from block.

    Fields

    §connected_to_hash: BlockHash

    Block hash of connected_to.

    §expected_hash: BlockHash

    Expected block hash of connected_to, as derived from block.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html index e0ac20a03a..373c027531 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.CreateWithPersistError.html @@ -6,7 +6,7 @@

    Variants§

    §

    Persist(E)

    Error from persistence.

    §

    DataAlreadyExists(ChangeSet)

    Persister already has wallet data.

    §

    Descriptor(DescriptorError)

    Occurs when the loaded changeset cannot construct Wallet.

    -

    Trait Implementations§

    source§

    impl<E: Debug> Debug for CreateWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Display> Display for CreateWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Debug + Display> Error for CreateWithPersistError<E>

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Trait Implementations§

    source§

    impl<E: Debug> Debug for CreateWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Display> Display for CreateWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Debug + Display> Error for CreateWithPersistError<E>

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    §

    impl<E> !Freeze for CreateWithPersistError<E>

    §

    impl<E> RefUnwindSafe for CreateWithPersistError<E>
    where E: RefUnwindSafe,

    §

    impl<E> Send for CreateWithPersistError<E>
    where E: Send,

    §

    impl<E> Sync for CreateWithPersistError<E>
    where E: Sync,

    §

    impl<E> Unpin for CreateWithPersistError<E>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.FileStoreError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.FileStoreError.html index e35cfe4647..968e6a66a0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.FileStoreError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.FileStoreError.html @@ -1,8 +1,8 @@ FileStoreError in bdk_wallet - Rust

    Enum bdk_wallet::FileStoreError

    source ·
    pub enum FileStoreError {
    -    Load(AggregateChangesetsError<ChangeSet>),
    +    Load(AggregateChangesetsError<ChangeSet>),
         Write(Error),
    -}
    Expand description

    Error for bdk_file_store’s implementation of WalletPersister.

    -

    Variants§

    §

    Load(AggregateChangesetsError<ChangeSet>)

    Error when loading from the store.

    +}
    Expand description

    Error for [bdk_file_store]’s implementation of WalletPersister.

    +

    Variants§

    §

    Load(AggregateChangesetsError<ChangeSet>)

    Error when loading from the store.

    §

    Write(Error)

    Error when writing to the store.

    Trait Implementations§

    source§

    impl Debug for FileStoreError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for FileStoreError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for FileStoreError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html index 9d93a29e98..aa6a1d580f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadError.html @@ -10,7 +10,7 @@
    §

    MissingGenesis

    Data loaded from persistence is missing genesis hash.

    §

    MissingDescriptor(KeychainKind)

    Data loaded from persistence is missing descriptor.

    §

    Mismatch(LoadMismatch)

    Data loaded is unexpected.

    -

    Trait Implementations§

    source§

    impl Debug for LoadError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for LoadError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for LoadError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<LoadMismatch> for LoadError

    source§

    fn from(mismatch: LoadMismatch) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for LoadError

    source§

    fn eq(&self, other: &LoadError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Debug for LoadError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for LoadError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for LoadError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<LoadMismatch> for LoadError

    source§

    fn from(mismatch: LoadMismatch) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for LoadError

    source§

    fn eq(&self, other: &LoadError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl StructuralPartialEq for LoadError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html index cf685c5adc..75c49d92c0 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadMismatch.html @@ -19,7 +19,7 @@

    §

    Genesis

    Genesis hash does not match.

    Fields

    §loaded: BlockHash

    The genesis hash that is loaded.

    §expected: BlockHash

    The expected genesis hash.

    -
    §

    Descriptor

    Descriptor’s DescriptorId does not match.

    +
    §

    Descriptor

    Descriptor’s DescriptorId does not match.

    Fields

    §keychain: KeychainKind

    Keychain identifying the descriptor.

    §loaded: Option<ExtendedDescriptor>

    The loaded descriptor.

    §expected: Option<ExtendedDescriptor>

    The expected descriptor.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html index a443a53038..0a09c5a7a2 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/enum.LoadWithPersistError.html @@ -4,7 +4,7 @@ }
    Expand description

    Error type for PersistedWallet::load.

    Variants§

    §

    Persist(E)

    Error from persistence.

    §

    InvalidChangeSet(LoadError)

    Occurs when the loaded changeset cannot construct Wallet.

    -

    Trait Implementations§

    source§

    impl<E: Debug> Debug for LoadWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Display> Display for LoadWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Debug + Display> Error for LoadWithPersistError<E>

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl<E> From<LoadMismatch> for LoadWithPersistError<E>

    source§

    fn from(mismatch: LoadMismatch) -> Self

    Converts to this type from the input type.
    source§

    impl<E: PartialEq> PartialEq for LoadWithPersistError<E>

    source§

    fn eq(&self, other: &LoadWithPersistError<E>) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl<E: Debug> Debug for LoadWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Display> Display for LoadWithPersistError<E>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<E: Debug + Display> Error for LoadWithPersistError<E>

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl<E> From<LoadMismatch> for LoadWithPersistError<E>

    source§

    fn from(mismatch: LoadMismatch) -> Self

    Converts to this type from the input type.
    source§

    impl<E: PartialEq> PartialEq for LoadWithPersistError<E>

    source§

    fn eq(&self, other: &LoadWithPersistError<E>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl<E> StructuralPartialEq for LoadWithPersistError<E>

    Auto Trait Implementations§

    §

    impl<E> !Freeze for LoadWithPersistError<E>

    §

    impl<E> RefUnwindSafe for LoadWithPersistError<E>
    where E: RefUnwindSafe,

    §

    impl<E> Send for LoadWithPersistError<E>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html index 5262b74575..b83d270c96 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.BuildFeeBumpError.html @@ -10,7 +10,7 @@
    §

    TransactionConfirmed(Txid)

    Happens when trying to bump a transaction that is already confirmed

    §

    IrreplaceableTransaction(Txid)

    Trying to replace a tx that has a sequence >= 0xFFFFFFFE

    §

    FeeRateUnavailable

    Node doesn’t have data to estimate a fee rate

    -

    Trait Implementations§

    source§

    impl Debug for BuildFeeBumpError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for BuildFeeBumpError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for BuildFeeBumpError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for BuildFeeBumpError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for BuildFeeBumpError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for BuildFeeBumpError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html index 7b9bae8291..a336b8fde5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.CreateTxError.html @@ -54,7 +54,7 @@
    §

    UnknownUtxo

    Happens when trying to spend an UTXO that is not in the internal database

    §

    MissingNonWitnessUtxo(OutPoint)

    Missing non_witness_utxo on foreign utxo for given OutPoint

    §

    MiniscriptPsbt(MiniscriptPsbtError)

    Miniscript PSBT error

    -

    Trait Implementations§

    source§

    impl Debug for CreateTxError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for CreateTxError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for CreateTxError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<InsufficientFunds> for CreateTxError

    source§

    fn from(err: InsufficientFunds) -> Self

    Converts to this type from the input type.
    source§

    impl From<MiniscriptPsbtError> for CreateTxError

    source§

    fn from(err: MiniscriptPsbtError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for CreateTxError

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for CreateTxError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for CreateTxError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for CreateTxError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<InsufficientFunds> for CreateTxError

    source§

    fn from(err: InsufficientFunds) -> Self

    Converts to this type from the input type.
    source§

    impl From<MiniscriptPsbtError> for CreateTxError

    source§

    fn from(err: MiniscriptPsbtError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for CreateTxError

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html index 33741dd35f..5269ade0cb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/error/enum.MiniscriptPsbtError.html @@ -6,7 +6,7 @@

    Variants§

    §

    Conversion(ConversionError)

    Descriptor key conversion error

    §

    UtxoUpdate(UtxoUpdateError)

    Return error type for PsbtExt::update_input_with_descriptor

    §

    OutputUpdate(OutputUpdateError)

    Return error type for PsbtExt::update_output_with_descriptor

    -

    Trait Implementations§

    source§

    impl Clone for MiniscriptPsbtError

    source§

    fn clone(&self) -> MiniscriptPsbtError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MiniscriptPsbtError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for MiniscriptPsbtError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for MiniscriptPsbtError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<MiniscriptPsbtError> for CreateTxError

    source§

    fn from(err: MiniscriptPsbtError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Clone for MiniscriptPsbtError

    source§

    fn clone(&self) -> MiniscriptPsbtError

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for MiniscriptPsbtError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for MiniscriptPsbtError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for MiniscriptPsbtError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<MiniscriptPsbtError> for CreateTxError

    source§

    fn from(err: MiniscriptPsbtError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/index.html b/docs-rs/bdk/nightly/latest/bdk_wallet/index.html index 76f7386441..d188c269eb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/index.html @@ -183,7 +183,7 @@

    §Contribut submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

    -

    Re-exports§

    Modules§

    Macros§

    • Macro to write full descriptors with code
    • Macro to write descriptor fragments with code

    Structs§

    Enums§

    Traits§

    Re-exports§

    • pub extern crate bitcoin;
    • pub extern crate bdk_chain as chain;
    • pub extern crate bdk_file_store as file_store;
    • pub extern crate miniscript;
    • pub extern crate serde;
    • pub extern crate serde_json;
    • pub use descriptor::template;
    • pub use descriptor::HdKeyPaths;
    • pub use signer;
    • pub use bdk_chain::rusqlite;

    Modules§

    Macros§

    • Macro to write full descriptors with code
    • Macro to write descriptor fragments with code

    Structs§

    Enums§

    Traits§

    Functions§

    Type Aliases§

    • A CanonicalTx managed by a Wallet.
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html index f636679efd..9a395c9c54 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.ExtendedKey.html @@ -22,7 +22,7 @@ origin: Option<KeySource>, derivation_path: DerivationPath ) -> Result<DescriptorKey<Ctx>, KeyError>

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as -key origin and derivation path
    source§

    impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>

    source§

    fn from(xprv: Xpriv) -> Self

    Converts to this type from the input type.
    source§

    impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>

    source§

    fn from(xpub: Xpub) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<Ctx> Freeze for ExtendedKey<Ctx>

    §

    impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx>
    where +key origin and derivation path

    source§

    impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>

    source§

    fn from(xprv: Xpriv) -> Self

    Converts to this type from the input type.
    source§

    impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>

    source§

    fn from(xpub: Xpub) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl<Ctx> Freeze for ExtendedKey<Ctx>

    §

    impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx>
    where Ctx: RefUnwindSafe,

    §

    impl<Ctx> Send for ExtendedKey<Ctx>
    where Ctx: Send,

    §

    impl<Ctx> Sync for ExtendedKey<Ctx>
    where Ctx: Sync,

    §

    impl<Ctx> Unpin for ExtendedKey<Ctx>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html index 2582af1895..838b4165ce 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html @@ -12,7 +12,7 @@
    §

    Message(String)

    Custom error message

    §

    Bip32(Error)

    BIP32 error

    §

    Miniscript(Error)

    Miniscript error

    -

    Trait Implementations§

    source§

    impl Debug for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for KeyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.
    source§

    impl PartialEq for KeyError

    source§

    fn eq(&self, other: &KeyError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Debug for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for KeyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.
    source§

    impl PartialEq for KeyError

    source§

    fn eq(&self, other: &KeyError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl StructuralPartialEq for KeyError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html index bc8d038e63..ad19d1ea26 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/struct.GeneratedKey.html @@ -2,14 +2,14 @@

    Implementations§

    source§

    impl<K, Ctx: ScriptContext> GeneratedKey<K, Ctx>

    source

    pub fn into_key(self) -> K

    Consumes self and returns the key

    Trait Implementations§

    source§

    impl<K: Clone, Ctx: ScriptContext> Clone for GeneratedKey<K, Ctx>

    source§

    fn clone(&self) -> GeneratedKey<K, Ctx>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K, Ctx: ScriptContext> Deref for GeneratedKey<K, Ctx>

    §

    type Target = K

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl<Ctx, K> DerivableKey<Ctx> for GeneratedKey<K, Ctx>
    where Ctx: ScriptContext, - K: DerivableKey<Ctx>,

    source§

    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>

    Consume self and turn it into an ExtendedKey
    source§

    fn into_descriptor_key( + K: DerivableKey<Ctx>,

    source§

    fn into_extended_key(self) -> Result<ExtendedKey<Ctx>, KeyError>

    Consume self and turn it into an ExtendedKey
    source§

    fn into_descriptor_key( self, origin: Option<KeySource>, derivation_path: DerivationPath ) -> Result<DescriptorKey<Ctx>, KeyError>

    Consume self and turn it into a DescriptorKey by adding the extra metadata, such as key origin and derivation path
    source§

    impl<Ctx, K> IntoDescriptorKey<Ctx> for GeneratedKey<K, Ctx>
    where Ctx: ScriptContext, - K: IntoDescriptorKey<Ctx>,

    source§

    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>

    Turn the key into a DescriptorKey within the requested ScriptContext

    Auto Trait Implementations§

    §

    impl<K, Ctx> Freeze for GeneratedKey<K, Ctx>
    where + K: IntoDescriptorKey<Ctx>,

    source§

    fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>

    Turn the key into a DescriptorKey within the requested ScriptContext

    Auto Trait Implementations§

    §

    impl<K, Ctx> Freeze for GeneratedKey<K, Ctx>
    where K: Freeze,

    §

    impl<K, Ctx> RefUnwindSafe for GeneratedKey<K, Ctx>

    §

    impl<K, Ctx> Send for GeneratedKey<K, Ctx>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html index 0793e1da57..3c10a25fbb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/keys/trait.IntoDescriptorKey.html @@ -107,4 +107,4 @@

    §Examples

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for &str

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PrivateKey

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for PublicKey

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for XOnlyPublicKey

    source§

    impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx> for (T, DerivationPath)

    source§

    impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> IntoDescriptorKey<Ctx> for (T, KeySource, DerivationPath)

    Implementors§

    source§

    impl<Ctx, K> IntoDescriptorKey<Ctx> for GeneratedKey<K, Ctx>
    where Ctx: ScriptContext, K: IntoDescriptorKey<Ctx>,

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorKey<Ctx>

    The “identity” conversion is used internally by some bdk_wallet::fragments

    -
    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorPublicKey

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorSecretKey

    \ No newline at end of file +
    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorPublicKey

    source§

    impl<Ctx: ScriptContext> IntoDescriptorKey<Ctx> for DescriptorSecretKey

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html b/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html index 33ab89bb9c..42cac86687 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/constant.SCHEMAS_TABLE_NAME.html @@ -1,2 +1,2 @@ -SCHEMAS_TABLE_NAME in bdk_wallet::rusqlite_impl - Rust

    Constant bdk_wallet::rusqlite_impl::SCHEMAS_TABLE_NAME

    source ·
    pub const SCHEMAS_TABLE_NAME: &'static str;
    Expand description

    Table name for schemas.

    +SCHEMAS_TABLE_NAME in bdk_wallet::rusqlite_impl - Rust

    Constant bdk_wallet::rusqlite_impl::SCHEMAS_TABLE_NAME

    pub const SCHEMAS_TABLE_NAME: &'static str;
    Expand description

    Table name for schemas.

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html b/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html index c631ed176e..e5e7d0627f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/fn.migrate_schema.html @@ -1,4 +1,4 @@ -migrate_schema in bdk_wallet::rusqlite_impl - Rust

    Function bdk_wallet::rusqlite_impl::migrate_schema

    source ·
    pub fn migrate_schema(
    +migrate_schema in bdk_wallet::rusqlite_impl - Rust

    Function bdk_wallet::rusqlite_impl::migrate_schema

    pub fn migrate_schema(
         db_tx: &Transaction<'_>,
         schema_name: &str,
         versioned_scripts: &[&[&str]]
    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html b/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html
    index 0d0946781f..f7086fbb51 100644
    --- a/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html
    +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/rusqlite_impl/index.html
    @@ -1,2 +1,2 @@
    -bdk_wallet::rusqlite_impl - Rust

    Module bdk_wallet::rusqlite_impl

    source ·
    Expand description

    Module for stuff

    +bdk_wallet::rusqlite_impl - Rust

    Module bdk_wallet::rusqlite_impl

    Expand description

    Module for stuff

    Constants§

    Functions§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerError.html index 02d4e31a2b..031e031dfb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerError.html @@ -35,7 +35,7 @@
    §

    External(String)

    To be used only by external libraries implementing InputSigner or TransactionSigner, so that they can return their own custom errors, without having to modify SignerError in BDK.

    -

    Trait Implementations§

    source§

    impl Debug for SignerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SignerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SignerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for SignerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for SignerError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for SignerError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerId.html b/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerId.html index 5a3682ced7..f8607cf797 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerId.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/signer/enum.SignerId.html @@ -7,7 +7,7 @@

    Variants§

    §

    PkHash(Hash)

    Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA public key

    §

    Fingerprint(Fingerprint)

    The fingerprint of a BIP32 extended key

    §

    Dummy(u64)

    Dummy identifier

    -

    Trait Implementations§

    source§

    impl Clone for SignerId

    source§

    fn clone(&self) -> SignerId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignerId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Fingerprint> for SignerId

    source§

    fn from(fing: Fingerprint) -> SignerId

    Converts to this type from the input type.
    source§

    impl From<Hash> for SignerId

    source§

    fn from(hash: Hash) -> SignerId

    Converts to this type from the input type.
    source§

    impl Hash for SignerId

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where +

    Trait Implementations§

    source§

    impl Clone for SignerId

    source§

    fn clone(&self) -> SignerId

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for SignerId

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl From<Fingerprint> for SignerId

    source§

    fn from(fing: Fingerprint) -> SignerId

    Converts to this type from the input type.
    source§

    impl From<Hash> for SignerId

    source§

    fn from(hash: Hash) -> SignerId

    Converts to this type from the input type.
    source§

    impl Hash for SignerId

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Ord for SignerId

    source§

    fn cmp(&self, other: &SignerId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html b/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html index 4f7f01ee61..f12cd5b1f1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/signer/struct.SignerWrapper.html @@ -1,6 +1,6 @@ SignerWrapper in bdk_wallet::signer - Rust

    Struct bdk_wallet::signer::SignerWrapper

    source ·
    pub struct SignerWrapper<S: Sized + Debug + Clone> { /* private fields */ }
    Expand description

    Wrapper to pair a signer with its context

    Implementations§

    source§

    impl<S: Sized + Debug + Clone> SignerWrapper<S>

    source

    pub fn new(signer: S, ctx: SignerContext) -> Self

    Create a wrapped signer from a signer and a context

    -

    Trait Implementations§

    source§

    impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>

    source§

    fn clone(&self) -> SignerWrapper<S>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<S: Debug + Sized + Debug + Clone> Debug for SignerWrapper<S>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<S: Sized + Debug + Clone> Deref for SignerWrapper<S>

    §

    type Target = S

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl InputSigner for SignerWrapper<DescriptorMultiXKey<Xpriv>>

    Trait Implementations§

    source§

    impl<S: Clone + Sized + Debug + Clone> Clone for SignerWrapper<S>

    source§

    fn clone(&self) -> SignerWrapper<S>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<S: Debug + Sized + Debug + Clone> Debug for SignerWrapper<S>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<S: Sized + Debug + Clone> Deref for SignerWrapper<S>

    §

    type Target = S

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl InputSigner for SignerWrapper<DescriptorMultiXKey<Xpriv>>

    source§

    fn sign_input( &self, psbt: &mut Psbt, input_index: usize, @@ -12,13 +12,13 @@ input_index: usize, sign_options: &SignOptions, secp: &Secp256k1<All> -) -> Result<(), SignerError>

    Sign a single psbt input
    source§

    impl InputSigner for SignerWrapper<PrivateKey>

    source§

    fn sign_input( +) -> Result<(), SignerError>

    Sign a single psbt input
    source§

    impl InputSigner for SignerWrapper<PrivateKey>

    source§

    fn sign_input( &self, psbt: &mut Psbt, input_index: usize, sign_options: &SignOptions, secp: &Secp256k1<All> -) -> Result<(), SignerError>

    Sign a single psbt input
    source§

    impl SignerCommon for SignerWrapper<DescriptorMultiXKey<Xpriv>>

    source§

    fn id(&self, secp: &Secp256k1<All>) -> SignerId

    Return the SignerId for this signer Read more
    source§

    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

    Return the secret key for the signer Read more
    source§

    impl SignerCommon for SignerWrapper<DescriptorXKey<Xpriv>>

    source§

    fn id(&self, secp: &Secp256k1<All>) -> SignerId

    Return the SignerId for this signer Read more
    source§

    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

    Return the secret key for the signer Read more
    source§

    impl SignerCommon for SignerWrapper<PrivateKey>

    source§

    fn id(&self, secp: &Secp256k1<All>) -> SignerId

    Return the SignerId for this signer Read more
    source§

    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

    Return the secret key for the signer Read more

    Auto Trait Implementations§

    §

    impl<S> Freeze for SignerWrapper<S>
    where +) -> Result<(), SignerError>

    Sign a single psbt input
    source§

    impl SignerCommon for SignerWrapper<DescriptorMultiXKey<Xpriv>>

    source§

    fn id(&self, secp: &Secp256k1<All>) -> SignerId

    Return the SignerId for this signer Read more
    source§

    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

    Return the secret key for the signer Read more
    source§

    impl SignerCommon for SignerWrapper<DescriptorXKey<Xpriv>>

    source§

    fn id(&self, secp: &Secp256k1<All>) -> SignerId

    Return the SignerId for this signer Read more
    source§

    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

    Return the secret key for the signer Read more
    source§

    impl SignerCommon for SignerWrapper<PrivateKey>

    source§

    fn id(&self, secp: &Secp256k1<All>) -> SignerId

    Return the SignerId for this signer Read more
    source§

    fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey>

    Return the secret key for the signer Read more

    Auto Trait Implementations§

    §

    impl<S> Freeze for SignerWrapper<S>
    where S: Freeze,

    §

    impl<S> RefUnwindSafe for SignerWrapper<S>
    where S: RefUnwindSafe,

    §

    impl<S> Send for SignerWrapper<S>
    where S: Send,

    §

    impl<S> Sync for SignerWrapper<S>
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html index ad045bdff0..4e4bafb5e8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.AddressInfo.html @@ -68,7 +68,7 @@
    §Returns
    let address: Address<NetworkUnchecked> = "32iVBEu4dxkUQk9dJbZUiBiQdmypcEyJRf".parse().unwrap(); assert!(address.is_valid_for_network(Network::Bitcoin)); assert_eq!(address.is_valid_for_network(Network::Testnet), false);

    -

    Trait Implementations§

    source§

    impl Clone for AddressInfo

    source§

    fn clone(&self) -> AddressInfo

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AddressInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for AddressInfo

    §

    type Target = Address

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl Display for AddressInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for AddressInfo

    source§

    fn eq(&self, other: &AddressInfo) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for AddressInfo

    source§

    fn clone(&self) -> AddressInfo

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for AddressInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for AddressInfo

    §

    type Target = Address

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.
    source§

    impl Display for AddressInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for AddressInfo

    source§

    fn eq(&self, other: &AddressInfo) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for AddressInfo

    source§

    impl StructuralPartialEq for AddressInfo

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html index 5d7785a9b9..1c9a20fcd8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Balance.html @@ -1,4 +1,4 @@ -Balance in bdk_wallet - Rust

    Struct bdk_wallet::Balance

    source ·
    pub struct Balance {
    +Balance in bdk_wallet - Rust

    Struct bdk_wallet::Balance

    pub struct Balance {
         pub immature: Amount,
         pub trusted_pending: Amount,
         pub untrusted_pending: Amount,
    @@ -8,20 +8,20 @@
     
    §trusted_pending: Amount

    Unconfirmed UTXOs generated by a wallet tx

    §untrusted_pending: Amount

    Unconfirmed UTXOs received from an external wallet

    §confirmed: Amount

    Confirmed and immediately spendable balance

    -

    Implementations§

    source§

    impl Balance

    source

    pub fn trusted_spendable(&self) -> Amount

    Get sum of trusted_pending and confirmed coins.

    +

    Implementations§

    §

    impl Balance

    pub fn trusted_spendable(&self) -> Amount

    Get sum of trusted_pending and confirmed coins.

    This is the balance you can spend right now that shouldn’t get cancelled via another party double spending it.

    -
    source

    pub fn total(&self) -> Amount

    Get the whole balance visible to the wallet.

    -

    Trait Implementations§

    source§

    impl Add for Balance

    §

    type Output = Balance

    The resulting type after applying the + operator.
    source§

    fn add(self, other: Balance) -> Balance

    Performs the + operation. Read more
    source§

    impl Clone for Balance

    source§

    fn clone(&self) -> Balance

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl Default for Balance

    source§

    fn default() -> Balance

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for Balance

    pub fn total(&self) -> Amount

    Get the whole balance visible to the wallet.

    +

    Trait Implementations§

    §

    impl Add for Balance

    §

    type Output = Balance

    The resulting type after applying the + operator.
    §

    fn add(self, other: Balance) -> Balance

    Performs the + operation. Read more
    §

    impl Clone for Balance

    §

    fn clone(&self) -> Balance

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for Balance

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for Balance

    §

    fn default() -> Balance

    Returns the “default value” for a type. Read more
    §

    impl<'de> Deserialize<'de> for Balance

    §

    fn deserialize<__D>( __deserializer: __D ) -> Result<Balance, <__D as Deserializer<'de>>::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for Balance

    source§

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    §

    impl Display for Balance

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for Balance

    §

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Balance

    source§

    fn serialize<__S>( +sufficient, and should not be overridden without very good reason.

    §

    impl Serialize for Balance

    §

    fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Balance

    source§

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Eq for Balance

    §

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html index 138054f218..ab1d4db317 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.ChangeSet.html @@ -2,24 +2,24 @@ pub descriptor: Option<Descriptor<DescriptorPublicKey>>, pub change_descriptor: Option<Descriptor<DescriptorPublicKey>>, pub network: Option<Network>, - pub local_chain: ChangeSet, - pub tx_graph: ChangeSet<ConfirmationBlockTime>, - pub indexer: ChangeSet, + pub local_chain: ChangeSet, + pub tx_graph: ChangeSet<ConfirmationBlockTime>, + pub indexer: ChangeSet, }
    Expand description

    A changeset for Wallet.

    Fields§

    §descriptor: Option<Descriptor<DescriptorPublicKey>>

    Descriptor for recipient addresses.

    §change_descriptor: Option<Descriptor<DescriptorPublicKey>>

    Descriptor for change addresses.

    §network: Option<Network>

    Stores the network type of the transaction data.

    -
    §local_chain: ChangeSet

    Changes to the LocalChain.

    -
    §tx_graph: ChangeSet<ConfirmationBlockTime>

    Changes to TxGraph.

    -
    §indexer: ChangeSet

    Changes to KeychainTxOutIndex.

    +
    §local_chain: ChangeSet

    Changes to the LocalChain.

    +
    §tx_graph: ChangeSet<ConfirmationBlockTime>

    Changes to TxGraph.

    +
    §indexer: ChangeSet

    Changes to KeychainTxOutIndex.

    Implementations§

    source§

    impl ChangeSet

    source

    pub const WALLET_SCHEMA_NAME: &'static str = "bdk_wallet"

    Schema name for wallet.

    source

    pub const WALLET_TABLE_NAME: &'static str = "bdk_wallet"

    Name of table to store wallet descriptors and network.

    source

    pub fn init_sqlite_tables(db_tx: &Transaction<'_>) -> Result<()>

    Initialize sqlite tables for wallet tables.

    source

    pub fn from_sqlite(db_tx: &Transaction<'_>) -> Result<Self>

    Recover a ChangeSet from sqlite database.

    source

    pub fn persist_to_sqlite(&self, db_tx: &Transaction<'_>) -> Result<()>

    Persist ChangeSet to sqlite database.

    Trait Implementations§

    source§

    impl Clone for ChangeSet

    source§

    fn clone(&self) -> ChangeSet

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ChangeSet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for ChangeSet

    source§

    fn default() -> ChangeSet

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for ChangeSet

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<ChangeSet<ConfirmationBlockTime>> for ChangeSet

    source§

    fn from(tx_graph: ChangeSet<ConfirmationBlockTime>) -> Self

    Converts to this type from the input type.
    source§

    impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet

    source§

    fn from(indexed_tx_graph: ChangeSet<ConfirmationBlockTime, ChangeSet>) -> Self

    Converts to this type from the input type.
    source§

    impl From<ChangeSet> for ChangeSet

    source§

    fn from(chain: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl From<ChangeSet> for ChangeSet

    source§

    fn from(indexer: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another ChangeSet into itself.

    -
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl From<ChangeSet<ConfirmationBlockTime>> for ChangeSet

    source§

    fn from(tx_graph: ChangeSet<ConfirmationBlockTime>) -> Self

    Converts to this type from the input type.
    source§

    impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet

    source§

    fn from(indexed_tx_graph: ChangeSet<ConfirmationBlockTime, ChangeSet>) -> Self

    Converts to this type from the input type.
    source§

    impl From<ChangeSet> for ChangeSet

    source§

    fn from(chain: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl From<ChangeSet> for ChangeSet

    source§

    fn from(indexer: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another ChangeSet into itself.

    +
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ChangeSet

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl StructuralPartialEq for ChangeSet

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html index 8f9958ec7e..061cd324eb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.CreateParams.html @@ -7,7 +7,7 @@
  • change_descriptor = None
  • network = [Network::Bitcoin]
  • genesis_hash = None
  • -
  • lookahead = DEFAULT_LOOKAHEAD
  • +
  • lookahead = [DEFAULT_LOOKAHEAD]
  • Use this method only when building a wallet with a single descriptor. See also Wallet::create_single.

    @@ -19,7 +19,7 @@
    • network = [Network::Bitcoin]
    • genesis_hash = None
    • -
    • lookahead = DEFAULT_LOOKAHEAD
    • +
    • lookahead = [DEFAULT_LOOKAHEAD]

    source

    pub fn keymap(self, keychain: KeychainKind, keymap: KeyMap) -> Self

    Extend the given keychain’s keymap.

    source

    pub fn network(self, network: Network) -> Self

    Set network.

    @@ -28,7 +28,7 @@

    The lookahead defines a number of script pubkeys to derive over and above the last revealed index. Without a lookahead the indexer will miss outputs you own when processing transactions whose output script pubkeys lie beyond the last revealed index. In most cases -the default value DEFAULT_LOOKAHEAD is sufficient.

    +the default value [DEFAULT_LOOKAHEAD] is sufficient.

    source

    pub fn create_wallet<P>( self, persister: &mut P diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html index d787916eb2..c6dc3d4ad7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LoadParams.html @@ -1,6 +1,6 @@ LoadParams in bdk_wallet - Rust

    Struct bdk_wallet::LoadParams

    source ·
    pub struct LoadParams { /* private fields */ }
    Expand description

    Implementations§

    source§

    impl LoadParams

    source

    pub fn new() -> Self

    Construct parameters with default values.

    -

    Default values: lookahead = DEFAULT_LOOKAHEAD

    +

    Default values: lookahead = [DEFAULT_LOOKAHEAD]

    source

    pub fn keymap(self, keychain: KeychainKind, keymap: KeyMap) -> Self

    Extend the given keychain’s keymap.

    source

    pub fn descriptor<D>( self, @@ -17,7 +17,7 @@

    §Note

    The lookahead defines a number of script pubkeys to derive over and above the last revealed index. Without a lookahead the indexer will miss outputs you own when processing transactions whose output script pubkeys lie beyond the last revealed index. In most cases -the default value DEFAULT_LOOKAHEAD is sufficient.

    +the default value [DEFAULT_LOOKAHEAD] is sufficient.

    source

    pub fn extract_keys(self) -> Self

    Whether to try extracting private keys from the provided descriptors upon loading. See also LoadParams::descriptor.

    source

    pub fn load_wallet<P>( diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html index ed70541437..31a68410be 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html @@ -4,14 +4,14 @@ pub keychain: KeychainKind, pub is_spent: bool, pub derivation_index: u32, - pub confirmation_time: ConfirmationTime, + pub confirmation_time: ConfirmationTime, }
    Expand description

    An unspent output owned by a Wallet.

    Fields§

    §outpoint: OutPoint

    Reference to a transaction output

    §txout: TxOut

    Transaction output

    §keychain: KeychainKind

    Type of keychain

    §is_spent: bool

    Whether this UTXO is spent or not

    §derivation_index: u32

    The derivation index for the script pubkey in the wallet

    -
    §confirmation_time: ConfirmationTime

    The confirmation time for transaction containing this utxo

    +
    §confirmation_time: ConfirmationTime

    The confirmation time for transaction containing this utxo

    Trait Implementations§

    source§

    impl Clone for LocalOutput

    source§

    fn clone(&self) -> LocalOutput

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LocalOutput

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LocalOutput

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for LocalOutput

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.PersistedWallet.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.PersistedWallet.html index 9078178656..8be394bdfd 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.PersistedWallet.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.PersistedWallet.html @@ -104,11 +104,11 @@
    §Panics

    source

    pub fn list_unspent(&self) -> impl Iterator<Item = LocalOutput> + '_

    Return the list of unspent outputs of this wallet

    source

    pub fn list_output(&self) -> impl Iterator<Item = LocalOutput> + '_

    List all relevant outputs (includes both spent and unspent, confirmed and unconfirmed).

    To list only unspent outputs (UTXOs), use Wallet::list_unspent instead.

    -
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    -
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    +
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    +
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    source

    pub fn all_unbounded_spk_iters( &self -) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    +) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    This is intended to be used when doing a full scan of your addresses (e.g. after restoring from seed words). You pass the BTreeMap of iterators to a blockchain data source (e.g. electrum server) which will go through each address until it reaches a stop gap.

    @@ -117,7 +117,7 @@
    §Panics
    source

    pub fn unbounded_spk_iter( &self, keychain: KeychainKind -) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    +) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    See all_unbounded_spk_iters for more documentation

    source

    pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput>

    Returns the utxo owned by this wallet corresponding to outpoint if it exists in the wallet’s database.

    @@ -133,7 +133,7 @@
    §Panics
    source

    pub fn calculate_fee( &self, tx: &Transaction -) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    +) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    To calculate the fee for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -146,7 +146,7 @@
    §Examples
    source

    pub fn calculate_fee_rate( &self, tx: &Transaction -) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    +) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    To calculate the fee rate for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -169,9 +169,9 @@
    §Examples
    source

    pub fn get_tx(&self, txid: Txid) -> Option<WalletTx<'_>>

    Get a single transaction from the wallet as a WalletTx (if the transaction exists).

    WalletTx contains the full transaction alongside meta-data such as:

      -
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist +
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist in the best chain.
    • -
    • The ChainPosition of the transaction in the best chain - whether the transaction is +
    • The [ChainPosition] of the transaction in the best chain - whether the transaction is confirmed or unconfirmed. If the transaction is confirmed, the anchor which proves the confirmation is provided. If the transaction is unconfirmed, the unix timestamp of when the transaction was last seen in the mempool is provided.
    • @@ -206,8 +206,8 @@
      §Examples
      }
    source

    pub fn insert_checkpoint( &mut self, - block_id: BlockId -) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain.

    + block_id: BlockId +) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain.

    Returns whether anything changed with the insertion (e.g. false if checkpoint was already there).

    WARNING: You must persist the changes resulting from one or more calls to this method @@ -350,7 +350,7 @@

    §Example
    source

    pub fn apply_update( &mut self, update: impl Into<Update> -) -> Result<(), CannotConnectError>

    Available on crate feature std only.

    Applies an update to the wallet and stages the changes (but does not persist them).

    +) -> Result<(), CannotConnectError>
    Available on crate feature std only.

    Applies an update to the wallet and stages the changes (but does not persist them).

    Usually you create an update by interacting with some blockchain data source and inserting transactions related to your wallet into it.

    After applying updates you should persist the staged wallet changes. For an example of how @@ -359,7 +359,7 @@

    §Example
    &mut self, update: impl Into<Update>, seen_at: Option<u64> -) -> Result<(), CannotConnectError>

    Applies an update alongside an optional seen_at timestamp and stages the changes.

    +) -> Result<(), CannotConnectError>

    Applies an update alongside an optional seen_at timestamp and stages the changes.

    seen_at represents when the update is seen (in unix seconds). It is used to determine the last_seens for all transactions in the update which have no corresponding anchor(s). The last_seen value is used internally to determine precedence of conflicting unconfirmed @@ -372,18 +372,18 @@

    §Example
    source

    pub fn staged(&self) -> Option<&ChangeSet>

    Get a reference of the staged ChangeSet that is yet to be committed (if any).

    source

    pub fn staged_mut(&mut self) -> Option<&mut ChangeSet>

    Get a mutable reference of the staged ChangeSet that is yet to be committed (if any).

    source

    pub fn take_staged(&mut self) -> Option<ChangeSet>

    Take the staged ChangeSet to be persisted now (if any).

    -
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationBlockTime>

    Get a reference to the inner TxGraph.

    +
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationBlockTime>

    Get a reference to the inner [TxGraph].

    source

    pub fn unbroadcast_transactions( &self -) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationBlockTime>>

    Iterate over transactions in the wallet that are unseen and unanchored likely +) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationBlockTime>>

    Iterate over transactions in the wallet that are unseen and unanchored likely because they haven’t been broadcast.

    -
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner KeychainTxOutIndex.

    -
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner LocalChain.

    +
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner [KeychainTxOutIndex].

    +
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner [LocalChain].

    source

    pub fn apply_block( &mut self, block: &Block, height: u32 -) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the +) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the prev_blockhash of the block’s header.

    This is a convenience method that is equivalent to calling apply_block_connected_to with prev_blockhash and height-1 as the connected_to parameter.

    @@ -391,12 +391,12 @@
    §Example
    &mut self, block: &Block, height: u32, - connected_to: BlockId -) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the + connected_to: BlockId +) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the block to the internal chain.

    The connected_to parameter informs the wallet how this block connects to the internal -LocalChain. Relevant transactions are filtered from the block and inserted into the -internal TxGraph.

    +[LocalChain]. Relevant transactions are filtered from the block and inserted into the +internal [TxGraph].

    WARNING: You must persist the changes resulting from one or more calls to this method if you need the inserted block data to be reloaded after closing the wallet. See Wallet::reveal_next_address.

    @@ -414,13 +414,13 @@
    §Example
    See Wallet::reveal_next_address.

    source

    pub fn start_sync_with_revealed_spks( &self -) -> SyncRequestBuilder<(KeychainKind, u32)>

    Create a partial SyncRequest for this wallet for all revealed spks.

    +) -> SyncRequestBuilder<(KeychainKind, u32)>

    Create a partial [SyncRequest] for this wallet for all revealed spks.

    This is the first step when performing a spk-based wallet partial sync, the returned -SyncRequest collects all revealed script pubkeys from the wallet keychain needed to +[SyncRequest] collects all revealed script pubkeys from the wallet keychain needed to start a blockchain sync with a spk based blockchain client.

    -
    source

    pub fn start_full_scan(&self) -> FullScanRequestBuilder<KeychainKind>

    Create a `FullScanRequest for this wallet.

    +
    source

    pub fn start_full_scan(&self) -> FullScanRequestBuilder<KeychainKind>

    Create a [`FullScanRequest] for this wallet.

    This is the first step when performing a spk-based wallet full scan, the returned -`FullScanRequest collects iterators for the wallet’s keychain script pub keys needed to +[`FullScanRequest] collects iterators for the wallet’s keychain script pub keys needed to start a blockchain full scan with a spk based blockchain client.

    This operation is generally only used when importing or restoring a previously used wallet in which the list of used scripts is not known.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html index e4942ff16b..6538a33bf1 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Update.html @@ -1,14 +1,14 @@ Update in bdk_wallet - Rust

    Struct bdk_wallet::Update

    source ·
    pub struct Update {
         pub last_active_indices: BTreeMap<KeychainKind, u32>,
    -    pub tx_update: TxUpdate<ConfirmationBlockTime>,
    -    pub chain: Option<CheckPoint>,
    +    pub tx_update: TxUpdate<ConfirmationBlockTime>,
    +    pub chain: Option<CheckPoint>,
     }
    Expand description

    An update to Wallet.

    -

    It updates KeychainTxOutIndex, bdk_chain::TxGraph and local_chain::LocalChain atomically.

    +

    It updates [KeychainTxOutIndex], [bdk_chain::TxGraph] and [local_chain::LocalChain] atomically.

    Fields§

    §last_active_indices: BTreeMap<KeychainKind, u32>

    Contains the last active derivation indices per keychain (K), which is used to update the -KeychainTxOutIndex.

    -
    §tx_update: TxUpdate<ConfirmationBlockTime>

    Update for the wallet’s internal TxGraph.

    -
    §chain: Option<CheckPoint>

    Update for the wallet’s internal LocalChain.

    -

    Trait Implementations§

    source§

    impl Clone for Update

    source§

    fn clone(&self) -> Update

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Update

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Update

    source§

    fn default() -> Update

    Returns the “default value” for a type. Read more
    source§

    impl From<FullScanResult<KeychainKind>> for Update

    source§

    fn from(value: FullScanResult<KeychainKind>) -> Self

    Converts to this type from the input type.
    source§

    impl From<SyncResult> for Update

    source§

    fn from(value: SyncResult) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Update

    §

    impl RefUnwindSafe for Update

    §

    impl Send for Update

    §

    impl Sync for Update

    §

    impl Unpin for Update

    §

    impl UnwindSafe for Update

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +[KeychainTxOutIndex].

    +
    §tx_update: TxUpdate<ConfirmationBlockTime>

    Update for the wallet’s internal [TxGraph].

    +
    §chain: Option<CheckPoint>

    Update for the wallet’s internal LocalChain.

    +

    Trait Implementations§

    source§

    impl Clone for Update

    source§

    fn clone(&self) -> Update

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Update

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Update

    source§

    fn default() -> Update

    Returns the “default value” for a type. Read more
    source§

    impl From<FullScanResult<KeychainKind>> for Update

    source§

    fn from(value: FullScanResult<KeychainKind>) -> Self

    Converts to this type from the input type.
    source§

    impl From<SyncResult> for Update

    source§

    fn from(value: SyncResult) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    §

    impl Freeze for Update

    §

    impl RefUnwindSafe for Update

    §

    impl Send for Update

    §

    impl Sync for Update

    §

    impl Unpin for Update

    §

    impl UnwindSafe for Update

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html index 4cc5d32963..55a4afe8a7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/struct.Wallet.html @@ -9,7 +9,7 @@ ChangeSets (see take_staged). Also see individual functions and example for instructions on when Wallet state needs to be persisted.

    The Wallet descriptor (external) and change descriptor (internal) must not derive the same -script pubkeys. See KeychainTxOutIndex::insert_descriptor() for more details.

    +script pubkeys. See [KeychainTxOutIndex::insert_descriptor()] for more details.

    Implementations§

    source§

    impl Wallet

    source

    pub fn create_single<D>(descriptor: D) -> CreateParams
    where D: IntoWalletDescriptor + Send + Clone + 'static,

    Build a new single descriptor Wallet.

    If you have previously created a wallet, use load instead.

    @@ -147,11 +147,11 @@
    §Panics
    source

    pub fn list_unspent(&self) -> impl Iterator<Item = LocalOutput> + '_

    Return the list of unspent outputs of this wallet

    source

    pub fn list_output(&self) -> impl Iterator<Item = LocalOutput> + '_

    List all relevant outputs (includes both spent and unspent, confirmed and unconfirmed).

    To list only unspent outputs (UTXOs), use Wallet::list_unspent instead.

    -
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    -
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    +
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    +
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    source

    pub fn all_unbounded_spk_iters( &self -) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    +) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    This is intended to be used when doing a full scan of your addresses (e.g. after restoring from seed words). You pass the BTreeMap of iterators to a blockchain data source (e.g. electrum server) which will go through each address until it reaches a stop gap.

    @@ -160,7 +160,7 @@
    §Panics
    source

    pub fn unbounded_spk_iter( &self, keychain: KeychainKind -) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    +) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    See all_unbounded_spk_iters for more documentation

    source

    pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput>

    Returns the utxo owned by this wallet corresponding to outpoint if it exists in the wallet’s database.

    @@ -176,7 +176,7 @@
    §Panics
    source

    pub fn calculate_fee( &self, tx: &Transaction -) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    +) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    To calculate the fee for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -189,7 +189,7 @@
    §Examples
    source

    pub fn calculate_fee_rate( &self, tx: &Transaction -) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    +) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    To calculate the fee rate for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -212,9 +212,9 @@
    §Examples
    source

    pub fn get_tx(&self, txid: Txid) -> Option<WalletTx<'_>>

    Get a single transaction from the wallet as a WalletTx (if the transaction exists).

    WalletTx contains the full transaction alongside meta-data such as:

      -
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist +
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist in the best chain.
    • -
    • The ChainPosition of the transaction in the best chain - whether the transaction is +
    • The [ChainPosition] of the transaction in the best chain - whether the transaction is confirmed or unconfirmed. If the transaction is confirmed, the anchor which proves the confirmation is provided. If the transaction is unconfirmed, the unix timestamp of when the transaction was last seen in the mempool is provided.
    • @@ -249,8 +249,8 @@
      §Examples
      }
    source

    pub fn insert_checkpoint( &mut self, - block_id: BlockId -) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain.

    + block_id: BlockId +) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain.

    Returns whether anything changed with the insertion (e.g. false if checkpoint was already there).

    WARNING: You must persist the changes resulting from one or more calls to this method @@ -393,7 +393,7 @@

    §Example
    source

    pub fn apply_update( &mut self, update: impl Into<Update> -) -> Result<(), CannotConnectError>

    Available on crate feature std only.

    Applies an update to the wallet and stages the changes (but does not persist them).

    +) -> Result<(), CannotConnectError>
    Available on crate feature std only.

    Applies an update to the wallet and stages the changes (but does not persist them).

    Usually you create an update by interacting with some blockchain data source and inserting transactions related to your wallet into it.

    After applying updates you should persist the staged wallet changes. For an example of how @@ -402,7 +402,7 @@

    §Example
    &mut self, update: impl Into<Update>, seen_at: Option<u64> -) -> Result<(), CannotConnectError>

    Applies an update alongside an optional seen_at timestamp and stages the changes.

    +) -> Result<(), CannotConnectError>

    Applies an update alongside an optional seen_at timestamp and stages the changes.

    seen_at represents when the update is seen (in unix seconds). It is used to determine the last_seens for all transactions in the update which have no corresponding anchor(s). The last_seen value is used internally to determine precedence of conflicting unconfirmed @@ -415,18 +415,18 @@

    §Example
    source

    pub fn staged(&self) -> Option<&ChangeSet>

    Get a reference of the staged ChangeSet that is yet to be committed (if any).

    source

    pub fn staged_mut(&mut self) -> Option<&mut ChangeSet>

    Get a mutable reference of the staged ChangeSet that is yet to be committed (if any).

    source

    pub fn take_staged(&mut self) -> Option<ChangeSet>

    Take the staged ChangeSet to be persisted now (if any).

    -
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationBlockTime>

    Get a reference to the inner TxGraph.

    +
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationBlockTime>

    Get a reference to the inner [TxGraph].

    source

    pub fn unbroadcast_transactions( &self -) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationBlockTime>>

    Iterate over transactions in the wallet that are unseen and unanchored likely +) -> impl Iterator<Item = TxNode<'_, Arc<Transaction>, ConfirmationBlockTime>>

    Iterate over transactions in the wallet that are unseen and unanchored likely because they haven’t been broadcast.

    -
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner KeychainTxOutIndex.

    -
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner LocalChain.

    +
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner [KeychainTxOutIndex].

    +
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner [LocalChain].

    source

    pub fn apply_block( &mut self, block: &Block, height: u32 -) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the +) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the prev_blockhash of the block’s header.

    This is a convenience method that is equivalent to calling apply_block_connected_to with prev_blockhash and height-1 as the connected_to parameter.

    @@ -434,12 +434,12 @@
    §Example
    &mut self, block: &Block, height: u32, - connected_to: BlockId -) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the + connected_to: BlockId +) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the block to the internal chain.

    The connected_to parameter informs the wallet how this block connects to the internal -LocalChain. Relevant transactions are filtered from the block and inserted into the -internal TxGraph.

    +[LocalChain]. Relevant transactions are filtered from the block and inserted into the +internal [TxGraph].

    WARNING: You must persist the changes resulting from one or more calls to this method if you need the inserted block data to be reloaded after closing the wallet. See Wallet::reveal_next_address.

    @@ -458,17 +458,17 @@
    §Example
    source§

    impl Wallet

    Methods to construct sync/full-scan requests for spk-based chain sources.

    source

    pub fn start_sync_with_revealed_spks( &self -) -> SyncRequestBuilder<(KeychainKind, u32)>

    Create a partial SyncRequest for this wallet for all revealed spks.

    +) -> SyncRequestBuilder<(KeychainKind, u32)>

    Create a partial [SyncRequest] for this wallet for all revealed spks.

    This is the first step when performing a spk-based wallet partial sync, the returned -SyncRequest collects all revealed script pubkeys from the wallet keychain needed to +[SyncRequest] collects all revealed script pubkeys from the wallet keychain needed to start a blockchain sync with a spk based blockchain client.

    -
    source

    pub fn start_full_scan(&self) -> FullScanRequestBuilder<KeychainKind>

    Create a `FullScanRequest for this wallet.

    +
    source

    pub fn start_full_scan(&self) -> FullScanRequestBuilder<KeychainKind>

    Create a [`FullScanRequest] for this wallet.

    This is the first step when performing a spk-based wallet full scan, the returned -`FullScanRequest collects iterators for the wallet’s keychain script pub keys needed to +[`FullScanRequest] collects iterators for the wallet’s keychain script pub keys needed to start a blockchain full scan with a spk based blockchain client.

    This operation is generally only used when importing or restoring a previously used wallet in which the list of used scripts is not known.

    -

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationBlockTime>> for Wallet

    source§

    fn as_ref(&self) -> &TxGraph<ConfirmationBlockTime>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Debug for Wallet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl !Freeze for Wallet

    §

    impl !RefUnwindSafe for Wallet

    §

    impl Send for Wallet

    §

    impl Sync for Wallet

    §

    impl Unpin for Wallet

    §

    impl !UnwindSafe for Wallet

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationBlockTime>> for Wallet

    source§

    fn as_ref(&self) -> &TxGraph<ConfirmationBlockTime>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Debug for Wallet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    §

    impl !Freeze for Wallet

    §

    impl !RefUnwindSafe for Wallet

    §

    impl Send for Wallet

    §

    impl Sync for Wallet

    §

    impl Unpin for Wallet

    §

    impl !UnwindSafe for Wallet

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/trait.WalletPersister.html b/docs-rs/bdk/nightly/latest/bdk_wallet/trait.WalletPersister.html index c005b74775..487cb8826b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/trait.WalletPersister.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/trait.WalletPersister.html @@ -30,10 +30,10 @@
    ChangeSet ) -> Result<(), Self::Error>

    Persist the given changeset to the persister.

    This method can fail if the persister is not initialized.

    -

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl WalletPersister for Store<ChangeSet>

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl WalletPersister for Connection

    §

    type Error = Error

    source§

    fn initialize(persister: &mut Self) -> Result<ChangeSet, Self::Error>

    source§

    fn persist( persister: &mut Self, changeset: &ChangeSet -) -> Result<(), Self::Error>

    source§

    impl WalletPersister for Connection

    §

    type Error = Error

    source§

    fn initialize(persister: &mut Self) -> Result<ChangeSet, Self::Error>

    source§

    fn persist( +) -> Result<(), Self::Error>

    source§

    impl WalletPersister for Store<ChangeSet>

    §

    type Error = FileStoreError

    source§

    fn initialize(persister: &mut Self) -> Result<ChangeSet, Self::Error>

    source§

    fn persist( persister: &mut Self, changeset: &ChangeSet ) -> Result<(), Self::Error>

    source§

    impl<'c> WalletPersister for Transaction<'c>

    §

    type Error = Error

    source§

    fn initialize(persister: &mut Self) -> Result<ChangeSet, Self::Error>

    source§

    fn persist( diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddForeignUtxoError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddForeignUtxoError.html index 38c2dbe537..1b573f7baf 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddForeignUtxoError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddForeignUtxoError.html @@ -11,7 +11,7 @@

    §foreign_utxo: OutPoint

    Foreign UTXO outpoint

    §

    InvalidOutpoint(OutPoint)

    Requested outpoint doesn’t exist in the tx (vout greater than available outputs)

    §

    MissingUtxo

    Foreign utxo missing witness_utxo or non_witness_utxo

    -

    Trait Implementations§

    source§

    impl Debug for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddForeignUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddForeignUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddForeignUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html b/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html index 60d51fd90d..a65835bbe5 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/tx_builder/enum.AddUtxoError.html @@ -2,7 +2,7 @@ UnknownUtxo(OutPoint), }
    Expand description

    Error returned from TxBuilder::add_utxo and TxBuilder::add_utxos

    Variants§

    §

    UnknownUtxo(OutPoint)

    Happens when trying to spend an UTXO that is not in the internal database

    -

    Trait Implementations§

    source§

    impl Debug for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for AddUtxoError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for AddUtxoError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_wallet/type.WalletTx.html b/docs-rs/bdk/nightly/latest/bdk_wallet/type.WalletTx.html index 29a906b03e..590b3bf828 100644 --- a/docs-rs/bdk/nightly/latest/bdk_wallet/type.WalletTx.html +++ b/docs-rs/bdk/nightly/latest/bdk_wallet/type.WalletTx.html @@ -1,7 +1,7 @@ -WalletTx in bdk_wallet - Rust

    Type Alias bdk_wallet::WalletTx

    source ·
    pub type WalletTx<'a> = CanonicalTx<'a, Arc<Transaction>, ConfirmationBlockTime>;
    Expand description

    A CanonicalTx managed by a Wallet.

    +WalletTx in bdk_wallet - Rust

    Type Alias bdk_wallet::WalletTx

    source ·
    pub type WalletTx<'a> = CanonicalTx<'a, Arc<Transaction>, ConfirmationBlockTime>;
    Expand description

    A CanonicalTx managed by a Wallet.

    Aliased Type§

    struct WalletTx<'a> {
    -    pub chain_position: ChainPosition<&'a ConfirmationBlockTime>,
    -    pub tx_node: TxNode<'a, Arc<Transaction>, ConfirmationBlockTime>,
    -}

    Fields§

    §chain_position: ChainPosition<&'a ConfirmationBlockTime>

    How the transaction is observed as (confirmed or unconfirmed).

    -
    §tx_node: TxNode<'a, Arc<Transaction>, ConfirmationBlockTime>

    The transaction node (as part of the graph).

    + pub chain_position: ChainPosition<&'a ConfirmationBlockTime>, + pub tx_node: TxNode<'a, Arc<Transaction>, ConfirmationBlockTime>, +}

    Fields§

    §chain_position: ChainPosition<&'a ConfirmationBlockTime>

    How the transaction is observed as (confirmed or unconfirmed).

    +
    §tx_node: TxNode<'a, Arc<Transaction>, ConfirmationBlockTime>

    The transaction node (as part of the graph).

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html b/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html index ad8a6f1783..5cab6b5657 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html @@ -1,4 +1,4 @@ -create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<O: ChainOracle>(
    +create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<O: ChainOracle>(
         graph: &mut KeychainTxGraph,
         chain: &O,
         assets: &Assets,
    @@ -6,4 +6,4 @@
         address: Address,
         value: u64
     ) -> Result<(Psbt, Option<ChangeInfo>)>
    where - O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file + O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html b/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html index c3372c4469..3fa6efc799 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html @@ -1,7 +1,7 @@ handle_commands in example_cli - Rust

    Function example_cli::handle_commands

    source ·
    pub fn handle_commands<CS: Subcommand, S: Args>(
         graph: &Mutex<KeychainTxGraph>,
    -    chain: &Mutex<LocalChain>,
    -    db: &Mutex<Store<ChangeSet>>,
    +    chain: &Mutex<LocalChain>,
    +    db: &Mutex<Store<ChangeSet>>,
         network: Network,
         broadcast: impl FnOnce(S, &Transaction) -> Result<()>,
         cmd: Commands<CS, S>
    diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html b/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html
    index ec454f3afe..3888f211a4 100644
    --- a/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html
    +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html
    @@ -1,5 +1,5 @@
    -planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<O: ChainOracle>(
    +planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<O: ChainOracle>(
         graph: &KeychainTxGraph,
         chain: &O,
         assets: &Assets
    -) -> Result<Vec<PlanUtxo>, O::Error>
    \ No newline at end of file +) -> Result<Vec<PlanUtxo>, O::Error>
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html b/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html index 744aa9c031..cffca80e66 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html +++ b/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeInfo.html @@ -1,8 +1,8 @@ ChangeInfo in example_cli - Rust

    Struct example_cli::ChangeInfo

    source ·
    pub struct ChangeInfo {
         pub change_keychain: Keychain,
    -    pub indexer: ChangeSet,
    +    pub indexer: ChangeSet,
         pub index: u32,
    -}

    Fields§

    §change_keychain: Keychain§indexer: ChangeSet§index: u32

    Trait Implementations§

    source§

    impl Debug for ChangeInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +}

    Fields§

    §change_keychain: Keychain§indexer: ChangeSet§index: u32

    Trait Implementations§

    source§

    impl Debug for ChangeInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html index 20a6915210..8a4f3d468a 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/example_cli/struct.ChangeSet.html @@ -2,18 +2,18 @@ pub descriptor: Option<Descriptor<DescriptorPublicKey>>, pub change_descriptor: Option<Descriptor<DescriptorPublicKey>>, pub network: Option<Network>, - pub local_chain: ChangeSet, - pub tx_graph: ChangeSet<ConfirmationBlockTime>, - pub indexer: ChangeSet, + pub local_chain: ChangeSet, + pub tx_graph: ChangeSet<ConfirmationBlockTime>, + pub indexer: ChangeSet, }
    Expand description

    ChangeSet

    Fields§

    §descriptor: Option<Descriptor<DescriptorPublicKey>>

    Descriptor for recipient addresses.

    §change_descriptor: Option<Descriptor<DescriptorPublicKey>>

    Descriptor for change addresses.

    §network: Option<Network>

    Stores the network type of the transaction data.

    -
    §local_chain: ChangeSet

    Changes to the LocalChain.

    -
    §tx_graph: ChangeSet<ConfirmationBlockTime>

    Changes to TxGraph.

    -
    §indexer: ChangeSet

    Changes to KeychainTxOutIndex.

    +
    §local_chain: ChangeSet

    Changes to the [LocalChain].

    +
    §tx_graph: ChangeSet<ConfirmationBlockTime>

    Changes to TxGraph.

    +
    §indexer: ChangeSet

    Changes to [KeychainTxOutIndex].

    Trait Implementations§

    source§

    impl Clone for ChangeSet

    source§

    fn clone(&self) -> ChangeSet

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for ChangeSet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for ChangeSet

    source§

    fn default() -> ChangeSet

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for ChangeSet

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Merge for ChangeSet

    source§

    fn merge(&mut self, other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    source§

    impl PartialEq for ChangeSet

    source§

    fn eq(&self, other: &ChangeSet) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for ChangeSet

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl StructuralPartialEq for ChangeSet

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html b/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html index bb0fc905df..340c8f980c 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html +++ b/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html @@ -1,14 +1,14 @@ Init in example_cli - Rust

    Struct example_cli::Init

    source ·
    pub struct Init<CS: Subcommand, S: Args> {
         pub args: Args<CS, S>,
         pub graph: Mutex<KeychainTxGraph>,
    -    pub chain: Mutex<LocalChain>,
    -    pub db: Mutex<Store<ChangeSet>>,
    +    pub chain: Mutex<LocalChain>,
    +    pub db: Mutex<Store<ChangeSet>>,
         pub network: Network,
     }
    Expand description

    The initial state returned by init_or_load.

    Fields§

    §args: Args<CS, S>

    CLI args

    §graph: Mutex<KeychainTxGraph>

    Indexed graph

    -
    §chain: Mutex<LocalChain>

    Local chain

    -
    §db: Mutex<Store<ChangeSet>>

    Database

    +
    §chain: Mutex<LocalChain>

    Local chain

    +
    §db: Mutex<Store<ChangeSet>>

    Database

    §network: Network

    Network

    Auto Trait Implementations§

    §

    impl<CS, S> !Freeze for Init<CS, S>

    §

    impl<CS, S> RefUnwindSafe for Init<CS, S>
    where CS: RefUnwindSafe, diff --git a/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html b/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html index 69421bcb1f..932716eefe 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html +++ b/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html @@ -1,6 +1,6 @@ -KeychainTxGraph in example_cli - Rust

    Type Alias example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph = IndexedTxGraph<ConfirmationBlockTime, KeychainTxOutIndex<Keychain>>;
    Expand description

    Alias for a IndexedTxGraph with specific Anchor and Indexer.

    +KeychainTxGraph in example_cli - Rust

    Type Alias example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph = IndexedTxGraph<ConfirmationBlockTime, KeychainTxOutIndex<Keychain>>;
    Expand description

    Alias for a IndexedTxGraph with specific Anchor and Indexer.

    Aliased Type§

    struct KeychainTxGraph {
    -    pub index: KeychainTxOutIndex<Keychain>,
    +    pub index: KeychainTxOutIndex<Keychain>,
         /* private fields */
    -}

    Fields§

    §index: KeychainTxOutIndex<Keychain>

    Transaction index.

    +}

    Fields§

    §index: KeychainTxOutIndex<Keychain>

    Transaction index.

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html b/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html index 575a1c700d..38d6760ed6 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html +++ b/docs-rs/bdk/nightly/latest/example_cli/type.PlanUtxo.html @@ -1 +1 @@ -PlanUtxo in example_cli - Rust

    Type Alias example_cli::PlanUtxo

    source ·
    pub type PlanUtxo = (Plan, FullTxOut<ConfirmationBlockTime>);
    \ No newline at end of file +PlanUtxo in example_cli - Rust

    Type Alias example_cli::PlanUtxo

    source ·
    pub type PlanUtxo = (Plan, FullTxOut<ConfirmationBlockTime>);
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/help.html b/docs-rs/bdk/nightly/latest/help.html index f662b41ef8..3ed950109f 100644 --- a/docs-rs/bdk/nightly/latest/help.html +++ b/docs-rs/bdk/nightly/latest/help.html @@ -1 +1 @@ -Help

    Rustdoc help

    Back
    \ No newline at end of file +Help

    Rustdoc help

    Back
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/search-index.js b/docs-rs/bdk/nightly/latest/search-index.js index a61c4371fb..2ae0ae1833 100644 --- a/docs-rs/bdk/nightly/latest/search-index.js +++ b/docs-rs/bdk/nightly/latest/search-index.js @@ -1,14 +1,14 @@ var searchIndex = new Map(JSON.parse('[\ ["bdk_bitcoind_rpc",{"t":"KFFEONNNNNNONNNNNNMNNNNNNNNNNNN","n":["BitcoindRpcErrorExt","BlockEvent","Emitter","bitcoincore_rpc","block","block_hash","block_height","borrow","borrow","borrow_mut","borrow_mut","checkpoint","connected_to","fmt","from","from","into","into","is_not_found_error","mempool","new","next_block","next_header","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip"],"q":[[0,"bdk_bitcoind_rpc"],[31,"bitcoin::blockdata::block"],[32,"bdk_core::block_id"],[33,"core::fmt"],[34,"bitcoin::blockdata::transaction"],[35,"alloc::vec"],[36,"bitcoincore_rpc::error"],[37,"core::result"],[38,"bitcoincore_rpc::client"],[39,"bdk_core::checkpoint"],[40,"core::option"],[41,"core::any"]],"i":[0,0,0,0,1,1,1,12,1,12,1,1,1,1,12,1,12,1,10,12,12,12,12,12,1,12,1,12,1,12,1],"f":"`````{{{d{{b{c}}}}}f{}}{{{d{{b{c}}}}}h{}}{{{d{c}}}{{d{e}}}{}{}}0{{{d{jc}}}{{d{je}}}{}{}}0`{{{d{{b{c}}}}}l{}}{{{d{{b{c}}}}{d{jn}}}A`Ab}{cc{}}0{ce{}{}}0{{{d{Ad}}}Af}{{{d{j{Ah{c}}}}}{{Bd{{B`{{An{AjAl}}}}Bb}}}Bf}{{{d{c}}Bhh}{{Ah{c}}}Bf}{{{d{j{Ah{c}}}}}{{Bd{{Bl{{b{Bj}}}}Bb}}}Bf}{{{d{j{Ah{c}}}}}{{Bd{{Bl{{b{Bn}}}}Bb}}}Bf}{c{{Bd{e}}}{}{}}000{{{d{c}}}C`{}}077","D":"Bd","p":[[5,"BlockEvent",0],[1,"reference"],[5,"BlockHash",31],[1,"u32"],[0,"mut"],[5,"BlockId",32],[5,"Formatter",33],[8,"Result",33],[10,"Debug",33],[10,"BitcoindRpcErrorExt",0],[1,"bool"],[5,"Emitter",0],[5,"Transaction",34],[1,"u64"],[1,"tuple"],[5,"Vec",35],[6,"Error",36],[6,"Result",37],[10,"RpcApi",38],[5,"CheckPoint",39],[5,"Block",31],[6,"Option",40],[5,"Header",31],[5,"TypeId",41]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA0ABAAEAAAACAADAA4AAAAYAAcA"}],\ -["bdk_chain",{"t":"KFSFFSKGFFFGPPKFRFFIEEIKFEFFPPNNMNNONNNNDEONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNONOONCCNNNNNNNNNNNNNNNNNNNNNNMNNNMNONECNMENNNNNNONNNNNNNNNDCODNNNNNOCENNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNCOOOONNNNNNNNNNNNNNNONNNNNNNNNNNNNNOOOFGPPPPFTTPPPFFPFFTTPGTTGFFFGFTTTTTTTTTTTTTTTTTTTPPFPPPTPGGPPPPTTTTFFPPPPPPFFFFPPTTPFFFFFFPPPPPFFFFFFGFFFPPPFFFFFPPPPPPPPPPPPPPPPPFTFFFFFFFGFFFFTTTTTTNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNONNNNNNCNNNNNNNNNNNNNNNCONNNNNNNNNNNNNNNNNNNNNOOCNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNCONONNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNONONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNCNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONONNONNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNOFGGPPPGTPFPFGPFPGGKPFPPPPGPPPGPPPFPFPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOPPPGPFPFPFPFGGFPFPPPPPFPPPKGFPPPPPPPPGPPFPNNNNMNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNKKCCMMMMMMMHCHHHHCHHHPGPFFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPGPFFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRGPRGGKPPPPPPCNNNNNNNNNNNNMHNHHHNNNHCHNHHHNNHCNNNNNNNNNNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNCFSSSPSPGPSSPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNKRKRFGKFFPPPNNNNNNNNNNNNNNMNNNNNMNNMNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFSSSSSSSSSSRRKMNNNNNNNFNNNNNNNNNNNNFFKNNNNMNNNNNNNNNNNNNNNNNNNNNNNNFFGFPFFFPNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONONNNNNNNNNONNNNNONONNNNNNNNNNNNNONNNNNNNNNNNNNNNONNNNNNNNNNNNNNNFFFFFGFFFFPPNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPFGFFGIIIIFPPKPFPPPPIPPPPFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOONOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNOOOOOONNNOOOOOONNNNNOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOFFCCCCCCCCCPPGFFFTPPTTTFPPGFFFONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNOONNONNNNNONNNNNNNNNNNNNNNONNNNNONNNNNTSFSSSSSSSTSSTSSTSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNFCCPFFSGTTTTFFTPFTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPFFFFGTTTTTFPFTTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGGPPPJJJJJFPPPPPPCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSFFPGGFFPPPFPFFKFFFPPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCHGPPSSFNNNNNNNNNNNNNNNNNNNPGPPFGPPPPPPPPPPPPPPPPPPGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPFFFTFFTTTTTGFTPFFFFPFPPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNOONNONHHOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNOOONNNNNNNOSFFFNNNNNNNNNNNNNTPKGKTPFTKTTPKONOOOONNNNNNNNMHHNMMMMMMMMMMCNNNNNNNNNNNNNOOONOCOOOMMMMMMMMMMOCHNNNNNNNNNNNFKPKGGPPSPPPPKPFKNNNNNNNNNNNNMNNHHHMMMMMMMMMMNNNNNNNNNNNNNNNNNNNMMMMMMMMMMHHNNNNNNNNNNNNNNNNNOOOOJFJJJOOOOOOOOOOOOOKKRRKRFRKFNNNNNNMMNNMNCNNMNNNNNNNNNKFFFFGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPGPPFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNPFPFPPFGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFFFFTRTRFKKFFTRMMQCNMMMNCNQQCMMMCQCCCCCQCCCCMHFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGRKRKIGGFPPFPPPFPNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNNNNNNNNNNNNNNNCNNNNNNNNNQNNNNNNNNNNNMNNNQNNNNNNNNNNNNNNNNNNNNNNCCNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQFNNNNNNNNNNNNNNNNNRFFKNMNNNNNNNNNNNNQNNNQNNNNNNNNNNNNNNNGGPPFPFPFNNNNNNNONNNNONNNNNNNRKGGPPPPMRKRKNMMNNNNFFFNNNONONNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKYKRRRKYRRRRRRRKNNNCMMMMMMMMMNMMMMMMMMMMMMMMMNMMMMMMQNNCMMMMMMNMMMMMMMMMMMMMMMMNMMMMMMMPPPKKKKRPKKRRRRRKPFKPKPPPPPKPKPPPGPPPRRRKKNNNNNNNNNMNNMMNMMMMMMMMNMMMMMMMMMMMMMMMNMMMMMMNNNMNMNNNNNNNNNMNNNNNNMNMNNNMNMNNNNMNNNNNNNMNNMNNCNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKRRRRRRRRFRRRRRRRRKKRKRKRKRKRKRKRKKNNNNNNMNNNNNNNNNNMMMMMMMNNNNNNNNNNNNNNMMMMMMNNNMMMMMMNNNNNMMMMMNMMMMMMMMMMMMNMMMMMMMMNNNNNNNNNCTKNMNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFKNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPKPPPFPFGPPPPPPPPKIFFPPPKPNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNMNNNNNNNNNNNNNNNQNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNPFPPGGPPFPFPPPPFPGGGFFFFPPPFKRRFFFIIKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPFGPPPPPFPPNNNNNHHNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNONNNNPPGGFPPPPFCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHFTTTTFTTTTSFTTFTFTNCONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCCCCNNNONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGFFPPPPPPPOONNNNNNNNNNNNNNNNNNNNNNNNNNOOOONONNNNNNNNNNNPPPPPPPPPFFPPPPPPPPPPPPPPSSPPGPPPFPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOPPPFFGPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNOONNNNNNNNNNNNOONNNOOPGFFPPNNNNNNNNNNNNNNNNNNNNONNNNNNNNNOONNNNNNONNNNNNNNNNNNONNNNNNFFFFNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNONNNNNNNNONNNNONNNNFFFFFFONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOONNNNNNNNNNNNNNNNNNOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPPPPFGFNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNONOOOOOOOONNNNNNNNNNNNOONNNFNNNNNNNNNNNNNNNNNNNNSSSSSSSSHFFFPPPPPPPPPPGRGPKGPGFPPPPPPPPPPPPPPPPPGPPPPPPPPPPPPPPFGPPFPGFPPPPPPPPPGGIGIPPPPPPPPPPPPPPPOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNOOONNNNNNNNNNNNNOONNNNOOOOCOOOCNNNOONNNNNNNOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNONNNNNNNNNNNNNOOOOOOOOOOOOOOOOOFFFINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNONNNONNNNNNNNNNNNNNOONNNGFKTGPTPPPFPPPPPPPPFTFPTPGKFFFFGFKKKGFFTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCMNNNNNNNNNCCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCQNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSSSSSSSSSSSSSSSSFNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNPPFGFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKFIFIFIPPPPFSSSSSIFFPPPPRFMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQQNNNNNNNNNNNNNNNNNNHNNNNNCHHHHHHJHHHHHHHHHHHHHHHHHHHJHHHHHHHHHHHJHHHHHJJJHHHHHHHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNHHHHHNNNNNFTNNNNIIIIGNNNNNNNNINNNNNNNNNNTRTRFKKFFTRMNMNNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMNNMNNNNNQQNNNNNMNNNNNMNMNNNQNQMNNNNNNNNNNNNNNNNNNNNTKFKTKKRKNNNCNMNNNNNNNMNNNNNNNMMCHNNCNNNCNNHNMNMNNNNPFFGFFKKPPPFFFFPFGFMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNCKKKRFFFFFKRMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPGFCKFNNNNNNNNNNKKRKKKRKKFFMNMNNMMNMMNMNNMNNNNNMMMHMNNNNMHNMFFFCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNRKFKNNMNMNNMMNMMNNCNNNNNMMNNNNNNGGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPFGPGPGPPPPPFPFFPPPPPPGGPGPFPFFFPPFPFGPPPFPPFFGGPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNSPPPFGPNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNOHNNNNNNNNNNNNNNFPPPFPGPPGPPPPPPPPFFGFPPPPFFPGPFSSSSSSSFGFFFPFFFFGGFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONCNNONNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNONNNNRKMMMMMCCFSPKGPFTTKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNMNNNMNNNNNNNNNNNNNNNNNNNNMNNNOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGTPFFFFPFFTNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNONNNNNNSHFFFPPGFFFFPNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNOONNNNNONNONNNNNNNNNNNNNNNNNNNNNNNNOONOONNNNNNNNNNNNNNNNNTGFFPPTTTFFFFFNNNOOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOOOONNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorImpl","BIP32_MAX_INDEX","Balance","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","CheckPoint","CheckPointIter","ConfirmationBlockTime","ConfirmationTime","Confirmed","Confirmed","DescriptorExt","DescriptorId","Error","FullTxOut","Impl","Indexed","IndexedTxGraph","Indexer","KeychainIndexed","Merge","SpkIterator","TxGraph","TxPosInBlock","TxUpdate","Unconfirmed","Unconfirmed","add","all_zeros","anchor_block","anchor_block","anchor_block","anchors","as_byte_array","as_raw_hash","as_ref","as_ref","bdk_core","bitcoin","block","block_id","block_id","block_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","confirmed","default","default","default","default","deref","deref","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_ptr","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_block_ids","from_byte_array","from_engine","from_header","from_raw_hash","from_slice","from_slice_delegated","from_str","get","get_chain_tip","hash","hash","hash","hash","hash","hash","hash","height","height","immature","index","indexed_tx_graph","indexer","insert","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_fallible","into_fallible","into_inner","into_inner","into_iter","into_iter","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","iter","keychain_txout","local_chain","map_anchors","merge","miniscript","new","new","new_with_range","next","next","nth","outpoint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","prev","push","range","rusqlite","rusqlite_impl","seen_ats","serde","serialize","serialize","serialize","serialize","serialize","spent_by","spk_client","spk_txout","take","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_string","to_string","total","transpose_into_fallible","transpose_into_fallible","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","tx_pos","txout","txouts","txs","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","last_seen","time","Address","AddressType","All","All","AllPlusAnyoneCanPay","AllPlusAnyoneCanPay","Amount","BROADCAST_MIN","BTC","Bit","Bitcoin","Bitcoin","Block","BlockHash","CentiBitcoin","CompactTarget","CompressedPublicKey","DEFAULT_MAX_FEE_RATE","DUST","Default","Denomination","ENABLE_LOCKTIME_NO_RBF","ENABLE_RBF_NO_LOCKTIME","EcdsaSighashType","FeeRate","FilterHash","FilterHeader","KnownHrp","LegacySighash","MAX","MAX","MAX","MAX","MAX","MAX","MAX_ATTAINABLE_MAINNET","MAX_ATTAINABLE_REGTEST","MAX_ATTAINABLE_SIGNET","MAX_ATTAINABLE_TESTNET","MAX_BLOCK","MAX_MONEY","MAX_MONEY","MAX_STANDARD_WEIGHT","MIN","MIN","MIN","MIN","MIN_TRANSACTION","Main","Mainnet","MerkleBlock","MicroBitcoin","MilliBitcoin","MilliSatoshi","NULL","NanoBitcoin","Network","NetworkKind","None","None","NonePlusAnyoneCanPay","NonePlusAnyoneCanPay","ONE_BTC","ONE_BTC","ONE_SAT","ONE_SAT","Opcode","OutPoint","P2pkh","P2sh","P2tr","P2wpkh","P2wsh","PicoBitcoin","PrivateKey","Psbt","PubkeyHash","PublicKey","Regtest","Regtest","SAT","SIZE","Satoshi","Script","ScriptBuf","ScriptHash","SegwitV0Sighash","Sequence","SignedAmount","Signet","Single","Single","SinglePlusAnyoneCanPay","SinglePlusAnyoneCanPay","TapBranchTag","TapLeafHash","TapLeafTag","TapNodeHash","TapSighash","TapSighashTag","TapSighashType","TapTweakHash","TapTweakTag","Target","Test","Testnet","Testnets","Transaction","TxIn","TxMerkleNode","TxOut","Txid","V0","V1","V10","V11","V12","V13","V14","V15","V16","V2","V3","V4","V5","V6","V7","V8","V9","VarInt","WITNESS_SCALE_FACTOR","WPubkeyHash","WScriptHash","Weight","Witness","WitnessCommitment","WitnessMerkleNode","WitnessProgram","WitnessVersion","Work","Wtxid","XKeyIdentifier","XOnlyPublicKey","ZERO","ZERO","ZERO","ZERO","ZERO","ZERO","abs","add","add","add","add","add_assign","add_assign","add_assign","add_tweak","address","address_type","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","amount","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_bytes","as_c_ptr","as_mut","as_mut","as_mut","as_mut","as_mut_bytes","as_mut_c_ptr","as_mut_ptr","as_mut_script","as_ptr","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_script","as_unchecked","assume_checked","assume_checked_ref","assume_hidden","base_size","base_size","bip152","bip158","bip32","bip34_block_height","block_hash","blockdata","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","builder","builder","bytes","chain_hash","check_after","check_merkle_root","check_older","check_older","check_witness_commitment","checked_abs","checked_add","checked_add","checked_add","checked_div","checked_div","checked_div","checked_div","checked_mul","checked_mul","checked_mul","checked_mul","checked_mul_by_weight","checked_rem","checked_rem","checked_sub","checked_sub","checked_sub","classify","clear","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp_fast_unstable","coinbase","combine","compressed","compressed","compute_merkle_root","compute_ntxid","compute_txid","compute_witness_commitment","compute_wtxid","consensus","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","count_sigops","count_sigops_legacy","dangerous_assume_tweaked","default","default","default","default","default","default","default","default","default","default","default","default","deref","deref_mut","des_btc","des_btc","des_sat","des_sat","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize_from_reader","difficulty","difficulty_float","display_dynamic","display_dynamic","display_in","display_in","div","div","div","div","div","div_assign","div_assign","div_assign","dust_value","ecdsa","enables_absolute_lock_time","enables_lock_time","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","extend","extract","extract_matches","extract_tx","extract_tx_fee_rate_limit","extract_tx_unchecked_fee_rate","extract_tx_with_fee_rate_limit","fee","fee_vb","fee_wu","filter_header","finalize","finalize_inp","finalize_inp_mall","finalize_inp_mall_mut","finalize_inp_mut","finalize_mall","finalize_mall_mut","finalize_mut","first_opcode","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt_asm","fmt_value_in","fmt_value_in","fmt_wif","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","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","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","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","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_512_second_intervals","from_be_bytes","from_be_bytes","from_block_with_predicate","from_btc","from_btc","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_bytes","from_bytes","from_bytes_mut","from_chain_hash","from_compact","from_consensus","from_consensus","from_consensus","from_consensus_u8","from_core_arg","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_float_in","from_float_in","from_header_txids_with_predicate","from_height","from_hex","from_hex","from_hex","from_hex","from_hex","from_int_btc","from_iter","from_key_and_tweak","from_keypair","from_kwu","from_le_bytes","from_le_bytes","from_magic","from_node_hashes","from_non_witness_data_size","from_private_key","from_private_key","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_sat","from_sat","from_sat_per_kwu","from_sat_per_vb","from_sat_per_vb_unchecked","from_script","from_script","from_script","from_seconds_ceil","from_seconds_floor","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_standard","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str_in","from_str_in","from_str_with_denomination","from_str_with_denomination","from_unprefixed_hex","from_unprefixed_hex","from_unprefixed_hex","from_unprefixed_hex","from_unsigned_tx","from_vb","from_vb_unchecked","from_vb_unwrap","from_wif","from_witness_data_size","from_witness_program","from_wu","from_wu_usize","generate","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash_types","header","header","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","inner","inner","input","inputs","instruction_indices","instruction_indices_minimal","instructions","instructions_minimal","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_boxed_script","into_bytes","into_iter","into_script_buf","is_absolute_timelock_satisfied","is_coinbase","is_empty","is_empty","is_explicitly_rbf","is_final","is_height_locked","is_lock_time_enabled","is_mainnet","is_met_by","is_multisig","is_negative","is_null","is_op_return","is_p2pk","is_p2pkh","is_p2sh","is_p2tr","is_p2tr","is_p2wpkh","is_p2wpkh","is_p2wsh","is_p2wsh","is_positive","is_provably_unspendable","is_push_only","is_rbf","is_related_to_pubkey","is_related_to_xonly_pubkey","is_relative_lock_time","is_spend_standard","is_time_locked","is_uncompressed","is_valid_for_network","is_witness_program","is_x_only_key","iter","iter_funding_utxos","key","last","legacy_weight","len","len","lock_time","log2","magic","matches_script_pubkey","max_difficulty_transition_threshold","max_transition_threshold","max_transition_threshold_unchecked","merkle_tree","min_difficulty_transition_threshold","min_transition_threshold","minimal_non_dust","minimal_non_dust","minimal_non_dust_custom","minimal_non_dust_custom","mul","mul","mul","mul","mul","mul_assign","mul_assign","mul_assign","neg","network","network","new","new","new","new","new","new","new","new_op_return","new_p2pk","new_p2pkh","new_p2sh","new_p2tr","new_p2tr_tweaked","new_p2wpkh","new_p2wsh","new_uncompressed","new_uncompressed","new_witness_program","nth","ntxid","null","output","outputs","p2p","p2pk_public_key","p2pkh","p2sh","p2sh_from_hash","p2shwpkh","p2shwsh","p2tr","p2tr","p2tr_key_spend","p2tr_tweaked","p2tr_tweaked","p2wpkh","p2wpkh","p2wpkh","p2wpkh_script_code","p2wpkh_script_code","p2wpkh_script_code","p2wpkh_script_code","p2wsh","p2wsh","params","parse","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","policy","positive_sub","pow","previous_output","program","proprietary","provider_lookup_ecdsa_sig","provider_lookup_hash160","provider_lookup_hash256","provider_lookup_raw_pkh_ecdsa_sig","provider_lookup_raw_pkh_pk","provider_lookup_raw_pkh_tap_leaf_script_sig","provider_lookup_raw_pkh_x_only_pk","provider_lookup_ripemd160","provider_lookup_sha256","provider_lookup_tap_control_block_map","provider_lookup_tap_key_spend_sig","provider_lookup_tap_leaf_script_sig","psbt","pubkey_hash","pubkey_hash","pubkey_hash","public_key","public_key","push","push_ecdsa_signature","push_instruction","push_instruction_no_opt","push_opcode","push_slice","read_from","read_from","rem","rem","rem_assign","rem_assign","require_network","reserve","reserve_exact","scale_by_witness_factor","scan_and_push_verify","script_hash","script_hash","script_pubkey","script_pubkey","script_pubkey_lens","script_sig","second_to_last","segwit_weight","sequence","ser_btc","ser_btc","ser_btc_opt","ser_btc_opt","ser_sat","ser_sat","ser_sat_opt","ser_sat_opt","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize_hex","serialize_to_writer","sighash","sighash_ecdsa","sighash_msg","sign","sign_message","signum","size","size","size","spend_utxo","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sum","sum","sum","sum","tap_tweak","taproot","tapscript","tapscript_leaf_hash","to_address_data","to_asm_string","to_be_bytes","to_be_bytes","to_btc","to_btc","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_bytes","to_bytes","to_bytes","to_bytes","to_compact_lossy","to_consensus","to_consensus_u32","to_core_arg","to_fe","to_float_in","to_float_in","to_hash160","to_hash160","to_hash256","to_hash256","to_hex_string","to_kwu_floor","to_le_bytes","to_le_bytes","to_num","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_p2sh","to_p2tr","to_p2wsh","to_public_key","to_public_key","to_qr_uri","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_relative_lock_time","to_ripemd160","to_ripemd160","to_sat","to_sat","to_sat_per_kwu","to_sat_per_vb_ceil","to_sat_per_vb_floor","to_scalar","to_sha256","to_sha256","to_signed","to_sort_key","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string_in","to_string_in","to_string_with_denomination","to_string_with_denomination","to_target","to_u32","to_u8","to_unsigned","to_vbytes_ceil","to_vbytes_floor","to_vec","to_wif","to_work","to_wu","to_x_only_pubkey","total_sigop_cost","total_size","total_size","total_size","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tweak_add_check","tx_in","tx_out","txdata","txid","txid","txn","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_prefix","type_prefix","unchecked_add","unchecked_add","unchecked_sub","unchecked_sub","unknown","unsigned_abs","unsigned_tx","update_input_with_descriptor","update_output_with_descriptor","value","verify","verify","verify","version","version","version","vout","vsize","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","weight","weight","weight","with_capacity","witness","witness_program","witness_root","witness_version","wpubkey_hash","wpubkey_hash","write_into","write_into","wscript_hash","wtxid","xpub","Address","AddressData","AddressType","Base58","Bech32","ExcessiveScriptSize","FromScriptError","IS_CHECKED","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidLegacyPrefix","InvalidLegacyPrefixError","KnownHrp","LegacyAddressTooLong","LegacyAddressTooLongError","Mainnet","NetworkChecked","NetworkUnchecked","NetworkValidation","NetworkValidation","NetworkValidationError","P2pkh","P2pkh","P2sh","P2sh","P2shError","P2tr","P2wpkh","P2wsh","ParseError","Regtest","Segwit","Testnets","UnknownAddressTypeError","UnknownHrp","UnknownHrpError","UnrecognizedScript","WitnessProgram","WitnessProgram","WitnessVersion","WitnessVersion","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","invalid_base58_payload_length","invalid_legacy_address_prefix","invalid_legcay_address_length","partial_cmp","partial_cmp","partial_cmp","source","source","source","source","source","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","pubkey_hash","script_hash","witness_program","Base58","Bech32","ExcessiveScriptSize","FromScriptError","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidLegacyPrefix","InvalidLegacyPrefixError","LegacyAddressTooLong","LegacyAddressTooLongError","NetworkValidation","NetworkValidationError","P2shError","ParseError","UnknownAddressTypeError","UnknownHrp","UnknownHrpError","UnrecognizedScript","WitnessProgram","WitnessProgram","WitnessVersion","WitnessVersion","Amount","Bit","Bitcoin","CentiBitcoin","CheckedSum","Denomination","Display","InputTooLarge","InvalidCharacter","MicroBitcoin","MilliBitcoin","MilliSatoshi","MissingDigits","NanoBitcoin","OutOfRange","ParseAmountError","PicoBitcoin","Satoshi","SignedAmount","TooPrecise","borrow","borrow","borrow_mut","borrow_mut","checked_sum","clone","clone","clone_into","clone_into","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","serde","show_denomination","source","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","SerdeAmount","SerdeAmountForOpt","as_btc","as_sat","des_btc","des_sat","ser_btc","ser_btc_opt","ser_sat","ser_sat_opt","type_prefix","deserialize","opt","serialize","deserialize","serialize","deserialize","opt","serialize","deserialize","serialize","Decode","Error","IncorrectChecksum","InvalidCharacterError","String","TooShort","Vec","add","add_assign","allocator","append","as_bytes","as_hex","as_mut","as_mut","as_mut","as_mut_ptr","as_mut_slice","as_mut_str","as_mut_vec","as_ptr","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_slice","as_str","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capacity","capacity","clear","clear","clone","clone","clone","clone","clone_from","clone_from","clone_into","clone_into","clone_into","clone_into","cmp","cmp","column_result","column_result","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consume","decode","decode_check","dedup","dedup_by","dedup_by_key","default","default","deref","deref","deref_mut","deref_mut","deserialize","deserialize","drain","drain","drop","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","encode","encode_check","encode_check_to_fmt","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","extend","extend","extend","extend","extend","extend","extend","extend","extend_from_slice","extend_from_within","extend_from_within","extend_one","extend_one","extend_one","extend_one","extend_one","extend_one","extend_one","extend_reserve","extend_reserve","extend_reserve","extend_reserve","extract_if","flush","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_hex","from_iter","from_iter","from_iter","from_iter","from_iter","from_iter","from_iter","from_raw_parts","from_raw_parts","from_raw_parts_in","from_str","from_utf16","from_utf16_lossy","from_utf16be","from_utf16be_lossy","from_utf16le","from_utf16le_lossy","from_utf8","from_utf8_lossy","from_utf8_unchecked","hash","hash","hex_reserve_suggestion","index","index","index_mut","index_mut","insert","insert","insert_str","into","into","into","into","into_assets","into_boxed_slice","into_boxed_str","into_bytes","into_derivation_path","into_derivation_path","into_deserializer","into_deserializer","into_flattened","into_iter","into_iter","into_iter","into_raw_parts","into_raw_parts","into_raw_parts_with_alloc","into_searcher","invalid_base58_character","is_contained_in","is_empty","is_empty","is_empty","is_prefix_of","is_suffix_of","is_write_vectored","leak","leak","len","len","merge","ne","ne","ne","ne","ne","ne","ne","ne","ne","new","new","new_in","partial_cmp","partial_cmp","pop","pop","pop_if","push","push","push_str","push_within_capacity","remove","remove","remove_matches","replace_range","reserve","reserve","reserve_exact","reserve_exact","resize","resize_with","retain","retain","retain_mut","serialize","serialize","set_len","shrink_to","shrink_to","shrink_to_fit","shrink_to_fit","source","spare_capacity_mut","splice","split_at_spare_mut","split_off","split_off","strip_prefix_of","strip_suffix_of","swap_remove","to_owned","to_owned","to_owned","to_owned","to_socket_addrs","to_sql","to_sql","to_string","to_string","to_string","truncate","truncate","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_reserve","try_reserve","try_reserve_exact","try_reserve_exact","try_with_capacity","try_with_capacity","try_with_capacity_in","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","with_capacity","with_capacity","with_capacity_in","write","write","write_all","write_char","write_str","write_vectored","Decode","Error","IncorrectChecksum","IncorrectChecksumError","InvalidCharacterError","TooShort","TooShortError","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","incorrect_checksum","into","into","invalid_base58_length","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Config","DecodeError","DecodeError","DecodeEstimate","DecodeSliceError","EncodeSliceError","Engine","InvalidByte","InvalidLastSymbol","InvalidLength","InvalidPadding","OutputSliceTooSmall","OutputSliceTooSmall","alphabet","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","config","decode","decode","decode_engine","decode_engine_slice","decode_engine_vec","decode_slice","decode_slice_unchecked","decode_vec","decoded_len_estimate","display","encode","encode","encode_engine","encode_engine_slice","encode_engine_string","encode_slice","encode_string","encoded_len","engine","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","prelude","read","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write","Alphabet","BCRYPT","BIN_HEX","CRYPT","DuplicatedByte","IMAP_MUTF7","InvalidLength","ParseAlphabetError","ReservedByte","STANDARD","URL_SAFE","UnprintableByte","as_str","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","into","into","new","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Base64Display","borrow","borrow_mut","fmt","from","into","new","to_string","try_from","try_into","type_id","vzip","Config","Config","DecodeEstimate","DecodeEstimate","DecodeMetadata","DecodePaddingMode","Engine","GeneralPurpose","GeneralPurposeConfig","Indifferent","RequireCanonical","RequireNone","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","config","config","decode","decode_slice","decode_slice_unchecked","decode_vec","decoded_len_estimate","default","encode","encode_padding","encode_padding","encode_slice","encode_string","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","general_purpose","into","into","into","into","new","new","to_owned","to_owned","to_owned","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_decode_allow_trailing_bits","with_decode_padding_mode","with_encode_padding","GeneralPurpose","GeneralPurposeConfig","NO_PAD","PAD","STANDARD","STANDARD_NO_PAD","URL_SAFE","URL_SAFE_NO_PAD","BASE64_STANDARD","BASE64_STANDARD_NO_PAD","BASE64_URL_SAFE","BASE64_URL_SAFE_NO_PAD","Config","DecodeEstimate","Engine","config","decode","decode_slice","decode_slice_unchecked","decode_vec","encode","encode_slice","encode_string","DecoderReader","borrow","borrow_mut","fmt","from","into","into_inner","new","read","try_from","try_into","type_id","vzip","EncoderStringWriter","EncoderWriter","StrConsumer","borrow","borrow","borrow_mut","borrow_mut","consume","drop","finish","flush","flush","fmt","from","from","from_consumer","into","into","into_inner","into_inner","new","new","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","BlockTransactions","BlockTransactionsRequest","Error","HeaderAndShortIds","InvalidPrefill","PrefilledTransaction","ShortId","TxIndexOutOfRangeError","UnknownVersion","as_bytes","as_mut","as_mut","as_mut_ptr","as_ptr","as_ref","as_ref","as_ref","block_hash","block_hash","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","calculate_siphash_keys","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","default","deserialize","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_block","from_hex","from_request","from_str","hash","hash","hash","hash","hash","header","idx","index","indexes","into","into","into","into","into","into","into","is_empty","len","nonce","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","prefilled_txs","serialize","short_ids","source","source","to_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","transactions","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","tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_siphash_keys","BitStreamReader","BitStreamWriter","BlockFilter","BlockFilterReader","BlockFilterWriter","Error","FilterHash","FilterHeader","GcsFilterReader","GcsFilterWriter","Io","UtxoMissing","add_element","add_element","add_input_scripts","add_output_scripts","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","content","eq","equivalent","equivalent","filter_header","finish","finish","flush","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","match_all","match_all","match_all","match_any","match_any","match_any","new","new","new","new","new","new","new","new_script_filter","read","source","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","Base58","CannotDeriveFromHardenedKey","ChainCode","ChildNumber","DerivationPath","DerivationPathIterator","Error","ExtendedPrivKey","ExtendedPubKey","ExtendendPrivKey","ExtendendPubKey","Fingerprint","Hardened","Hex","IntoDerivationPath","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidChildNumber","InvalidChildNumberFormat","InvalidDerivationPathFormat","InvalidPublicKeyHexLength","KeySource","Normal","Secp256k1","UnknownVersion","WrongExtendedKeyLength","XKeyIdentifier","Xpriv","Xpub","as_bytes","as_bytes","as_mut","as_mut","as_mut","as_mut","as_mut_ptr","as_mut_ptr","as_ptr","as_ptr","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_derive_hardened","can_derive_hardened","chain_code","chain_code","chain_code","chain_code","chain_code","chain_code","child","child_number","child_number","child_number","child_number","child_number","child_number","children_from","ckd_pub","ckd_pub_tweak","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","decode","decode","default","default","depth","depth","depth","depth","depth","depth","derive_priv","derive_pub","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","encode","encode","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend","fingerprint","fingerprint","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_hardened_idx","from_hex","from_hex","from_iter","from_normal_idx","from_priv","from_str","from_str","from_str","from_str","from_str","from_str","get_key","hardened_children","hash","hash","hash","hash","hash","identifier","identifier","increment","index","index","index","into","into","into","into","into","into","into","into","into","into_child","into_derivation_path","into_derivation_path","into_fallible","into_iter","into_iter","invalid_base58_payload_length","is_empty","is_empty","is_empty","is_hardened","is_master","is_normal","len","len","len","master","network","network","network","network","network","network","new_master","next","normal_children","parent_fingerprint","parent_fingerprint","parent_fingerprint","parent_fingerprint","parent_fingerprint","parent_fingerprint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","private_key","private_key","private_key","public_key","public_key","public_key","serialize","serialize","serialize","serialize","serialize","serialize","source","start_from","to_bytes","to_bytes","to_keypair","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_priv","to_pub","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_u32_vec","to_x_only_pub","transpose_into_fallible","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","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","xkey_fingerprint","xkey_fingerprint","index","index","FeeRate","Weight","block","constants","fee_rate","locktime","opcodes","script","transaction","weight","witness","BadProofOfWork","BadTarget","Bip34Error","Block","BlockHash","Header","NO_SOFT_FORK_SIGNALLING","NegativeHeight","NotPresent","ONE","SIZE","TWO","TxMerkleNode","UnexpectedPush","Unsupported","ValidationError","Version","WitnessCommitment","WitnessMerkleNode","bits","block_hash","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","default","deserialize","deserialize","difficulty","difficulty_float","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_consensus","hash","hash","header","into","into","into","into","is_signalling_soft_fork","merkle_root","nonce","partial_cmp","partial_cmp","prev_blockhash","serialize","serialize","source","source","target","time","to_consensus","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txdata","type_id","type_id","type_id","type_id","validate_pow","version","vzip","vzip","vzip","vzip","work","BITCOIN","COINBASE_MATURITY","ChainHash","DIFFCHANGE_INTERVAL","DIFFCHANGE_TIMESPAN","MAX_BLOCK_SIGOPS_COST","MAX_SCRIPTNUM_VALUE","MAX_SCRIPT_ELEMENT_SIZE","PUBKEY_ADDRESS_PREFIX_MAIN","PUBKEY_ADDRESS_PREFIX_TEST","REGTEST","SCRIPT_ADDRESS_PREFIX_MAIN","SCRIPT_ADDRESS_PREFIX_TEST","SIGNET","SUBSIDY_HALVING_INTERVAL","TARGET_BLOCK_SPACING","TESTNET","WITNESS_SCALE_FACTOR","as_bytes","as_mut","as_mut","as_mut_ptr","as_ptr","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cmp","deserialize","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from_genesis_block_hash","from_hex","from_str","genesis_block","hash","index","into","is_empty","len","partial_cmp","serialize","to_bytes","to_owned","to_string","try_from","try_from","try_into","type_id","using_genesis_block","using_genesis_block_const","vzip","FeeRate","absolute","relative","Blocks","ConversionError","Height","LOCK_TIME_THRESHOLD","LockTime","MAX","MAX","MIN","MIN","ParseHeightError","ParseTimeError","SIZE","Seconds","Time","ZERO","ZERO","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_after","check_after","check_older","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_encode","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_consensus","from_consensus","from_consensus","from_height","from_hex","from_hex","from_hex","from_str","from_str","from_str","from_time","from_unprefixed_hex","hash","hash","hash","into","into","into","into","into","into","is_block_height","is_block_time","is_implied_by","is_same_unit","is_satisfied_by","partial_cmp","partial_cmp","partial_cmp","provider_lookup_ecdsa_sig","provider_lookup_hash160","provider_lookup_hash256","provider_lookup_raw_pkh_ecdsa_sig","provider_lookup_raw_pkh_pk","provider_lookup_raw_pkh_tap_leaf_script_sig","provider_lookup_raw_pkh_x_only_pk","provider_lookup_ripemd160","provider_lookup_sha256","provider_lookup_tap_control_block_map","provider_lookup_tap_key_spend_sig","provider_lookup_tap_leaf_script_sig","serialize","serialize","serialize","source","source","source","to_consensus_u32","to_consensus_u32","to_consensus_u32","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_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","Blocks","DisabledLockTimeError","Height","IncompatibleHeightError","IncompatibleTimeError","LockTime","MAX","MAX","MIN","MIN","SIZE","Time","Time","TimeOverflowError","ZERO","ZERO","ZERO","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_after","check_older","check_older","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deserialize","deserialize","deserialize","disabled_locktime_value","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_512_second_intervals","from_512_second_intervals","from_consensus","from_height","from_height","from_seconds_ceil","from_seconds_ceil","from_seconds_floor","from_seconds_floor","from_sequence","from_str","from_str","hash","hash","hash","height","height","into","into","into","into","into","into","into","is_block_height","is_block_time","is_implied_by","is_implied_by_sequence","is_same_unit","is_satisfied_by","is_satisfied_by_height","is_satisfied_by_time","new","partial_cmp","partial_cmp","partial_cmp","provider_lookup_ecdsa_sig","provider_lookup_hash160","provider_lookup_hash256","provider_lookup_raw_pkh_ecdsa_sig","provider_lookup_raw_pkh_pk","provider_lookup_raw_pkh_tap_leaf_script_sig","provider_lookup_raw_pkh_x_only_pk","provider_lookup_ripemd160","provider_lookup_sha256","provider_lookup_tap_control_block_map","provider_lookup_tap_key_spend_sig","provider_lookup_tap_leaf_script_sig","serialize","serialize","serialize","time","time","to_consensus_u32","to_consensus_u32","to_consensus_u32","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_sequence","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_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","value","value","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Class","ClassifyContext","IllegalOp","Legacy","NoOp","OP_0","OP_FALSE","OP_NOP2","OP_NOP3","OP_TRUE","Opcode","Ordinary","PushBytes","PushNum","ReturnOp","SuccessOp","TapScript","all","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","hash","into","into","partial_cmp","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","OP_0NOTEQUAL","OP_1ADD","OP_1SUB","OP_2DIV","OP_2DROP","OP_2DUP","OP_2MUL","OP_2OVER","OP_2ROT","OP_2SWAP","OP_3DUP","OP_ABS","OP_ADD","OP_AND","OP_BOOLAND","OP_BOOLOR","OP_CAT","OP_CHECKMULTISIG","OP_CHECKMULTISIGVERIFY","OP_CHECKSIG","OP_CHECKSIGADD","OP_CHECKSIGVERIFY","OP_CLTV","OP_CODESEPARATOR","OP_CSV","OP_DEPTH","OP_DIV","OP_DROP","OP_DUP","OP_ELSE","OP_ENDIF","OP_EQUAL","OP_EQUALVERIFY","OP_FROMALTSTACK","OP_GREATERTHAN","OP_GREATERTHANOREQUAL","OP_HASH160","OP_HASH256","OP_IF","OP_IFDUP","OP_INVALIDOPCODE","OP_INVERT","OP_LEFT","OP_LESSTHAN","OP_LESSTHANOREQUAL","OP_LSHIFT","OP_MAX","OP_MIN","OP_MOD","OP_MUL","OP_NEGATE","OP_NIP","OP_NOP","OP_NOP1","OP_NOP10","OP_NOP4","OP_NOP5","OP_NOP6","OP_NOP7","OP_NOP8","OP_NOP9","OP_NOT","OP_NOTIF","OP_NUMEQUAL","OP_NUMEQUALVERIFY","OP_NUMNOTEQUAL","OP_OR","OP_OVER","OP_PICK","OP_PUSHBYTES_0","OP_PUSHBYTES_1","OP_PUSHBYTES_10","OP_PUSHBYTES_11","OP_PUSHBYTES_12","OP_PUSHBYTES_13","OP_PUSHBYTES_14","OP_PUSHBYTES_15","OP_PUSHBYTES_16","OP_PUSHBYTES_17","OP_PUSHBYTES_18","OP_PUSHBYTES_19","OP_PUSHBYTES_2","OP_PUSHBYTES_20","OP_PUSHBYTES_21","OP_PUSHBYTES_22","OP_PUSHBYTES_23","OP_PUSHBYTES_24","OP_PUSHBYTES_25","OP_PUSHBYTES_26","OP_PUSHBYTES_27","OP_PUSHBYTES_28","OP_PUSHBYTES_29","OP_PUSHBYTES_3","OP_PUSHBYTES_30","OP_PUSHBYTES_31","OP_PUSHBYTES_32","OP_PUSHBYTES_33","OP_PUSHBYTES_34","OP_PUSHBYTES_35","OP_PUSHBYTES_36","OP_PUSHBYTES_37","OP_PUSHBYTES_38","OP_PUSHBYTES_39","OP_PUSHBYTES_4","OP_PUSHBYTES_40","OP_PUSHBYTES_41","OP_PUSHBYTES_42","OP_PUSHBYTES_43","OP_PUSHBYTES_44","OP_PUSHBYTES_45","OP_PUSHBYTES_46","OP_PUSHBYTES_47","OP_PUSHBYTES_48","OP_PUSHBYTES_49","OP_PUSHBYTES_5","OP_PUSHBYTES_50","OP_PUSHBYTES_51","OP_PUSHBYTES_52","OP_PUSHBYTES_53","OP_PUSHBYTES_54","OP_PUSHBYTES_55","OP_PUSHBYTES_56","OP_PUSHBYTES_57","OP_PUSHBYTES_58","OP_PUSHBYTES_59","OP_PUSHBYTES_6","OP_PUSHBYTES_60","OP_PUSHBYTES_61","OP_PUSHBYTES_62","OP_PUSHBYTES_63","OP_PUSHBYTES_64","OP_PUSHBYTES_65","OP_PUSHBYTES_66","OP_PUSHBYTES_67","OP_PUSHBYTES_68","OP_PUSHBYTES_69","OP_PUSHBYTES_7","OP_PUSHBYTES_70","OP_PUSHBYTES_71","OP_PUSHBYTES_72","OP_PUSHBYTES_73","OP_PUSHBYTES_74","OP_PUSHBYTES_75","OP_PUSHBYTES_8","OP_PUSHBYTES_9","OP_PUSHDATA1","OP_PUSHDATA2","OP_PUSHDATA4","OP_PUSHNUM_1","OP_PUSHNUM_10","OP_PUSHNUM_11","OP_PUSHNUM_12","OP_PUSHNUM_13","OP_PUSHNUM_14","OP_PUSHNUM_15","OP_PUSHNUM_16","OP_PUSHNUM_2","OP_PUSHNUM_3","OP_PUSHNUM_4","OP_PUSHNUM_5","OP_PUSHNUM_6","OP_PUSHNUM_7","OP_PUSHNUM_8","OP_PUSHNUM_9","OP_PUSHNUM_NEG1","OP_RESERVED","OP_RESERVED1","OP_RESERVED2","OP_RETURN","OP_RETURN_187","OP_RETURN_188","OP_RETURN_189","OP_RETURN_190","OP_RETURN_191","OP_RETURN_192","OP_RETURN_193","OP_RETURN_194","OP_RETURN_195","OP_RETURN_196","OP_RETURN_197","OP_RETURN_198","OP_RETURN_199","OP_RETURN_200","OP_RETURN_201","OP_RETURN_202","OP_RETURN_203","OP_RETURN_204","OP_RETURN_205","OP_RETURN_206","OP_RETURN_207","OP_RETURN_208","OP_RETURN_209","OP_RETURN_210","OP_RETURN_211","OP_RETURN_212","OP_RETURN_213","OP_RETURN_214","OP_RETURN_215","OP_RETURN_216","OP_RETURN_217","OP_RETURN_218","OP_RETURN_219","OP_RETURN_220","OP_RETURN_221","OP_RETURN_222","OP_RETURN_223","OP_RETURN_224","OP_RETURN_225","OP_RETURN_226","OP_RETURN_227","OP_RETURN_228","OP_RETURN_229","OP_RETURN_230","OP_RETURN_231","OP_RETURN_232","OP_RETURN_233","OP_RETURN_234","OP_RETURN_235","OP_RETURN_236","OP_RETURN_237","OP_RETURN_238","OP_RETURN_239","OP_RETURN_240","OP_RETURN_241","OP_RETURN_242","OP_RETURN_243","OP_RETURN_244","OP_RETURN_245","OP_RETURN_246","OP_RETURN_247","OP_RETURN_248","OP_RETURN_249","OP_RETURN_250","OP_RETURN_251","OP_RETURN_252","OP_RETURN_253","OP_RETURN_254","OP_RIGHT","OP_RIPEMD160","OP_ROLL","OP_ROT","OP_RSHIFT","OP_SHA1","OP_SHA256","OP_SIZE","OP_SUB","OP_SUBSTR","OP_SWAP","OP_TOALTSTACK","OP_TUCK","OP_VER","OP_VERIF","OP_VERIFY","OP_VERNOTIF","OP_WITHIN","OP_XOR","Builder","Bytes","EarlyEndOfScript","Error","Instruction","InstructionIndices","Instructions","NonMinimalPush","NumericOverflow","Op","PushBytes","PushBytes","PushBytesBuf","PushBytesError","PushBytesErrorReport","Script","ScriptBuf","ScriptHash","Serialization","UnknownSpentOutput","WScriptHash","as_bytes","as_bytes","as_mut","as_mut","as_mut","as_mut_bytes","as_mut_push_bytes","as_push_bytes","as_ref","as_ref","as_ref","as_script","as_script","as_script","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","capacity","clear","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deref_mut","empty","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend_from_slice","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","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","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","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","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","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","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","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","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","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","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","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","index","index","index","index","index","index","index","index","input_len","input_len","into","into","into","into","into","into","into","into","into_bytes","into_fallible","into_fallible","into_fallible","into_iter","into_iter","into_iter","into_script","is_empty","is_empty","is_empty","len","len","len","new","new","next","next","next","next_back","nth","nth","nth_back","opcode","partial_cmp","partial_cmp","pop","push","push_bytes","push_int","push_key","push_lock_time","push_opcode","push_sequence","push_slice","push_verify","push_x_only_key","read_scriptbool","read_scriptint","read_scriptint_non_minimal","remove","reserve","script_num","size_hint","size_hint","size_hint","source","source","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","transpose_into_fallible","transpose_into_fallible","transpose_into_fallible","truncate","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","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","with_capacity","witness_program","witness_version","write_scriptint","Error","InvalidLength","InvalidSegwitV0Length","MAX_SIZE","MIN_SIZE","WitnessProgram","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fmt","fmt","from","from","into","source","to_owned","to_string","try_from","try_into","type_id","vzip","DataPush","FromStrError","Invalid","TryFrom","TryFromError","TryFromInstructionError","Unparsable","V0","V1","V10","V11","V12","V13","V14","V15","V16","V2","V3","V4","V5","V6","V7","V8","V9","WitnessVersion","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","invalid_version","source","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Format","IndexOutOfBoundsError","InputWeightPrediction","InputsIndexError","ONE","OutPoint","OutputsIndexError","P2PKH_COMPRESSED_MAX","P2PKH_UNCOMPRESSED_MAX","P2TR_KEY_DEFAULT_SIGHASH","P2TR_KEY_NON_DEFAULT_SIGHASH","P2WPKH_MAX","ParseOutPointError","Sequence","TWO","TooLong","Transaction","TxIn","TxOut","Txid","Txid","Version","Vout","VoutNotCanonical","Wtxid","borrow","borrow","borrow","borrow","borrow","borrow","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","consensus_decode","consensus_encode","deserialize","effective_value","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_slice","ground_p2pkh_compressed","ground_p2wpkh","hash","index","input","into","into","into","into","into","into","is_standard","length","lock_time","new","non_standard","output","partial_cmp","predict_weight","predict_weight_from_slices","previous_output","script_pubkey","script_sig","sequence","serialize","source","source","source","source","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","txid","type_id","type_id","type_id","type_id","type_id","type_id","value","version","vout","vzip","vzip","vzip","vzip","vzip","vzip","weight","witness","WITNESS_SCALE_FACTOR","Weight","Iter","Witness","borrow","borrow_mut","from","into","into_fallible","into_iter","next","size_hint","transpose_into_fallible","try_from","try_into","type_id","vzip","BITCOIN","Consensus","Decodable","DecodeError","Encodable","MAINNET","Other","Params","REGTEST","ReadExt","SIGNET","TESTNET","TooManyBytes","WriteExt","allow_min_difficulty_blocks","as_ref","bip16_time","bip34_height","bip65_height","bip66_height","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","consensus_decode","consensus_decode_from_finite_reader","consensus_encode","deserialize","deserialize_partial","difficulty_adjustment_interval","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","encode","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into_de_error","max_attainable_target","miner_confirmation_window","network","new","no_pow_retargeting","params","pow_limit","pow_target_spacing","pow_target_timespan","read_bool","read_i16","read_i32","read_i64","read_i8","read_slice","read_u16","read_u32","read_u64","read_u8","rule_change_activation_threshold","serde","serialize","source","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","CheckedData","Decodable","Decode","Encodable","Error","FromHexError","InvalidChecksum","Io","MAX_VEC_SIZE","NonMinimalVarInt","OddLengthString","OversizedVectorAllocation","ParseFailed","ReadExt","UnsupportedSegwitFlag","VarInt","WriteExt","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","checksum","clone","clone_into","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","data","deserialize","deserialize_hex","deserialize_partial","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into_data","new","read_bool","read_i16","read_i32","read_i64","read_i8","read_slice","read_u16","read_u32","read_u64","read_u8","serialize","serialize_hex","source","source","to_owned","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","actual","expected","max","requested","MAINNET","Params","REGTEST","SIGNET","TESTNET","allow_min_difficulty_blocks","bip16_time","bip34_height","bip65_height","bip66_height","max_attainable_target","miner_confirmation_window","network","no_pow_retargeting","pow_limit","pow_target_spacing","pow_target_timespan","rule_change_activation_threshold","ByteDecoder","ByteEncoder","DecodeError","Decoder","EncodeBytes","Encoder","Hex","InitError","IntoDeError","With","borrow","borrow","borrow_mut","borrow_mut","default","deserialize","encode_chunk","flush","from","from","from_str","from_str","hex","into","into","into_de_error","serialize","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Case","DecodeError","DecodeInitError","Decoder","Encoder","Lower","Upper","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","encode_chunk","eq","eq","equivalent","equivalent","equivalent","equivalent","flush","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into","into_de_error","into_de_error","into_fallible","into_iter","next","to_owned","to_owned","transpose_into_fallible","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","EmptySignature","Error","Hex","Secp256k1","SerializedSignature","SighashType","Signature","as_mut","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","deref","deref_mut","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_slice","from_str","hash","hash","into","into","into","into_iter","iter","serialize","serialize","serialize_to_writer","sighash_all","sighash_type","signature","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_vec","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write_to","ContainsPrefix","ContainsPrefixError","MissingPrefix","MissingPrefixError","ParseInt","ParseInt","ParseIntError","PrefixedHexError","UnprefixedHexError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","into","source","source","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","BlockHash","FilterHash","FilterHeader","TxMerkleNode","Txid","WitnessCommitment","WitnessMerkleNode","Wtxid","BLOCK_SIZE","Bytes","DISPLAY_BACKWARD","Engine","FromSliceError","Hash","HashEngine","Hmac","HmacEngine","LEN","MidState","all_zeros","as_byte_array","borrow_slice_impl","cmp","engine","from_byte_array","from_engine","from_slice","hash","hash160","hash_byte_chunks","hash_newtype","hex_fmt_impl","hmac","input","midstate","n_bytes_hashed","ripemd160","serde_impl","serde_macros","sha1","sha256","sha256d","sha256t","sha256t_hash_newtype","sha384","sha512","sha512_256","siphash24","to_byte_array","fixed_time_eq","Hash","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","into","into_assets","partial_cmp","serialize","to_byte_array","to_owned","to_string","try_from","try_into","type_id","vzip","BytesToHexIter","Case","Display","DisplayHex","Error","FromHex","HexSliceToBytesIter","HexToArrayError","HexToBytesError","HexToBytesIter","InvalidChar","InvalidChar","InvalidCharError","InvalidLength","Lower","OddLengthString","OddLengthStringError","Upper","append_hex_to_string","as_hex","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buf_encoder","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","default","display","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt_hex_exact","from","from","from","from","from","from","from","from","from","from","from","from_hex","from_pairs","hash","hex_reserve_suggestion","impl_fmt_traits","into","into","into","into","into","into","into","into_fallible","into_fallible","into_iter","into_iter","invalid_char","len","length","new","new","next","next","next_back","next_back","nth","nth_back","parse","prelude","read","size_hint","size_hint","source","source","source","source","test_hex_unwrap","to_hex_string","to_lower_hex_string","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_upper_hex_string","transpose_into_fallible","transpose_into_fallible","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","write_err","BufEncoder","as_str","borrow","borrow_mut","clear","default","from","into","is_full","new","put_byte","put_bytes","put_bytes_min","space_remaining","try_from","try_into","type_id","vzip","Display","DisplayArray","DisplayByteSlice","DisplayHex","append_hex_to_string","as_hex","borrow","borrow","borrow_mut","borrow_mut","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt_hex_exact","from","from","hex_reserve_suggestion","impl_fmt_traits","into","into","to_hex_string","to_lower_hex_string","to_string","to_string","to_upper_hex_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","HexToArrayError","HexToBytesError","InvalidChar","InvalidChar","InvalidCharError","InvalidLength","InvalidLengthError","OddLengthString","OddLengthStringError","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","expected","fmt","fmt","from","into","invalid","source","to_owned","to_string","try_from","try_into","type_id","vzip","Error","FromHex","HexToArrayError","HexToBytesError","InvalidChar","InvalidChar","InvalidLength","OddLengthString","from_hex","Display","DisplayHex","Error","FromHex","append_hex_to_string","as_hex","from_hex","hex_reserve_suggestion","to_hex_string","to_lower_hex_string","to_upper_hex_string","Hmac","HmacEngine","HmacMidState","borrow","borrow_mut","from","inner","into","outer","try_from","try_into","type_id","vzip","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","into_assets","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","Deserialize","Deserialize","Deserializer","Error","Error","Ok","Serialize","Serialize","SerializeMap","SerializeSeq","SerializeStruct","SerializeStructVariant","SerializeTuple","SerializeTupleStruct","SerializeTupleVariant","Serializer","collect_map","collect_seq","collect_str","de","deserialize","deserialize_any","deserialize_bool","deserialize_byte_buf","deserialize_bytes","deserialize_char","deserialize_enum","deserialize_f32","deserialize_f64","deserialize_i128","deserialize_i16","deserialize_i32","deserialize_i64","deserialize_i8","deserialize_identifier","deserialize_ignored_any","deserialize_map","deserialize_newtype_struct","deserialize_option","deserialize_seq","deserialize_str","deserialize_string","deserialize_struct","deserialize_tuple","deserialize_tuple_struct","deserialize_u128","deserialize_u16","deserialize_u32","deserialize_u64","deserialize_u8","deserialize_unit","deserialize_unit_struct","forward_to_deserialize_any","is_human_readable","is_human_readable","ser","serialize","serialize_bool","serialize_bytes","serialize_char","serialize_f32","serialize_f64","serialize_i128","serialize_i16","serialize_i32","serialize_i64","serialize_i8","serialize_map","serialize_newtype_struct","serialize_newtype_variant","serialize_none","serialize_seq","serialize_some","serialize_str","serialize_struct","serialize_struct_variant","serialize_tuple","serialize_tuple_struct","serialize_tuple_variant","serialize_u128","serialize_u16","serialize_u32","serialize_u64","serialize_u8","serialize_unit","serialize_unit_struct","serialize_unit_variant","Bool","Bytes","Char","Deserialize","DeserializeOwned","DeserializeSeed","Deserializer","Deserializer","Enum","EnumAccess","Error","Error","Error","Error","Error","Error","Expected","Float","IgnoredAny","IntoDeserializer","Map","MapAccess","NewtypeStruct","NewtypeVariant","Option","Other","Seq","SeqAccess","Signed","StdError","Str","StructVariant","TupleVariant","Unexpected","Unit","UnitVariant","Unsigned","Value","Value","Variant","VariantAccess","Visitor","borrow","borrow","borrow_mut","borrow_mut","cause","clone","clone","clone_into","clone_into","custom","default","description","deserialize","deserialize","deserialize","deserialize_any","deserialize_bool","deserialize_byte_buf","deserialize_bytes","deserialize_char","deserialize_enum","deserialize_f32","deserialize_f64","deserialize_i128","deserialize_i16","deserialize_i32","deserialize_i64","deserialize_i8","deserialize_identifier","deserialize_ignored_any","deserialize_map","deserialize_newtype_struct","deserialize_option","deserialize_seq","deserialize_str","deserialize_string","deserialize_struct","deserialize_tuple","deserialize_tuple_struct","deserialize_u128","deserialize_u16","deserialize_u32","deserialize_u64","deserialize_u8","deserialize_unit","deserialize_unit_struct","duplicate_field","eq","eq","expecting","expecting","fmt","fmt","fmt","fmt","fmt","fmt","from","from","into","into","into_deserializer","invalid_length","invalid_type","invalid_value","is_human_readable","missing_field","newtype_variant","newtype_variant_seed","next_element","next_element_seed","next_entry","next_entry_seed","next_key","next_key_seed","next_value","next_value_seed","provide","size_hint","size_hint","source","struct_variant","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","tuple_variant","type_id","type_id","unit_variant","unknown_field","unknown_variant","value","variant","variant_seed","visit_bool","visit_bool","visit_borrowed_bytes","visit_borrowed_str","visit_byte_buf","visit_bytes","visit_bytes","visit_char","visit_enum","visit_enum","visit_f32","visit_f64","visit_f64","visit_i128","visit_i128","visit_i16","visit_i32","visit_i64","visit_i64","visit_i8","visit_map","visit_map","visit_newtype_struct","visit_newtype_struct","visit_none","visit_none","visit_seq","visit_seq","visit_some","visit_some","visit_str","visit_str","visit_string","visit_u128","visit_u128","visit_u16","visit_u32","visit_u64","visit_u64","visit_u8","visit_unit","visit_unit","vzip","vzip","BoolDeserializer","BorrowedBytesDeserializer","BorrowedStrDeserializer","BytesDeserializer","CharDeserializer","CowStrDeserializer","EnumAccessDeserializer","Error","F32Deserializer","F64Deserializer","I128Deserializer","I16Deserializer","I32Deserializer","I64Deserializer","I8Deserializer","IsizeDeserializer","MapAccessDeserializer","MapDeserializer","SeqAccessDeserializer","SeqDeserializer","StrDeserializer","StringDeserializer","U128Deserializer","U16Deserializer","U32Deserializer","U64Deserializer","U8Deserializer","UnitDeserializer","UsizeDeserializer","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","custom","custom","description","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","end","end","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","next_element_seed","next_element_seed","next_entry_seed","next_key_seed","next_value_seed","size_hint","size_hint","size_hint","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","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_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","variant_seed","variant_seed","variant_seed","variant_seed","variant_seed","variant_seed","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Error","Error","Error","Error","Error","Error","Error","Error","Error","Impossible","Ok","Ok","Ok","Ok","Ok","Ok","Ok","Ok","Serialize","SerializeMap","SerializeMap","SerializeSeq","SerializeSeq","SerializeStruct","SerializeStruct","SerializeStructVariant","SerializeStructVariant","SerializeTuple","SerializeTuple","SerializeTupleStruct","SerializeTupleStruct","SerializeTupleVariant","SerializeTupleVariant","Serializer","StdError","borrow","borrow_mut","cause","collect_map","collect_seq","collect_str","custom","description","downcast","downcast","downcast","downcast_mut","downcast_mut","downcast_mut","downcast_ref","downcast_ref","downcast_ref","end","end","end","end","end","end","end","end","end","end","end","end","end","end","from","into","is","is","is","is_human_readable","provide","serialize","serialize_bool","serialize_bytes","serialize_char","serialize_element","serialize_element","serialize_element","serialize_element","serialize_entry","serialize_f32","serialize_f64","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_i128","serialize_i16","serialize_i32","serialize_i64","serialize_i8","serialize_key","serialize_key","serialize_map","serialize_newtype_struct","serialize_newtype_variant","serialize_none","serialize_seq","serialize_some","serialize_str","serialize_struct","serialize_struct_variant","serialize_tuple","serialize_tuple_struct","serialize_tuple_variant","serialize_u128","serialize_u16","serialize_u32","serialize_u64","serialize_u8","serialize_unit","serialize_unit_struct","serialize_unit_variant","serialize_value","serialize_value","skip_field","skip_field","source","sources","try_from","try_into","type_id","vzip","serde_details","N","SerdeHash","deserialize","from_slice_delegated","serialize","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","Hash","HashEngine","Midstate","all_zeros","as_byte_array","as_ref","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_encode","const_hash","default","default","deserialize","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","eq","equivalent","equivalent","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_byte_array","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_hex","from_midstate","from_slice","from_slice","from_slice_delegated","from_slice_delegated","from_str","from_str","hash","hash","hash_again","hash_tag","index","index","input","into","into","into","into_assets","midstate","n_bytes_hashed","partial_cmp","partial_cmp","serialize","serialize","to_byte_array","to_byte_array","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write","write","Hash","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","consensus_decode","consensus_encode","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","into","partial_cmp","serialize","to_byte_array","to_owned","to_string","try_from","try_into","type_id","vzip","Hash","Tag","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","default","deserialize","engine","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","into","partial_cmp","serialize","to_byte_array","to_owned","to_string","try_from","try_into","type_id","vzip","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Hash","HashEngine","State","all_zeros","as_byte_array","as_ref","as_ref","as_u64","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_engine_to_u64","from_slice","from_slice_delegated","from_str","from_u64","hash","hash_to_u64_with_keys","hash_with_keys","index","input","into","into","into","keys","midstate","n_bytes_hashed","new","partial_cmp","serialize","to_byte_array","to_owned","to_owned","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_keys","write","write","AddrInUse","AddrNotAvailable","AlreadyExists","BrokenPipe","BufRead","ConnectionAborted","ConnectionRefused","ConnectionReset","Cursor","Err","Error","ErrorKind","Interrupted","InvalidData","InvalidInput","NotConnected","NotFound","Ok","Other","PermissionDenied","Read","Result","Sink","Take","TimedOut","UnexpectedEof","WouldBlock","Write","WriteZero","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone_into","consume","consume","consume","description","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","eq","equivalent","equivalent","fill_buf","fill_buf","fill_buf","flush","flush","flush","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_ref","hash","impl_write","into","into","into","into","into","into_inner","kind","new","new","position","read","read","read","read_bool","read_bool","read_exact","read_i16","read_i16","read_i32","read_i32","read_i64","read_i64","read_i8","read_i8","read_slice","read_slice","read_to_end","read_to_limit","read_u16","read_u16","read_u32","read_u32","read_u64","read_u64","read_u8","read_u8","sink","source","take","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","write","write","write","write_all","write_all","write_all","Base58","CompressedPublicKey","Encoding","Even","FromSliceError","FromWifError","Hex","InvalidAddressVersion","InvalidAddressVersionError","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidChar","InvalidHexLength","InvalidKeyPrefix","InvalidLength","Keypair","Odd","Parity","ParseCompressedPublicKeyError","ParsePublicKeyError","PrivateKey","PubkeyHash","PublicKey","Secp256k1","Secp256k1","Secp256k1","Secp256k1","SortKey","TapTweak","TweakedAux","TweakedKey","TweakedKeypair","TweakedPublicKey","UncompressedPublicKeyError","UntweakedKeypair","UntweakedPublicKey","Verification","WPubkeyHash","XOnlyPublicKey","add_xonly_tweak","as_c_ptr","as_mut_c_ptr","as_mut_ptr","as_ptr","bitxor","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp_fast_unstable","compressed","compressed","ctx","dangerous_assume_tweaked","dangerous_assume_tweaked","dangerous_assume_tweaked","dangerous_assume_tweaked","default","deserialize","deserialize","deserialize","deserialize","display_secret","drop","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_i32","from_keypair","from_raw_all","from_raw_signing_only","from_raw_verification_only","from_seckey_slice","from_seckey_str","from_secret_key","from_str","from_u8","gen_new","generate_keypair","hash","hash","hash","hash","hash","inner","inner","into","into","into","into","into","into","into","into","into","into","into","into","into","invalid_address_version","invalid_base58_payload_length","network","new","new","non_secure_erase","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","preallocate_signing_size","preallocate_size","preallocate_size_gen","preallocate_verification_size","preallocated_gen_new","preallocated_new","preallocated_signing_only","preallocated_verification_only","public_key","public_parts","randomize","recover_ecdsa","secret_bytes","secret_key","seeded_randomize","serialize","serialize","serialize","serialize","serialize","sign_ecdsa","sign_ecdsa_grind_r","sign_ecdsa_low_r","sign_ecdsa_recoverable","sign_ecdsa_recoverable_with_noncedata","sign_ecdsa_with_noncedata","sign_schnorr","sign_schnorr_no_aux_rand","sign_schnorr_with_aux_rand","sign_schnorr_with_rng","signing_only","source","source","source","source","source","tap_tweak","tap_tweak","to_i32","to_inner","to_inner","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_u8","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verification_only","verify_ecdsa","verify_schnorr","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","x_only_public_key","BitsArrayOverflow","HashesArrayOverflow","IdenticalHashesFound","MerkleBlock","MerkleBlockError","MerkleRootMismatch","NoTransactions","NotAllBitsConsumed","NotAllHashesConsumed","NotEnoughBits","PartialMerkleTree","TooManyHashes","TooManyTransactions","bits","borrow","borrow","borrow_mut","borrow_mut","calculate_root","calculate_root_inline","clone","clone","clone_into","clone_into","consensus_decode_from_finite_reader","consensus_encode","eq","eq","equivalent","equivalent","equivalent","equivalent","extract_matches","fmt","fmt","fmt","from","from","from","from_txids","hashes","header","into","into","num_transactions","source","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","txn","type_id","type_id","vzip","vzip","Bitcoin","Main","Network","NetworkKind","ParseNetworkError","Regtest","Signet","Test","Testnet","UnknownChainHashError","as_core_arg","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","into","into","source","source","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","deserialize","serialize","Address","BITCOIN","BLOOM","COMPACT_FILTERS","GETUTXO","Magic","NETWORK","NETWORK_LIMITED","NONE","P2P_V2","PROTOCOL_VERSION","ParseMagicError","REGTEST","SIGNET","ServiceFlags","TESTNET","UnknownMagicError","WITNESS","add","address","address","as_mut","as_mut","as_ref","as_ref","bitor","bitor_assign","bitxor","bitxor_assign","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_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_decode","consensus_decode","consensus_encode","consensus_encode","consensus_encode","default","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_bytes","from_params","from_str","has","hash","hash","hash","into","into","into","into","into","message","message_blockdata","message_bloom","message_compact_blocks","message_filter","message_network","new","partial_cmp","partial_cmp","port","remove","services","socket_addr","source","source","to_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_socket_addrs","to_string","to_string","to_string","to_string","to_u64","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","AddrV2","AddrV2Message","Address","Cjdns","I2p","Ipv4","Ipv6","TorV2","TorV3","Unknown","addr","address","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","consensus_decode","consensus_decode","consensus_encode","consensus_encode","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","hash","hash","into","into","port","port","services","services","socket_addr","time","to_owned","to_owned","to_socket_addrs","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Addr","AddrV2","Alert","Block","BlockTxn","CFCheckpt","CFHeaders","CFilter","CmpctBlock","CommandString","CommandStringError","FeeFilter","FilterAdd","FilterClear","FilterLoad","GetAddr","GetBlockTxn","GetBlocks","GetCFCheckpt","GetCFHeaders","GetCFilters","GetData","GetHeaders","Headers","Inv","MAX_INV_SIZE","MAX_MSG_SIZE","MemPool","MerkleBlock","NetworkMessage","NotFound","Ping","Pong","RawNetworkMessage","Reject","SendAddrV2","SendCmpct","SendHeaders","Tx","Unknown","Verack","Version","WtxidRelay","as_ref","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmd","cmd","command","command","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_str","into","into","into","into","magic","new","payload","source","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from_static","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","command","payload","Block","CompactBlock","Error","GetBlocksMessage","GetHeadersMessage","Inventory","Transaction","Unknown","WTx","WitnessBlock","WitnessTransaction","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","from","hash","into","into","into","locator_hashes","locator_hashes","network_hash","new","new","partial_cmp","stop_hash","stop_hash","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","version","version","vzip","vzip","vzip","hash","inv_type","All","BloomFlags","FilterAdd","FilterLoad","None","PubkeyOnly","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","data","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter","flags","fmt","fmt","fmt","from","from","from","hash_funcs","into","into","into","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","tweak","type_id","type_id","type_id","vzip","vzip","vzip","BlockTxn","CmpctBlock","GetBlockTxn","SendCmpct","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compact_block","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","hash","hash","hash","hash","into","into","into","into","partial_cmp","partial_cmp","partial_cmp","partial_cmp","send_compact","to_owned","to_owned","to_owned","to_owned","transactions","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txs_request","type_id","type_id","type_id","type_id","version","vzip","vzip","vzip","vzip","CFCheckpt","CFHeaders","CFilter","GetCFCheckpt","GetCFHeaders","GetCFilters","block_hash","borrow","borrow","borrow","borrow","borrow","borrow","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","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter","filter_hashes","filter_headers","filter_type","filter_type","filter_type","filter_type","filter_type","filter_type","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into","into","previous_filter_header","start_height","start_height","stop_hash","stop_hash","stop_hash","stop_hash","stop_hash","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_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","Checkpoint","Duplicate","Dust","Fee","Invalid","Malformed","NonStandard","Obsolete","Reject","RejectReason","VersionMessage","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","ccode","clone","clone","clone","clone_into","clone_into","clone_into","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","from","hash","into","into","into","message","new","nonce","reason","receiver","relay","sender","services","start_height","timestamp","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","user_agent","version","vzip","vzip","vzip","ParseIntError","as_ref","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fmt","fmt","from","input","into","source","to_owned","to_string","try_from","try_into","type_id","vzip","DEFAULT_BYTES_PER_SIGOP","DEFAULT_INCREMENTAL_RELAY_FEE","DEFAULT_MEMPOOL_EXPIRY","DEFAULT_MIN_RELAY_TX_FEE","DUST_RELAY_TX_FEE","MAX_STANDARD_TX_SIGOPS_COST","MAX_STANDARD_TX_WEIGHT","MIN_STANDARD_TX_NONWITNESS_SIZE","get_virtual_tx_size","CompactTarget","Target","Work","AbsurdFeeRate","Bare","Base64Encoding","Bip32","Bip32","CombineInconsistentKeySources","ConsensusEncoding","DuplicateKey","Ecdsa","Ecdsa","Error","Error","ExtractTxError","FeeOverflow","GetKey","GetKeyError","IndexOutOfBounds","IndexOutOfBoundsError","Input","Inputs","InvalidControlBlock","InvalidEcdsaSignature","InvalidHash","InvalidKey","InvalidLeafVersion","InvalidMagic","InvalidPreimageHashPair","InvalidProprietaryKey","InvalidPublicKey","InvalidSecp256k1PublicKey","InvalidSeparator","InvalidSighashType","InvalidTaprootSignature","InvalidXOnlyPublicKey","Io","KeyNotFound","KeyRequest","MismatchedAlgoKey","MissingInputUtxo","MissingInputValue","MissingRedeemScript","MissingSpendUtxo","MissingUtxo","MissingWitnessScript","MustHaveUnsignedTx","NegativeFee","NoMorePairs","NonStandardSighashType","NotEcdsa","NotSupported","NotWpkh","Output","OutputType","P2wpkhSighash","PartialDataConsumption","Psbt","PsbtEncoding","PsbtParseError","PsbtSighashType","PsbtUtxoOutOfbounds","Pubkey","Schnorr","Schnorr","SegwitV0Sighash","SendingTooMuch","Sh","ShWpkh","ShWsh","SignError","SigningAlgorithm","SigningErrors","SigningKeys","SigningKeysMap","TapTree","Taproot","TaprootError","Tr","TxInput","UnexpectedUnsignedTx","UnknownOutputType","UnsignedTxHasScriptSigs","UnsignedTxHasScriptWitnesses","Unsupported","Version","Wpkh","WrongSigningAlgorithm","Wsh","XPubKey","bip32_derivation","bip32_derivation","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","combine","combine","default","default","deserialize","deserialize","deserialize","ecdsa_hash_ty","ecdsa_hash_ty","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","final_script_sig","final_script_witness","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_str","from_u32","get_key","hash","hash","hash","hash","hash","hash160_preimages","hash256_preimages","inputs","into","into","into","into","into","into","into","into","into","into","into","into","into","non_witness_utxo","outputs","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_sigs","proprietary","proprietary","proprietary","raw","redeem_script","redeem_script","ripemd160_preimages","serialize","serialize","serialize","serialize","sha256_preimages","sighash_type","signing_algorithm","source","source","source","source","source","source","tap_internal_key","tap_internal_key","tap_key_origins","tap_key_origins","tap_key_sig","tap_merkle_root","tap_script_sigs","tap_scripts","tap_tree","taproot_hash_ty","taproot_hash_ty","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_u32","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unknown","unknown","unknown","unsigned_tx","update_with_descriptor_unchecked","update_with_descriptor_unchecked","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","witness_script","witness_script","witness_utxo","xpub","actual","expected","hash","hash_type","preimage","fee_rate","psbt","tx","tx","index","index","length","length","Key","Pair","ProprietaryKey","ProprietaryType","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_encode","deserialize","deserialize","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","hash","hash","into","into","into","key","key","key","partial_cmp","partial_cmp","prefix","serialize","serialize","serialize","subtype","to_key","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_value","value","vzip","vzip","vzip","All","AllPreallocated","Context","DESCRIPTION","Error","Even","FLAGS","IncorrectSignature","InvalidEllSwift","InvalidMessage","InvalidParityValue","InvalidParityValue","InvalidPublicKey","InvalidPublicKeySum","InvalidRecoveryId","InvalidSecretKey","InvalidSharedSecret","InvalidSignature","InvalidTweak","Keypair","MAX","Message","NotEnoughMemory","ONE","Odd","Parity","PreallocatedContext","PublicKey","Scalar","Secp256k1","SecretKey","SignOnly","SignOnlyPreallocated","Signing","ThirtyTwoByteHash","Verification","VerifyOnly","VerifyOnlyPreallocated","XOnlyPublicKey","ZERO","add_exp_tweak","add_tweak","as_c_ptr","as_c_ptr","as_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_ptr","as_ptr","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp_fast_unstable","combine","combine_keys","constants","deallocate","deallocate","deallocate","deallocate","deallocate","deallocate","deallocate","deserialize","deserialize","display_secret","ecdh","ecdsa","ellswift","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","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_be_bytes","from_digest","from_digest_slice","from_ellswift","from_keypair","from_keypair","from_le_bytes","from_secret_key","from_slice","from_slice","from_slice","from_str","from_str","from_x_only_public_key","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hashes","impl_array_newtype","index","index","index","into","into","into","into","into","into","into","into","into","into","into","into","into_32","keypair","mul_tweak","mul_tweak","negate","negate","new","non_secure_erase","non_secure_erase","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","public_key","random","random_custom","scalar","schnorr","secret_bytes","serialize","serialize","serialize","serialize_uncompressed","source","to_be_bytes","to_hash160","to_hash256","to_le_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public_key","to_ripemd160","to_sha256","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verify","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","x_only_public_key","x_only_public_key","COMPACT_SIGNATURE_SIZE","CURVE_ORDER","ELLSWIFT_ENCODING_SIZE","FIELD_SIZE","GENERATOR_X","GENERATOR_Y","KEY_PAIR_SIZE","MAX_SIGNATURE_SIZE","MESSAGE_SIZE","ONE","PUBLIC_KEY_SIZE","SCHNORR_PUBLIC_KEY_SIZE","SCHNORR_SIGNATURE_SIZE","SECRET_KEY_SIZE","UNCOMPRESSED_PUBLIC_KEY_SIZE","ZERO","SharedSecret","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","deserialize","display_secret","eq","equivalent","equivalent","fmt","from","from_bytes","from_slice","from_str","hash","into","new","non_secure_erase","partial_cmp","secret_bytes","serialize","shared_secret_point","to_owned","try_from","try_into","type_id","vzip","RecoverableSignature","RecoveryId","SerializedSignature","Signature","as_c_ptr","as_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_ptr","as_mut_ptr","as_ptr","as_ptr","as_ref","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capacity","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp_fast_unstable","deref","deserialize","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_compact","from_compact","from_der","from_der_lax","from_i32","from_signature","from_str","hash","hash","hash","into","into","into","into","into_iter","into_iter","is_empty","len","normalize_s","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","serialize","serialize_compact","serialize_compact","serialize_der","serialized_signature","to_i32","to_owned","to_owned","to_owned","to_owned","to_signature","to_standard","to_string","to_string","try_from","try_from","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","IntoIter","SerializedSignature","as_slice","borrow","borrow_mut","clone","clone_into","fmt","from","into","into_fallible","into_iter","next","next_back","nth","size_hint","to_owned","transpose_into_fallible","try_from","try_into","type_id","vzip","A","B","ElligatorSwift","ElligatorSwiftParty","ElligatorSwiftSharedSecret","as_c_ptr","as_mut_c_ptr","as_secret_bytes","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","cmp","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from_array","from_pubkey","from_seckey","from_secret_bytes","from_str","hash","hash","hash","into","into","into","new","partial_cmp","partial_cmp","partial_cmp","shared_secret","shared_secret_with_hasher","to_array","to_owned","to_owned","to_owned","to_secret_bytes","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","CPtr","Context","EcdhHashFn","ElligatorSwift","EllswiftEcdhHashFn","Keypair","NonceFn","None","None","None","None","PublicKey","SECP256K1_SER_COMPRESSED","SECP256K1_SER_UNCOMPRESSED","SECP256K1_START_NONE","SECP256K1_START_SIGN","SECP256K1_START_VERIFY","SchnorrNonceFn","SchnorrSigExtraParams","Signature","Some","Some","Some","Some","Target","XOnlyPublicKey","as_c_ptr","as_c_ptr","as_c_ptr","as_c_ptr","as_c_ptr","as_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_ref","as_ref","as_ref","as_ref","as_ref","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","cmp","cmp","cmp","cmp","cmp_fast_unstable","cmp_fast_unstable","cmp_fast_unstable","cmp_fast_unstable","cmp_fast_unstable","ecdsa_signature_parse_der_lax","eq","eq","eq","eq","eq","eq_fast_unstable","eq_fast_unstable","eq_fast_unstable","eq_fast_unstable","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_array","from_array_unchecked","from_array_unchecked","from_array_unchecked","from_array_unchecked","hash","hash","hash","hash","hash","impl_array_newtype","impl_raw_debug","index","index","index","index","index","into","into","into","into","into","into","into","new","new","new","new","new","non_secure_erase","non_secure_erase_impl","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","recovery","rustsecp256k1_v0_10_0_context_create","rustsecp256k1_v0_10_0_context_destroy","rustsecp256k1_v0_10_0_default_error_callback_fn","rustsecp256k1_v0_10_0_default_illegal_callback_fn","secp256k1_context_create","secp256k1_context_destroy","secp256k1_context_no_precomp","secp256k1_context_preallocated_clone","secp256k1_context_preallocated_clone_size","secp256k1_context_preallocated_create","secp256k1_context_preallocated_destroy","secp256k1_context_preallocated_size","secp256k1_context_randomize","secp256k1_ec_pubkey_cmp","secp256k1_ec_pubkey_combine","secp256k1_ec_pubkey_create","secp256k1_ec_pubkey_negate","secp256k1_ec_pubkey_parse","secp256k1_ec_pubkey_serialize","secp256k1_ec_pubkey_tweak_add","secp256k1_ec_pubkey_tweak_mul","secp256k1_ec_seckey_negate","secp256k1_ec_seckey_tweak_add","secp256k1_ec_seckey_tweak_mul","secp256k1_ec_seckey_verify","secp256k1_ecdh","secp256k1_ecdh_hash_function_default","secp256k1_ecdsa_sign","secp256k1_ecdsa_signature_normalize","secp256k1_ecdsa_signature_parse_compact","secp256k1_ecdsa_signature_parse_der","secp256k1_ecdsa_signature_serialize_compact","secp256k1_ecdsa_signature_serialize_der","secp256k1_ecdsa_verify","secp256k1_ellswift_create","secp256k1_ellswift_decode","secp256k1_ellswift_encode","secp256k1_ellswift_xdh","secp256k1_ellswift_xdh_hash_function_bip324","secp256k1_keypair_create","secp256k1_keypair_pub","secp256k1_keypair_sec","secp256k1_keypair_xonly_pub","secp256k1_keypair_xonly_tweak_add","secp256k1_nonce_function_bip340","secp256k1_nonce_function_default","secp256k1_nonce_function_rfc6979","secp256k1_schnorrsig_sign","secp256k1_schnorrsig_sign_custom","secp256k1_schnorrsig_verify","secp256k1_xonly_pubkey_cmp","secp256k1_xonly_pubkey_from_pubkey","secp256k1_xonly_pubkey_parse","secp256k1_xonly_pubkey_serialize","secp256k1_xonly_pubkey_tweak_add","secp256k1_xonly_pubkey_tweak_add_check","to_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_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","types","underlying_bytes","underlying_bytes","underlying_bytes","underlying_bytes","vzip","vzip","vzip","vzip","vzip","vzip","vzip","RecoverableSignature","as_c_ptr","as_mut_c_ptr","as_ref","borrow","borrow_mut","clone","clone_into","cmp","cmp_fast_unstable","default","eq","eq_fast_unstable","equivalent","equivalent","fmt","from","hash","index","into","new","partial_cmp","secp256k1_ecdsa_recover","secp256k1_ecdsa_recoverable_signature_convert","secp256k1_ecdsa_recoverable_signature_parse_compact","secp256k1_ecdsa_recoverable_signature_serialize_compact","secp256k1_ecdsa_sign_recoverable","to_owned","try_from","try_into","type_id","vzip","AlignedType","ZERO","borrow","borrow","borrow_mut","borrow_mut","c_char","c_int","c_uchar","c_uint","c_void","clone","clone_into","default","fmt","from","from","into","into","size_t","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","zeroed","BLOCK_SIZE","Bytes","DISPLAY_BACKWARD","Engine","FromSliceError","Hash","HashEngine","Hmac","HmacEngine","LEN","MidState","all_zeros","all_zeros","as_byte_array","as_byte_array","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_slice_impl","clone","clone","clone","clone_into","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","eq","equivalent","equivalent","equivalent","equivalent","expected_length","flush","flush","fmt","fmt","fmt","fmt","fmt","from","from","from","from_byte_array","from_byte_array","from_engine","from_engine","from_inner_engines","from_slice","from_slice","from_str","hash","hash","hash_byte_chunks","hash_newtype","hex_fmt_impl","index","index","index","index","index","input","input","into","into","into","invalid_length","midstate","midstate","n_bytes_hashed","n_bytes_hashed","new","partial_cmp","serde_impl","serialize","sha256t_hash_newtype","to_byte_array","to_byte_array","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write","write","CUSTOM_START","CryptoRng","Error","Fill","INTERNAL_START","Rng","RngCore","Seed","SeedableRng","borrow","borrow_mut","code","distributions","fill","fill_bytes","fmt","fmt","from","from","from","from_entropy","from_rng","from_seed","gen","gen_bool","gen_range","gen_ratio","inner","into","new","next_u32","next_u64","prelude","random","raw_os_error","read","rngs","sample","sample_iter","seed_from_u64","seq","source","take_inner","thread_rng","to_string","try_fill","try_fill","try_fill_bytes","try_from","try_into","type_id","vzip","AllWeightsZero","Alphanumeric","Bernoulli","BernoulliError","DistIter","DistMap","DistString","Distribution","InvalidProbability","InvalidWeight","NoItem","Open01","OpenClosed01","Slice","Standard","TooMany","Uniform","WeightedError","WeightedIndex","append_string","append_string","append_string","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","checked_sum","checked_sum","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_ratio","into","into","into","into","into","into","into","into","into","into","into","into","into_fallible","into_iter","map","new","new","new","new","new_inclusive","next","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample_iter","sample_string","size_hint","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","transpose_into_fallible","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","uniform","update_weights","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","weighted","SampleBorrow","SampleRange","SampleUniform","Sampler","Uniform","UniformChar","UniformDuration","UniformFloat","UniformInt","UniformSampler","X","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","into","is_empty","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","to_owned","to_owned","to_owned","to_owned","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","AllWeightsZero","InvalidWeight","NoItem","TooMany","WeightedError","WeightedIndex","alias_method","Weight","WeightedIndex","borrow","borrow_mut","fmt","from","into","new","try_from","try_into","type_id","vzip","CryptoRng","Distribution","Item","IteratorRandom","Rng","RngCore","Seed","SeedableRng","SliceRandom","StdRng","ThreadRng","choose","choose","choose_multiple","choose_multiple","choose_multiple_fill","choose_multiple_weighted","choose_mut","choose_stable","choose_weighted","choose_weighted_mut","fill","fill_bytes","from_entropy","from_rng","from_seed","gen","gen_bool","gen_range","gen_ratio","map","next_u32","next_u64","partial_shuffle","random","sample","sample","sample_iter","sample_iter","seed_from_u64","shuffle","thread_rng","try_fill","try_fill_bytes","OsRng","StdRng","ThreadRng","adapter","as_rngcore","as_rngcore","as_rngcore","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","default","eq","equivalent","equivalent","fill_bytes","fill_bytes","fill_bytes","fmt","fmt","fmt","from","from","from","from_rng","from_seed","into","into","into","mock","next_u32","next_u32","next_u32","next_u64","next_u64","next_u64","to_owned","to_owned","to_owned","try_fill_bytes","try_fill_bytes","try_fill_bytes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","ReadError","ReadRng","ReseedingRng","as_rngcore","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fill_bytes","fill_bytes","fmt","fmt","fmt","fmt","from","from","from","into","into","into","new","new","next_u32","next_u32","next_u64","next_u64","reseed","source","to_owned","to_string","try_fill_bytes","try_fill_bytes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","StepRng","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fill_bytes","fmt","from","into","new","next_u32","next_u64","to_owned","try_fill_bytes","try_from","try_into","type_id","vzip","Item","IteratorRandom","SliceChooseIter","SliceRandom","borrow","borrow_mut","choose","choose","choose_multiple","choose_multiple","choose_multiple_fill","choose_multiple_weighted","choose_mut","choose_stable","choose_weighted","choose_weighted_mut","fmt","from","index","into","into_fallible","into_iter","len","next","partial_shuffle","shuffle","size_hint","transpose_into_fallible","try_from","try_into","type_id","vzip","IndexVec","IndexVecIntoIter","IndexVecIter","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","fmt","fmt","fmt","from","from","from","from","from","index","into","into","into","into_fallible","into_fallible","into_iter","into_iter","into_iter","into_vec","is_empty","iter","len","next","next","sample","sample_weighted","size_hint","size_hint","to_owned","to_owned","transpose_into_fallible","transpose_into_fallible","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","OutOfRangeError","Scalar","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fmt","fmt","from","hash","into","to_owned","to_string","try_from","try_into","type_id","vzip","Signature","as_c_ptr","as_mut_c_ptr","as_ref","borrow","borrow_mut","clone","clone_into","cmp","deserialize","eq","equivalent","equivalent","fmt","fmt","fmt","from","from_slice","from_str","hash","index","into","partial_cmp","serialize","serialize","to_owned","to_string","try_from","try_into","type_id","vzip","All","All","All","AllPlusAnyoneCanPay","AllPlusAnyoneCanPay","Annex","AnnexError","Default","EcdsaSighashType","Empty","EncodeSigningDataResult","IncorrectPrefix","InputsIndex","InvalidAllIndex","InvalidOneIndex","InvalidSighashType","InvalidSighashTypeError","Io","LegacySighash","NonStandardSighashTypeError","None","None","NonePlusAnyoneCanPay","NonePlusAnyoneCanPay","NotP2wpkhScript","One","P2wpkhError","Prevouts","PrevoutsIndex","PrevoutsIndexError","PrevoutsKind","PrevoutsKindError","PrevoutsSize","PrevoutsSizeError","ScriptPath","SegwitV0Sighash","Sighash","Sighash","SighashCache","SighashSingleBug","SighashTypeParseError","SigningDataError","Single","Single","SingleMissingOutput","SingleMissingOutputError","SinglePlusAnyoneCanPay","SinglePlusAnyoneCanPay","TapSighash","TapSighashTag","TapSighashType","TaprootError","WriteResult","as_bytes","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_encode","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","hash","input_index","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_transaction","is_sighash_single_bug","leaf_hash","legacy_encode_signing_data_to","legacy_signature_hash","map_err","new","new","new","outputs_length","p2wpkh_signature_hash","p2wsh_signature_hash","partial_cmp","partial_cmp","segwit_v0_encode_signing_data_to","source","source","source","source","source","source","source","source","source","source","source","taproot_encode_signing_data_to","taproot_key_spend_signature_hash","taproot_script_spend_signature_hash","taproot_signature_hash","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","transaction","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unrecognized","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_defaults","witness_mut","BITCOIN_SIGNED_MSG_PREFIX","InvalidBase64","InvalidEncoding","InvalidLength","MessageSignature","MessageSignatureError","UnsupportedAddressType","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","compressed","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from_base64","from_slice","from_str","into","into","is_signed_by_address","new","recover_pubkey","serialize","signature","signed_msg_hash","source","to_base64","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","ControlBlock","EmptyTree","EmptyTree","Future","FutureLeafVersion","Hidden","HiddenNodesError","HiddenParts","HiddenParts","IncompleteBuilderError","InvalidControlBlockSize","InvalidInternalKey","InvalidInternalKey","InvalidMerkleBranchSize","InvalidMerkleTreeDepth","InvalidMerkleTreeDepth","InvalidSignatureSize","InvalidTaprootLeafVersion","LeafNode","LeafNodes","LeafVersion","NodeInfo","NodeNotInDfsOrder","NotFinalized","OverCompleteTree","Script","ScriptLeaf","ScriptLeaves","Secp256k1","SigFromSliceError","SighashType","Signature","TAPROOT_ANNEX_PREFIX","TAPROOT_CONTROL_BASE_SIZE","TAPROOT_CONTROL_MAX_NODE_COUNT","TAPROOT_CONTROL_MAX_SIZE","TAPROOT_CONTROL_NODE_SIZE","TAPROOT_LEAF_MASK","TAPROOT_LEAF_TAPSCRIPT","TapBranchTag","TapLeaf","TapLeafHash","TapLeafTag","TapNodeHash","TapScript","TapTree","TapTweakHash","TapTweakTag","TaprootBuilder","TaprootBuilderError","TaprootError","TaprootMerkleBranch","TaprootSpendInfo","add_hidden_node","add_leaf","add_leaf_with_ver","as_hidden","as_inner","as_mut","as_ref","as_script","as_slice","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","combine","control_block","decode","decode","default","default","depth","deref","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","encode","encode","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","finalize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","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","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","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","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","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","from","from","from","from_consensus","from_leaf_node","from_node_info","from_slice","has_hidden_nodes","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","internal_key","internal_key","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_builder","into_fallible","into_fallible","into_inner","into_iter","into_iter","into_iter","into_iter","into_iter","into_node_info","into_node_info","into_vec","is_empty","is_finalizable","leaf","leaf_hash","leaf_nodes","leaf_version","leaf_version","len","merkle_branch","merkle_branch","merkle_branch","merkle_branch","merkle_root","new","new_hidden","new_hidden_node","new_key_spend","new_leaf_with_ver","new_script","next","next","next_back","next_back","node_hash","node_hash","node_info","output_key","output_key_parity","output_key_parity","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","root_hash","script","script","script_leaves","script_map","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize_to_writer","serialized_signature","sighash_type","signature","size","size_hint","size_hint","source","source","source","source","source","tap_tweak","to_consensus","to_consensus","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_vec","transpose_into_fallible","transpose_into_fallible","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into_node_info","try_into_taptree","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verify_taproot_commitment","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_capacity","with_huffman_tree","with_huffman_tree","IntoIter","TaprootMerkleBranch","as_mut_slice","as_slice","borrow","borrow_mut","clone","clone_into","count","fmt","from","into","into_fallible","into_iter","last","next","next_back","nth","nth_back","size_hint","to_owned","transpose_into_fallible","try_from","try_into","type_id","vzip","IntoIter","SerializedSignature","as_ref","as_slice","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","deref","eq","eq","equivalent","equivalent","fmt","fmt","fmt","from","from","from","from","from_signature","hash","into","into","into_fallible","into_iter","into_iter","into_iter","len","next","next_back","nth","partial_cmp","partial_cmp","size_hint","to_owned","to_owned","to_signature","to_string","transpose_into_fallible","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write_to","ChangeSet","IndexedTxGraph","apply_block","apply_block_relevant","apply_changeset","apply_update","apply_update_at","as_ref","batch_insert_relevant","batch_insert_relevant_unconfirmed","batch_insert_unconfirmed","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","index","indexer","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","merge","new","serialize","to_owned","try_from","try_from","try_into","try_into","tx_graph","type_id","type_id","vzip","vzip","ChangeSet","Indexer","apply_changeset","index_tx","index_txout","initial_changeset","is_tx_relevant","keychain_txout","spk_txout","ChangeSet","DEFAULT_LOOKAHEAD","DescriptorAlreadyAssigned","FullScanRequestBuilderExt","InsertDescriptorError","KeychainAlreadyAssigned","KeychainTxOutIndex","LAST_REVEALED_TABLE_NAME","SCHEMA_NAME","SyncRequestBuilderExt","all_unbounded_spk_iters","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","default","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from_sqlite","get_descriptor","index_of_spk","index_tx","index_txout","init_sqlite_tables","initial_changeset","inner","insert_descriptor","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","merge","net_value","new","next_index","next_unused_spk","outpoints","persist_to_sqlite","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_keychain_spks","revealed_spks","revealed_spks_from_indexer","sent_and_received","serialize","spk_at_index","spks_from_indexer","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","unused_keychain_spks","unused_spks","unused_spks_from_indexer","vzip","vzip","vzip","descriptor","existing_assignment","existing_assignment","keychain","SpkTxOutIndex","all_spks","apply_changeset","borrow","borrow_mut","clone","clone_into","default","fmt","from","index_of_spk","index_tx","index_txout","initial_changeset","insert_spk","into","is_relevant","is_tx_relevant","is_used","mark_used","net_value","outpoints","outputs_in_range","scan","scan_txout","sent_and_received","spk_at_index","to_owned","try_from","try_into","txout","txouts","txouts_in_tx","type_id","unmark_used","unused_spks","vzip","AlterCheckPointError","ApplyHeaderError","BLOCKS_TABLE_NAME","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","SCHEMA_NAME","apply_changeset","apply_header","apply_header_connected_to","apply_update","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","deserialize","disconnect_from","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_blocks","from_changeset","from_genesis_hash","from_iter","from_iter","from_sqlite","from_tip","genesis_hash","get","get_chain_tip","height","init_sqlite_tables","initial_changeset","insert_block","into","into","into","into","into","into","is_block_in_chain","is_empty","iter_checkpoints","merge","original_hash","persist_to_sqlite","range","serialize","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","SCHEMAS_TABLE_NAME","migrate_schema","FullScanRequest","FullScanRequestBuilder","FullScanResult","OutPoint","Spk","SyncItem","SyncProgress","SyncRequest","SyncRequestBuilder","SyncResult","Txid","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","builder","builder","chain_tip","chain_tip","chain_tip","chain_tip","chain_update","chain_update","clone","clone","clone_into","clone_into","cmp","consumed","default","default","default","default","default","default","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","inspect","inspect","into","into","into","into","into","into","into","into","iter_outpoints","iter_spks","iter_spks","iter_txids","keychains","last_active_indices","next_outpoint","next_spk","next_spk","next_txid","outpoints","outpoints_consumed","outpoints_remaining","partial_cmp","progress","remaining","revealed_spks_from_indexer","spks","spks_consumed","spks_for_keychain","spks_from_indexer","spks_remaining","spks_with_indexes","to_owned","to_owned","to_string","total","total_outpoints","total_spks","total_txids","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_update","tx_update","txids","txids_consumed","txids_remaining","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unused_spks_from_indexer","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","ANCHORS_TABLE_NAME","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","SCHEMA_NAME","TXOUTS_TABLE_NAME","TXS_TABLE_NAME","TxAncestors","TxDescendants","TxGraph","TxNode","TxUpdate","all_anchors","all_txouts","anchor_heights","anchors","anchors","anchors","apply_changeset","apply_update","apply_update_at","as_ref","balance","batch_insert_unconfirmed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_sqlite","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","init_sqlite_tables","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_fallible","into_fallible","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_canonical_txs","map_anchors","map_anchors","merge","new","next","next","outspends","partial_cmp","partial_cmp","persist_to_sqlite","seen_ats","serialize","to_owned","to_owned","to_owned","to_owned","to_string","transpose_into_fallible","transpose_into_fallible","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_list_canonical_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txouts","txs","txs","txs_with_no_anchor_or_last_seen","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","walk_ancestors","walk_conflicts","walk_descendants"],"q":[[0,"bdk_chain"],[381,"bdk_chain::ConfirmationTime"],[384,"bdk_chain::bitcoin"],[2777,"bdk_chain::bitcoin::address"],[3048,"bdk_chain::bitcoin::address::AddressData"],[3051,"bdk_chain::bitcoin::address::error"],[3073,"bdk_chain::bitcoin::amount"],[3134,"bdk_chain::bitcoin::amount::serde"],[3145,"bdk_chain::bitcoin::amount::serde::as_btc"],[3148,"bdk_chain::bitcoin::amount::serde::as_btc::opt"],[3150,"bdk_chain::bitcoin::amount::serde::as_sat"],[3153,"bdk_chain::bitcoin::amount::serde::as_sat::opt"],[3155,"bdk_chain::bitcoin::base58"],[3524,"bdk_chain::bitcoin::base58::error"],[3567,"bdk_chain::bitcoin::base64"],[3657,"bdk_chain::bitcoin::base64::alphabet"],[3701,"bdk_chain::bitcoin::base64::display"],[3713,"bdk_chain::bitcoin::base64::engine"],[3795,"bdk_chain::bitcoin::base64::engine::general_purpose"],[3803,"bdk_chain::bitcoin::base64::prelude"],[3818,"bdk_chain::bitcoin::base64::read"],[3831,"bdk_chain::bitcoin::base64::write"],[3863,"bdk_chain::bitcoin::bip152"],[4053,"bdk_chain::bitcoin::bip158"],[4167,"bdk_chain::bitcoin::bip32"],[4513,"bdk_chain::bitcoin::bip32::ChildNumber"],[4515,"bdk_chain::bitcoin::blockdata"],[4526,"bdk_chain::bitcoin::blockdata::block"],[4646,"bdk_chain::bitcoin::blockdata::constants"],[4712,"bdk_chain::bitcoin::blockdata::fee_rate"],[4713,"bdk_chain::bitcoin::blockdata::locktime"],[4715,"bdk_chain::bitcoin::blockdata::locktime::absolute"],[4901,"bdk_chain::bitcoin::blockdata::locktime::relative"],[5111,"bdk_chain::bitcoin::blockdata::opcodes"],[5162,"bdk_chain::bitcoin::blockdata::opcodes::all"],[5418,"bdk_chain::bitcoin::blockdata::script"],[5960,"bdk_chain::bitcoin::blockdata::script::witness_program"],[5985,"bdk_chain::bitcoin::blockdata::script::witness_version"],[6069,"bdk_chain::bitcoin::blockdata::transaction"],[6229,"bdk_chain::bitcoin::blockdata::weight"],[6231,"bdk_chain::bitcoin::blockdata::witness"],[6246,"bdk_chain::bitcoin::consensus"],[6335,"bdk_chain::bitcoin::consensus::encode"],[6428,"bdk_chain::bitcoin::consensus::encode::Error"],[6432,"bdk_chain::bitcoin::consensus::params"],[6450,"bdk_chain::bitcoin::consensus::serde"],[6485,"bdk_chain::bitcoin::consensus::serde::hex"],[6563,"bdk_chain::bitcoin::ecdsa"],[6650,"bdk_chain::bitcoin::error"],[6733,"bdk_chain::bitcoin::hash_types"],[6741,"bdk_chain::bitcoin::hashes"],[6782,"bdk_chain::bitcoin::hashes::cmp"],[6783,"bdk_chain::bitcoin::hashes::hash160"],[6828,"bdk_chain::bitcoin::hashes::hex"],[6992,"bdk_chain::bitcoin::hashes::hex::buf_encoder"],[7010,"bdk_chain::bitcoin::hashes::hex::display"],[7048,"bdk_chain::bitcoin::hashes::hex::error"],[7077,"bdk_chain::bitcoin::hashes::hex::parse"],[7086,"bdk_chain::bitcoin::hashes::hex::prelude"],[7097,"bdk_chain::bitcoin::hashes::hmac"],[7110,"bdk_chain::bitcoin::hashes::ripemd160"],[7181,"bdk_chain::bitcoin::hashes::serde"],[7268,"bdk_chain::bitcoin::hashes::serde::de"],[7452,"bdk_chain::bitcoin::hashes::serde::de::value"],[8747,"bdk_chain::bitcoin::hashes::serde::ser"],[8876,"bdk_chain::bitcoin::hashes::serde_macros"],[8877,"bdk_chain::bitcoin::hashes::serde_macros::serde_details"],[8882,"bdk_chain::bitcoin::hashes::sha1"],[8952,"bdk_chain::bitcoin::hashes::sha256"],[9066,"bdk_chain::bitcoin::hashes::sha256d"],[9119,"bdk_chain::bitcoin::hashes::sha256t"],[9166,"bdk_chain::bitcoin::hashes::sha384"],[9222,"bdk_chain::bitcoin::hashes::sha512"],[9292,"bdk_chain::bitcoin::hashes::sha512_256"],[9348,"bdk_chain::bitcoin::hashes::siphash24"],[9440,"bdk_chain::bitcoin::io"],[9586,"bdk_chain::bitcoin::key"],[9956,"bdk_chain::bitcoin::merkle_tree"],[10014,"bdk_chain::bitcoin::network"],[10061,"bdk_chain::bitcoin::network::as_core_arg"],[10063,"bdk_chain::bitcoin::p2p"],[10219,"bdk_chain::bitcoin::p2p::address"],[10274,"bdk_chain::bitcoin::p2p::message"],[10401,"bdk_chain::bitcoin::p2p::message::NetworkMessage"],[10403,"bdk_chain::bitcoin::p2p::message_blockdata"],[10479,"bdk_chain::bitcoin::p2p::message_blockdata::Inventory"],[10481,"bdk_chain::bitcoin::p2p::message_bloom"],[10545,"bdk_chain::bitcoin::p2p::message_compact_blocks"],[10638,"bdk_chain::bitcoin::p2p::message_filter"],[10770,"bdk_chain::bitcoin::p2p::message_network"],[10848,"bdk_chain::bitcoin::parse"],[10869,"bdk_chain::bitcoin::policy"],[10878,"bdk_chain::bitcoin::pow"],[10881,"bdk_chain::bitcoin::psbt"],[11259,"bdk_chain::bitcoin::psbt::Error"],[11264,"bdk_chain::bitcoin::psbt::ExtractTxError"],[11268,"bdk_chain::bitcoin::psbt::IndexOutOfBoundsError"],[11272,"bdk_chain::bitcoin::psbt::raw"],[11343,"bdk_chain::bitcoin::secp256k1"],[11697,"bdk_chain::bitcoin::secp256k1::constants"],[11713,"bdk_chain::bitcoin::secp256k1::ecdh"],[11744,"bdk_chain::bitcoin::secp256k1::ecdsa"],[11866,"bdk_chain::bitcoin::secp256k1::ecdsa::serialized_signature"],[11888,"bdk_chain::bitcoin::secp256k1::ellswift"],[11963,"bdk_chain::bitcoin::secp256k1::ffi"],[12209,"bdk_chain::bitcoin::secp256k1::ffi::recovery"],[12241,"bdk_chain::bitcoin::secp256k1::ffi::types"],[12271,"bdk_chain::bitcoin::secp256k1::hashes"],[12385,"bdk_chain::bitcoin::secp256k1::rand"],[12437,"bdk_chain::bitcoin::secp256k1::rand::distributions"],[12712,"bdk_chain::bitcoin::secp256k1::rand::distributions::uniform"],[12855,"bdk_chain::bitcoin::secp256k1::rand::distributions::weighted"],[12862,"bdk_chain::bitcoin::secp256k1::rand::distributions::weighted::alias_method"],[12874,"bdk_chain::bitcoin::secp256k1::rand::prelude"],[12918,"bdk_chain::bitcoin::secp256k1::rand::rngs"],[12981,"bdk_chain::bitcoin::secp256k1::rand::rngs::adapter"],[13029,"bdk_chain::bitcoin::secp256k1::rand::rngs::mock"],[13050,"bdk_chain::bitcoin::secp256k1::rand::seq"],[13082,"bdk_chain::bitcoin::secp256k1::rand::seq::index"],[13139,"bdk_chain::bitcoin::secp256k1::scalar"],[13159,"bdk_chain::bitcoin::secp256k1::schnorr"],[13190,"bdk_chain::bitcoin::sighash"],[13539,"bdk_chain::bitcoin::sign_message"],[13594,"bdk_chain::bitcoin::taproot"],[14233,"bdk_chain::bitcoin::taproot::merkle_branch"],[14259,"bdk_chain::bitcoin::taproot::serialized_signature"],[14314,"bdk_chain::indexed_tx_graph"],[14365,"bdk_chain::indexer"],[14374,"bdk_chain::indexer::keychain_txout"],[14478,"bdk_chain::indexer::keychain_txout::InsertDescriptorError"],[14482,"bdk_chain::indexer::spk_txout"],[14519,"bdk_chain::local_chain"],[14651,"bdk_chain::rusqlite_impl"],[14653,"bdk_chain::spk_client"],[14799,"bdk_chain::tx_graph"],[14984,"bdk_chain::balance"],[14985,"bdk_chain::descriptor_ext"],[14986,"bdk_chain::tx_data_traits"],[14987,"bdk_core::block_id"],[14988,"bitcoin_hashes::sha256"],[14989,"bdk_core::checkpoint"],[14990,"bdk_core::tx_update"],[14991,"core::clone"],[14992,"bdk_chain::chain_data"],[14993,"bdk_chain::spk_iter"],[14994,"core::cmp"],[14995,"rusqlite::types::value_ref"],[14996,"rusqlite::types::from_sql"],[14997,"bitcoin::blockdata::transaction"],[14998,"bitcoin::blockdata::script::owned"],[14999,"bitcoin_units::amount"],[15000,"miniscript::descriptor::key"],[15001,"miniscript::descriptor"],[15002,"bitcoin::network"],[15003,"bitcoin::blockdata::block"],[15004,"serde::de"],[15005,"core::option"],[15006,"core::borrow"],[15007,"core::result"],[15008,"core::iter::traits::collect"],[15009,"core::fmt"],[15010,"bitcoin_hashes"],[15011,"bdk_chain::chain_oracle"],[15012,"core::hash"],[15013,"core::slice::index"],[15014,"fallible_iterator"],[15015,"core::iter::traits::iterator"],[15016,"bdk_core::merge"],[15017,"core::ops::function"],[15018,"core::ops::range"],[15019,"serde::ser"],[15020,"rusqlite::types::to_sql"],[15021,"rusqlite"],[15022,"alloc::string"],[15023,"core::any"],[15024,"bitcoin_units::weight"],[15025,"bitcoin::pow"],[15026,"secp256k1::key"],[15027,"secp256k1"],[15028,"secp256k1::scalar"],[15029,"secp256k1::context"],[15030,"bitcoin::address"],[15031,"bitcoin::bip158"],[15032,"bitcoin::bip32"],[15033,"bitcoin::blockdata::script"],[15034,"bitcoin::crypto::key"],[15035,"bitcoin::crypto::sighash"],[15036,"bitcoin::taproot"],[15037,"bitcoin::blockdata::script::borrowed"],[15038,"secp256k1_sys"],[15039,"bitcoin_hashes::sha256d"],[15040,"bitcoin_hashes::hash160"],[15041,"bitcoin_hashes::sha256t"],[15042,"bitcoin::blockdata::script::push_bytes::primitive"],[15043,"bitcoin::consensus::params"],[15044,"bitcoin::blockdata::script::builder"],[15045,"bitcoin::blockdata::constants"],[15046,"bitcoin::blockdata::locktime::absolute"],[15047,"bitcoin::blockdata::locktime::relative"],[15048,"bitcoin_units::fee_rate"],[15049,"bitcoin::blockdata::opcodes"],[15050,"bitcoin::blockdata::witness"],[15051,"bitcoin::blockdata::script::witness_program"],[15052,"bitcoin::blockdata::script::witness_version"],[15053,"bitcoin::consensus::encode"],[15054,"bitcoin::merkle_tree::block"],[15055,"bitcoin::psbt"],[15056,"bitcoin::psbt::error"],[15057,"bitcoin_io"],[15058,"core::marker"],[15059,"bitcoin_io::error"],[15060,"bitcoin_units::amount::serde::private"],[15061,"core::convert"],[15062,"bitcoin::blockdata::script::instruction"],[15063,"miniscript::psbt"],[15064,"alloc::vec"],[15065,"alloc::borrow"],[15066,"miniscript::primitives::relative_locktime"],[15067,"hex_conservative::error"],[15068,"bitcoin::error"],[15069,"bitcoin::p2p"],[15070,"bitcoin::address::error"],[15071,"bitcoin_units::locktime::relative"],[15072,"miniscript::miniscript::decode"],[15073,"alloc::boxed"],[15074,"bitcoin_units::locktime::absolute"],[15075,"bitcoin::crypto::taproot"],[15076,"bitcoin::crypto::ecdsa"],[15077,"alloc::collections::btree::map"],[15078,"bech32::primitives::gf32"],[15079,"miniscript::miniscript::hash256"],[15080,"bitcoin_hashes::ripemd160"],[15081,"secp256k1::schnorr"],[15082,"base58ck::error"],[15083,"bech32::segwit"],[15084,"bitcoin_units::amount::serde"],[15085,"core::alloc"],[15086,"std::path"],[15087,"std::ffi::os_str"],[15088,"bitcoin::bip152"],[15089,"bitcoin::p2p::message_blockdata"],[15090,"bitcoin::p2p::address"],[15091,"alloc::vec::drain"],[15092,"serde_json::value"],[15093,"alloc::vec::extract_if"],[15094,"std::io::error"],[15095,"bitcoin::taproot::merkle_branch"],[15096,"alloc::collections::vec_deque"],[15097,"alloc::collections::binary_heap"],[15098,"alloc::ffi::c_str"],[15099,"miniscript::plan"],[15100,"serde::de::value"],[15101,"core::str::pattern"],[15102,"core::mem::maybe_uninit"],[15103,"alloc::vec::splice"],[15104,"core::net::socket_addr"],[15105,"alloc::vec::into_iter"],[15106,"rusqlite::error"],[15107,"alloc::collections"],[15108,"std::io"],[15109,"base64::encode"],[15110,"base64::decode"],[15111,"base64::engine"],[15112,"base64::alphabet"],[15113,"base64::display"],[15114,"base64::engine::general_purpose"],[15115,"base64::read::decoder"],[15116,"base64::write::encoder_string_writer"],[15117,"base64::write::encoder"],[15118,"miniscript::primitives::absolute_locktime"],[15119,"bitcoin::blockdata::script::push_bytes::error"],[15120,"bitcoin::blockdata::script::push_bytes"],[15121,"bitcoin_units::parse"],[15122,"bitcoin::consensus"],[15123,"bitcoin::consensus::serde"],[15124,"bitcoin::consensus::serde::hex"],[15125,"core::slice::iter"],[15126,"secp256k1::ecdsa"],[15127,"hex_conservative::parse"],[15128,"hex_conservative::display"],[15129,"hex_conservative"],[15130,"hex_conservative::iter"],[15131,"core::iter::traits::exact_size"],[15132,"core::iter::traits::double_ended"],[15133,"core::iter::traits::marker"],[15134,"hex_conservative::buf_encoder"],[15135,"serde::de::ignored_any"],[15136,"core::error"],[15137,"serde::ser::impossible"],[15138,"bitcoin_hashes::serde_macros::serde_details"],[15139,"bitcoin_hashes::sha1"],[15140,"bitcoin_hashes::sha384"],[15141,"bitcoin_hashes::sha512"],[15142,"bitcoin_hashes::sha512_256"],[15143,"bitcoin_hashes::siphash24"],[15144,"core::ptr::non_null"],[15145,"secp256k1::context::alloc_only"],[15146,"secp256k1::secret"],[15147,"core::mem::manually_drop"],[15148,"rand::rng"],[15149,"secp256k1_sys::types"],[15150,"secp256k1::ecdsa::recovery"],[15151,"rand_core"],[15152,"bitcoin::p2p::message"],[15153,"bitcoin::p2p::message_bloom"],[15154,"bitcoin::p2p::message_compact_blocks"],[15155,"bitcoin::p2p::message_filter"],[15156,"bitcoin::p2p::message_network"],[15157,"core::num::error"],[15158,"bitcoin::psbt::map::output"],[15159,"bitcoin::psbt::map::input"],[15160,"bitcoin::psbt::display_from_str"],[15161,"bitcoin::psbt::raw"],[15162,"secp256k1::ellswift"],[15163,"secp256k1::ecdh"],[15164,"secp256k1_sys::recovery"],[15165,"secp256k1::ecdsa::serialized_signature"],[15166,"secp256k1::ecdsa::serialized_signature::into_iter"],[15167,"core::ffi"],[15168,"bitcoin_hashes::hmac"],[15169,"core::str::traits"],[15170,"rand_core::error"],[15171,"core::num::nonzero"],[15172,"getrandom::error"],[15173,"core::default"],[15174,"rand::distributions::uniform"],[15175,"rand::distributions::distribution"],[15176,"rand::rngs::thread"],[15177,"rand::distributions::other"],[15178,"rand::distributions"],[15179,"rand::distributions::bernoulli"],[15180,"rand::distributions::float"],[15181,"rand::distributions::slice"],[15182,"rand::distributions::weighted_index"],[15183,"core::ops::arith"],[15184,"core::num::wrapping"],[15185,"core::time"],[15186,"rand::distributions::weighted::alias_method"],[15187,"rand::seq"],[15188,"rand_core::os"],[15189,"rand::rngs::std"],[15190,"rand::rngs::adapter::reseeding"],[15191,"rand_core::block"],[15192,"rand::rngs::adapter::read"],[15193,"rand::rngs::mock"],[15194,"core::ops::index"],[15195,"rand::seq::index"],[15196,"bitcoin::sign_message::message_signing"],[15197,"alloc::collections::btree::set"],[15198,"bitcoin::taproot::serialized_signature"],[15199,"bitcoin::taproot::serialized_signature::into_iter"],[15200,"alloc::sync"],[15201,"rusqlite::transaction"],[15202,"bdk_core"],[15203,"bdk_core::spk_client"],[15204,"std::collections::hash::set"],[15205,"bitcoin"],[15206,"bitcoin::crypto"],[15207,"bitcoin_units::amount::serde::as_btc"],[15208,"bitcoin_units::amount::serde::as_btc::opt"],[15209,"bitcoin_units::amount::serde::as_sat"],[15210,"bitcoin_units::amount::serde::as_sat::opt"],[15211,"base58ck"],[15212,"base64"],[15213,"bitcoin::blockdata"],[15214,"bitcoin::blockdata::locktime"],[15215,"bitcoin::blockdata::opcodes::all"],[15216,"bitcoin_hashes::cmp"],[15217,"serde_derive"],[15218,"serde"],[15219,"bitcoin_hashes::serde_macros"],[15220,"bitcoin::merkle_tree"],[15221,"bitcoin::network::as_core_arg"],[15222,"bitcoin::policy"],[15223,"secp256k1::constants"],[15224,"rand"],[15225,"rand::distributions::weighted"],[15226,"rand::rngs"],[15227,"bitcoin::sign_message"]],"i":[0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,58,0,0,0,0,0,0,0,0,0,0,0,15,16,1,2,3,5,6,13,2,2,2,2,0,0,18,11,6,18,65,5,6,11,13,24,34,1,15,16,17,18,2,2,19,65,5,6,11,13,24,34,1,15,16,17,18,2,19,17,5,6,11,13,1,15,16,17,18,2,19,5,6,11,13,1,15,16,17,18,2,19,15,5,6,15,16,17,2,24,24,24,24,24,24,24,24,34,6,3,3,15,6,1,5,6,13,1,24,34,19,39,5,6,1,16,2,39,2,5,6,11,1,15,16,17,18,2,11,5,5,6,6,1,1,15,15,16,16,17,17,18,18,2,2,11,13,5,6,11,13,1,1,15,16,17,18,2,2,2,2,65,5,5,5,5,6,6,11,13,13,24,24,24,34,34,34,1,15,16,16,17,18,2,2,19,11,2,2,11,2,2,2,2,11,58,5,6,11,15,16,2,5,11,5,1,2,0,0,11,65,5,6,11,13,24,34,1,15,16,17,18,2,19,65,19,24,34,65,11,19,58,15,16,17,64,17,17,11,0,0,13,64,0,11,19,19,65,19,19,17,5,6,15,16,17,2,11,11,11,0,0,13,0,5,6,1,16,2,17,0,0,64,2,5,6,11,13,1,15,16,17,18,2,19,2,24,24,24,24,24,24,24,24,34,1,2,1,65,19,1,1,65,5,6,11,13,24,34,1,15,16,17,18,2,19,65,5,6,11,13,24,34,1,15,16,17,18,2,19,0,18,17,13,13,65,5,6,11,13,24,34,1,15,16,17,18,2,19,16,1,65,5,6,11,13,24,34,1,15,16,17,18,2,19,708,709,708,0,0,144,145,144,145,0,129,134,134,134,31,0,0,134,0,0,150,129,144,0,127,127,0,0,0,0,0,0,28,78,129,79,127,148,148,148,148,148,79,28,78,26,28,78,129,79,79,147,135,0,134,134,134,139,134,0,0,144,145,144,145,28,78,28,78,0,0,88,88,88,88,88,134,0,0,0,0,135,31,134,28,134,0,0,0,0,0,0,31,144,145,144,145,0,0,0,0,0,0,0,0,0,0,147,31,135,0,0,0,0,0,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,79,0,0,0,0,0,0,0,0,0,0,0,0,28,78,129,79,127,148,78,28,78,79,80,28,78,79,81,0,87,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,0,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,106,81,106,106,27,27,106,81,81,27,81,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,89,89,90,90,91,91,33,33,92,92,93,93,94,94,106,106,27,27,95,95,95,96,96,96,32,32,97,97,98,98,98,99,99,99,100,100,101,101,102,102,31,103,103,104,104,105,105,27,87,87,87,104,119,26,0,0,0,120,120,0,134,28,78,129,81,79,88,135,87,89,89,90,90,91,91,33,33,92,92,93,93,94,94,120,130,106,27,27,136,137,95,95,96,96,32,32,97,97,138,119,127,139,26,133,140,141,98,98,99,99,142,143,100,100,101,101,110,102,102,144,145,146,147,31,80,148,149,150,112,103,103,113,104,104,114,105,105,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,106,27,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,106,27,106,31,127,120,127,127,120,78,28,78,79,28,78,129,79,28,78,129,79,129,28,78,28,78,79,130,133,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,106,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,100,101,110,102,144,147,31,80,148,149,112,103,113,104,114,105,81,120,150,141,143,120,26,26,120,26,0,28,89,90,33,92,93,120,32,97,138,127,139,133,140,146,149,103,120,27,119,139,26,28,89,90,33,92,93,120,106,27,32,97,138,119,127,139,26,133,140,146,149,103,106,106,81,28,78,27,138,119,127,133,110,149,112,113,114,27,27,28,78,28,78,28,129,81,79,87,89,90,91,33,92,93,94,120,106,27,95,96,32,97,138,119,127,139,26,133,141,98,99,142,143,100,101,102,144,145,31,80,148,149,150,150,103,104,105,150,148,148,28,78,28,78,28,28,78,79,79,28,78,79,106,0,127,119,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,110,102,112,103,113,104,114,105,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,106,106,27,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,81,134,134,28,28,78,78,129,129,81,81,79,79,88,88,135,135,87,87,89,89,90,90,91,91,33,33,92,92,93,93,94,94,120,120,130,130,106,106,27,27,136,136,137,137,95,95,96,96,32,32,97,97,138,138,119,119,127,127,139,139,26,26,133,133,140,140,141,141,98,98,99,99,142,142,143,143,100,100,101,101,110,110,102,102,144,144,145,145,146,146,147,147,31,31,80,80,148,148,149,149,150,150,112,112,103,103,113,113,104,104,114,114,105,105,0,27,150,146,150,150,150,150,150,129,129,89,150,150,150,150,150,150,150,150,106,134,134,28,28,78,78,129,129,81,81,81,79,79,88,88,135,87,87,89,89,89,89,90,90,90,90,91,91,91,91,33,33,33,33,92,92,92,92,93,93,93,93,94,94,94,94,120,130,130,106,106,106,106,27,27,27,27,136,137,137,95,95,95,95,96,96,96,96,32,32,32,32,97,97,97,97,138,138,119,127,127,127,127,139,26,133,140,141,141,98,98,98,98,99,99,99,99,142,142,143,143,100,100,100,100,101,101,101,101,102,102,102,102,144,144,145,145,146,147,31,31,80,80,80,80,148,148,148,148,149,149,149,150,150,103,103,103,103,104,104,104,104,105,105,105,105,106,28,78,143,134,28,78,129,81,81,81,81,81,81,79,88,135,135,87,89,89,90,90,91,91,91,91,33,33,33,33,33,33,92,92,92,93,93,93,94,94,120,130,130,130,27,27,27,27,27,136,137,95,95,95,95,95,96,96,96,96,96,32,32,32,32,97,97,97,97,138,119,127,127,127,139,26,133,133,133,133,133,140,140,140,140,140,140,141,141,141,98,98,98,98,98,98,99,99,99,99,142,143,100,100,101,101,110,102,102,144,144,145,146,147,147,31,80,148,148,149,150,112,103,103,103,113,104,104,104,104,104,114,105,105,105,105,127,80,148,146,28,78,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,106,27,106,31,148,127,145,149,144,31,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,28,78,146,127,27,127,80,148,149,28,27,105,81,79,80,148,31,104,79,141,142,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,28,78,129,129,129,87,103,104,127,127,81,81,89,90,91,33,92,93,94,95,96,32,97,133,141,141,98,99,142,143,100,101,102,103,104,105,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,145,134,28,78,129,81,79,88,87,89,90,91,33,92,93,94,137,95,96,32,97,138,127,141,98,99,142,143,100,101,102,144,145,31,150,103,104,105,28,78,28,78,127,80,148,149,150,79,79,79,143,79,87,79,79,143,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,106,27,136,137,95,96,32,97,138,119,127,139,26,133,141,98,99,142,100,101,110,102,144,145,147,31,80,148,149,150,112,103,113,104,114,105,0,120,146,89,90,91,33,92,93,94,106,106,106,106,106,106,106,95,96,32,97,133,98,99,143,100,101,102,103,104,105,141,143,26,150,106,106,106,106,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,27,27,133,106,26,26,106,133,26,127,127,26,147,148,106,78,138,106,106,106,106,106,136,106,136,106,136,78,106,106,127,87,87,127,87,127,141,87,106,81,133,150,0,133,119,106,133,26,80,31,87,148,148,148,0,148,148,106,139,106,139,28,78,129,79,79,28,78,79,78,0,143,106,27,136,138,133,141,143,27,27,27,27,27,27,27,27,141,143,27,133,26,138,26,150,0,106,87,87,87,87,87,87,136,133,87,136,87,136,133,106,27,141,142,87,136,31,0,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,106,106,27,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,100,101,110,102,144,147,31,80,148,149,112,103,113,104,114,105,0,78,0,119,136,150,127,127,127,127,127,127,127,127,127,127,127,127,0,87,141,142,81,143,133,133,27,27,27,27,141,142,28,78,28,78,87,27,27,79,27,87,106,87,139,26,119,133,119,119,28,78,28,78,28,78,28,78,28,129,81,81,79,87,89,90,91,33,92,93,94,120,130,106,27,95,96,32,97,138,119,127,139,26,133,141,98,99,142,143,100,101,102,144,145,31,80,148,149,150,150,103,104,105,150,150,0,150,150,150,0,78,139,133,140,150,28,78,79,80,28,78,79,28,78,79,79,81,0,133,106,87,106,80,148,28,78,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,106,141,142,143,148,149,127,31,137,28,78,81,141,81,141,106,79,80,148,137,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,106,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,106,106,106,81,141,87,89,90,91,33,92,93,94,95,96,32,97,98,99,100,101,102,103,104,105,127,81,141,28,78,129,129,129,105,81,141,28,141,134,28,78,129,81,79,88,87,89,90,91,33,92,93,94,130,106,27,137,95,96,32,97,138,127,141,98,99,142,143,100,101,102,144,145,31,80,148,150,103,104,105,28,78,28,78,80,145,130,78,79,79,133,143,148,79,81,26,120,119,26,134,28,28,78,78,129,129,129,129,81,79,79,79,79,88,135,87,89,90,91,33,92,93,94,120,130,27,136,137,137,137,137,137,95,96,32,97,138,119,127,127,127,127,139,26,133,140,141,98,99,142,142,143,100,101,110,102,144,145,146,147,31,31,31,80,148,149,150,112,103,113,104,114,105,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,81,26,26,120,26,138,146,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,106,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,28,78,28,78,28,78,150,78,150,150,150,139,81,141,142,136,26,150,138,26,134,28,78,129,81,79,88,135,87,89,90,91,33,92,93,94,120,130,27,136,137,95,96,32,97,138,119,127,139,26,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,31,80,148,149,150,112,103,113,104,114,105,120,139,26,27,119,87,120,106,141,142,141,142,106,26,150,0,0,0,195,195,215,0,118,195,0,195,0,0,195,0,135,0,0,0,195,0,88,228,88,228,0,88,88,88,0,135,228,135,0,195,0,188,188,195,188,195,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,188,215,215,240,240,195,195,241,241,242,242,243,243,244,244,245,245,246,246,117,117,228,228,0,188,188,215,215,240,240,195,195,241,241,242,242,243,243,244,244,245,245,246,117,228,188,188,188,188,215,215,240,195,195,195,195,195,195,195,195,195,195,195,241,242,243,244,245,246,117,228,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,243,245,244,246,117,228,188,215,240,195,241,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,710,711,712,195,195,215,0,195,0,195,0,195,0,195,0,0,0,0,195,0,188,188,195,188,195,0,134,134,134,0,0,0,179,179,134,134,134,179,134,179,0,134,134,0,179,179,162,179,162,252,179,162,179,162,179,179,179,179,179,162,162,179,179,179,179,179,179,179,162,179,162,0,162,179,179,162,179,162,179,162,179,162,179,162,179,162,0,0,0,0,257,257,257,258,257,258,258,0,0,0,0,0,0,0,0,0,0,249,0,249,0,0,249,0,75,75,166,166,75,166,166,166,75,166,166,75,75,166,166,166,75,75,75,75,166,75,249,262,166,166,75,75,249,262,166,166,75,75,166,75,166,75,249,262,166,75,166,75,249,262,166,75,166,75,166,75,75,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,75,75,0,0,166,166,166,166,75,166,75,166,75,166,75,166,75,166,166,166,166,166,166,166,166,166,166,166,0,0,0,249,262,166,166,166,166,166,166,75,75,75,75,75,249,249,262,262,166,166,75,75,0,166,166,75,75,75,75,75,75,166,166,75,166,166,75,75,75,75,75,166,166,75,75,166,166,166,249,249,262,262,166,75,75,249,249,249,249,249,262,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,75,75,75,75,75,75,75,166,166,75,75,75,75,75,75,166,75,166,75,75,75,75,75,75,75,75,75,75,166,75,166,166,75,166,75,166,75,75,249,262,166,75,166,166,75,75,166,75,166,75,166,166,166,166,166,75,166,75,262,75,166,166,75,75,75,166,166,75,166,75,166,166,166,166,166,166,166,75,75,75,166,75,166,166,75,166,75,166,166,75,75,166,166,75,75,75,166,75,166,75,166,166,166,75,166,166,75,166,166,75,166,75,249,166,166,166,166,75,75,75,166,249,262,166,75,75,166,75,249,262,75,166,75,249,262,166,75,249,262,166,75,166,75,166,75,166,75,166,249,262,166,75,249,262,166,75,166,75,166,166,166,166,75,75,166,249,0,249,0,0,249,0,281,280,281,280,281,280,281,280,281,280,281,281,280,280,281,281,280,280,281,280,281,281,280,280,281,280,281,280,281,280,281,280,281,280,281,280,310,0,307,310,0,0,0,306,306,306,306,305,307,0,305,306,307,305,306,307,305,306,307,305,306,307,310,0,310,0,0,0,310,310,310,0,0,0,310,0,0,0,310,310,0,0,305,306,307,305,305,306,306,307,307,305,305,306,306,307,307,305,306,307,307,305,306,307,0,0,307,305,306,307,305,306,307,305,306,307,305,306,307,305,306,307,305,306,307,0,0,0,0,0,314,0,314,0,314,0,0,314,313,313,314,313,314,313,313,313,314,313,313,314,314,313,314,314,313,314,313,314,313,313,314,313,313,314,313,314,313,314,313,314,0,315,315,315,315,315,315,315,315,315,315,315,0,310,0,310,0,0,0,0,0,318,318,318,316,317,318,319,316,317,318,319,316,317,318,316,317,318,310,316,310,310,310,310,312,317,310,311,317,310,310,318,319,318,318,319,319,316,317,318,319,316,317,318,319,0,316,317,318,319,316,317,316,317,318,316,317,318,319,316,317,318,319,316,317,318,319,316,317,318,319,317,317,317,0,0,0,0,0,0,0,0,0,0,0,0,310,310,0,310,310,310,310,310,310,310,310,0,320,320,320,320,320,320,320,320,320,320,320,320,0,0,0,323,325,323,325,322,323,323,323,325,323,323,325,325,323,325,323,325,323,325,323,325,323,325,323,325,323,325,323,325,0,0,0,0,326,0,0,0,326,264,264,264,264,264,268,264,264,328,330,326,268,264,264,264,327,328,329,330,326,268,264,264,264,327,328,329,330,264,326,268,264,327,328,329,330,326,268,264,327,328,329,330,268,264,327,328,330,268,264,327,328,330,327,330,268,264,327,328,330,264,264,326,268,264,327,328,329,330,326,326,268,268,264,264,327,327,328,328,329,329,330,330,326,326,268,264,264,264,264,327,328,329,329,330,326,326,268,264,264,264,327,328,329,330,327,264,330,264,268,264,327,328,330,327,268,264,328,326,268,264,327,328,329,330,264,264,327,268,264,327,328,330,327,264,327,326,329,264,326,268,264,327,328,329,330,326,264,329,330,326,268,264,264,327,328,329,330,326,268,264,327,328,329,330,268,326,268,264,327,328,329,330,326,268,264,327,328,329,330,264,0,0,0,0,0,0,0,0,0,0,334,334,332,333,332,332,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,335,335,335,335,335,335,335,332,333,336,334,334,335,332,337,338,333,339,336,334,334,334,335,332,337,338,333,339,336,334,335,337,338,335,337,338,335,332,337,338,333,339,336,335,335,339,334,335,334,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,336,292,292,0,0,0,0,0,0,0,0,0,0,288,292,0,292,0,292,292,292,292,0,288,292,292,292,0,0,0,340,341,340,340,341,341,340,341,340,341,340,340,341,341,288,287,342,340,340,340,341,341,341,343,171,288,287,292,344,342,340,340,340,341,341,341,343,171,288,287,292,344,343,171,713,714,715,716,343,171,287,713,714,715,716,343,171,287,171,171,340,341,343,171,288,287,292,344,340,341,343,171,288,287,292,344,340,341,171,288,287,343,171,341,287,713,714,715,716,343,171,343,171,340,341,343,171,288,287,343,171,340,341,343,171,288,287,292,344,340,340,341,341,343,343,171,171,288,288,287,287,292,292,344,344,287,343,171,340,340,340,340,341,341,341,341,343,343,171,171,288,288,287,287,292,292,344,344,342,340,340,340,341,341,341,343,171,288,288,287,287,287,292,292,292,292,292,344,288,340,341,287,288,171,340,341,343,171,288,287,343,287,340,341,171,288,287,343,171,288,340,341,287,342,340,341,343,171,288,287,292,344,287,346,287,342,342,287,344,340,341,287,288,287,288,340,341,287,287,713,714,715,716,343,171,343,342,287,713,714,715,716,343,171,340,341,171,288,287,715,716,343,713,714,171,340,341,343,171,288,287,292,342,340,341,343,340,341,343,171,288,287,292,344,343,171,340,341,343,171,288,287,292,344,287,171,342,342,340,340,341,341,343,171,288,287,292,344,342,340,341,343,171,288,287,292,344,342,340,341,343,171,288,287,292,344,342,340,341,343,171,288,287,292,344,343,171,717,718,0,0,0,0,0,0,0,0,0,0,0,348,348,0,0,0,0,347,121,121,347,54,347,0,121,121,0,0,0,0,54,54,54,347,121,348,54,347,121,348,54,347,121,348,54,347,121,348,54,347,54,347,54,54,347,347,54,347,54,54,54,347,121,348,54,54,347,347,121,121,348,348,54,347,121,121,348,348,54,347,121,121,348,348,347,54,347,120,54,347,121,348,347,54,54,54,347,54,54,347,121,348,54,54,347,54,347,121,348,121,348,54,347,121,348,54,347,121,348,120,54,347,121,348,54,54,54,347,121,348,54,124,0,0,0,0,0,0,0,0,0,124,0,0,124,0,0,124,0,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,0,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,0,0,0,125,0,0,0,0,210,211,210,211,0,0,125,125,0,210,125,210,349,211,350,351,125,210,349,211,350,351,125,125,125,125,210,349,211,350,351,125,210,349,211,350,351,125,210,211,125,125,210,211,125,210,349,211,350,351,125,210,210,349,349,211,211,350,350,351,351,125,125,210,210,349,349,211,211,350,350,351,351,125,125,210,349,349,211,350,350,351,125,125,125,125,210,211,125,125,210,211,125,210,211,125,125,125,210,211,125,210,349,211,350,351,125,125,125,125,125,125,210,211,125,125,125,125,125,125,125,125,125,125,125,125,125,210,211,125,349,350,351,210,211,125,210,349,211,350,351,125,210,349,211,350,351,125,210,210,210,210,349,211,211,211,211,350,351,125,125,125,125,210,349,211,350,351,125,210,349,211,350,351,125,210,349,211,350,351,125,126,0,0,0,0,0,354,355,354,355,126,0,126,0,354,355,126,354,355,190,126,356,357,358,354,355,190,126,356,357,358,126,126,126,354,355,190,126,356,357,358,354,355,190,126,356,357,358,354,355,354,355,354,355,126,356,354,355,190,126,356,357,358,354,354,355,355,190,190,126,126,356,356,357,357,358,358,354,354,355,355,190,190,126,126,356,356,357,357,358,358,354,354,355,190,126,126,126,126,356,357,358,355,126,126,354,126,355,126,355,126,126,354,355,354,355,126,357,358,354,355,190,126,356,357,358,126,126,126,126,126,126,126,126,190,354,355,126,126,126,126,126,126,126,126,126,126,126,126,126,354,355,126,357,358,354,355,126,354,355,190,126,356,357,358,126,354,355,190,126,356,357,358,354,354,354,354,355,355,355,355,190,126,126,356,357,358,354,355,190,126,356,357,358,354,355,190,126,356,357,358,354,355,354,355,190,126,356,357,358,0,0,132,131,132,0,0,0,0,0,0,132,132,132,132,132,131,0,131,132,131,132,131,132,131,132,131,131,132,131,131,132,132,131,132,131,132,131,131,132,131,131,132,131,132,131,132,131,132,131,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,0,0,0,0,360,360,164,0,164,0,0,0,0,0,0,360,360,0,122,115,115,115,284,115,284,284,115,115,284,122,208,207,123,122,164,208,207,115,284,284,359,360,123,122,164,208,207,115,284,284,359,360,284,284,122,164,208,207,284,359,360,122,164,208,207,284,359,360,115,284,122,284,284,284,115,122,164,115,284,359,360,122,122,164,164,115,115,284,284,359,359,360,360,284,122,122,164,208,207,115,284,359,359,360,360,123,122,122,164,208,207,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,359,360,360,360,115,284,115,115,115,115,115,115,115,115,362,359,123,122,164,208,207,284,359,360,122,123,208,207,123,208,207,122,122,115,284,122,115,284,122,284,123,208,207,123,123,207,123,164,115,284,284,284,164,122,122,122,122,122,122,122,122,0,0,0,284,284,164,123,208,207,359,360,122,164,208,207,115,284,359,360,122,359,360,123,208,207,284,123,122,164,208,207,115,115,284,284,359,360,123,122,164,208,207,284,359,360,123,122,164,208,207,115,284,359,360,123,122,164,208,207,284,359,360,284,0,0,0,0,213,213,0,0,0,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,364,0,363,364,0,0,363,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,363,364,247,363,364,247,363,364,247,363,364,247,363,364,247,363,363,364,364,247,247,363,363,364,364,247,247,363,363,363,363,364,364,364,247,363,364,247,247,363,364,363,364,247,363,364,247,363,364,247,363,364,247,363,364,247,363,364,247,366,0,0,0,368,0,0,369,369,369,369,369,0,0,368,366,0,0,0,0,366,0,366,366,0,366,234,235,367,368,369,366,234,235,367,368,369,366,234,235,367,368,369,366,234,235,367,368,369,368,368,368,368,0,366,234,235,367,368,366,366,234,234,235,235,367,367,368,368,366,366,234,234,235,235,367,367,368,368,369,366,366,234,234,235,235,367,368,369,369,369,369,368,367,26,366,234,235,367,368,369,368,367,26,369,368,26,368,0,0,119,139,119,119,368,366,234,235,367,366,234,235,367,368,369,366,234,235,367,368,366,234,235,367,368,369,366,234,235,367,368,369,138,366,234,235,367,368,369,139,26,138,366,234,235,367,368,369,369,119,0,0,0,0,212,212,212,212,212,212,212,212,212,212,212,212,212,116,373,0,0,0,116,373,0,116,0,116,116,373,0,116,116,116,116,116,116,116,373,116,373,116,116,370,370,371,0,0,116,372,372,372,372,372,372,372,372,372,372,0,116,373,373,116,116,116,116,116,373,373,116,373,373,116,116,116,116,116,0,116,116,116,375,375,375,375,375,375,375,375,375,375,116,0,0,373,116,373,116,373,116,373,116,373,116,373,0,0,377,0,0,0,152,152,0,152,377,152,152,0,152,0,0,152,377,376,152,377,376,376,376,376,370,370,376,371,376,376,0,0,0,372,372,372,372,372,372,372,372,372,372,376,376,376,152,152,377,377,376,152,152,152,377,377,376,152,377,376,376,376,375,375,375,375,375,375,375,375,375,375,0,0,152,377,376,152,377,152,377,376,152,377,376,152,377,376,152,377,376,719,719,720,720,0,0,0,0,0,116,116,116,116,116,116,116,116,116,116,116,116,116,0,0,721,721,0,722,0,721,0,0,379,723,379,723,379,723,381,381,379,723,721,379,0,379,723,374,723,379,723,379,723,379,723,379,723,0,0,0,0,0,0,0,724,725,384,385,382,383,724,725,384,385,382,383,382,383,382,383,384,382,383,382,382,383,383,384,382,383,724,725,384,384,385,382,383,724,725,384,385,382,383,382,383,385,385,385,382,383,385,724,725,384,385,382,383,724,725,384,385,382,383,724,725,384,385,382,383,724,725,384,385,382,383,387,0,387,387,0,387,0,386,386,386,217,386,386,387,217,386,386,387,217,386,387,217,386,387,386,386,217,217,386,387,217,217,386,386,387,387,217,217,386,386,386,386,387,387,217,386,387,387,387,387,387,217,217,217,386,217,386,387,386,386,217,217,217,217,217,217,387,217,386,387,217,386,387,217,217,386,387,217,386,387,217,386,387,217,386,387,386,199,0,183,0,183,199,0,0,0,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,183,199,199,390,390,391,391,183,183,199,199,390,390,391,391,183,183,183,199,199,199,390,391,183,199,390,391,183,199,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,0,0,0,0,0,0,0,0,395,394,394,394,0,0,0,0,0,394,395,394,394,0,0,394,394,394,394,394,0,394,0,0,0,395,395,395,0,0,0,0,0,0,0,0,0,0,0,0,394,0,0,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,0,0,399,0,396,0,0,0,0,0,182,331,0,331,400,182,0,400,399,399,406,407,182,404,378,331,400,406,407,182,404,378,331,400,0,182,404,378,331,400,182,404,378,331,400,400,0,182,404,378,331,400,182,182,404,404,378,378,331,331,400,400,0,182,182,404,404,378,378,331,331,400,0,406,407,182,182,182,404,378,331,331,331,400,396,406,400,399,0,406,407,182,404,378,331,400,406,407,406,407,404,407,378,406,407,406,407,406,407,406,406,0,0,406,406,407,182,404,378,331,0,399,399,182,404,378,331,400,182,404,378,331,399,406,407,406,407,182,404,378,331,400,406,407,182,404,378,331,400,406,407,182,404,378,331,400,406,407,182,404,378,331,400,0,0,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,399,0,0,0,399,399,413,414,413,414,413,413,413,413,414,414,414,414,0,413,414,399,0,413,414,399,399,413,414,399,413,414,413,414,413,414,413,414,0,0,182,331,0,331,0,182,0,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,396,0,0,0,182,331,331,182,396,399,0,396,0,399,399,396,399,399,399,399,0,0,0,726,726,726,726,726,726,726,726,726,726,0,0,231,231,231,231,231,231,415,231,415,231,415,231,415,231,415,231,415,415,415,415,415,415,415,415,415,415,231,231,231,231,415,415,231,231,231,231,231,415,231,231,231,231,231,231,231,231,231,415,231,415,231,415,415,231,231,231,231,415,231,231,415,231,415,231,415,231,415,415,415,0,0,0,41,71,71,0,0,71,71,71,71,71,71,71,0,71,71,71,0,269,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,0,41,71,0,74,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,436,436,436,0,0,0,0,294,436,0,0,41,442,443,446,441,0,436,0,0,436,0,436,436,436,436,436,0,436,0,436,436,436,0,436,436,436,438,432,446,0,0,435,436,435,436,251,435,436,435,436,293,435,251,438,269,435,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,293,435,436,432,435,439,439,435,435,436,436,435,436,435,436,294,293,293,293,41,293,441,441,442,442,443,443,443,443,443,443,251,442,443,251,441,435,436,436,435,436,435,436,441,435,436,441,293,293,0,446,446,432,435,432,432,432,432,435,432,432,435,432,432,435,432,435,432,432,432,435,432,432,435,432,435,432,435,432,435,432,435,432,435,432,432,435,432,432,432,435,432,432,435,435,436,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,455,455,455,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,454,471,455,447,448,449,450,295,451,452,453,454,455,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,454,471,454,454,454,454,454,471,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,455,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,448,449,450,295,451,473,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,0,71,425,426,427,428,429,430,431,0,71,425,426,427,428,429,430,431,0,0,71,0,71,0,71,0,71,0,71,0,71,0,71,0,0,476,476,251,71,71,71,424,251,251,251,251,251,251,251,251,251,251,425,426,427,428,429,430,431,476,476,476,476,476,476,476,476,476,251,251,251,71,251,74,71,71,71,425,426,476,476,429,71,71,427,428,430,431,476,476,476,476,71,71,71,71,71,429,476,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,429,476,430,431,251,251,476,476,476,476,0,478,0,478,478,478,0,0,479,479,479,479,479,479,480,479,480,479,480,479,480,479,480,479,480,480,480,480,480,480,480,480,480,480,479,479,479,479,480,480,479,479,479,479,479,480,479,479,479,479,479,479,479,479,479,480,479,480,480,480,479,479,479,479,480,479,479,480,479,480,479,480,479,480,480,480,0,0,0,7,7,7,7,481,7,7,163,481,481,7,163,481,7,163,481,7,163,481,7,481,7,7,7,163,481,7,481,163,163,163,163,163,163,163,163,163,163,7,7,481,7,7,481,481,163,163,7,7,7,7,481,481,481,481,7,7,7,163,481,7,481,7,7,7,481,163,7,481,7,481,7,481,7,481,7,481,7,481,163,7,163,481,7,163,163,7,481,7,481,7,481,7,163,481,7,481,7,163,481,7,163,481,7,163,481,7,163,481,163,163,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,111,111,111,111,111,111,111,111,111,111,111,111,482,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,0,0,483,483,483,483,483,483,484,483,484,483,484,483,484,483,484,483,483,483,483,483,483,483,483,483,483,484,483,483,483,483,483,483,483,483,483,484,483,484,484,484,483,483,483,483,484,483,483,484,483,484,483,484,483,484,0,0,485,485,485,485,485,485,486,485,486,485,486,485,486,485,486,485,486,486,486,486,486,486,486,486,486,486,485,485,485,485,486,486,485,485,485,485,485,486,485,485,485,485,485,485,485,485,485,486,485,486,486,486,485,485,485,485,486,485,485,486,485,486,485,486,485,486,486,486,0,0,487,487,487,487,487,487,488,487,488,487,488,487,488,487,488,487,487,487,487,487,487,487,487,487,487,488,487,487,487,487,487,487,487,487,487,488,487,488,488,488,487,487,487,487,488,487,487,488,487,488,487,488,487,488,0,0,0,489,489,489,489,489,489,489,490,491,489,490,491,489,490,491,489,490,491,489,491,489,491,491,491,491,491,491,491,491,491,491,489,489,489,489,491,491,489,489,489,489,490,491,489,490,491,489,489,489,489,489,489,489,489,489,489,489,489,489,491,489,490,491,491,491,491,491,489,489,489,489,490,491,489,489,490,491,489,490,491,489,490,491,489,490,491,491,491,491,492,492,492,492,0,492,492,492,0,727,0,0,492,492,492,492,492,727,492,492,0,0,0,0,492,492,492,0,492,493,494,495,155,492,493,494,495,155,492,155,492,492,153,493,494,155,495,495,495,495,495,495,495,495,495,495,492,492,492,153,493,494,156,495,495,155,155,492,493,494,495,155,155,155,492,492,155,492,0,493,494,495,155,492,494,155,494,155,494,220,493,494,493,494,220,493,494,493,494,493,494,493,494,493,494,493,220,493,494,493,494,493,494,493,494,0,155,220,492,155,493,494,495,155,492,493,494,495,155,492,493,494,495,155,492,493,494,495,155,492,156,495,495,156,495,495,197,0,196,84,0,0,499,197,0,197,0,196,196,192,192,0,84,0,0,0,0,0,0,0,192,197,499,0,0,506,506,0,0,0,0,0,0,0,0,184,184,184,184,184,84,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,184,84,233,157,498,184,141,143,82,506,184,157,498,82,184,84,157,498,184,82,82,184,84,233,157,498,192,197,196,499,187,500,501,184,82,82,184,184,84,84,233,233,157,157,498,498,192,192,197,197,196,196,499,499,187,187,500,500,501,501,82,184,84,233,157,157,157,498,192,192,197,197,196,196,499,499,187,187,500,500,501,501,82,184,184,84,233,157,157,498,192,192,192,197,197,197,197,197,197,196,196,196,499,499,499,499,187,500,501,84,157,82,82,82,184,184,184,184,84,82,82,184,84,233,157,498,141,143,82,184,84,233,157,498,192,197,196,499,187,500,501,501,500,143,82,184,184,184,84,233,157,498,82,82,82,82,82,82,82,82,184,498,82,82,184,184,82,184,84,157,157,498,82,82,82,82,82,82,82,82,82,82,82,192,197,196,499,187,506,184,84,157,498,82,184,84,233,157,498,192,197,196,499,187,500,501,157,192,197,196,499,187,500,501,84,82,184,84,84,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,82,82,82,184,84,233,157,498,192,197,196,499,187,500,501,184,167,167,167,0,0,167,167,167,167,167,0,167,167,521,521,167,521,167,0,0,521,167,521,167,521,521,521,167,521,521,167,167,521,521,167,167,521,167,167,521,521,146,521,167,521,167,521,167,167,521,167,521,167,146,521,167,521,167,31,147,0,0,0,31,31,147,31,0,0,181,522,181,522,181,522,181,522,181,522,181,181,522,522,181,181,522,522,181,522,181,522,181,522,181,522,181,522,181,522,181,522,181,522,181,522,0,0,0,185,523,523,523,0,523,523,523,523,0,0,185,185,0,185,0,523,523,0,267,185,185,185,185,523,523,523,523,267,523,185,185,185,524,525,267,523,185,185,185,524,525,267,523,185,524,525,267,523,185,524,525,523,185,267,523,185,267,523,185,523,267,523,185,524,525,267,267,523,523,185,185,524,524,525,525,267,523,523,523,523,185,185,185,185,524,524,525,525,267,523,523,185,185,524,525,185,185,185,523,267,523,185,267,523,185,524,525,0,0,0,0,0,0,267,523,185,267,523,267,267,524,525,185,267,523,185,524,525,267,523,185,524,525,523,267,523,185,524,525,267,523,185,524,525,267,523,185,524,525,267,523,185,524,525,0,0,0,526,526,526,526,526,526,526,266,267,526,266,526,266,526,266,526,266,526,266,526,266,526,266,526,526,266,266,526,266,526,266,526,266,526,266,267,266,267,266,266,266,526,266,266,526,266,526,266,526,266,526,266,530,530,530,530,530,530,530,530,530,0,0,530,530,530,530,530,530,530,530,530,530,530,530,530,530,0,0,530,530,0,530,530,530,0,530,530,530,530,530,530,530,530,530,527,527,528,529,530,527,528,529,530,527,528,529,530,527,528,529,530,529,530,529,530,527,529,529,527,529,530,527,528,529,530,527,527,528,528,529,529,530,530,527,527,528,528,529,530,527,528,529,530,527,527,528,529,530,529,529,529,528,527,528,529,530,527,528,527,527,527,527,528,529,530,527,527,528,529,530,527,528,529,530,527,528,529,530,728,728,265,265,265,0,0,0,265,265,265,265,265,265,531,532,265,531,532,265,531,532,265,531,532,265,265,531,532,531,532,265,531,532,265,531,532,265,265,531,531,532,532,265,531,532,265,531,532,265,265,531,532,531,532,265,531,532,265,531,532,265,531,532,265,531,532,265,531,532,265,531,532,531,532,265,531,532,729,729,534,0,0,0,534,534,533,534,535,533,534,535,533,534,535,533,534,535,533,534,535,533,535,533,534,535,535,533,534,535,533,533,534,534,535,535,533,533,533,534,535,533,534,535,533,533,534,535,533,534,535,533,534,535,533,534,535,533,533,534,535,533,534,535,0,0,0,0,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,537,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,536,537,537,538,538,539,539,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,536,537,538,539,539,536,537,538,539,536,537,538,539,538,536,537,538,539,536,536,537,538,539,0,0,0,0,0,0,541,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,540,541,541,542,542,543,543,544,544,545,545,541,543,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,543,540,542,540,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,547,547,547,547,547,547,547,547,0,0,0,546,547,548,546,547,548,548,546,547,548,546,547,548,546,547,548,546,548,546,547,548,546,547,548,546,546,547,547,548,548,546,547,548,546,547,548,548,546,547,548,548,546,546,548,546,546,546,546,546,546,546,547,548,546,547,548,546,547,548,546,547,548,546,546,546,547,548,0,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,0,0,0,0,0,0,0,0,0,0,0,0,168,552,557,345,551,151,151,151,226,553,0,227,0,151,0,0,223,0,0,554,151,151,151,151,151,151,151,151,151,151,151,223,151,151,151,223,0,223,223,168,223,223,151,223,151,151,151,151,223,551,223,0,0,223,151,0,557,0,0,151,345,226,553,223,168,552,552,552,0,0,0,0,0,151,151,223,552,554,151,223,151,151,223,151,552,223,552,151,550,556,151,550,345,226,551,552,553,223,168,554,557,555,556,151,550,345,226,551,552,553,223,168,554,557,555,556,550,345,226,551,552,553,223,168,554,555,556,550,345,226,551,552,553,223,168,554,555,556,226,552,553,555,550,556,550,556,550,555,556,555,556,550,345,226,551,552,553,223,168,554,555,556,550,550,345,345,226,226,551,551,552,552,553,553,223,223,168,168,554,554,555,555,556,556,556,556,151,151,550,345,226,551,551,552,553,223,223,168,168,554,554,557,557,555,555,556,151,151,151,151,151,550,345,226,551,551,551,552,553,223,223,223,223,223,168,168,554,554,557,557,555,555,555,556,555,555,227,550,552,553,555,556,556,556,150,151,550,345,226,551,552,553,223,168,554,557,555,556,556,150,226,552,553,555,556,550,150,556,0,550,556,556,0,550,555,556,556,556,552,151,551,223,168,554,557,550,556,550,556,556,556,556,556,550,555,556,550,345,226,551,552,553,223,168,554,555,556,151,551,223,168,554,557,555,555,151,550,345,226,551,552,553,223,168,554,557,555,556,151,550,345,226,551,552,553,223,168,554,557,555,556,151,550,345,226,551,552,553,223,168,554,557,555,556,550,150,556,150,550,556,150,151,550,345,226,551,552,553,223,168,554,557,555,556,550,556,556,150,730,730,731,731,731,732,733,732,734,735,736,735,736,0,0,0,0,561,564,563,561,564,563,561,563,561,563,561,563,561,561,561,564,563,561,564,563,561,561,564,564,563,563,561,564,563,563,561,564,563,561,563,561,564,563,561,564,563,561,563,561,561,564,563,561,561,561,563,563,561,561,564,563,561,564,563,561,564,563,563,564,561,564,563,0,0,0,497,0,84,497,85,85,85,0,85,85,85,85,85,85,85,85,0,83,0,85,83,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,170,214,214,170,222,214,170,222,170,170,214,222,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,170,509,83,222,85,170,170,170,0,497,512,513,510,519,520,507,214,170,214,0,0,0,512,513,510,519,520,507,214,170,509,83,222,85,170,512,512,513,513,510,510,519,519,520,520,507,507,214,214,170,170,509,509,83,83,222,222,85,85,512,513,510,519,520,507,214,170,170,170,509,509,83,222,222,222,85,85,512,513,510,519,520,507,214,214,214,214,170,170,170,170,509,83,83,222,222,222,222,222,85,85,83,222,222,170,214,170,83,170,214,170,222,214,170,170,512,513,510,519,520,507,170,509,83,222,85,0,0,214,83,222,512,513,510,519,520,507,214,170,509,83,222,85,566,214,214,170,214,170,214,214,83,512,513,510,519,520,507,170,509,83,222,85,214,83,83,0,0,214,214,170,170,170,85,83,170,170,83,512,513,510,519,520,507,214,170,509,83,222,85,170,170,170,170,509,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,170,512,513,510,519,520,507,214,170,509,83,222,85,214,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,0,569,569,569,569,569,0,0,0,0,517,389,517,389,517,389,517,389,572,573,517,572,572,389,573,517,572,389,572,573,517,572,389,573,517,572,389,573,517,572,389,389,572,389,573,517,572,572,389,389,573,573,517,517,572,572,389,389,573,517,572,572,389,389,573,517,517,572,572,572,389,389,517,389,389,389,573,572,389,517,572,389,573,517,572,389,572,572,572,572,389,573,517,572,572,389,389,517,389,389,0,573,573,517,572,389,572,517,572,389,573,517,572,389,389,389,573,517,572,389,573,517,572,389,573,517,572,389,0,0,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,576,576,0,0,0,568,568,575,568,575,576,568,575,576,568,575,576,568,575,576,568,575,576,568,575,576,568,568,575,575,576,576,568,568,568,575,576,568,575,576,568,568,568,575,568,568,575,576,568,575,576,568,568,575,576,568,568,568,568,575,576,575,568,568,575,576,568,575,576,568,575,576,568,575,576,0,0,0,0,0,0,0,737,738,739,740,0,0,0,0,0,0,0,0,0,737,738,739,740,578,0,578,565,571,107,496,579,578,565,571,107,496,579,565,571,107,496,579,582,502,565,571,107,496,579,582,502,565,571,107,496,579,502,565,571,107,496,579,502,565,571,107,496,579,565,571,107,496,579,565,571,107,496,579,0,565,571,107,496,579,565,571,107,496,579,565,565,571,571,107,107,496,496,579,579,502,565,571,107,496,579,582,502,565,571,107,496,579,579,565,571,107,496,565,571,107,496,579,0,0,565,571,107,496,579,582,502,565,571,107,496,579,582,565,571,107,496,496,0,565,571,107,496,579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,579,502,565,571,107,496,579,582,502,565,571,107,496,579,582,502,565,571,107,496,579,582,502,565,571,107,496,579,0,565,571,107,496,582,502,565,571,107,496,579,0,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,0,0,0,0,0,570,570,570,570,570,0,515,515,580,515,580,0,0,0,0,0,515,515,515,580,515,580,515,580,0,515,515,580,515,580,515,580,515,580,515,395,394,394,394,0,0,0,0,0,394,395,394,583,394,583,584,55,583,583,584,55,583,0,584,55,583,584,55,583,583,584,583,584,584,584,584,584,584,584,584,584,584,394,55,583,55,55,583,583,55,584,584,55,55,583,583,583,584,55,583,394,583,394,583,584,394,583,583,394,583,394,0,0,583,583,583,583,583,395,584,584,55,583,55,395,584,395,584,584,583,0,583,0,394,583,584,55,583,55,583,584,55,583,584,55,583,584,55,583,584,55,583,584,584,586,0,0,0,586,0,0,592,0,586,586,586,0,514,589,586,586,586,586,586,592,592,592,514,514,514,514,586,586,586,589,589,0,0,586,589,0,514,514,592,0,586,586,0,586,588,514,589,586,586,586,586,609,0,0,0,0,0,0,0,604,609,609,0,0,0,0,609,0,0,0,600,601,602,603,604,598,611,605,606,601,607,608,609,610,602,603,604,598,611,605,606,601,607,608,609,610,602,598,598,603,604,605,606,601,607,608,609,610,602,603,604,605,606,601,607,608,609,610,602,603,604,608,609,610,604,604,609,609,603,604,604,598,611,605,606,601,607,608,609,609,610,602,603,604,598,611,605,606,601,607,608,609,610,610,610,602,603,603,604,598,611,605,606,601,607,608,609,610,602,598,598,597,603,607,608,610,610,598,597,603,611,605,605,606,606,601,607,608,610,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,597,600,598,603,604,605,606,601,607,608,609,610,602,604,609,598,603,604,598,611,605,606,601,607,608,609,610,602,603,604,598,611,605,606,601,607,608,609,610,602,603,604,598,611,605,606,601,607,608,609,610,602,0,608,603,604,598,611,605,606,601,607,608,609,610,602,0,0,0,0,595,0,0,0,0,0,0,622,614,617,618,619,620,617,618,619,620,617,618,619,620,617,618,619,620,617,619,617,618,619,620,617,618,619,620,617,618,619,620,596,622,617,617,617,617,617,617,617,617,617,617,617,617,618,619,619,620,622,617,617,617,617,617,617,617,617,617,617,617,617,618,619,619,620,622,617,617,617,617,617,617,617,617,617,617,617,617,618,619,619,620,596,622,617,617,617,617,617,617,617,617,617,617,617,617,619,619,622,617,617,617,617,617,617,617,617,617,617,617,617,617,618,619,620,617,618,619,620,617,618,619,620,617,618,619,620,617,618,619,620,609,609,609,609,0,0,0,0,0,624,624,624,624,624,624,624,624,624,624,0,0,626,0,0,0,592,0,0,0,0,626,627,626,627,627,626,626,627,626,626,514,589,592,592,592,514,514,514,514,597,589,589,626,0,597,514,597,514,592,626,0,514,589,0,0,0,0,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,599,630,630,630,629,630,599,629,630,599,629,630,599,630,630,629,630,599,0,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,0,0,0,631,633,634,631,633,634,631,631,631,633,631,633,634,634,631,633,634,631,633,634,631,633,631,633,631,633,631,631,634,631,634,633,631,633,634,631,633,634,631,633,634,631,633,634,631,0,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,626,0,0,0,628,628,626,627,626,627,627,626,626,627,626,626,628,628,0,628,628,628,628,628,626,626,628,628,628,628,628,628,0,0,0,637,639,638,637,639,638,637,638,637,638,637,637,639,638,637,637,637,639,638,637,637,639,638,639,638,637,639,638,637,637,637,637,639,638,0,0,639,638,637,638,639,638,637,639,638,637,639,638,637,639,638,637,639,638,0,0,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,0,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,641,144,145,144,145,0,0,144,0,647,0,647,558,644,644,558,0,648,0,0,144,145,144,145,559,641,0,0,558,0,558,0,558,0,0,0,559,648,0,649,0,0,144,145,558,0,144,145,0,0,0,0,649,640,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,641,175,642,643,644,180,194,645,640,558,559,646,647,641,175,642,643,644,180,194,645,640,558,559,646,647,641,175,640,641,175,642,643,644,180,194,645,640,558,559,646,647,641,641,175,175,642,642,643,643,644,644,180,180,194,194,645,645,640,640,558,558,559,559,646,646,647,647,221,641,175,642,642,643,643,644,644,180,180,194,194,645,645,640,558,558,559,559,646,646,647,647,648,648,649,221,641,175,642,643,644,644,180,194,645,640,558,558,558,558,558,558,559,559,559,646,647,647,648,648,648,641,175,640,646,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,221,649,175,221,221,649,221,175,640,646,221,221,641,175,221,642,643,644,180,194,645,558,559,646,647,648,221,221,221,221,641,175,642,643,644,180,194,645,640,558,559,646,647,642,643,644,180,194,645,558,559,646,647,648,221,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,645,649,221,641,175,642,643,644,180,194,645,640,558,559,646,647,648,175,221,0,651,651,651,0,0,651,651,652,651,652,651,652,651,652,652,651,652,651,651,652,652,651,651,652,652,651,651,651,652,652,652,652,651,652,652,652,652,652,652,0,651,652,651,652,651,652,651,652,651,652,651,652,651,652,0,654,663,189,0,655,0,657,658,0,663,654,663,663,654,663,656,663,0,0,0,0,654,657,654,655,0,0,656,0,656,0,0,0,0,0,0,0,0,0,0,0,0,0,189,0,0,0,0,0,0,0,0,653,653,653,655,282,282,282,655,282,665,664,216,656,282,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,665,664,216,656,282,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,282,177,653,660,655,176,661,218,662,189,660,177,282,218,282,653,176,282,282,216,282,659,660,655,218,189,282,218,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,216,656,656,282,282,177,177,653,653,657,657,658,658,659,659,660,660,655,655,176,176,661,661,218,218,662,662,189,189,654,654,663,663,653,216,656,656,282,177,653,657,657,658,658,659,660,655,176,661,218,662,662,662,662,189,189,189,189,654,654,663,663,665,664,216,656,656,656,656,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,177,653,657,657,658,658,659,660,660,655,176,661,218,662,189,654,654,663,663,189,661,177,216,653,216,282,177,653,659,660,655,176,661,218,662,189,177,218,665,664,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,657,665,664,282,665,664,282,282,282,658,659,282,282,653,176,176,660,176,218,282,0,176,661,218,177,653,176,660,177,660,176,665,664,665,664,660,176,659,177,177,218,216,282,177,653,660,655,176,661,218,662,189,659,176,661,659,177,216,216,282,282,659,660,655,218,218,189,216,0,216,216,218,665,664,656,657,658,654,663,177,662,189,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,656,657,658,662,189,654,663,216,665,664,665,664,216,216,216,656,282,282,282,282,177,653,657,658,659,659,659,660,660,655,176,661,218,662,189,654,663,665,664,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,653,653,665,664,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,218,661,665,664,216,656,282,177,653,657,658,659,660,655,176,661,218,662,189,654,663,653,177,653,0,0,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,0,0,667,669,667,667,669,667,669,667,669,667,669,667,667,667,667,667,667,667,667,669,667,667,667,669,667,667,667,669,669,667,667,669,667,669,669,669,667,667,669,667,669,667,667,669,667,669,667,669,667,669,667,669,667,0,0,670,670,670,670,670,670,670,670,670,670,671,670,671,671,671,670,671,671,671,670,671,670,671,671,671,670,670,671,670,670,670,670,670,670,671,671,671,670,671,671,670,671,670,671,671,670,671,670,671,672,0,672,672,672,672,672,0,0,0,0,678,0,0,678,0,674,674,0,677,677,677,677,678,674,677,678,674,677,678,674,677,678,674,677,674,674,678,674,677,678,678,674,677,678,674,674,677,677,677,677,674,677,677,677,677,678,674,674,677,677,677,677,677,674,677,677,677,677,677,677,677,674,677,677,677,677,677,674,677,677,677,677,677,683,677,674,677,684,677,678,674,678,677,678,674,677,678,674,677,677,677,677,678,674,677,677,677,677,683,677,678,674,741,741,742,742,0,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,0,0,686,689,0,0,0,0,689,0,0,686,685,685,685,685,686,685,686,687,690,688,689,685,686,687,690,688,689,685,686,687,690,688,689,685,686,687,690,688,689,686,686,685,685,686,687,690,688,689,685,686,687,687,690,690,688,688,689,689,685,686,686,687,690,688,689,685,685,685,686,686,686,685,685,685,685,690,686,685,685,685,686,687,690,688,689,685,686,685,686,690,686,685,686,685,685,686,687,690,688,689,687,690,688,689,685,686,687,690,688,689,688,685,686,687,690,688,689,685,686,687,690,688,689,690,685,686,687,690,688,689,0,0,0,0,0,695,695,0,0,0,0,0,695,691,692,693,694,695,696,697,698,691,692,693,694,695,696,697,698,691,693,692,694,691,692,693,694,697,698,695,696,695,696,695,696,691,692,693,694,697,698,695,695,695,695,695,696,697,698,691,692,692,693,694,694,695,696,697,698,695,691,693,691,692,693,694,695,696,697,698,692,692,694,692,694,698,692,692,694,692,691,696,696,695,692,696,691,691,696,693,693,696,691,695,696,695,696,696,696,696,691,692,693,694,695,696,697,698,691,692,693,694,695,696,697,698,697,698,691,696,696,691,692,693,694,695,696,697,698,691,691,692,693,694,695,696,697,698,675,0,0,0,702,702,675,675,675,0,0,0,0,0,52,52,675,13,703,675,52,52,52,52,52,52,705,706,52,703,704,702,675,705,706,52,703,704,702,675,52,704,705,705,706,706,52,703,704,675,52,703,704,675,703,704,52,675,703,675,52,52,703,704,702,675,703,703,704,704,702,702,52,52,52,52,703,704,702,702,675,705,706,52,52,703,704,702,675,675,52,52,52,52,52,52,675,52,52,52,52,52,705,706,52,703,704,702,675,705,706,705,706,52,675,675,703,52,52,675,675,52,705,706,52,703,704,675,13,675,52,703,704,675,702,705,706,52,52,52,705,706,52,703,704,702,675,52,52,705,706,52,703,704,702,675,52,703,704,52,52,703,675,13,675,13,675,52,705,706,52,703,704,702,675,705,706,52,703,704,702,675,52,52,52],"f":"``````````````````````````````{{bb}b}{{}d}{{{h{f}}}j}{{{h{j}}}j}{{{h{l}}}j}`{{{h{d}}}{{h{c}}}{}}{{{h{d}}}{{h{n}}}}{{{h{d}}}{{h{{Ab{A`}}}}}}{{{h{d}}}{{h{{Ad{A`}}}}}}```{{{h{Af}}}j}``{{{h{c}}}{{h{e}}}{}{}}00000000000020{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000000000`8{{{h{l}}}l}{{{h{Af}}}Af}{{{h{{Aj{c}}}}}{{Aj{c}}}Al}{{{h{b}}}b}{{{h{{An{c}}}}}{{An{c}}}Al}{{{h{B`}}}B`}{{{h{{Bb{c}}}}}{{Bb{c}}}Al}{{{h{Bd}}}Bd}{{{h{d}}}d}{{{h{{Bf{c}}}}}{{Bf{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000{{{An{{h{c}}}}}{{An{c}}}Al}{{{h{j}}{h{j}}}Bj}{{{h{l}}{h{l}}}Bj}{{{h{{An{c}}}}{h{{An{c}}}}}BjBl}{{{h{B`}}{h{B`}}}Bj}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}BjBl}{{{h{d}}{h{d}}}Bj}{Bn{{Cb{{C`{d}}}}}}{Bn{{Cb{{C`{Cd}}}}}}{Bn{{Cb{{C`{Cf}}}}}}{Bn{{Cb{{C`{Ch}}}}}}{Bn{{Cb{{C`{{Cl{Cj}}}}}}}}{Bn{{Cb{{C`{Cn}}}}}}{Bn{{Cb{{C`{D`}}}}}}{Bn{{Cb{{C`{Db}}}}}}{Bn{{Cb{{Dd{c}}}}}{fDf}}{{{h{l}}}Dh}{{{h{f}}}Dh}0{{{h{{An{c}}}}}{{Dj{Dh}}}f}``{{}j}{{}l}{{}{{Aj{c}}}{}}{{}b}{{{h{{C`{c}}}}}{{h{e}}}{}{}}{{{h{{Dd{c}}}}}{{h{e}}}{}{}}{{{h{{Bf{c}}}}}{{h{c}}}{{Dl{{Cl{Cj}}}}}}{{{h{Dn}}}d}{c{{E`{j}}}Eb}{c{{E`{l}}}Eb}{c{{E`{b}}}Eb}{c{{E`{B`}}}Eb}{c{{E`{d}}}Eb}{{{h{Dn}}}Ed}{{}c{}}{{{h{j}}{h{j}}}Ef}{{{h{l}}{h{l}}}Ef}{{{h{Af}}{h{Af}}}Ef}{{{h{b}}{h{b}}}Ef}{{{h{{An{c}}}}{h{{An{c}}}}}EfEh}{{{h{B`}}{h{B`}}}Ef}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}EfEh}{{{h{Bd}}{h{Bd}}}Ef}{{{h{d}}{h{d}}}Ef}6{{{h{c}}{h{e}}}Ef{}{}}000000000000000{{Afc}{{E`{AfAf}}}{{El{}{{Ej{j}}}}}}{{{h{Ah{Aj{c}}}}{Aj{c}}}BhBl}{{{h{j}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{l}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Af}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{Aj{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{b}}{h{AhEn}}}Fd}0{{{h{{An{c}}}}{h{AhEn}}}FdFb}{{{h{B`}}{h{AhEn}}}Fd}{{{h{{Bb{c}}}}{h{AhEn}}}FdFb}{{{h{Bd}}{h{AhEn}}}Fd}{{{h{d}}{h{AhEn}}}Fd}000{cc{}}0{{{Ff{DhDb}}}j}{{{Ff{{h{Dh}}{h{Db}}}}}j}{Bdj}3{Bdl}4{{{Fh{c}}}{{Aj{c}}}{}}5{Fjc{}}6{c{{C`{c}}}{}}71{c{{Dd{c}}}{}}888{{{An{l}}}B`}999{nd}:{c{{E`{Af{Dj{Af}}}}}{{El{}{{Ej{j}}}}}}{cd{}}0{{{h{Fl}}Dh}Af}3{{{h{{Ad{A`}}}}}{{E`{dFn}}}}0{{{h{G`}}}{{E`{dc}}}{}}{{{h{Af}}Dh}{{Dj{Af}}}}{{{h{{Gd{}{{Gb{c}}}}}}}{{E`{jc}}}Fb}{{{h{j}}{h{Ahc}}}BhGf}{{{h{l}}{h{Ahc}}}BhGf}{{{h{Af}}}Db}{{{h{{An{c}}}}{h{Ahe}}}BhGhGf}{{{h{B`}}{h{Ahc}}}BhGf}{{{h{d}}{h{Ahc}}}BhGf}`{{{h{Af}}}Dh}``{{{h{d}}c}{{h{e}}}{{Gj{{Ad{A`}}}}}{}}``{{Afj}Af}{ce{}{}}0000000000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}0{{{C`{c}}}c{}}{{{Dd{c}}}c{}}3{Af}4{{{h{{Gd{}{{Gb{c}}}}}}jj}{{E`{{Dj{Ef}}c}}}Fb}{{{h{{An{c}}}}}Ef{}}{{{h{B`}}}Ef}{{{h{{Bb{c}}}}Dh}Eff}{{{h{H`}}}Ef}1`{{{h{Af}}}Hb}``{{{Aj{c}}g}{{Aj{e}}}BlBl{{Hf{c}{{Hd{e}}}}}}{{{h{AhH`}}H`}Bh}`{jAf}{c{{Bf{c}}}{{Dl{{Cl{Cj}}}}}}{{ce}{{Bf{c}}}{{Dl{{Cl{Cj}}}}}{{Hh{Dh}}}}{{{h{AhHb}}}Dj}{{{h{Ah{Bf{c}}}}}{{Dj{e}}}{{Dl{{Cl{Cj}}}}}{}}{{{h{Ah{Bf{c}}}}Hj}{{Dj{e}}}{{Dl{{Cl{Cj}}}}}{}}`{{{h{j}}{h{j}}}{{Dj{Bj}}}}{{{h{l}}{h{l}}}{{Dj{Bj}}}}{{{h{{An{c}}}}{h{{An{c}}}}}{{Dj{Bj}}}Hl}{{{h{B`}}{h{B`}}}{{Dj{Bj}}}}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}{{Dj{Bj}}}Hl}{{{h{d}}{h{d}}}{{Dj{Bj}}}}{{{h{Af}}}{{Dj{Af}}}}{{Afj}{{E`{AfAf}}}}{{{h{Af}}c}{{`{{Gn{}{{Ej{Af}}}}}}}{{Hh{Dh}}}}````{{{h{j}}c}E`Hn}{{{h{l}}c}E`Hn}{{{h{b}}c}E`Hn}{{{h{B`}}c}E`Hn}{{{h{d}}c}E`Hn}```{{{h{AhH`}}}{{Dj{H`}}}}{dc{}}{{{h{c}}}e{}{}}0000000000{dn}{{{h{{C`{Db}}}}}{{Ib{I`}}}}{{{h{{C`{Cn}}}}}{{Ib{I`}}}}{{{h{{C`{{Cl{Cj}}}}}}}{{Ib{I`}}}}{{{h{{C`{Cd}}}}}{{Ib{I`}}}}{{{h{{C`{Ch}}}}}{{Ib{I`}}}}{{{h{{C`{D`}}}}}{{Ib{I`}}}}{{{h{{C`{d}}}}}{{Ib{I`}}}}{{{h{{C`{Cf}}}}}{{Ib{I`}}}}{{{h{{Dd{c}}}}}{{Ib{I`}}}{fId}}{{{h{c}}}If{}}0{{{h{b}}}Ch}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0`1{c{{E`{e}}}{}{}}000000000000000000000000000`````{{{h{c}}}Ij{}}0000000000000{EdB`}`{ce{}{}}0000000000000````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````{IlIl}{{ChCh}}{{IlIl}}{{InIn}}{{J`J`}J`}{{{h{AhCh}}Ch}Bh}{{{h{AhIl}}Il}Bh}{{{h{AhIn}}In}Bh}{{Jb{h{{Jd{c}}}}{h{Jf}}}{{E`{{Ff{JbJh}}Jj}}}Jl}`{{{h{Jn}}}{{Dj{K`}}}}{{}Kb}{{}Kd}{{}Kf}{{}Db}{{}Kh}{{}Kj}{{}Kl}{{}Kn}{{}L`}{{}D`}{{}Lb}{{}Ld}{{}Lf}{{}Lh}{{}Lj}{{}Ll}{{}Ln}{{}M`}{{}Mb}`{{{h{Kb}}}h}{{{h{Kd}}}h}{{{h{Kf}}}h}{{{h{Db}}}h}{{{h{Kh}}}h}{{{h{Kj}}}h}{{{h{Kl}}}h}{{{h{Kn}}}h}{{{h{L`}}}h}{{{h{D`}}}h}{{{h{Lb}}}h}{{{h{Ld}}}h}{{{h{Lf}}}h}{{{h{Lh}}}h}{{{h{Lj}}}h}{{{h{Ll}}}h}{{{h{Ln}}}h}{{{h{M`}}}h}{{{h{Mb}}}h}{{{h{Md}}}{{h{{Ad{A`}}}}}}{{{h{Jb}}}}{{{h{AhMd}}}{{h{AhMd}}}}{{{h{AhMd}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhCf}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhCf}}}{{h{AhMd}}}}2{{{h{AhJb}}}}{{{h{AhJb}}}Mf}2{{{h{Jb}}}Mf}{{{h{Kb}}}{{h{Mh}}}}{{{h{Kd}}}{{h{Mh}}}}{{{h{Kf}}}{{h{Mj}}}}{{{h{Db}}}{{h{Mh}}}}{{{h{Kh}}}{{h{Mh}}}}{{{h{Kj}}}{{h{Mh}}}}{{{h{Kl}}}{{h{Mh}}}}{{{h{Kn}}}{{h{Mj}}}}{{{h{L`}}}{{h{n}}}}{{{h{D`}}}{{h{Mh}}}}{{{h{Lb}}}{{h{Mh}}}}{{{h{Ld}}}{{h{Mj}}}}{{{h{Lf}}}{{h{Mj}}}}{{{h{Lh}}}{{h{Mh}}}}{{{h{Lj}}}{{h{Mh}}}}{{{h{Ll}}}{{h{{Mn{Ml}}}}}}{{{h{Ln}}}{{h{{Mn{N`}}}}}}{{{h{M`}}}{{h{{Mn{Nb}}}}}}{{{h{Mb}}}{{h{{Mn{Nd}}}}}}{{{h{Kb}}}{{h{{Ab{A`}}}}}}{{{h{Kb}}}{{h{{Ad{A`}}}}}}{{{h{Kd}}}{{h{{Ab{A`}}}}}}{{{h{Kd}}}{{h{{Ad{A`}}}}}}{{{h{Kf}}}{{h{{Ad{A`}}}}}}{{{h{Kf}}}{{h{{Ab{A`}}}}}}{{{h{Db}}}{{h{{Ad{A`}}}}}}{{{h{Db}}}{{h{{Ab{A`}}}}}}{{{h{Kh}}}{{h{{Ab{A`}}}}}}{{{h{Kh}}}{{h{{Ad{A`}}}}}}{{{h{Kj}}}{{h{{Ab{A`}}}}}}{{{h{Kj}}}{{h{{Ad{A`}}}}}}{{{h{Kl}}}{{h{{Ad{A`}}}}}}{{{h{Kl}}}{{h{{Ab{A`}}}}}}{{{h{Md}}}{{h{{Ad{A`}}}}}}{{{h{Md}}}{{h{Md}}}}{{{h{Cf}}}{{h{{Ad{A`}}}}}}{{{h{Cf}}}{{h{Md}}}}{{{h{Kn}}}{{h{{Ab{A`}}}}}}{{{h{Kn}}}{{h{{Ad{A`}}}}}}{{{h{Kn}}}{{h{Nf}}}}{{{h{L`}}}{{h{{Ab{A`}}}}}}{{{h{L`}}}{{h{{Ad{A`}}}}}}{{{h{L`}}}{{h{Nf}}}}{{{h{D`}}}{{h{{Ad{A`}}}}}}{{{h{D`}}}{{h{{Ab{A`}}}}}}{{{h{Lb}}}{{h{{Ab{A`}}}}}}{{{h{Lb}}}{{h{{Ad{A`}}}}}}{{{h{Ld}}}{{h{Nf}}}}{{{h{Ld}}}{{h{{Ab{A`}}}}}}{{{h{Ld}}}{{h{{Ad{A`}}}}}}{{{h{Lf}}}{{h{Nf}}}}{{{h{Lf}}}{{h{{Ad{A`}}}}}}{{{h{Lf}}}{{h{{Ab{A`}}}}}}{{{h{Lh}}}{{h{{Ad{A`}}}}}}{{{h{Lh}}}{{h{{Ab{A`}}}}}}{{{h{Lj}}}{{h{{Ad{A`}}}}}}{{{h{Lj}}}{{h{{Ab{A`}}}}}}{{{h{Ll}}}{{h{{Ab{A`}}}}}}{{{h{Ll}}}{{h{{Ad{A`}}}}}}{{{h{Cn}}}{{h{Nh}}}}{{{h{Ln}}}{{h{{Ab{A`}}}}}}{{{h{Ln}}}{{h{{Ad{A`}}}}}}{{{h{M`}}}{{h{{Ad{A`}}}}}}{{{h{M`}}}{{h{{Ab{A`}}}}}}{{{h{Mb}}}{{h{{Ab{A`}}}}}}{{{h{Mb}}}{{h{{Ad{A`}}}}}}{{{h{Cf}}}{{h{Md}}}}{{{h{{Jn{c}}}}}{{h{{Jn{Nj}}}}}Nl}{{{Jn{Nj}}}Jn}{{{h{{Jn{Nj}}}}}{{h{Jn}}}}{{{Ab{A`}}}M`}{{{h{Nn}}}Hj}{{{h{Cd}}}Hj}```{{{h{O`}}}{{E`{EdOb}}}}{{{h{O`}}}Db}`{{{h{c}}}{{h{e}}}{}{}}00000000{{{h{Kb}}}{{h{{Ad{A`}}}}}}1{{{h{Kd}}}{{h{{Ad{A`}}}}}}2{{{h{Kf}}}{{h{{Ad{A`}}}}}}3{{{h{Db}}}{{h{{Ad{A`}}}}}}4{{{h{Kh}}}{{h{{Ad{A`}}}}}}55{{{h{Kj}}}{{h{{Ad{A`}}}}}}6{{{h{Kl}}}{{h{{Ad{A`}}}}}}777{{{h{Cf}}}{{h{Md}}}}888{{{h{Kn}}}{{h{{Ad{A`}}}}}}99{{{h{L`}}}{{h{{Ad{A`}}}}}}{{{h{D`}}}{{h{{Ad{A`}}}}}};{{{h{Lb}}}{{h{{Ad{A`}}}}}}<<<<<<<<<{{{h{Ld}}}{{h{{Ad{A`}}}}}}=={{{h{Lf}}}{{h{{Ad{A`}}}}}}>>>{{{h{Lh}}}{{h{{Ad{A`}}}}}}{{{h{Lj}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ll}}}{{h{{Ad{A`}}}}}}11111111111{{{h{Ln}}}{{h{{Ad{A`}}}}}}2{{{h{M`}}}{{h{{Ad{A`}}}}}}333{{{h{Mb}}}{{h{{Ad{A`}}}}}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000000000000000{{{h{AhCf}}}{{h{AhMd}}}}11111111111111111111111111111111111111{{}Od}0{{{h{Md}}}Of}{CnOh}{{{h{c}}Oj}Ef{}}{{{h{O`}}}Ef}{{{h{c}}Ol}Ef{}}{{{h{On}}Ol}Ef}2{Il{{Dj{Il}}}}{{ChCh}{{Dj{Ch}}}}{{IlIl}{{Dj{Il}}}}{{InIn}{{Dj{In}}}}{{ChEd}{{Dj{Ch}}}}{{IlA@`}{{Dj{Il}}}}{{A@bEd}{{Dj{A@b}}}}{{InEd}{{Dj{In}}}}3210{{A@bIn}{{Dj{Ch}}}}43765{{A@dA@f}A@h}{{{h{AhA@j}}}Bh}{{{h{A@l}}}A@l}{{{h{Ch}}}Ch}{{{h{Il}}}Il}{{{h{A@b}}}A@b}{{{h{Jb}}}Jb}{{{h{In}}}In}{{{h{K`}}}K`}{{{h{A@n}}}A@n}{{{h{{Jn{c}}}}}{{Jn{c}}}{AlNl}}{{{h{Kb}}}Kb}{{{h{Kd}}}Kd}{{{h{Kf}}}Kf}{{{h{Db}}}Db}{{{h{Kh}}}Kh}{{{h{Kj}}}Kj}{{{h{Kl}}}Kl}{{{h{O`}}}O`}{{{h{A@d}}}A@d}{{{h{Cf}}}Cf}{{{h{AA`}}}AA`}{{{h{AAb}}}AAb}{{{h{Kn}}}Kn}{{{h{L`}}}L`}{{{h{D`}}}D`}{{{h{Lb}}}Lb}{{{h{AAd}}}AAd}{{{h{Nn}}}Nn}{{{h{On}}}On}{{{h{AAf}}}AAf}{{{h{Cd}}}Cd}{{{h{A@j}}}A@j}{{{h{AAh}}}AAh}{{{h{AAj}}}AAj}{{{h{Ld}}}Ld}{{{h{Lf}}}Lf}{{{h{AAl}}}AAl}{{{h{AAn}}}AAn}{{{h{Lh}}}Lh}{{{h{Lj}}}Lj}{{{h{Ml}}}Ml}{{{h{Ll}}}Ll}{{{h{AB`}}}AB`}{{{h{ABb}}}ABb}{{{h{ABd}}}ABd}{{{h{ABf}}}ABf}{{{h{Cn}}}Cn}{{{h{J`}}}J`}{{{h{ABh}}}ABh}{{{h{ABj}}}ABj}{{{h{ABl}}}ABl}{{{h{N`}}}N`}{{{h{Ln}}}Ln}{{{h{Nb}}}Nb}{{{h{M`}}}M`}{{{h{Nd}}}Nd}{{{h{Mb}}}Mb}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000000000000000000000000000000000000000000000000{{{h{Ch}}{h{Ch}}}Bj}{{{h{Il}}{h{Il}}}Bj}{{{h{A@b}}{h{A@b}}}Bj}{{{h{Jb}}{h{Jb}}}Bj}{{{h{In}}{h{In}}}Bj}{{{h{K`}}{h{K`}}}Bj}{{{h{A@n}}{h{A@n}}}Bj}{{{h{{Jn{c}}}}{h{{Jn{c}}}}}Bj{BlNl}}{{{h{Kb}}{h{Kb}}}Bj}{{{h{Kd}}{h{Kd}}}Bj}{{{h{Kf}}{h{Kf}}}Bj}{{{h{Db}}{h{Db}}}Bj}{{{h{Kh}}{h{Kh}}}Bj}{{{h{Kj}}{h{Kj}}}Bj}{{{h{Kl}}{h{Kl}}}Bj}{{{h{Md}}{h{Md}}}Bj}{{{h{Cf}}{h{Cf}}}Bj}{{{h{AA`}}{h{AA`}}}Bj}{{{h{AAb}}{h{AAb}}}Bj}{{{h{Kn}}{h{Kn}}}Bj}{{{h{L`}}{h{L`}}}Bj}{{{h{D`}}{h{D`}}}Bj}{{{h{Lb}}{h{Lb}}}Bj}{{{h{AAd}}{h{AAd}}}Bj}{{{h{Nn}}{h{Nn}}}Bj}{{{h{On}}{h{On}}}Bj}{{{h{AAf}}{h{AAf}}}Bj}{{{h{Cd}}{h{Cd}}}Bj}{{{h{A@j}}{h{A@j}}}Bj}{{{h{AAh}}{h{AAh}}}Bj}{{{h{AAj}}{h{AAj}}}Bj}{{{h{Ld}}{h{Ld}}}Bj}{{{h{Lf}}{h{Lf}}}Bj}{{{h{AAl}}{h{AAl}}}Bj}{{{h{Lh}}{h{Lh}}}Bj}{{{h{Lj}}{h{Lj}}}Bj}{{{h{Ml}}{h{Ml}}}Bj}{{{h{Ll}}{h{Ll}}}Bj}{{{h{AB`}}{h{AB`}}}Bj}{{{h{ABf}}{h{ABf}}}Bj}{{{h{Cn}}{h{Cn}}}Bj}{{{h{J`}}{h{J`}}}Bj}{{{h{ABh}}{h{ABh}}}Bj}{{{h{ABj}}{h{ABj}}}Bj}{{{h{N`}}{h{N`}}}Bj}{{{h{Ln}}{h{Ln}}}Bj}{{{h{Nb}}{h{Nb}}}Bj}{{{h{M`}}{h{M`}}}Bj}{{{h{Nd}}{h{Nd}}}Bj}{{{h{Mb}}{h{Mb}}}Bj}{{{h{Jb}}{h{Jb}}}Bj}{{{h{O`}}}{{Dj{{h{Cd}}}}}}{{{h{AhABl}}ABl}{{E`{BhABn}}}}``{{{h{O`}}}{{Dj{Kh}}}}{{{h{Cd}}}Mh}{{{h{Cd}}}D`}{{{h{Kj}}{h{{Ad{A`}}}}}Kl}{{{h{Cd}}}Lb}`{{{h{Ahc}}}{{E`{ChAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KhAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{O`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{D`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{LbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AAdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{OnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AAfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{A@jAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AAhAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{ABdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{ABjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{LnAC`}}}{ACbACd}}:{{{h{Ahc}}}{{E`{CfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{NnAC`}}}{ACbACd}}7{{{h{Ahc}}}{{E`{CdAC`}}}{ACbACd}}{{{h{Ch}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Db}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{O`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Md}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Cf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{D`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Lb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AAd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Nn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{On}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AAf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Cd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{A@j}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AAh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{ABd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{ABj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Ln}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Md}}}Hj}0{JbACj}{{}Ch}{{}Il}{{}Cf}{{}AAd}{{}Nn}{{}On}{{}A@j}{{}Ml}{{}ABj}{{}N`}{{}Nb}{{}Nd}{{{h{Cf}}}h}{{{h{AhCf}}}{{h{Ah}}}}{{cACl}{{E`{Ch}}}Eb}{{cACl}{{E`{Il}}}Eb}10{c{{E`{Ch}}}Eb}{c{{E`{A@b}}}Eb}{c{{E`{Jb}}}Eb}{c{{E`{In}}}Eb}{c{{E`{{Jn{Nj}}}}}Eb}{c{{E`{Kb}}}Eb}{c{{E`{Kd}}}Eb}{c{{E`{Kf}}}Eb}{c{{E`{Db}}}Eb}{c{{E`{Kh}}}Eb}{c{{E`{Kj}}}Eb}{c{{E`{Kl}}}Eb}{c{{E`{O`}}}Eb}{c{{E`{{h{Md}}}}}Eb}{c{{E`{Cf}}}Eb}{c{{E`{Kn}}}Eb}{c{{E`{L`}}}Eb}{c{{E`{D`}}}Eb}{c{{E`{Lb}}}Eb}{c{{E`{AAd}}}Eb}{c{{E`{Nn}}}Eb}{c{{E`{On}}}Eb}{c{{E`{AAf}}}Eb}{c{{E`{Cd}}}Eb}{c{{E`{A@j}}}Eb}{c{{E`{AAj}}}Eb}{c{{E`{Ld}}}Eb}{c{{E`{Lf}}}Eb}{c{{E`{AAl}}}Eb}{c{{E`{AAn}}}Eb}{c{{E`{Lh}}}Eb}{c{{E`{Lj}}}Eb}{c{{E`{Ll}}}Eb}{c{{E`{AB`}}}Eb}{c{{E`{ABb}}}Eb}{c{{E`{Cn}}}Eb}{c{{E`{J`}}}Eb}{c{{E`{ABh}}}Eb}{c{{E`{ABj}}}Eb}{{{h{{Ad{A`}}}}}{{E`{ABlABn}}}}{c{{E`{ABl}}}Eb}{c{{E`{Ln}}}Eb}{c{{E`{M`}}}Eb}{c{{E`{Mb}}}Eb}{{{h{Ahc}}}{{E`{ABlABn}}}ACb}{{{h{ABh}}c}ACn{{AD`{Nh}}}}{{{h{ABh}}}ADb}{ChADd}{IlADd}{{ChA@l}ADd}{{IlA@l}ADd}{{ChIn}}{{ChEd}}{{IlA@`}}{{InIn}}{{InEd}}{{{h{AhCh}}Ed}Bh}{{{h{AhIl}}A@`}Bh}{{{h{AhIn}}Ed}Bh}{{{h{Md}}}Ch}`{{{h{On}}}Ef}{{{h{Nn}}}Ef}{{}}00000000000000{{}ADf}1010101{{{h{A@l}}{h{A@l}}}Ef}{{{h{Ch}}{h{Ch}}}Ef}{{{h{Il}}{h{Il}}}Ef}{{{h{A@b}}{h{A@b}}}Ef}{{{h{Jb}}{h{Jb}}}Ef}{{{h{In}}{h{In}}}Ef}{{{h{K`}}{h{K`}}}Ef}{{{h{A@n}}{h{A@n}}}Ef}{{{h{{Jn{c}}}}{h{{Jn{c}}}}}Ef{EhNl}}{{{h{Kb}}{h{Kb}}}Ef}{{{h{Kd}}{h{Kd}}}Ef}{{{h{Kf}}{h{Kf}}}Ef}{{{h{Db}}{h{Db}}}Ef}{{{h{Kh}}{h{Kh}}}Ef}{{{h{Kj}}{h{Kj}}}Ef}{{{h{Kl}}{h{Kl}}}Ef}{{{h{O`}}{h{O`}}}Ef}{{{h{A@d}}{h{A@d}}}Ef}{{{h{Md}}{h{Md}}}Ef}{{{h{Md}}{h{Cf}}}Ef}{{{h{Cf}}{h{Cf}}}Ef}{{{h{Cf}}{h{Md}}}Ef}{{{h{AA`}}{h{AA`}}}Ef}{{{h{AAb}}{h{AAb}}}Ef}{{{h{Kn}}{h{Kn}}}Ef}{{{h{L`}}{h{L`}}}Ef}{{{h{D`}}{h{D`}}}Ef}{{{h{Lb}}{h{Lb}}}Ef}{{{h{AAd}}{h{AAd}}}Ef}{{{h{Nn}}{h{Nn}}}Ef}{{{h{On}}{h{On}}}Ef}{{{h{AAf}}{h{AAf}}}Ef}{{{h{Cd}}{h{Cd}}}Ef}{{{h{A@j}}{h{A@j}}}Ef}{{{h{AAh}}{h{AAh}}}Ef}{{{h{AAj}}{h{AAj}}}Ef}{{{h{Ld}}{h{Ld}}}Ef}{{{h{Lf}}{h{Lf}}}Ef}{{{h{AAl}}{h{AAl}}}Ef}{{{h{AAn}}{h{AAn}}}Ef}{{{h{Lh}}{h{Lh}}}Ef}{{{h{Lj}}{h{Lj}}}Ef}{{{h{Ml}}{h{Ml}}}Ef}{{{h{Ll}}{h{Ll}}}Ef}{{{h{AB`}}{h{AB`}}}Ef}{{{h{ABb}}{h{ABb}}}Ef}{{{h{ABd}}{h{ABd}}}Ef}{{{h{ABf}}{h{ABf}}}Ef}{{{h{Cn}}{h{Cn}}}Ef}{{{h{J`}}{h{J`}}}Ef}{{{h{ABh}}{h{ABh}}}Ef}{{{h{ABj}}{h{ABj}}}Ef}{{{h{ABl}}{h{ABl}}}Ef}{{{h{N`}}{h{N`}}}Ef}{{{h{Ln}}{h{Ln}}}Ef}{{{h{Nb}}{h{Nb}}}Ef}{{{h{M`}}{h{M`}}}Ef}{{{h{Nd}}{h{Nd}}}Ef}{{{h{Mb}}{h{Mb}}}Ef}{{{h{Jb}}{h{Jb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000`{{{h{AhCf}}c}Bh{{El{}{{Ej{ADh}}}}}}{{{h{ABl}}{h{{Jd{c}}}}}{{E`{CdADj}}}Jl}{{{h{ABd}}{h{Ah{ADl{D`}}}}{h{Ah{ADl{Dh}}}}}{{E`{BhADn}}}}{ABl{{E`{CdAE`}}}}0{ABlCd}{{ABlA@b}{{E`{CdAE`}}}}{{{h{ABl}}}{{E`{ChABn}}}}{{A@bEd}{{Dj{Ch}}}}{{A@bIn}{{Dj{Ch}}}}{{{h{Kb}}{h{Kd}}}Kd}{{ABl{h{{Jd{c}}}}}{{E`{ABl{Ff{ABl{ADl{ADj}}}}}}}Jl}{{ABl{h{{Jd{c}}}}Hj}{{E`{ABl{Ff{ABlADj}}}}}Jl}0{{{h{AhABl}}{h{{Jd{c}}}}Hj}{{E`{BhADj}}}Jl}02{{{h{AhABl}}{h{{Jd{c}}}}}{{E`{Bh{ADl{ADj}}}}}Jl}0{{{h{Md}}}{{Dj{A@d}}}}{{{h{A@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Ch}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Il}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{A@b}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Jb}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{In}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{K`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{A@n}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{Jn{c}}}}{h{AhEn}}}{{E`{BhF`}}}Nl}{{{h{Jn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Kb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kd}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Db}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kl}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{O`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{A@d}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Md}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Cf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AA`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AAb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Kn}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{L`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{D`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Lb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AAd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Nn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{On}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AAf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Cd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{A@j}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AAh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AAj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Ld}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Lf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AAl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AAn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Lh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Lj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Ll}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AB`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ABb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ABd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ABf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Cn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{J`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{ABh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{ABj}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{ABl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Ln}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{M`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Mb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Md}}{h{AhAEb}}}{{E`{BhF`}}}}{{Ch{h{AhAEb}}A@l}{{E`{BhF`}}}}{{Il{h{AhAEb}}A@l}{{E`{BhF`}}}}{{{h{AAn}}{h{AhAEb}}}{{E`{BhF`}}}}{cc{}}000{MfJb}{AEdJb}{ACjJb}{AAjJb}4{AAlJb}555{CnA@n}6{MhKb}7{MhKd}88{MjKf}{AEfKf}{{{h{AEf}}}Kf}{{{h{O`}}}Db}{FlDb}{MhDb}>{O`Db}{{{h{Fl}}}Db}{cc{}}{D`Kh}{MhKh}2{MhKj}{LbKj}{MhKl}55{AAbA@d}{A`A@d}7{{{ADl{A`}}}Cf}{{{AEh{Md}}}Cf}{JnCf}:{{{h{Md}}}Cf};;{CfKn}{{{h{Md}}}Kn}{MjKn}>{{{h{Cf}}}Kn}{{{h{Md}}}L`}{{{h{Cf}}}L`}{nL`}{CfL`}{cc{}}{{{h{Cd}}}D`}1{CdD`}{MhD`}3{MhLb}{CdLb}{{{h{Cd}}}Lb}666{OlOn}{AEjOn}88{{{ADl{{h{{Ad{A`}}}}}}}A@j}{{{ADl{{ADl{A`}}}}}A@j}{{{h{{Ad{{ADl{A`}}}}}}}A@j}{{{h{{Ad{{h{{Ad{A`}}}}}}}}}A@j}<{DhAAh}={AElAAh}{HjAAh}{EdAAh}{A`AAh}{AAlAAj}{AEdAAj}{cc{}}{AAlLd}{AAjLd}{{{h{AAj}}}Ld}3{{{h{AAl}}}Ld}{MjLd}5{MjLf}{{{h{AAl}}}Lf}{AAlLf}88{MhLh}99{MhLj}::{{{Mn{Ml}}}Ll}{ABbAB`}<<<{CnABf}===={ABjABh}>>>{{{Mn{N`}}}Ln}?{AEnLn}{cc{}}{LnM`}{AF`M`}{{{h{AF`}}}M`}3{{{Mn{Nb}}}M`}4{{{h{AFb}}}Mb}{AFbMb}6{{{Mn{Nd}}}Mb}{AElOn}{{{Ab{A`}}}J`}{{{Ab{A`}}}ABh}{{{h{O`}}c}ABd{{AFd{{h{D`}}}{{Hd{Ef}}}}}}{ADb{{E`{ChAFf}}}}{ADb{{E`{IlAFf}}}}{{}Kb}{{}Kd}{{}Kf}{{}Db}{{}Kh}{{}Kj}{{}Kl}{{}Kn}{{}L`}{{}D`}{{}Lb}{{}Ld}{{}Lf}{{}Lh}{{}Lj}{{}Ll}{{}Ln}{{}M`}{{}Mb}{{{h{{Ad{A`}}}}}{{h{Md}}}}{{{ADl{A`}}}Cf}{{{h{Ah{Ad{A`}}}}}{{h{AhMd}}}}{Oh{{Dj{Cn}}}}{ABjABh}{DhOn}{DhABb}{DhABj}{A`{{E`{AB`AFh}}}}{{{h{G`}}}{{E`{CnAFj}}}}{{}Kb}{{}Kd}{{}Kf}{{}Db}{{}Kh}{{}Kj}{{}Kl}{{}Kn}{{}L`}{{}D`}{{}Lb}{{}Ld}{{}Lf}{{}Lh}{{}Lj}{{}Ll}{{}Ln}{{}M`}{{}Mb}{{ADbA@l}{{E`{ChAFf}}}}{{ADbA@l}{{E`{IlAFf}}}}{{{h{Fl}}{h{{Ad{D`}}}}c}ABd{{AFd{{h{D`}}}{{Hd{Ef}}}}}}{AElOn}{{{h{G`}}}{{E`{CfAFl}}}}{{{h{G`}}}{{E`{OnAFn}}}}{{{h{G`}}}{{E`{J`AFn}}}}{{{h{G`}}}{{E`{ABhAFn}}}}{{{h{G`}}}{{E`{ABjAFn}}}}{EdCh}{cCf{{El{}{{Ej{ADh}}}}}}{{Jb{Dj{M`}}}Mb}{{{h{AG`}}}{{Ff{JbJh}}}}{Ed{{Dj{In}}}}{{{Ab{A`}}}J`}{{{Ab{A`}}}ABh}{AGb{{Dj{Cn}}}}{{M`M`}M`}{EdIn}{{{h{{Jd{c}}}}{h{AAn}}}AAjAGd}{{{h{{Jd{c}}}}{h{AAn}}}{{E`{AAlAGf}}}AGd}{MhKb}{MhKd}{MjKf}{MhDb}{MhKh}{MhKj}{MhKl}{MjKn}{nL`}{MhD`}{MhLb}{MjLd}{MjLf}{MhLh}{MhLj}{{{Mn{Ml}}}Ll}{{{Mn{N`}}}Ln}{{{Mn{Nb}}}M`}{{{Mn{Nd}}}Mb}{EdCh}{A@`Il}{EdA@b}{Ed{{Dj{A@b}}}}1{{{h{Md}}c}{{E`{JnAGh}}}{{AD`{Nh}}}}{{{h{Md}}AGj}Ln}{{{h{Md}}AGj}M`}{Dh{{E`{OnAGl}}}}0{{{h{{Ad{A`}}}}}{{E`{JbAGn}}}}{{{h{{Ad{A`}}}}}{{E`{JbJj}}}}{{{h{{Ad{A`}}}}}{{E`{KbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KdFn}}}}{{{h{{Ad{A`}}}}}{{E`{KfFn}}}}{{{h{{Ad{A`}}}}}{{E`{DbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KhFn}}}}{{{h{{Ad{A`}}}}}{{E`{KjFn}}}}{{{h{{Ad{A`}}}}}{{E`{KlFn}}}}{{{h{{Ad{A`}}}}}{{E`{KnFn}}}}{{{h{{Ad{A`}}}}}{{E`{L`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{D`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{LbFn}}}}{{{h{{Ad{c}}}}}A@j{{AD`{{Ad{A`}}}}}}{{{h{{Ad{A`}}}}}{{E`{AAjAH`}}}}{{{h{{Ad{A`}}}}}{{E`{AAjAGn}}}}{{{h{{Ad{A`}}}}}{{E`{LdFn}}}}{{{h{{Ad{A`}}}}}{{E`{LfFn}}}}{{{h{{Ad{A`}}}}}{{E`{AAlJj}}}}{{{h{{Ad{A`}}}}c}{{E`{AAnJj}}}{{AHb{ABf}}}}{{{h{{Ad{A`}}}}}{{E`{LhFn}}}}{{{h{{Ad{A`}}}}}{{E`{LjFn}}}}{{{h{{Ad{A`}}}}}{{E`{LlFn}}}}{{{h{{Ad{A`}}}}}{{E`{LnFn}}}}{{{h{{Ad{A`}}}}}{{E`{M`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{MbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KdFn}}}}{{{h{{Ad{A`}}}}}{{E`{KfFn}}}}{{{h{{Ad{A`}}}}}{{E`{DbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KhFn}}}}{{{h{{Ad{A`}}}}}{{E`{KjFn}}}}{{{h{{Ad{A`}}}}}{{E`{KlFn}}}}{{{h{{Ad{A`}}}}}{{E`{KnFn}}}}{{{h{{Ad{A`}}}}}{{E`{L`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{D`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{LbFn}}}}{{{h{{Ad{A`}}}}}{{E`{LdFn}}}}{{{h{{Ad{A`}}}}}{{E`{LfFn}}}}{{{h{{Ad{A`}}}}}{{E`{LhFn}}}}{{{h{{Ad{A`}}}}}{{E`{LjFn}}}}{{{h{{Ad{A`}}}}}{{E`{LlFn}}}}{{{h{{Ad{A`}}}}}{{E`{LnFn}}}}{{{h{{Ad{A`}}}}}{{E`{M`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{MbFn}}}}{Dh{{E`{ABbAHd}}}}{{{h{G`}}}{{E`{A@l}}}}{{{h{G`}}}{{E`{Ch}}}}{{{h{G`}}}{{E`{Il}}}}{{{h{G`}}}{{E`{A@b}}}}{{{h{G`}}}{{E`{JbJj}}}}{{{h{G`}}}{{E`{In}}}}{{{h{G`}}}{{E`{K`}}}}{{{h{G`}}}{{E`{{Jn{Nj}}AHf}}}}{{{h{G`}}}{{E`{Kb}}}}{{{h{G`}}}{{E`{Kd}}}}{{{h{G`}}}{{E`{Kf}}}}{{{h{G`}}}{{E`{Db}}}}{{{h{G`}}}{{E`{Kh}}}}{{{h{G`}}}{{E`{Kj}}}}{{{h{G`}}}{{E`{Kl}}}}{{{h{G`}}}{{E`{AAb}}}}{{{h{G`}}}{{E`{Kn}}}}{{{h{G`}}}{{E`{L`}}}}{{{h{G`}}}{{E`{D`}}}}{{{h{G`}}}{{E`{Lb}}}}{{{h{G`}}}{{E`{AAd}}}}{{{h{G`}}}{{E`{On}}}}{{{h{G`}}}{{E`{AAjAHh}}}}{{{h{G`}}}{{E`{Ld}}}}{{{h{G`}}}{{E`{Lf}}}}{{{h{G`}}}{{E`{AAl}}}}{{{h{G`}}}{{E`{AAnAHj}}}}{{{h{G`}}}{{E`{Lh}}}}{{{h{G`}}}{{E`{Lj}}}}{{{h{G`}}}{{E`{Ll}}}}{{{h{G`}}}{{E`{AB`}}}}{{{h{G`}}}{{E`{ABb}}}}{{{h{G`}}}{{E`{Cn}}}}{{{h{G`}}}{{E`{ABl}}}}{{{h{G`}}}{{E`{Ln}}}}{{{h{G`}}}{{E`{M`}}}}{{{h{G`}}}{{E`{Mb}}}}{{{h{G`}}A@l}{{E`{ChAFf}}}}{{{h{G`}}A@l}{{E`{IlAFf}}}}{{{h{G`}}}{{E`{ChAHl}}}}{{{h{G`}}}{{E`{IlAHl}}}}{{{h{G`}}}{{E`{OnAHn}}}}{{{h{G`}}}{{E`{J`AHn}}}}{{{h{G`}}}{{E`{ABhAHn}}}}{{{h{G`}}}{{E`{ABjAHn}}}}{Cd{{E`{ABlABn}}}}{Ed{{Dj{In}}}}{EdIn}0{{{h{G`}}}{{E`{AAnAHj}}}}1{{AA`c}Jn{{AHb{A@n}}}}2{HjIn}{cAAn{{AHb{ABf}}}}{{{h{A@l}}{h{Ahc}}}BhGf}{{{h{Ch}}{h{Ahc}}}BhGf}{{{h{Il}}{h{Ahc}}}BhGf}{{{h{A@b}}{h{Ahc}}}BhGf}{{{h{Jb}}{h{Ahc}}}BhGf}{{{h{In}}{h{Ahc}}}BhGf}{{{h{K`}}{h{Ahc}}}BhGf}{{{h{A@n}}{h{Ahc}}}BhGf}{{{h{{Jn{c}}}}{h{Ahe}}}Bh{GhNl}Gf}{{{h{Kb}}{h{Ahc}}}BhGf}{{{h{Kd}}{h{Ahc}}}BhGf}{{{h{Kf}}{h{Ahc}}}BhGf}{{{h{Db}}{h{Ahc}}}BhGf}{{{h{Kh}}{h{Ahc}}}BhGf}{{{h{Kj}}{h{Ahc}}}BhGf}{{{h{Kl}}{h{Ahc}}}BhGf}{{{h{Md}}{h{Ahc}}}BhGf}{{{h{Cf}}{h{Ahc}}}BhGf}{{{h{AA`}}{h{Ahc}}}BhGf}{{{h{AAb}}{h{Ahc}}}BhGf}{{{h{Kn}}{h{Ahc}}}BhGf}{{{h{L`}}{h{Ahc}}}BhGf}{{{h{D`}}{h{Ahc}}}BhGf}{{{h{Lb}}{h{Ahc}}}BhGf}{{{h{AAd}}{h{Ahc}}}BhGf}{{{h{Nn}}{h{Ahc}}}BhGf}{{{h{On}}{h{Ahc}}}BhGf}{{{h{AAf}}{h{Ahc}}}BhGf}{{{h{Cd}}{h{Ahc}}}BhGf}{{{h{A@j}}{h{Ahc}}}BhGf}{{{h{AAj}}{h{Ahc}}}BhGf}{{{h{Ld}}{h{Ahc}}}BhGf}{{{h{Lf}}{h{Ahc}}}BhGf}{{{h{AAl}}{h{Ahc}}}BhGf}{{{h{Lh}}{h{Ahc}}}BhGf}{{{h{Lj}}{h{Ahc}}}BhGf}{{{h{Ml}}{h{Ahc}}}BhGf}{{{h{Ll}}{h{Ahc}}}BhGf}{{{h{AB`}}{h{Ahc}}}BhGf}{{{h{ABb}}{h{Ahc}}}BhGf}{{{h{ABf}}{h{Ahc}}}BhGf}{{{h{Cn}}{h{Ahc}}}BhGf}{{{h{J`}}{h{Ahc}}}BhGf}{{{h{ABh}}{h{Ahc}}}BhGf}{{{h{ABj}}{h{Ahc}}}BhGf}{{{h{ABl}}{h{Ahc}}}BhGf}{{{h{N`}}{h{Ahc}}}BhGf}{{{h{Ln}}{h{Ahc}}}BhGf}{{{h{Nb}}{h{Ahc}}}BhGf}{{{h{M`}}{h{Ahc}}}BhGf}{{{h{Nd}}{h{Ahc}}}BhGf}{{{h{Mb}}{h{Ahc}}}BhGf}```{{{h{Kb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kd}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kf}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Db}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kh}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kl}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Md}}{AI`{Hj}}}h}{{{h{Md}}{AIb{Hj}}}h}{{{h{Md}}{AId{Hj}}}h}{{{h{Md}}AIf}h}{{{h{Md}}{Ff{{AIh{Hj}}{AIh{Hj}}}}}h}{{{h{Md}}{AIj{Hj}}}h}{{{h{Md}}{AIl{Hj}}}h}{{{h{Kn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{L`}}c}h{{Gj{{Ad{A`}}}}}}{{{h{D`}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Lb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{A@j}}Hj}h}{{{h{Ld}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Lf}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AAn}}AIf}{{h{{Ad{A`}}}}}}{{{h{Lh}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Lj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Ll}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Ln}}c}h{{Gj{{Ad{A`}}}}}}{{{h{M`}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Mb}}c}h{{Gj{{Ad{A`}}}}}}````{{{h{Md}}}AIn}0{{{h{Md}}}AJ`}0{ce{}{}}0000000000000000000000000000000000000000000000000000000{Cf{{AJb{Md}}}}{Cf{{ADl{A`}}}}{{{h{A@j}}}}{{{AJb{Md}}}Cf}{{{h{Cd}}AJdAJf}Ef}{{{h{Cd}}}Ef}{{{h{Md}}}Ef}{{{h{A@j}}}Ef}2{{{h{On}}}Ef}03{{{h{ABf}}}Ef}{{{h{ABh}}Db}Ef}4{IlEf}{{{h{AAd}}}Ef}66666{{{h{AA`}}}Ef}70702775{{{h{Jn}}{h{AAj}}}Ef}{{{h{Jn}}{h{Jb}}}Ef}7{{{h{Jn}}}Ef}8{{{h{AAj}}}Ef}{{{h{{Jn{Nj}}}}Cn}Ef}<{{{h{Jb}}}Ef}{{{h{A@j}}}AJh}{{{h{ABl}}}{{`{{Gn{}{{Ej{{E`{{h{AAf}}ABn}}}}}}}}}}`{{{h{A@j}}}{{Dj{{h{{Ad{A`}}}}}}}}{{{h{Nn}}}In}{{{h{Md}}}Hj}{{{h{A@j}}}Hj}`{J`ADb}{CnAGb}{{{h{Jn}}{h{Md}}}Ef}{{{h{ABh}}}ABh}{{{h{ABh}}c}ABh{{AD`{Nh}}}}1`11{{{h{Md}}}Ch}{CfAAf}{{{h{Md}}A@b}Ch}{{CfA@b}AAf}{{ChEd}}{{IlA@`}}{{A@bIn}}{{InA@b}}{{InEd}}{{{h{AhCh}}Ed}Bh}{{{h{AhIl}}A@`}Bh}{{{h{AhIn}}Ed}Bh}{Il}``{{}{{h{Md}}}}{{}Cf}{{AAb{h{{Ad{A`}}}}}{{E`{AA`AJj}}}}{{D`Dh}AAd}{{}A@j}{cAAj{{AHb{AEd}}}}{{AJlc}AAn{{AHb{ABf}}}}{cCf{{AD`{Nf}}}}{{{h{AAj}}}Cf}{{{h{Ld}}}Cf}{{{h{Kn}}}Cf}{{{h{{Jd{c}}}}Jb{Dj{M`}}}CfJl}{ACjCf}{{{h{Lf}}}Cf}{{{h{L`}}}Cf}98{{{h{AA`}}}Cf}{{{h{A@j}}Hj}{{Dj{{h{{Ad{A`}}}}}}}}{{{h{Cd}}}Mh}{{}AAd}```{{{h{Md}}}{{Dj{AAj}}}}{{ce}Jn{{AHb{Ld}}}{{AHb{ABf}}}}{{{h{Md}}c}{{E`{JnAJn}}}{{AHb{ABf}}}}{{Knc}Jn{{AHb{ABf}}}}{{{h{AAl}}c}Jn{{AHb{ABf}}}}{{{h{Md}}c}Jn{{AHb{ABf}}}}{{{h{{Jd{c}}}}Jb{Dj{M`}}e}JnJl{{AHb{A@n}}}}{{{h{{Jd{c}}}}Jb{Dj{M`}}}AA`Jl}{{{h{AK`}}}A@j}{{ACjc}Jn{{AHb{A@n}}}}{ACjAA`}{{{h{AAl}}c}Jn{{AHb{A@n}}}}{{{h{AAl}}}AA`}{{{h{AKb}}{h{AEd}}}A@j}{{{h{Md}}}{{Dj{Cf}}}}{LfCf}{{{h{AAj}}}{{E`{CfAGf}}}}{{{h{AAl}}}Cf}{{{h{Md}}c}Jn{{AHb{A@n}}}}{{{h{Md}}}AA`}{Cn{{h{Nh}}}}`{{{h{Ch}}{h{Ch}}}{{Dj{Bj}}}}{{{h{Il}}{h{Il}}}{{Dj{Bj}}}}{{{h{A@b}}{h{A@b}}}{{Dj{Bj}}}}{{{h{Jb}}{h{Jb}}}{{Dj{Bj}}}}{{{h{In}}{h{In}}}{{Dj{Bj}}}}{{{h{K`}}{h{K`}}}{{Dj{Bj}}}}{{{h{A@n}}{h{A@n}}}{{Dj{Bj}}}}{{{h{{Jn{c}}}}{h{{Jn{c}}}}}{{Dj{Bj}}}{HlNl}}{{{h{Kb}}{h{Kb}}}{{Dj{Bj}}}}{{{h{Kd}}{h{Kd}}}{{Dj{Bj}}}}{{{h{Kf}}{h{Kf}}}{{Dj{Bj}}}}{{{h{Db}}{h{Db}}}{{Dj{Bj}}}}{{{h{Kh}}{h{Kh}}}{{Dj{Bj}}}}{{{h{Kj}}{h{Kj}}}{{Dj{Bj}}}}{{{h{Kl}}{h{Kl}}}{{Dj{Bj}}}}{{{h{Md}}{h{Cf}}}{{Dj{Bj}}}}{{{h{Md}}{h{Md}}}{{Dj{Bj}}}}{{{h{Cf}}{h{Md}}}{{Dj{Bj}}}}{{{h{Cf}}{h{Cf}}}{{Dj{Bj}}}}{{{h{AA`}}{h{AA`}}}{{Dj{Bj}}}}{{{h{AAb}}{h{AAb}}}{{Dj{Bj}}}}{{{h{Kn}}{h{Kn}}}{{Dj{Bj}}}}{{{h{L`}}{h{L`}}}{{Dj{Bj}}}}{{{h{D`}}{h{D`}}}{{Dj{Bj}}}}{{{h{Lb}}{h{Lb}}}{{Dj{Bj}}}}{{{h{AAd}}{h{AAd}}}{{Dj{Bj}}}}{{{h{Nn}}{h{Nn}}}{{Dj{Bj}}}}{{{h{On}}{h{On}}}{{Dj{Bj}}}}{{{h{AAf}}{h{AAf}}}{{Dj{Bj}}}}{{{h{Cd}}{h{Cd}}}{{Dj{Bj}}}}{{{h{A@j}}{h{A@j}}}{{Dj{Bj}}}}{{{h{AAh}}{h{AAh}}}{{Dj{Bj}}}}{{{h{AAj}}{h{AAj}}}{{Dj{Bj}}}}{{{h{Ld}}{h{Ld}}}{{Dj{Bj}}}}{{{h{Lf}}{h{Lf}}}{{Dj{Bj}}}}{{{h{AAl}}{h{AAl}}}{{Dj{Bj}}}}{{{h{Lh}}{h{Lh}}}{{Dj{Bj}}}}{{{h{Lj}}{h{Lj}}}{{Dj{Bj}}}}{{{h{Ml}}{h{Ml}}}{{Dj{Bj}}}}{{{h{Ll}}{h{Ll}}}{{Dj{Bj}}}}{{{h{AB`}}{h{AB`}}}{{Dj{Bj}}}}{{{h{ABf}}{h{ABf}}}{{Dj{Bj}}}}{{{h{Cn}}{h{Cn}}}{{Dj{Bj}}}}{{{h{J`}}{h{J`}}}{{Dj{Bj}}}}{{{h{ABh}}{h{ABh}}}{{Dj{Bj}}}}{{{h{ABj}}{h{ABj}}}{{Dj{Bj}}}}{{{h{N`}}{h{N`}}}{{Dj{Bj}}}}{{{h{Ln}}{h{Ln}}}{{Dj{Bj}}}}{{{h{Nb}}{h{Nb}}}{{Dj{Bj}}}}{{{h{M`}}{h{M`}}}{{Dj{Bj}}}}{{{h{Nd}}{h{Nd}}}{{Dj{Bj}}}}{{{h{Mb}}{h{Mb}}}{{Dj{Bj}}}}`{{IlIl}{{Dj{Il}}}}``{{{h{AA`}}}{{h{Nf}}}}`{{{h{c}}{h{e}}}Ef{}{}}{{{h{c}}h}Ef{}}0{{{h{c}}{h{Mj}}}{{Dj{AAj}}}{}}0{{{h{c}}{h{{Ff{MjLn}}}}}{{Dj{{Ff{JbHj}}}}}{}}{{{h{c}}{h{Mj}}}{{Dj{Jb}}}{}}33{{{h{c}}}{{Dj{{h{{AKf{AKd{Ff{CfAGj}}}}}}}}}{}}{{{h{c}}{h{e}}}{{Dj{Hj}}}{}{}}{{{h{c}}{h{e}}{h{Ln}}}{{Dj{Hj}}}{}{}}`{{{h{Jn}}}{{Dj{Ld}}}}{{{h{AAj}}}Ld}{{{h{AAl}}}Ld}{{{h{Jb}}Jh}AEd}{{{h{AAn}}{h{{Jd{c}}}}}AAjAGd}{{{h{AhA@j}}c}Bh{{AD`{{Ad{A`}}}}}}{{{h{AhA@j}}{h{AKb}}}Bh}{{{h{AhCf}}ADh}Bh}0{{{h{AhCf}}A@d}Bh}{{{h{AhCf}}c}Bh{{AD`{Nf}}}}{{{h{Ahc}}}{{E`{AAjACf}}}{AKhACd}}{{{h{Ahc}}}{{E`{AAlACf}}}{AKhACd}}{{ChEd}Ch}{{IlA@`}Il}{{{h{AhCh}}Ed}Bh}{{{h{AhIl}}A@`}Bh}{{{Jn{Nj}}Cn}{{E`{JnAHf}}}}{{{h{AhCf}}Hj}Bh}0{In{{Dj{In}}}}{{{h{AhCf}}}Bh}{{{h{Jn}}}{{Dj{Kn}}}}{{{h{Md}}}Kn}{{{h{Jn}}}Cf}`{{{h{Cd}}}{{`{{Gn{}{{Ej{Hj}}}}}}}}`{{{h{A@j}}}{{Dj{{h{{Ad{A`}}}}}}}}{{{h{Nn}}}In}`{{ChcACl}E`Hn}{{IlcACl}E`Hn}101010{{{h{Ch}}c}E`Hn}{{{h{A@b}}c}E`Hn}{{{h{Jb}}c}E`Hn}{{{h{Jb}}}{{Ab{A`}}}}{{{h{In}}c}E`Hn}{{{h{{Jn{c}}}}e}E`NlHn}{{{h{Kb}}c}E`Hn}{{{h{Kd}}c}E`Hn}{{{h{Kf}}c}E`Hn}{{{h{Db}}c}E`Hn}{{{h{Kh}}c}E`Hn}{{{h{Kj}}c}E`Hn}{{{h{Kl}}c}E`Hn}{{{h{O`}}c}E`Hn}{{{h{A@d}}c}E`Hn}{{{h{Md}}c}E`Hn}{{{h{Cf}}c}E`Hn}{{{h{Kn}}c}E`Hn}{{{h{L`}}c}E`Hn}{{{h{D`}}c}E`Hn}{{{h{Lb}}c}E`Hn}{{{h{AAd}}c}E`Hn}{{{h{Nn}}c}E`Hn}{{{h{On}}c}E`Hn}{{{h{AAf}}c}E`Hn}{{{h{Cd}}c}E`Hn}{{{h{A@j}}c}E`Hn}{{{h{AAj}}c}E`Hn}{{{h{Ld}}c}E`Hn}{{{h{Lf}}c}E`Hn}{{{h{AAl}}c}E`Hn}{{{h{AAn}}c}E`Hn}{{{h{Lh}}c}E`Hn}{{{h{Lj}}c}E`Hn}{{{h{Ll}}c}E`Hn}{{{h{AB`}}c}E`Hn}{{{h{ABb}}c}E`Hn}{{{h{Cn}}c}E`Hn}{{{h{J`}}c}E`Hn}{{{h{ABh}}c}E`Hn}{{{h{ABj}}c}E`Hn}{{{h{ABl}}}{{ADl{A`}}}}{{{h{ABl}}c}E`Hn}{{{h{Ln}}c}E`Hn}{{{h{M`}}c}E`Hn}{{{h{Mb}}c}E`Hn}{{{h{ABl}}}If}{{{h{ABl}}{h{Ahc}}}{{E`{HjACf}}}ACh}`{{{h{ABl}}Hj{h{Ah{AKj{c}}}}}{{E`{{Ff{AKlABb}}AKn}}}{{Dl{Cd}}}}{{{h{ABl}}Hj{h{Ah{AKj{c}}}}{Dj{Ln}}}{{E`{AL`ALb}}}{{Dl{Cd}}}}{{{h{AhABl}}{h{c}}{h{{Jd{e}}}}}{{E`{{AKf{HjALd}}{Ff{{AKf{HjALd}}{AKf{HjAKn}}}}}}}ALf{AGdJl}}`{IlA@`}{{{h{AAf}}}Hj}{{{h{A@j}}}Hj}{{{h{AAh}}}Hj}{{{h{ABl}}Hj}{{E`{{h{AAf}}AKn}}}}{{ChCh}}{{IlIl}}{{InIn}}{{J`J`}J`}{{{h{AhCh}}Ch}Bh}{{{h{AhIl}}Il}Bh}{{{h{AhIn}}In}Bh}{cCh{{Gn{}{{Ej{Ch}}}}}}{cIl{{Gn{}{{Ej{Il}}}}}}{cIn{{Gn{}{{Ej{{h{In}}}}}}}}{cIn{{Gn{}{{Ej{In}}}}}}{{Jb{h{{Jd{c}}}}{Dj{M`}}}{{Ff{ACjJh}}}Jl}`{{{h{A@j}}}{{Dj{{h{Md}}}}}}{{{h{Md}}}Ln}{{{h{Jn}}}ALh}{{{h{Md}}}If}{J`{{Ab{A`}}}}{ABh{{Ab{A`}}}}{ChADb}{IlADb}{Kb}{Kd}{Kf}{Db}{Kh}{Kj}{Kl}{Kn}{L`}{D`}{Lb}{Ld}{Lf}{Lh}{Lj}{Ll}{Ln}{M`}{Mb}{{{h{Md}}}{{ADl{A`}}}}{AAj{{ADl{A`}}}}{{{h{AAl}}}{{Ab{A`}}}}{AAn{{ADl{A`}}}}{ABhABj}{ABjDh}{OnDh}{Cn{{h{G`}}}}{AAbALj}{{ChA@l}ADb}{{IlA@l}ADb}{{{h{Mj}}}Mj}0{{{h{ALl}}}ALl}0{{{h{Md}}}If}{InEd}{J`{{Ab{A`}}}}{ABh{{Ab{A`}}}}{AAbA`}{{{h{c}}}e{}{}}00000000000000000{{{h{Md}}}}11111111111111111111111111111111111111{{{h{Md}}}Cf}{{{h{Md}}{h{{Jd{c}}}}Jb}CfJl}1{{{h{Jb}}}AAj}{{{h{AAj}}}AAj}{{{h{Jn}}}If}{KbMh}{KdMh}{KfMj}{DbMh}{KhMh}{KjMh}{KlMh}{KnMj}{L`n}{D`Mh}{LbMh}{LdMj}{LfMj}{LhMh}{LjMh}{Ll{{Mn{Ml}}}}{Ln{{Mn{N`}}}}{M`{{Mn{Nb}}}}{Mb{{Mn{Nd}}}}{{{h{On}}}{{Dj{Ol}}}}{{{h{ALn}}}ALn}0{ChEd}{IlA@`}{A@bEd}00{MbJf}{{{h{n}}}n}0{Ch{{E`{IlAM`}}}}{AAjAMb}{{{h{c}}}If{}}00000000000000000000000000000000000000000{{ChA@l}If}{{IlA@l}If}10{J`ABh}{ABbDh}{A@dA`}{Il{{E`{ChAM`}}}}{InEd}0{{{h{A@j}}}{{ADl{{ADl{A`}}}}}}{AAnIf}{ABhJ`}3{{{h{Jb}}}Jb}{{{h{Cd}}c}Hj{{Hf{{h{AAd}}}{{Hd{{Dj{AAf}}}}}}}}{{{h{O`}}}Hj}{{{h{Nn}}}Hj}{{{h{Cd}}}Hj}{c{{E`{e}}}{}{}}0{Il{{E`{Ch}}}}{Ch{{E`{Il}}}}2{{{AJb{G`}}}{{E`{A@b}}}}{If{{E`{A@b}}}}{{{h{G`}}}{{E`{A@b}}}}55{{{h{G`}}}{{E`{In}}}}{{{AJb{G`}}}{{E`{In}}}}{If{{E`{In}}}}888888888888888{ALj{{E`{AAb}}}}{A`{{E`{AAb}}}}{A@d{{E`{AAb}}}}{ADh{{E`{AAb}}}}<<<<<<<{{{AJb{G`}}}{{E`{On}}}}{{{h{G`}}}{{E`{On}}}}{If{{E`{On}}}}????????{AAj{{E`{AAl}}}}{c{{E`{e}}}{}{}}000000000{Oh{{E`{Cn}}}}{AGb{{E`{Cn}}}}2222222222222222222222222222222222222222222222222222222222222222222{{{h{Jb}}{h{{Jd{c}}}}{h{Jb}}JhJf}EfJl}{{{h{Cd}}Hj}{{E`{{h{Nn}}AMd}}}}{{{h{Cd}}Hj}{{E`{{h{AAf}}AMf}}}}`{{{h{Cd}}}D`}``{{{h{c}}}Ij{}}00000000000000000000000000000000000000000000000000000000{ACl{{h{G`}}}}0{{ChCh}Ch}{{IlIl}Il}10`{IlCh}`{{{h{AhABl}}Hj{h{{Cl{AMh}}}}}{{E`{BhAMj}}}}{{{h{AhABl}}Hj{h{{Cl{AMh}}}}}{{E`{BhAMl}}}}`{{{h{Jb}}{h{{Jd{c}}}}{h{AKl}}{h{AMn}}}{{E`{BhJj}}}Jl}{{{h{AAj}}{h{{Jd{c}}}}{h{AKl}}{h{AKb}}}{{E`{BhJj}}}Jl}{{{h{AAl}}{h{{Jd{c}}}}{h{AKl}}{h{AKb}}}{{E`{BhJj}}}Jl}{{{h{AA`}}}AAb}```{{{h{Cd}}}Hj}{ce{}{}}0000000000000000000000000000000000000000000000000000000{{{h{O`}}}In}{{{h{AAf}}}In}{{{h{Cd}}}In}{HjCf}`{{{h{Jn}}}{{Dj{AA`}}}}{{{h{O`}}}{{Dj{Kj}}}}{{{h{Md}}}{{Dj{AAb}}}}{{{h{AAj}}}{{E`{LfAGf}}}}{{{h{AAl}}}Lf}{{{h{AAj}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}{{{h{AAl}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}{{{h{Md}}}L`}{{{h{Cd}}}Lb}``````````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000000000{{{h{AGh}}}AGh}{{{h{AJn}}}AJn}{{{h{AN`}}}AN`}{{{h{AHf}}}AHf}{{{h{ANb}}}ANb}{{{h{ANd}}}ANd}{{{h{ANf}}}ANf}{{{h{ANh}}}ANh}{{{h{ANj}}}ANj}{{{h{ANl}}}ANl}{{{h{Nj}}}Nj}{{{h{ALh}}}ALh}{{{h{c}}{h{Ahe}}}Bh{}{}}00000000000{{{h{ANl}}{h{ANl}}}Bj}{{{h{Nj}}{h{Nj}}}Bj}{{{h{ALh}}{h{ALh}}}Bj}{{{h{AGh}}{h{AGh}}}Ef}{{{h{AJn}}{h{AJn}}}Ef}{{{h{AN`}}{h{AN`}}}Ef}{{{h{AHf}}{h{AHf}}}Ef}{{{h{ANb}}{h{ANb}}}Ef}{{{h{ANd}}{h{ANd}}}Ef}{{{h{ANf}}{h{ANf}}}Ef}{{{h{ANh}}{h{ANh}}}Ef}{{{h{ANj}}{h{ANj}}}Ef}{{{h{ANl}}{h{ANl}}}Ef}{{{h{Nj}}{h{Nj}}}Ef}{{{h{ALh}}{h{ALh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000000000000000`{{{h{AGh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AJn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AN`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Nj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ALh}}{h{AhEn}}}{{E`{BhF`}}}}{ANnAGh}{cc{}}{AJjAGh}{AO`AGh}2{AO`AJn}3{AJjAHf}{AObAHf}{ANfAHf}{ANnAHf}{ANhAHf}{ANjAHf}{ANdAHf}{AO`AHf}{AOdAHf}<{ANbAHf}========{{{h{ANl}}{h{Ahc}}}BhGf}{{{h{Nj}}{h{Ahc}}}BhGf}{{{h{ALh}}{h{Ahc}}}BhGf}{ce{}{}}00000000000{{{h{ANf}}}Hj}{{{h{ANj}}}A`}{{{h{ANh}}}Hj}{{{h{ANl}}{h{ANl}}}{{Dj{Bj}}}}{{{h{Nj}}{h{Nj}}}{{Dj{Bj}}}}{{{h{ALh}}{h{ALh}}}{{Dj{Bj}}}}{{{h{AGh}}}{{Dj{{h{AOf}}}}}}{{{h{AJn}}}{{Dj{{h{AOf}}}}}}{{{h{AN`}}}{{Dj{{h{AOf}}}}}}{{{h{AHf}}}{{Dj{{h{AOf}}}}}}{{{h{ANb}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00000000000{{{h{c}}}If{}}00000000{c{{E`{e}}}{}{}}00000000000000000000000{{{h{c}}}Ij{}}00000000000????????????`````````````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{AOh{{Dj{c}}}{}}{{{h{AFf}}}AFf}{{{h{ADd}}}ADd}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{AFf}}{h{AFf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AFf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ADd}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{AOjAFf}{AO`AFf}{AOlAFf}{AOnAFf}{AM`AFf}{B@`AFf}6{ce{}{}}0`{ADdADd}{{{h{AFf}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}066````{{cACl}{{E`{B@b}}}Eb}0{{B@bcACl}E`Hn}{{B@dcACl}E`Hn}10{ACl{{h{G`}}}}{c{{E`{e}}}EbB@b}`{{{h{c}}e}E`B@bHn}{c{{E`{{Dj{e}}}}}EbB@d}{{{h{{Dj{c}}}}e}E`B@dHn}3`210```````{{If{h{G`}}}If}{{{h{AhIf}}{h{G`}}}Bh}{{{h{{ADl{ce}}}}}{{h{e}}}{}B@f}{{{h{Ah{ADl{ce}}}}{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{If}}}{{h{{Ad{A`}}}}}}{{{h{{ADl{A`}}}}}}{{{h{Ah{ADl{ce}}}}}{{h{Ah{Ad{c}}}}}{}B@f}{{{h{Ah{ADl{ce}}}}}{{h{Ah{ADl{ce}}}}}{}B@f}{{{h{AhIf}}}{{h{AhG`}}}}{{{h{Ah{ADl{ce}}}}}{}{}B@f}31{{{h{AhIf}}}{{h{Ah{ADl{A`}}}}}}{{{h{{ADl{ce}}}}}{}{}B@f}{{{h{{ADl{ce}}}}}{{h{{ADl{ce}}}}}{}B@f}{{{h{{ADl{ce}}}}}{{h{{Ad{c}}}}}{}B@f}{{{h{If}}}{{h{B@h}}}}{{{h{If}}}{{h{B@j}}}}{{{h{If}}}{{h{G`}}}}<30{{{h{c}}}{{h{e}}}{}{}}04001{{{h{Ahc}}}{{h{Ahe}}}{}{}}00<0:{{{h{{ADl{ce}}}}}Hj{}B@f}{{{h{If}}}Hj}{{{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{AhIf}}}Bh}{{{h{AOb}}}AOb}{{{h{B@l}}}B@l}{{{h{{ADl{ce}}}}}{{ADl{ce}}}Al{B@fAl}}{{{h{If}}}If}{{{h{Ah{ADl{ce}}}}{h{{ADl{ce}}}}}BhAl{B@fAl}}{{{h{AhIf}}{h{If}}}Bh}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{{ADl{ce}}}}{h{{ADl{ce}}}}}BjBlB@f}{{{h{If}}{h{If}}}Bj}{Bn{{E`{{ADl{A`}}B@n}}}}{Bn{{E`{IfB@n}}}}{{{h{Ahc}}}{{E`{IfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Db}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Kh}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BA`}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{A`}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BAb}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Kb}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{AAh}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BAd}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Fl}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{{Ff{DhBAf}}}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{{ADl{A`}}}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Ln}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Ed}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{AAf}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Cd}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Nn}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Kd}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BAh}}AC`}}}{ACbACd}}{{{h{{ADl{Fl}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Db}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{AAf}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Kd}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Ln}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{A`}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{{ADl{A`}}}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BAd}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Nn}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{{Ff{DhBAf}}}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Kh}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Cd}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Kb}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{AAh}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BA`}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BAb}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Ed}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BAh}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{If}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AhIf}}{h{G`}}}Bh}{{{h{G`}}}{{E`{{ADl{A`}}B@l}}}}{{{h{G`}}}{{E`{{ADl{A`}}AOb}}}}{{{h{Ah{ADl{ce}}}}}BhEhB@f}{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{Hf{{h{Ahc}}{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{Ah{ADl{ce}}}}i}Bh{}B@fEh{{Hf{{h{Ahc}}}{{Hd{g}}}}}}{{}{{ADl{c}}}{}}{{}If}{{{h{{ADl{ce}}}}}{{h{{Ad{c}}}}}{}B@f}{{{h{If}}}{{h{G`}}}}{{{h{Ah{ADl{ce}}}}}{{h{Ah{Ad{c}}}}}{}B@f}{{{h{AhIf}}}{{h{AhG`}}}}{c{{E`{{ADl{e}}}}}EbBAj}{c{{E`{If}}}Eb}{{{h{Ah{ADl{ce}}}}g}{{BAl{ce}}}{}B@f{{Hh{Hj}}}}{{{h{AhIf}}c}BAn{{Hh{Hj}}}}{{{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{{h{{Ad{A`}}}}}If}0{{{h{AhEn}}{h{{Ad{A`}}}}}{{E`{BhF`}}}}{{{h{AOb}}{h{AOb}}}Ef}{{{h{B@l}}{h{B@l}}}Ef}{{{h{{ADl{eg}}}}{h{{h{{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{Ah{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{{Ab{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{Ab{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{ADl{ci}}}}}Ef{}{{Eh{c}}}B@fB@f}{{{h{{ADl{eg}}}}{h{{Ad{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{If}}{h{{AEh{G`}}}}}Ef}{{{h{If}}{h{If}}}Ef}{{{h{If}}{h{{h{G`}}}}}Ef}{{{h{If}}{h{BBf}}}Ef}{{{h{If}}{h{G`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000`{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{El{}{{Ej{c}}}}}}{{{h{Ah{ADl{ce}}}}g}BhBBhB@f{{El{}{{Ej{{h{c}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{AJb{G`}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{If}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{BBj}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{h{G`}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{AEh{G`}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{h{BBj}}}}}}}}{{{h{Ah{ADl{ce}}}}{h{{Ad{c}}}}}BhAlB@f}{{{h{Ah{ADl{ce}}}}g}BhAlB@f{{Hh{Hj}}}}{{{h{AhIf}}c}Bh{{Hh{Hj}}}}{{{h{Ah{ADl{ce}}}}c}Bh{}B@f}{{{h{Ah{ADl{ce}}}}{h{c}}}BhBBhB@f}{{{h{AhIf}}{h{G`}}}Bh}{{{h{AhIf}}BBj}Bh}{{{h{AhIf}}If}Bh}{{{h{AhIf}}{AEh{G`}}}Bh}{{{h{AhIf}}{h{BBj}}}Bh}{{{h{Ah{ADl{ce}}}}Hj}BhBBhB@f}{{{h{Ah{ADl{ce}}}}Hj}Bh{}B@f}{{{h{AhIf}}Hj}Bh}0{{{h{Ah{ADl{ce}}}}g}{{BBl{cge}}}{}B@f{{Hf{{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{Ah{ADl{A`}}}}}{{E`{BhACf}}}}{{{h{Ah{ADl{A`c}}}}}{{E`{BhBBn}}}B@f}{{{h{AOb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{B@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{ADl{ce}}}}{h{AhEn}}}{{E`{BhF`}}}FbB@f}{{{h{If}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{BC`AOb}{B@lAOb}{BCbAOb}{AO`AOb}4{BCd{{ADl{M`}}}}{{{BCf{ce}}}{{ADl{ce}}}{}B@f}{{{h{Ah{Ad{c}}}}}{{ADl{c}}}Al}{{{AEh{{Ad{c}}}}}{{ADl{c}}}{}}{BCh{{ADl{A`}}}}{{{Ab{c}}}{{ADl{c}}}{}}{{{BCj{ce}}}{{ADl{ce}}}{}B@f}{If{{ADl{A`}}}}{{{h{{Ad{c}}}}}{{ADl{c}}}Al}{{{AJb{{Ad{c}}e}}}{{ADl{ce}}}{}B@f}{Cf{{ADl{A`}}}}{BCl{{ADl{A`}}}}{cc{}}{{{h{Ah{Ab{c}}}}}{{ADl{c}}}Al}{{{h{G`}}}{{ADl{A`}}}}{BCn{{ADl{BD`}}}}{{{h{{Ab{c}}}}}{{ADl{c}}}Al}{{{h{G`}}}If}{{{h{If}}}If}6{{{AJb{G`}}}If}{BBjIf}{{{h{AhG`}}}If}{{{AEh{G`}}}If}{{{h{G`}}}{{E`{{ADl{A`}}}}}}{e{{ADl{c}}}{}{{El{}{{Ej{c}}}}}}{cIf{{El{}{{Ej{BBj}}}}}}{cIf{{El{}{{Ej{{AEh{G`}}}}}}}}{cIf{{El{}{{Ej{{h{G`}}}}}}}}{cIf{{El{}{{Ej{{h{BBj}}}}}}}}{cIf{{El{}{{Ej{{AJb{G`}}}}}}}}{cIf{{El{}{{Ej{If}}}}}}{{HjHj}{{ADl{c}}}{}}{{A`HjHj}If}{{HjHjc}{{ADl{ec}}}B@f{}}{{{h{G`}}}{{E`{If}}}}{{{h{{Ad{AEl}}}}}{{E`{IfBDb}}}}{{{h{{Ad{AEl}}}}}If}{{{h{{Ad{A`}}}}}{{E`{IfBDb}}}}{{{h{{Ad{A`}}}}}If}10{{{ADl{A`}}}{{E`{IfBDd}}}}{{{h{{Ad{A`}}}}}{{AEh{G`}}}}{{{ADl{A`}}}If}{{{h{{ADl{ce}}}}{h{Ahg}}}BhGhB@fGf}{{{h{If}}{h{Ahc}}}BhGf}{{{h{{ADl{A`}}}}}Hj}{{{h{{ADl{ce}}}}g}h{}B@f{{Gj{{Ad{c}}}}}}{{{h{If}}c}h{{Gj{G`}}}}{{{h{Ah{ADl{ce}}}}g}{{h{Ah}}}{}B@f{{Gj{{Ad{c}}}}}}{{{h{AhIf}}c}{{h{Ah}}}{{Gj{G`}}}}{{{h{Ah{ADl{ce}}}}Hjc}Bh{}B@f}{{{h{AhIf}}HjBBj}Bh}{{{h{AhIf}}Hj{h{G`}}}Bh}{ce{}{}}000{{{ADl{Cj}}}BDf}{{{ADl{ce}}}{{AJb{{Ad{c}}e}}}{}B@f}{If{{AJb{G`}}}}{If{{ADl{A`}}}}{c{{E`{BCnBDh}}}{}}{If{{E`{BCnBDh}}}}{{{ADl{e}}}{}BDj{{BDl{c}}}}{If{{BDn{c}}}BDj}{{{ADl{{Ab{c}}e}}}{{ADl{ce}}}{}B@f}{{{h{{ADl{ce}}}}}{}{}B@f}{{{h{Ah{ADl{ce}}}}}{}{}B@f}{{{ADl{ce}}}{}{}B@f}{{{ADl{ce}}}{{Ff{HjHj}}}{}B@f}{If{{Ff{A`HjHj}}}}{{{ADl{ce}}}{{Ff{HjHje}}}{}B@f}{{{h{If}}{h{G`}}}}{{{h{B@l}}}A`}{{{h{If}}{h{G`}}}Ef}{{{h{{ADl{c}}}}}Ef{}}{{{h{{ADl{ce}}}}}Ef{}B@f}{{{h{If}}}Ef}33{{{h{{ADl{A`c}}}}}EfB@f}{{{ADl{ce}}}{{h{Ah{Ad{c}}}}}{}B@f}{If{{h{AhG`}}}}{{{h{{ADl{ce}}}}}Hj{}B@f}{{{h{If}}}Hj}{{{h{Ah{ADl{c}}}}{ADl{c}}}Bh{}}{{{h{{ADl{eg}}}}{h{{h{Ah{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{Ad{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{ADl{ci}}}}}Ef{}{{Eh{c}}}B@fB@f}{{{h{{ADl{eg}}}}{h{{h{{Ab{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{Ab{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{If}}{h{{h{G`}}}}}Ef}{{{h{If}}{h{{AEh{G`}}}}}Ef}{{{h{If}}{h{G`}}}Ef}{{}{{ADl{c}}}{}}{{}If}{c{{ADl{ec}}}B@f{}}{{{h{{ADl{ce}}}}{h{{ADl{cg}}}}}{{Dj{Bj}}}HlB@fB@f}{{{h{If}}{h{If}}}{{Dj{Bj}}}}{{{h{Ah{ADl{ce}}}}}{{Dj{c}}}{}B@f}{{{h{AhIf}}}{{Dj{BBj}}}}{{{h{Ah{ADl{ce}}}}g}{{Dj{c}}}{}B@f{{BE`{{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{Ah{ADl{ce}}}}c}Bh{}B@f}{{{h{AhIf}}BBj}Bh}{{{h{AhIf}}{h{G`}}}Bh}{{{h{Ah{ADl{ce}}}}c}{{E`{Bhc}}}{}B@f}{{{h{Ah{ADl{ce}}}}Hj}c{}B@f}{{{h{AhIf}}Hj}BBj}{{{h{AhIf}}c}BhBEb}{{{h{AhIf}}c{h{G`}}}Bh{{Hh{Hj}}}}{{{h{Ah{ADl{ce}}}}Hj}Bh{}B@f}{{{h{AhIf}}Hj}Bh}10{{{h{Ah{ADl{ce}}}}Hjc}BhAlB@f}{{{h{Ah{ADl{ce}}}}Hjg}Bh{}B@f{{Hf{}{{Hd{c}}}}}}{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{Hf{{h{c}}}{{Hd{Ef}}}}}}{{{h{AhIf}}c}Bh{{Hf{BBj}{{Hd{Ef}}}}}}{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{Hf{{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{{ADl{c}}}}e}E`IdHn}{{{h{If}}c}E`Hn}887{{{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{AhIf}}}Bh}{{{h{AOb}}}{{Dj{{h{AOf}}}}}}{{{h{Ah{ADl{ce}}}}}{{h{Ah{Ad{{BEd{c}}}}}}}{}B@f}{{{h{Ah{ADl{ce}}}}gi}{{BEf{e}}}{}B@f{{Hh{Hj}}}{{El{}{{Ej{c}}}}}}{{{h{Ah{ADl{ce}}}}}{{Ff{{h{Ah{Ad{c}}}}{h{Ah{Ad{{BEd{c}}}}}}}}}{}B@f}{{{h{Ah{ADl{ce}}}}Hj}{{ADl{ce}}}{}{AlB@f}}{{{h{AhIf}}Hj}If}{{{h{If}}{h{G`}}}{{Dj{{h{G`}}}}}}0{{{h{Ah{ADl{ce}}}}Hj}c{}B@f}{{{h{c}}}e{}{}}000{{{h{If}}}{{E`{{BEj{BEh}}BBn}}}}{{{h{{ADl{A`}}}}}{{E`{I`BEl}}}}{{{h{If}}}{{E`{I`BEl}}}}{{{h{c}}}If{}}00{{{h{Ah{ADl{ce}}}}Hj}Bh{}B@f}{{{h{AhIf}}Hj}Bh}{c{{E`{e}}}{}{}}0000000{{{h{Ah{ADl{ce}}}}Hj}{{E`{BhBEn}}}{}B@f}{{{h{AhIf}}Hj}{{E`{BhBEn}}}}10{Hj{{E`{{ADl{c}}BEn}}}{}}{Hj{{E`{IfBEn}}}}{{Hjc}{{E`{{ADl{ec}}BEn}}}B@f{}}{{{h{c}}}Ij{}}000{ce{}{}}000{Hj{{ADl{c}}}{}}{HjIf}{{Hjc}{{ADl{ec}}}B@f{}}{{{h{Ah{ADl{A`c}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}B@f}{{{h{Ah{ADl{A`}}}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{Ah{ADl{A`c}}}}{h{{Ad{A`}}}}}{{E`{BhBBn}}}B@f}{{{h{AhIf}}BBj}{{E`{BhF`}}}}{{{h{AhIf}}{h{G`}}}{{E`{BhF`}}}}{{{h{Ah{ADl{A`c}}}}{h{{Ad{BF`}}}}}{{E`{HjBBn}}}B@f}```````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{BCb}}}BCb}{{{h{BC`}}}BC`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{BCb}}{h{BCb}}}Ef}{{{h{BC`}}{h{BC`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{BCb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BC`}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{{{h{BCb}}}{{Ff{DhDh}}}}{ce{}{}}0{{{h{BC`}}}Hj}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}055``````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{BFb}}}BFb}{{{h{BFd}}}BFd}{{{h{BFf}}}BFf}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}}{{h{c}}}BFnBG`}{c{{E`{{ADl{A`}}BFd}}}{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}{{E`{{ADl{A`}}BFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{c{h{e}}}{{E`{{ADl{A`}}BFd}}}{{AD`{{Ad{A`}}}}}BFl}{{c{h{Ah{Ad{A`}}}}{h{e}}}{{E`{HjBFf}}}{{AD`{{Ad{A`}}}}}BFl}{{c{h{Ah{ADl{A`}}}}{h{e}}}{{E`{BhBFd}}}{{AD`{{Ad{A`}}}}}BFl}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFf}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{ADl{A`}}}}}{{E`{BhBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{HjHj}`{cIf{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}IfBFnBG`{{AD`{{Ad{A`}}}}}}{{c{h{e}}}If{{AD`{{Ad{A`}}}}}BFl}{{c{h{Ah{Ad{A`}}}}{h{e}}}{{E`{HjBFb}}}{{AD`{{Ad{A`}}}}}BFl}{{c{h{AhIf}}{h{e}}}Bh{{AD`{{Ad{A`}}}}}BFl}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFb}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{AhIf}}}BhBFnBG`{{AD`{{Ad{A`}}}}}}{{HjEf}{{Dj{Hj}}}}`{{{h{BFb}}{h{BFb}}}Ef}{{{h{BFd}}{h{BFd}}}Ef}{{{h{BFf}}{h{BFf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{BFb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BFd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BFf}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{BFdBFf}1{ce{}{}}00``{{{h{BFf}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00555`````````````{{{h{BGb}}}{{h{G`}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{BGb}}}BGb}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{BGb}}{h{BGb}}}Ef}{{{h{BGd}}{h{BGd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{BGb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGd}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ce{}{}}0{{{h{G`}}}{{E`{BGbBGd}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}{{{h{G`}}}{{E`{BGb}}}}111{{{h{c}}}Ij{}}066`{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{BGf{c}}}}{h{AhEn}}}{{E`{BhF`}}}BFl}:9{{{h{{Ad{A`}}}}{h{c}}}{{BGf{c}}}BFl}7664:````````````33332222{{{h{BGh}}}BGh}{{{h{BGj}}}BGj}{{{h{BGl}}}BGl}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}}{{h{c}}}BFnBG`}{{{h{BGh}}}h}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}{{E`{{ADl{A`}}BFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFf}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{ADl{A`}}}}}{{E`{BhBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{BG`}}}Hj}{{}BGj}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}IfBFnBG`{{AD`{{Ad{A`}}}}}}{{{h{BFn}}}Ef}{{{h{BGj}}}Ef}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFb}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{AhIf}}}BhBFnBG`{{AD`{{Ad{A`}}}}}}{{{h{BGl}}{h{BGl}}}Ef}{{{h{BGn}}{h{BGn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{BGh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000`{ce{}{}}000{{{h{BGb}}BGj}BGh}?{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}0000000{{{h{c}}}Ij{}}0004444{{BGjEf}BGj}{{BGjBGl}BGj}1```````````````{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}}{{h{c}}}BFnBG`}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}{{E`{{ADl{A`}}BFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFf}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{ADl{A`}}}}}{{E`{BhBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}IfBFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFb}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{AhIf}}}BhBFnBG`{{AD`{{Ad{A`}}}}}}`{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{BH`{ce}}}}{h{AhEn}}}{{E`{BhF`}}}BFlBHb}{cc{}}{ce{}{}}{{{BH`{ce}}}eBFlBHb}{{c{h{e}}}{{BH`{ec}}}BHbBFl}{{{h{Ah{BH`{ce}}}}{h{Ah{Ad{A`}}}}}{{E`{HjBBn}}}BFlBHb}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}5```9988{{{h{AhBHd}}{h{G`}}}Bh}{{{h{Ah{BHf{ce}}}}}BhBFlBHh}{{{h{Ah{BHf{ce}}}}}{{E`{eBBn}}}BFlBHh}{{{h{Ah{BHf{ce}}}}}{{E`{BhBBn}}}BFlBHh}{{{h{Ah{BHj{ce}}}}}{{E`{BhBBn}}}BFlBHd}{{{h{{BHf{ce}}}}{h{AhEn}}}{{E`{BhF`}}}BFlBHh}<<{{c{h{e}}}{{BHj{ec}}}BHdBFl}<<{{{BHf{ce}}}eBFlBHh}{{{BHj{ce}}}eBFlBHd}{{c{h{e}}}{{BHf{ec}}}BHhBFl}{{{h{c}}}{{BHj{cIf}}}BFl}<<<<;;{ce{}{}}0{{{h{Ah{BHf{ce}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}BFlBHh}{{{h{Ah{BHj{ce}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}BFlBHd}`````````{{{h{BA`}}}{{h{{Ab{A`}}}}}}{{{h{AhBA`}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBA`}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhBA`}}}A`}{{{h{BA`}}}A`}{{{h{BAh}}}{{h{Cd}}}}5{{{h{BA`}}}{{h{{Ad{A`}}}}}}``{{{h{c}}}{{h{e}}}{}{}}00170000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00670000{{{h{Fl}}Ed}{{Ff{EdEd}}}}{{{h{BHl}}}BHl}{{{h{BAh}}}BAh}{{{h{BA`}}}BA`}{{{h{BHn}}}BHn}{{{h{BI`}}}BI`}{{{h{BIb}}}BIb}{{{h{BId}}}BId}{{{h{c}}{h{Ahe}}}Bh{}{}}000000{{{h{BAh}}{h{BAh}}}Bj}{{{h{BA`}}{h{BA`}}}Bj}{{{h{BHn}}{h{BHn}}}Bj}{{{h{BI`}}{h{BI`}}}Bj}{{{h{BId}}{h{BId}}}Bj}{{{h{Ahc}}}{{E`{BAhAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BA`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BHnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BI`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BIdAC`}}}{ACbACd}}20{{{h{BAh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BA`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BHn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BI`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BId}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{}BA`}{c{{E`{BA`}}}Eb}{{{h{BHl}}{h{BHl}}}Ef}{{{h{BAh}}{h{BAh}}}Ef}{{{h{BA`}}{h{BA`}}}Ef}{{{h{BHn}}{h{BHn}}}Ef}{{{h{BI`}}{h{BI`}}}Ef}{{{h{BIb}}{h{BIb}}}Ef}{{{h{BId}}{h{BId}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000000000{{{h{BHl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BAh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BA`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{BHn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BI`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BIb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BId}}{h{AhEn}}}{{E`{BhF`}}}}{AO`BHl}{cc{}}0{{{h{{Ab{A`}}}}}BA`}1{{{Ab{A`}}}BA`}2222{{{h{O`}}EdDh{h{{Ad{Hj}}}}}{{E`{BHnBHl}}}}{{{h{G`}}}{{E`{BA`BIf}}}}{{{h{BI`}}{h{O`}}}{{E`{BIdBIb}}}}{{{h{G`}}}{{E`{BA`}}}}{{{h{BAh}}{h{Ahc}}}BhGf}{{{h{BA`}}{h{Ahc}}}BhGf}{{{h{BHn}}{h{Ahc}}}BhGf}{{{h{BI`}}{h{Ahc}}}BhGf}{{{h{BId}}{h{Ahc}}}BhGf}``{{{h{BA`}}c}h{}}`{ce{}{}}000000{{{h{BA`}}}Ef}{{{h{BA`}}}Hj}`{{{h{BAh}}{h{BAh}}}{{Dj{Bj}}}}{{{h{BA`}}{h{BA`}}}{{Dj{Bj}}}}{{{h{BHn}}{h{BHn}}}{{Dj{Bj}}}}{{{h{BI`}}{h{BI`}}}{{Dj{Bj}}}}{{{h{BId}}{h{BId}}}{{Dj{Bj}}}}`{{{h{BA`}}c}E`Hn}`{{{h{BHl}}}{{Dj{{h{AOf}}}}}}{{{h{BIb}}}{{Dj{{h{AOf}}}}}}{BA`{{Ab{A`}}}}{{{h{c}}}e{}{}}000000{{{h{c}}}If{}}00`{c{{E`{e}}}{}{}}0{{{h{{Ad{A`}}}}}{{E`{BA`}}}}111111111111`{{{h{c}}}Ij{}}000000{ce{}{}}000000{{{h{c}}{Ff{EdEd}}}BA`{{AD`{{Ad{A`}}}}}}````````````{{{h{Ah{BIh{c}}}}{h{{Ad{A`}}}}}BhACh}{{{h{Ah{BIj{c}}}}{h{{Ad{A`}}}}}BhACh}{{{h{Ah{BIh{c}}}}g}{{E`{BhBIl}}}ACh{{Dl{Md}}}{{AFd{{h{AAd}}}{{Hd{{E`{eBIl}}}}}}}}{{{h{Ah{BIh{c}}}}}BhACh}{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000{{{h{BIn}}}BIn}{{{h{c}}{h{Ahe}}}Bh{}{}}`{{{h{BIn}}{h{BIn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{BIn}}{h{Kd}}}Kd}{{{h{Ah{BIh{c}}}}}{{E`{HjACf}}}ACh}{{{h{Ah{BIj{c}}}}}{{E`{HjACf}}}ACh}{{{h{Ah{BJ`{c}}}}}{{E`{HjACf}}}ACh}{{{h{BIl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BIn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00000{AO`BIl}{ACfBIl}22{ce{}{}}0000000{{{h{BJb}}{h{Ahc}}e}{{E`{EfBIl}}}{ACbACd}Gn}{{{h{BJd}}{h{Ahc}}e}{{E`{EfBIl}}}{ACbACd}Gn}{{{h{BIn}}{h{Db}}c}{{E`{EfBIl}}}Gn}210{{{h{Ahc}}{h{O`}}}{{BIh{c}}}ACh}{{{h{Db}}}BJb}{{EdEdEdA`}BJd}{{{h{Ahc}}EdEdEdA`}{{BIj{c}}}ACh}{{{h{Ahc}}}{{BJf{c}}}{ACbACd}}{{{h{Ahc}}}{{BJ`{c}}}ACh}{{{h{{Ad{A`}}}}}BIn}{{{h{O`}}e}{{E`{BInBIl}}}{{Dl{Md}}}{{AFd{{h{AAd}}}{{Hd{{E`{cBIl}}}}}}}}{{{h{Ah{BJf{c}}}}A`}{{E`{EdACf}}}{ACbACd}}{{{h{BIl}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000000000000000{{{h{c}}}Ij{}}0000000{ce{}{}}0000000{{{h{Ah{BJ`{c}}}}EdA`}{{E`{HjACf}}}ACh}`````````````````````````````{{{h{BJh}}}{{h{{Ab{A`}}}}}}{{{h{BJj}}}{{h{{Ab{A`}}}}}}{{{h{AhBJh}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBJh}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhBJj}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBJj}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhBJh}}}A`}{{{h{AhBJj}}}A`}{{{h{BJh}}}A`}{{{h{BJj}}}A`}9{{{h{BJh}}}{{h{{Ad{A`}}}}}}{{{h{BJj}}}{{h{{Ad{A`}}}}}}:{{{h{BD`}}}{{h{{Ad{BD`}}}}}}{{{h{BCn}}}{{h{{Ad{BD`}}}}}}{{{h{c}}}{{h{e}}}{}{}}04>0=3000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0=<:0;000000{{}Ef}0``````{{{h{BCn}}BD`}BCn}``````{{{h{BCn}}BD`}BJl}{{{h{AEf}}{h{{Jd{c}}}}BD`}{{E`{AEfBDh}}}Jl}{{{h{AEf}}BD`}{{E`{{Ff{AJlBJh}}BDh}}}}{{{h{BJh}}}BJh}{{{h{BJj}}}BJj}{{{h{BJn}}}BJn}{{{h{AEf}}}AEf}{{{h{BD`}}}BD`}{{{h{BCn}}}BCn}{{{h{BDh}}}BDh}{{{h{BK`}}}BK`}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000{{{h{BJh}}{h{BJh}}}Bj}{{{h{BJj}}{h{BJj}}}Bj}{{{h{AEf}}{h{AEf}}}Bj}{{{h{BD`}}{h{BD`}}}Bj}{{{h{BCn}}{h{BCn}}}Bj}{{{h{{Ad{A`}}}}}{{E`{BJnBDh}}}}{{{h{{Ad{A`}}}}}{{E`{AEfBDh}}}}{{}BJj}{{}BCn}``````{{{h{BJn}}{h{{Jd{c}}}}{h{e}}}{{E`{BJnBDh}}}AGd{{AD`{{Ad{BD`}}}}}}{{{h{AEf}}{h{{Jd{c}}}}{h{e}}}{{E`{AEfBDh}}}Jl{{AD`{{Ad{BD`}}}}}}{c{{E`{BJh}}}Eb}{c{{E`{BJj}}}Eb}{c{{E`{BJn}}}Eb}{c{{E`{AEf}}}Eb}{c{{E`{BD`}}}Eb}{c{{E`{BCn}}}Eb}{{{h{BJn}}}{{Ab{A`}}}}{{{h{AEf}}}{{Ab{A`}}}}{{{h{BJh}}{h{BJh}}}Ef}{{{h{BJj}}{h{BJj}}}Ef}{{{h{BJn}}{h{BJn}}}Ef}{{{h{AEf}}{h{AEf}}}Ef}{{{h{BD`}}{h{BD`}}}Ef}{{{h{BCn}}{h{BCn}}}Ef}{{{h{BDh}}{h{BDh}}}Ef}{{{h{BK`}}{h{BK`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000000000{{{h{BCn}}c}BCn{{AD`{{Ad{BD`}}}}}}{{{h{BJn}}{h{{Jd{c}}}}}BJjAGd}{{{h{AEf}}}BJj}{{{h{BJh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{BJj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{BJn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AEf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BD`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BCn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BDh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BK`}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{Ab{A`}}}BJh}{{{h{{Ab{A`}}}}}BJh}22{{{h{{Ab{A`}}}}}BJj}{{{Ab{A`}}}BJj}44{DhBD`}5{{{h{{Ad{BD`}}}}}BCn}{{{ADl{BD`}}}BCn}7{BK`BDh}{AO`BDh}{AObBDh}{JjBDh};;{Dh{{E`{BD`BDh}}}}{{{h{G`}}}{{E`{BJhBIf}}}}{{{h{G`}}}{{E`{BJjBIf}}}}{cBCn{{El{}{{Ej{BD`}}}}}}3{{{h{{Jd{c}}}}{h{BJn}}}AEfAGd}{{{h{G`}}}{{E`{BJh}}}}{{{h{G`}}}{{E`{BJj}}}}{{{h{G`}}}{{E`{BJnBDh}}}}{{{h{G`}}}{{E`{AEfBDh}}}}{{{h{G`}}}{{E`{BD`BDh}}}}{{{h{G`}}}{{E`{BCnBDh}}}}{{{h{BJn}}BKb{h{{Jd{c}}}}}{{E`{{Dj{AAn}}}}}AGd}{{{h{BCn}}}BJl}{{{h{BJh}}{h{Ahc}}}BhGf}{{{h{BJj}}{h{Ahc}}}BhGf}{{{h{AEf}}{h{Ahc}}}BhGf}{{{h{BD`}}{h{Ahc}}}BhGf}{{{h{BCn}}{h{Ahc}}}BhGf}{{{h{BJn}}{h{{Jd{c}}}}}KfAGd}{{{h{AEf}}}Kf}{BD`{{E`{BD`BDh}}}}{{{h{BJh}}c}h{}}{{{h{BJj}}c}h{}}{{{h{BCn}}c}h{}}{ce{}{}}00000000{{BCnBD`}BCn}{BKd{{E`{BCnBDh}}}}{c{{E`{BCnBDh}}}{}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}4{{{h{BCn}}}}{{{h{BK`}}}Hj}{{{h{BJh}}}Ef}{{{h{BJj}}}Ef}{{{h{BCn}}}Ef}{{{h{BD`}}}Ef}10{{{h{BJh}}}Hj}{{{h{BJj}}}Hj}{{{h{BCn}}}Hj}{{}BCn}``````{{c{h{{Ad{A`}}}}}{{E`{BJnBDh}}}{{AHb{ABf}}}}{{{h{AhBJl}}}Dj}{{{h{BCn}}}BJl}``````{{{h{BJh}}{h{BJh}}}{{Dj{Bj}}}}{{{h{BJj}}{h{BJj}}}{{Dj{Bj}}}}{{{h{AEf}}{h{AEf}}}{{Dj{Bj}}}}{{{h{BD`}}{h{BD`}}}{{Dj{Bj}}}}{{{h{BCn}}{h{BCn}}}{{Dj{Bj}}}}``````{{{h{BJh}}c}E`Hn}{{{h{BJj}}c}E`Hn}{{{h{BJn}}c}E`Hn}{{{h{AEf}}c}E`Hn}{{{h{BD`}}c}E`Hn}{{{h{BCn}}c}E`Hn}{{{h{BDh}}}{{Dj{{h{AOf}}}}}}{{{h{BCn}}BD`}BJl}{BJh{{Ab{A`}}}}{BJj{{Ab{A`}}}}{{BJn{h{{Jd{c}}}}}AG`AGd}{{{h{c}}}e{}{}}0000000{BJnAAn}{AEfAAl}{{{h{c}}}If{}}0000000{{{h{BCn}}}{{ADl{Dh}}}}{AEfJb}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}{{{h{{Ad{A`}}}}}{{E`{BJh}}}}1{{{h{{Ad{A`}}}}}{{E`{BJj}}}}2222222222222222{{{h{c}}}Ij{}}00000000{ce{}{}}00000000{{{h{BJn}}{h{{Jd{c}}}}}BJjAGd}{{{h{AEf}}{h{{Jd{c}}}}}BJjAGd}`````````````````````````````````{{{h{Fl}}}Db}{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{Fl}}}Fl}{{{h{BKf}}}BKf}{{{h{Ob}}}Ob}{{{h{BKh}}}BKh}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{Fl}}{h{Fl}}}Bj}{{{h{BKf}}{h{BKf}}}Bj}{{{h{Ahc}}}{{E`{FlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BKfAC`}}}{ACbACd}}1{{{h{Fl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BKf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{}BKf}{c{{E`{Fl}}}Eb}{c{{E`{BKf}}}Eb}{{{h{Fl}}c}ACn{{AD`{Nh}}}}{{{h{Fl}}}ADb}{{{h{Fl}}{h{Fl}}}Ef}{{{h{BKf}}{h{BKf}}}Ef}{{{h{Ob}}{h{Ob}}}Ef}{{{h{BKh}}{h{BKh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{Fl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BKf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Ob}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKh}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{AO`Ob}11{AO`BKh}{BBbBKf}{{{h{Fl}}{h{Ahc}}}BhGf}{{{h{BKf}}{h{Ahc}}}BhGf}`{ce{}{}}000{{{h{BKf}}A`}Ef}``{{{h{Fl}}{h{Fl}}}{{Dj{Bj}}}}{{{h{BKf}}{h{BKf}}}{{Dj{Bj}}}}`{{{h{Fl}}c}E`Hn}{{{h{BKf}}c}E`Hn}{{{h{Ob}}}{{Dj{{h{AOf}}}}}}{{{h{BKh}}}{{Dj{{h{AOf}}}}}}{{{h{Fl}}}ABh}`{BKfBBb}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}0000000`{{{h{c}}}Ij{}}000{{{h{Fl}}ABh}{{E`{DbBKh}}}}`>>>>{{{h{Fl}}}J`}``````````````````{{{h{Oh}}}{{h{{Ab{A`}}}}}}{{{h{AhOh}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhOh}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhOh}}}A`}{{{h{Oh}}}A`}4{{{h{Oh}}}{{h{{Ad{A`}}}}}}5{{{h{c}}}{{h{e}}}{}{}}145{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{Oh}}}Oh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Oh}}{h{Oh}}}Bj}{c{{E`{Oh}}}Eb}{{{h{Oh}}{h{Oh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{Oh}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}{{{h{{Ab{A`}}}}}Oh}{{{Ab{A`}}}Oh}{DbOh}{{{h{G`}}}{{E`{OhBIf}}}}{{{h{G`}}}{{E`{Oh}}}}{cO`{{AD`{Nh}}}}{{{h{Oh}}{h{Ahc}}}BhGf}{{{h{Oh}}c}h{}}{ce{}{}}{{{h{Oh}}}Ef}{{{h{Oh}}}Hj}{{{h{Oh}}{h{Oh}}}{{Dj{Bj}}}}{{{h{Oh}}c}E`Hn}{Oh{{Ab{A`}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}{{{h{{Ad{A`}}}}}{{E`{Oh}}}}1{{{h{c}}}Ij{}}{cOh{{AD`{Nh}}}}{CnOh}<```````````````````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{Oj}}Oj}Ef}{{{h{c}}Oj}Ef{}}{{{h{c}}Ol}Ef{}}{{{h{AJd}}}AJd}{{{h{BKj}}}BKj}{{{h{AJf}}}AJf}{{{h{BKl}}}BKl}{{{h{BKn}}}BKn}{{{h{Oj}}}Oj}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{AJd}}{h{AJd}}}Bj}{{{h{AJf}}{h{AJf}}}Bj}{{{h{Ahc}}}{{E`{OjAC`}}}{ACbACd}}{{{h{Oj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{c{{E`{AJd}}}Eb}{c{{E`{AJf}}}Eb}{c{{E`{Oj}}}Eb}{{{h{AJd}}{h{AJd}}}Ef}{{{h{BKj}}{h{BKj}}}Ef}{{{h{AJf}}{h{AJf}}}Ef}{{{h{BKl}}{h{BKl}}}Ef}{{{h{BKn}}{h{BKn}}}Ef}{{{h{Oj}}{h{Oj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000{{{h{AJd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AJf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Oj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{BL`BKj}111{BL`BKl}2{AJdOj}{AJfOj}{BLbOj}5{Dh{{E`{AJdBKn}}}}{Dh{{E`{AJfBKn}}}}{DhOj}{Dh{{E`{OjBKn}}}}{{{h{G`}}}{{E`{AJdBKj}}}}{{{h{G`}}}{{E`{AJfBKl}}}}{{{h{G`}}}{{E`{OjAFn}}}}{{{h{G`}}}{{E`{AJd}}}}{{{h{G`}}}{{E`{AJf}}}}{{{h{G`}}}{{E`{Oj}}}}6{{{h{G`}}}{{E`{OjAHn}}}}{{{h{AJd}}{h{Ahc}}}BhGf}{{{h{AJf}}{h{Ahc}}}BhGf}{{{h{Oj}}{h{Ahc}}}BhGf}{ce{}{}}00000{{{h{Oj}}}Ef}0{{{h{Oj}}Oj}Ef}0{{{h{Oj}}AJdAJf}Ef}{{{h{AJd}}{h{AJd}}}{{Dj{Bj}}}}{{{h{AJf}}{h{AJf}}}{{Dj{Bj}}}}{{{h{Oj}}{h{Oj}}}{{Dj{Bj}}}}{{{h{c}}{h{e}}}Ef{}{}}{{{h{c}}h}Ef{}}0{{{h{c}}{h{Mj}}}{{Dj{AAj}}}{}}0{{{h{c}}{h{{Ff{MjLn}}}}}{{Dj{{Ff{JbHj}}}}}{}}{{{h{c}}{h{Mj}}}{{Dj{Jb}}}{}}33{{{h{c}}}{{Dj{{h{{AKf{AKd{Ff{CfAGj}}}}}}}}}{}}{{{h{c}}{h{e}}}{{Dj{Hj}}}{}{}}{{{h{c}}{h{e}}{h{Ln}}}{{Dj{Hj}}}{}{}}{{{h{AJd}}c}E`Hn}{{{h{AJf}}c}E`Hn}{{{h{Oj}}c}E`Hn}{{{h{BKj}}}{{Dj{{h{AOf}}}}}}{{{h{BKl}}}{{Dj{{h{AOf}}}}}}{{{h{BKn}}}{{Dj{{h{AOf}}}}}}{AJdDh}{AJfDh}{OjDh}{{{h{c}}}e{}{}}00000{{{h{c}}}If{}}00000{c{{E`{e}}}{}{}}{{{h{G`}}}{{E`{AJd}}}}{{{AJb{G`}}}{{E`{AJd}}}}{If{{E`{AJd}}}}3{{{AJb{G`}}}{{E`{AJf}}}}4{If{{E`{AJf}}}}{{{h{G`}}}{{E`{AJf}}}}666{{{AJb{G`}}}{{E`{Oj}}}}{If{{E`{Oj}}}}{{{h{G`}}}{{E`{Oj}}}}999999{{{h{c}}}Ij{}}00000{ce{}{}}00000`````````````````{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000{{{h{c}}Oj}Ef{}}{{{h{c}}Ol}Ef{}}{{{h{Ol}}Ol}Ef}{{{h{BLd}}}BLd}{{{h{BLf}}}BLf}{{{h{AGl}}}AGl}{{{h{Ol}}}Ol}{{{h{BLh}}}BLh}{{{h{BLj}}}BLj}{{{h{BLl}}}BLl}{{{h{c}}{h{Ahe}}}Bh{}{}}000000{{{h{BLd}}{h{BLd}}}Bj}{{{h{BLf}}{h{BLf}}}Bj}{{}BLd}{{}BLf}{c{{E`{BLd}}}Eb}{c{{E`{BLf}}}Eb}{c{{E`{Ol}}}Eb}{{{h{BLh}}}Dh}{{{h{BLd}}{h{BLd}}}Ef}{{{h{BLf}}{h{BLf}}}Ef}{{{h{AGl}}{h{AGl}}}Ef}{{{h{Ol}}{h{Ol}}}Ef}{{{h{BLh}}{h{BLh}}}Ef}{{{h{BLj}}{h{BLj}}}Ef}{{{h{BLl}}{h{BLl}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000000000{{{h{BLd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AGl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Ol}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLl}}{h{AhEn}}}{{E`{BhF`}}}}0{AElBLd}{cc{}}00{BLdOl}1{BLfOl}{AEjOl}333{AElBLf}{AElOl}{Dh{{E`{OlBLh}}}}71{Dh{{E`{BLfAGl}}}}{Dh{{E`{OlAGl}}}}10{On{{E`{OlBLh}}}}{{{h{G`}}}{{E`{BLd}}}}{{{h{G`}}}{{E`{BLf}}}}{{{h{BLd}}{h{Ahc}}}BhGf}{{{h{BLf}}{h{Ahc}}}BhGf}{{{h{Ol}}{h{Ahc}}}BhGf}``{ce{}{}}000000{{{h{Ol}}}Ef}0{{{h{Ol}}Ol}Ef}{{{h{Ol}}On}Ef}1{{{h{Ol}}BLdBLf}Ef}{{{h{Ol}}BLd}{{E`{EfBLj}}}}{{{h{Ol}}BLf}{{E`{EfBLl}}}}{DhAGl}{{{h{BLd}}{h{BLd}}}{{Dj{Bj}}}}{{{h{BLf}}{h{BLf}}}{{Dj{Bj}}}}{{{h{Ol}}{h{Ol}}}{{Dj{Bj}}}}{{{h{c}}{h{e}}}Ef{}{}}{{{h{c}}h}Ef{}}0{{{h{c}}{h{Mj}}}{{Dj{AAj}}}{}}0{{{h{c}}{h{{Ff{MjLn}}}}}{{Dj{{Ff{JbHj}}}}}{}}{{{h{c}}{h{Mj}}}{{Dj{Jb}}}{}}33{{{h{c}}}{{Dj{{h{{AKf{AKd{Ff{CfAGj}}}}}}}}}{}}{{{h{c}}{h{e}}}{{Dj{Hj}}}{}{}}{{{h{c}}{h{e}}{h{Ln}}}{{Dj{Hj}}}{}{}}{{{h{BLd}}c}E`Hn}{{{h{BLf}}c}E`Hn}{{{h{Ol}}c}E`Hn}``{{{h{BLd}}}Dh}{{{h{BLf}}}Dh}{{{h{Ol}}}Dh}{{{h{c}}}e{}{}}000000{{{h{Ol}}}On}{{{h{c}}}If{}}000000{c{{E`{e}}}{}{}}{{{AJb{G`}}}{{E`{BLd}}}}{If{{E`{BLd}}}}{{{h{G`}}}{{E`{BLd}}}}{{{AJb{G`}}}{{E`{BLf}}}}4{If{{E`{BLf}}}}{{{h{G`}}}{{E`{BLf}}}}66{On{{E`{OlBLh}}}}7777777777{{{h{c}}}Ij{}}000000{BLdAEl}{BLfAEl}{ce{}{}}000000``````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{A@f}}}A@f}{{{h{A@h}}}A@h}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{A@f}}{h{A@f}}}Bj}{{{h{A@f}}{h{A@f}}}Ef}{{{h{A@h}}{h{A@h}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{A@f}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{A@h}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}0{{{h{A@f}}{h{Ahc}}}BhGf}=={{{h{A@f}}{h{A@f}}}{{Dj{Bj}}}}{{{h{c}}}e{}{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0{ce{}{}}0`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````{{{h{Od}}}{{h{{Ad{A`}}}}}}{{{h{Nf}}}{{h{{Ad{A`}}}}}}{{{h{AhNf}}}{{h{AhNf}}}}{{{h{AhNf}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBCh}}}{{h{AhNf}}}}10{{{h{BCh}}}{{h{Nf}}}}4{{{h{Nf}}}{{h{Nf}}}}1{{{h{Od}}}{{h{Md}}}}{{{h{AJ`}}}{{h{Md}}}}{{{h{AIn}}}{{h{Md}}}}{{{h{c}}}{{h{e}}}{}{}}000005000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000700{{{h{BCh}}}Hj}{{{h{AhBCh}}}Bh}{{{h{Od}}}Od}{{{h{ADh}}}ADh}{{{h{AJ`}}}AJ`}{{{h{AIn}}}AIn}{{{h{BCh}}}BCh}{{{h{BLn}}}BLn}{{{h{BM`}}}BM`}{{{h{c}}{h{Ahe}}}Bh{}{}}000000{{{h{Nf}}{h{Nf}}}Bj}{{{h{BCh}}{h{BCh}}}Bj}{{}Od}{{}BCh}{{{h{BCh}}}h}{{{h{AhBCh}}}{{h{Ah}}}}{{}{{h{Nf}}}}{{{h{Od}}{h{Od}}}Ef}{{{h{ADh}}{h{ADh}}}Ef}{{{h{Nf}}{h{Nf}}}Ef}{{{h{BCh}}{h{BCh}}}Ef}{{{h{BLn}}{h{BLn}}}Ef}{{{h{BM`}}{h{BM`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000{{{h{AhBCh}}{h{{Ad{A`}}}}}{{E`{BhBLn}}}}{{{h{Od}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ADh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AJ`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AIn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Nf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BCh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BLn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BM`}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{ADl{A`}}}Od}1111{{{h{{Ab{A`}}}}}{{h{Nf}}}}000{{{h{Ah{Ab{A`}}}}}{{h{AhNf}}}}11001110110111000111001100000010000010001110010011111011001100011001111010010000010000011010101100010110110111110101110001000110101111000000111{{{Ab{A`}}}BCh}0{{{h{{Ab{A`}}}}}BCh}501110101000{KnBCh}1221112122111{L`BCh}3233223323323232222232233223323222222332322223333323323332223322323333332223322323323223333232223323332233{LfBCh}44434{LdBCh}44444455549{AO`BM`}{BMbBM`};{{{h{Nf}}{h{Ahc}}}BhGf}{{{h{BCh}}{h{Ahc}}}BhGf}{{{h{Nf}}{Ff{{AIh{Hj}}{AIh{Hj}}}}}h}{{{h{Nf}}Hj}h}{{{h{Nf}}AIf}h}{{{h{Nf}}{AId{Hj}}}h}{{{h{Nf}}{AIb{Hj}}}h}{{{h{Nf}}{AIj{Hj}}}h}{{{h{Nf}}{AIl{Hj}}}h}{{{h{Nf}}{AI`{Hj}}}h}{{{h{BMd}}}Hj}{{{h{BLn}}}Hj}{ce{}{}}0000000{Od{{ADl{A`}}}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}00222{OdCf}{{{h{Od}}}Ef}{{{h{Nf}}}Ef}{{{h{BCh}}}Ef}{{{h{Od}}}Hj}{{{h{Nf}}}Hj}{{{h{BCh}}}Hj}{{}Od}{{}BCh}{{{h{AhOf}}}Dj}{{{h{AhAJ`}}}{{Dj{{E`{ADhBM`}}}}}}{{{h{AhAIn}}}Dj}2{{{h{AhOf}}Hj}Dj}{{{h{AhAIn}}Hj}Dj}1{{{h{ADh}}}{{Dj{A@d}}}}{{{h{Nf}}{h{Nf}}}{{Dj{Bj}}}}{{{h{BCh}}{h{BCh}}}{{Dj{Bj}}}}{{{h{AhBCh}}}{{Dj{A`}}}}{{{h{AhBCh}}A`}{{E`{BhBLn}}}}{{{h{ADh}}}{{Dj{{h{Nf}}}}}}{{OdA@`}Od}{{Od{h{AAj}}}Od}{{OdOj}Od}{{OdA@d}Od}{{OdOn}Od}{{Odc}Od{{AD`{Nf}}}}{OdOd}{{Od{h{Jb}}}Od}{{{h{{Ad{A`}}}}}Ef}{{{h{{Ad{A`}}}}}{{E`{A@`BM`}}}}0{{{h{AhBCh}}Hj}A`}{{{h{AhBCh}}Hj}Bh}{{{h{ADh}}}{{Dj{A@`}}}}{{{h{Of}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{AJ`}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{AIn}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{BLn}}}{{Dj{{h{AOf}}}}}}{{{h{BM`}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}000{{{h{Nf}}}}111{{{h{c}}}If{}}00{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}00:{c{{E`{e}}}{}{}}0000{{{h{Ah{Ad{A`}}}}}{{E`{{h{AhNf}}}}}}{{{h{{Ad{A`}}}}}{{E`{{h{Nf}}}}}}2{{{ADl{A`}}}{{E`{BCh}}}}3333333333{{{h{c}}}Ij{}}00000000{ce{}{}}0000000{HjBCh}``{{{h{Ah{Ab{A`}}}}A@`}Hj}``````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{AJj}}}AJj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{AJj}}{h{AJj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AJj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{AO`AJj};{{{h{AJj}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}`````````````````````````>>>==={{{h{BMf}}}BMf}{{{h{BMh}}}BMh}{{{h{ANn}}}ANn}>>>{{{h{BMf}}{h{BMf}}}Ef}{{{h{BMh}}{h{BMh}}}Ef}{{{h{ANn}}{h{ANn}}}Ef}??????{{{h{BMf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BMh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{ANnBMf}{AO`BMf}{BMjBMf}3{ANnBMh}{AO`BMh}5???{{{h{ANn}}}A`}{{{h{BMf}}}{{Dj{{h{AOf}}}}}}{{{h{BMh}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00{ce{}{}}00`````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{BMl}}}BMl}{{{h{AMd}}}AMd}{{{h{AMf}}}AMf}{{{h{BMn}}}BMn}{{{h{BN`}}}BN`}{{{h{BNb}}}BNb}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{BN`}}{h{BN`}}}Bj}{{{h{Ahc}}}{{E`{BN`AC`}}}{ACbACd}}{{{h{BN`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{c{{E`{BN`}}}Eb}{{A@bInCh}{{Dj{Il}}}}{{{h{BMl}}{h{BMl}}}Ef}{{{h{AMd}}{h{AMd}}}Ef}{{{h{AMf}}{h{AMf}}}Ef}{{{h{BMn}}{h{BMn}}}Ef}{{{h{BN`}}{h{BN`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000{{{h{BMl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AMd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AMf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BMn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BN`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BNb}}{h{AhEn}}}{{E`{BhF`}}}}{AO`BMl}{cc{}}0{BMnAMd}{BMnAMf}2222{{Hj{h{{Ad{Hj}}}}}BNb}{HjBNb}0{{{h{BN`}}{h{Ahc}}}BhGf}``{ce{}{}}00000{{{h{BN`}}}Ef}``{{Hjc}BNbEl}{BBbBN`}`{{{h{BN`}}{h{BN`}}}{{Dj{Bj}}}}{{ce}In{{El{}{{Ej{BNb}}}}}{{El{}{{Ej{Hj}}}}}}{{{h{{Ad{BNb}}}}{h{{Ad{Hj}}}}}In}````{{{h{BN`}}c}E`Hn}{{{h{BMl}}}{{Dj{{h{AOf}}}}}}{{{h{AMd}}}{{Dj{{h{AOf}}}}}}{{{h{AMf}}}{{Dj{{h{AOf}}}}}}{{{h{BMn}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00000{{{h{c}}}If{}}0000{c{{E`{e}}}{}{}}00000000000`{{{h{c}}}Ij{}}00000```??????{{{h{BNb}}}In}`````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{cc{}}{ce{}{}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}1{{{h{AhAJh}}}Dj}{{{h{AJh}}}{{Ff{Hj{Dj{Hj}}}}}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}::94```````````````{{{h{Nh}}}{{h{Nh}}}}````8877{{{h{Nh}}}Nh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Ahc}}}{{E`{BNdAC`}}}{ACbACd}}0{{{h{BNf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{Ad{A`}}}}}{{E`{cAC`}}}BNd}{{{h{{Ad{A`}}}}}{{E`{{Ff{cHj}}AC`}}}BNd}{{{h{Nh}}}Ed}{{{h{AhBNh}}Ef}{{E`{BhACf}}}}{{{h{AhBNh}}BB`}{{E`{BhACf}}}}{{{h{AhBNh}}BBb}{{E`{BhACf}}}}{{{h{AhBNh}}A@`}{{E`{BhACf}}}}{{{h{AhBNh}}BBd}{{E`{BhACf}}}}{{{h{AhBNh}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhBNh}}AEl}{{E`{BhACf}}}}{{{h{AhBNh}}Dh}{{E`{BhACf}}}}{{{h{AhBNh}}Ed}{{E`{BhACf}}}}{{{h{AhBNh}}A`}{{E`{BhACf}}}}`{{{h{Nh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{BNj{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}0{{{h{Cn}}}{{h{Nh}}}}{cc{}}{Cn{{h{Nh}}}}{CnNh}{{{h{Cn}}}Nh}{AO`{{BNj{c}}}{}}4{ce{}{}}0{{{BNj{c}}}eBNlBDj}```4`````{{{h{AhBNn}}}{{E`{EfAC`}}}}{{{h{AhBNn}}}{{E`{BB`AC`}}}}{{{h{AhBNn}}}{{E`{BBbAC`}}}}{{{h{AhBNn}}}{{E`{A@`AC`}}}}{{{h{AhBNn}}}{{E`{BBdAC`}}}}{{{h{AhBNn}}{h{Ah{Ad{A`}}}}}{{E`{BhAC`}}}}{{{h{AhBNn}}}{{E`{AElAC`}}}}{{{h{AhBNn}}}{{E`{DhAC`}}}}{{{h{AhBNn}}}{{E`{EdAC`}}}}{{{h{AhBNn}}}{{E`{A`AC`}}}}``{{{h{c}}}{{ADl{A`}}}{BNfACd}}{{{h{{BNj{c}}}}}{{Dj{{h{AOf}}}}}Fb}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0{ce{}{}}0`````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{BO`}}}{{Ab{A`}}}}{{{h{BO`}}}BO`}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Ahc}}}{{E`{BNdAC`}}}{ACbACd}}0{{{h{Ahc}}}{{E`{BO`AC`}}}{ACbACd}}{{{h{BNf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BO`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BO`}}}{{h{{Ad{A`}}}}}}{{{h{{Ad{A`}}}}}{{E`{cAC`}}}BNd}{{{h{G`}}}{{E`{cBOb}}}BNd}{{{h{{Ad{A`}}}}}{{E`{{Ff{cHj}}AC`}}}BNd}{{{h{AhBNh}}Ef}{{E`{BhACf}}}}{{{h{AhBNh}}BB`}{{E`{BhACf}}}}{{{h{AhBNh}}BBb}{{E`{BhACf}}}}{{{h{AhBNh}}A@`}{{E`{BhACf}}}}{{{h{AhBNh}}BBd}{{E`{BhACf}}}}{{{h{AhBNh}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhBNh}}AEl}{{E`{BhACf}}}}{{{h{AhBNh}}Dh}{{E`{BhACf}}}}{{{h{AhBNh}}Ed}{{E`{BhACf}}}}{{{h{AhBNh}}A`}{{E`{BhACf}}}}{{{h{BO`}}{h{BO`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AC`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BOb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BO`}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{AO`AC`}{ACfAC`}2{BOdBOb}3{ce{}{}}00{BO`{{ADl{A`}}}}{{{ADl{A`}}}BO`}{{{h{AhBNn}}}{{E`{EfAC`}}}}{{{h{AhBNn}}}{{E`{BB`AC`}}}}{{{h{AhBNn}}}{{E`{BBbAC`}}}}{{{h{AhBNn}}}{{E`{A@`AC`}}}}{{{h{AhBNn}}}{{E`{BBdAC`}}}}{{{h{AhBNn}}{h{Ah{Ad{A`}}}}}{{E`{BhAC`}}}}{{{h{AhBNn}}}{{E`{AElAC`}}}}{{{h{AhBNn}}}{{E`{DhAC`}}}}{{{h{AhBNn}}}{{E`{EdAC`}}}}{{{h{AhBNn}}}{{E`{A`AC`}}}}{{{h{c}}}{{ADl{A`}}}{BNfACd}}{{{h{c}}}If{BNfACd}}{{{h{AC`}}}{{Dj{{h{AOf}}}}}}{{{h{BOb}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00{ce{}{}}00````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{}{{BOf{c}}}BOh}{c{{E`{e}}}EbBNd}{{{h{AhBOj}}{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhF`}}}AEb}{{{h{AhBOj}}{h{Ahc}}}{{E`{BhF`}}}AEb}{cc{}}0{{{h{G`}}}{{E`{ce}}}{}{}}{{{h{G`}}}E`}`99{BNlcBDj}{{{h{c}}e}E`BNfHn}====<<;;```````::::::999999{{{h{BOl}}}BOl}{{{h{BOn}}}BOn}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{Ah{C@`{c}}}}{h{Ahe}}{h{{Ad{A`}}}}}{{E`{BhF`}}}BOhAEb}{{{h{BOl}}{h{BOl}}}Ef}{{{h{BOn}}{h{BOn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{Ah{C@`{c}}}}{h{Ahe}}}{{E`{BhF`}}}BOhAEb}{{{h{BOl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BOn}}{h{AhEn}}}{{E`{BhF`}}}}>>>{{{BOf{c}}}{{C@`{c}}}BOh}???{ce{}{}}00000{BOlcBDj}{BOncBDj}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}3{{{h{AhC@b}}}Dj}{{{h{c}}}e{}{}}0{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}00000000000{{{h{c}}}Ij{}}00000888888```````{{{h{AhC@d}}}{{h{Ah{Ad{A`}}}}}}{{{h{C@d}}}{{h{Nf}}}}{{{h{C@d}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}100{{{h{Ahc}}}{{h{Ahe}}}{}{}}400{{{h{AKb}}}AKb}{{{h{C@d}}}C@d}{{{h{C@f}}}C@f}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{C@d}}}h}{{{h{AhC@d}}}{{h{Ah}}}}{c{{E`{AKb}}}Eb}{{{h{AKb}}{h{AKb}}}Ef}{{{h{C@d}}{h{C@d}}}Ef}{{{h{C@f}}{h{C@f}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{AKb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@d}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{C@f}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{JjC@f}1{AFlC@f}{AO`C@f}{AHdC@f}{{{h{{Ad{A`}}}}}{{E`{AKbC@f}}}}{{{h{G`}}}{{E`{AKb}}}}{{{h{AKb}}{h{Ahc}}}BhGf}{{{h{C@d}}{h{Ahc}}}BhGf}{ce{}{}}00{{{h{C@d}}}}{{{h{C@d}}}{{C@h{A`}}}}{{{h{AKb}}c}E`Hn}{{{h{AKb}}}C@d}{{{h{AKb}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}{C@jAKb}``{{{h{C@f}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}00{AKb{{ADl{A`}}}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00<<<{{{h{C@d}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}`````````{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{AFn}}}AFn}{{{h{AHn}}}AHn}{{{h{C@l}}}C@l}{{{h{C@n}}}C@n}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{AFn}}{h{AFn}}}Ef}{{{h{AHn}}{h{AHn}}}Ef}{{{h{C@l}}{h{C@l}}}Ef}{{{h{C@n}}{h{C@n}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{AFn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@n}}{h{AhEn}}}{{E`{BhF`}}}}0{C@lAFn}{BMjAFn}{cc{}}{C@nAHn}{BMjAHn}222{ce{}{}}000{{{h{AFn}}}{{Dj{{h{AOf}}}}}}{{{h{AHn}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}000{c{{E`{e}}}{}{}}0000000{{{h{c}}}Ij{}}0006666```````````````````{{}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{h{{CAd{}{{CA`{c}}{CAb{e}}}}}}}{{h{e}}}CAf{CAhBBh}}``{{}c{}}{c{{CAd{}{{CA`{e}}{CAb{c}}}}}{CAhBBh}CAf}{c{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{h{{Ad{A`}}}}}{{E`{{CAd{}{{CA`{c}}{CAb{e}}}}Fn}}}CAf{CAhBBh}}{{{h{{Ad{A`}}}}}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}`{e{{CAd{}{{CA`{g}}{CAb{i}}}}}{{AD`{{Ad{A`}}}}}{{El{}{{Ej{c}}}}}CAf{CAhBBh}}```{{{h{Ah{CAf{}{{CAj{c}}}}}}{h{{Ad{A`}}}}}Bh{}}{{{h{{CAf{}{{CAj{c}}}}}}}c{}}{{{h{{CAf{}{{CAj{c}}}}}}}Hj{}}````````````{{{CAd{}{{CA`{c}}{CAb{e}}}}}eCAf{CAhBBh}}{{{h{{Ad{A`}}}}{h{{Ad{A`}}}}}Ef}`{{}Mj}{{{h{Mj}}}h}{{{h{Mj}}}{{h{{Ab{A`}}}}}}{{{h{Mj}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}1{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{Mj}}}Mj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Mj}}{h{Mj}}}Bj}{c{{E`{Mj}}}Eb}{{}}{{{h{Mj}}{h{Mj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{Mj}}{h{AhEn}}}{{E`{BhF`}}}}000{KnMj}{cc{}}{LfMj}{LdMj}{KfMj}{{}Mj}{{{h{Ah{Ab{A`}}}}}{{h{AhMj}}}}{{{h{{Ab{A`}}}}}{{h{Mj}}}}{ADfMj}{{{h{{Ad{A`}}}}}{{E`{MjFn}}}}0{{{h{G`}}}{{E`{Mj}}}}{{{h{Mj}}{h{Ahc}}}BhGf}{{{h{Mj}}c}h{{Gj{{Ad{A`}}}}}}{ce{}{}}{MjBDf}{{{h{Mj}}{h{Mj}}}{{Dj{Bj}}}}{{{h{Mj}}c}E`Hn}{Mj}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}8``````````````````{{{CAn{}{{CAl{c}}}}CB`{h{AhIf}}}Bh{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}c{CBbFbCBdCBf}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000`{{{h{AFl}}}AFl}{{{h{CBh}}}CBh}{{{h{BOd}}}BOd}{{{h{BIf}}}BIf}{{{h{CB`}}}CB`}{{{h{c}}{h{Ahe}}}Bh{}{}}0000{{}CB`}`{{{h{AFl}}{h{AFl}}}Ef}{{{h{CBh}}{h{CBh}}}Ef}{{{h{BOd}}{h{BOd}}}Ef}{{{h{BIf}}{h{BIf}}}Ef}{{{h{CB`}}{h{CB`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000`{{{h{AFl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CBh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BOd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BIf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CB`}}{h{AhEn}}}{{E`{BhF`}}}}`{cc{}}0{CBhAFl}{BOdAFl}222{CBjBIf}3{CBhBIf}4{{{h{G`}}}{{E`{{CAh{}{{Gb{c}}}}c}}}{FbCBb}}{c{{CBl{c}}}{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{CB`}}{h{Ahc}}}BhGf}{{{CAn{}{{CAl{c}}}}}Hj{CBbFbCBdCBf}}`{ce{}{}}000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}011{{{h{CBh}}}A`}{{{h{{CBn{c}}}}}Hj{{CC`{}{{Ej{A`}}}}Gn}}{{{h{BOd}}}Hj}{{{h{G`}}}{{E`{{CBl{CCb}}BOd}}}}{c{{CBn{c}}}{{Gn{}{{Ej{A`}}}}}}{{{h{Ah{CBl{c}}}}}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{Ah{CBn{c}}}}}{{Dj{BBj}}}{{Gn{}{{Ej{A`}}}}}}{{{h{Ah{CBl{c}}}}}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}CCd}}{{{h{Ah{CBn{c}}}}}{{Dj{BBj}}}{{CCd{}{{Ej{A`}}}}Gn}}{{{h{Ah{CBl{c}}}}Hj}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{Ah{CBl{c}}}}Hj}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}CCd}}``{{{h{Ah{CBl{c}}}}{h{Ah{Ad{A`}}}}}{{E`{HjBBn}}}{{Gn{}{{Ej{{Ab{A`}}}}}}CCf}}{{{h{{CBl{c}}}}}{{Ff{Hj{Dj{Hj}}}}}{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{{CBn{c}}}}}{{Ff{Hj{Dj{Hj}}}}}{{Gn{}{{Ej{A`}}}}}}{{{h{AFl}}}{{Dj{{h{AOf}}}}}}{{{h{CBh}}}{{Dj{{h{AOf}}}}}}{{{h{BOd}}}{{Dj{{h{AOf}}}}}}{{{h{BIf}}}{{Dj{{h{AOf}}}}}}`{{{CAn{}{{CAl{c}}}}CB`}If{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}If{CBbFbCBdCBf}}{{{h{c}}}e{}{}}0000{{{h{c}}}If{}}0002{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{c{{E`{e}}}{}{}}0000000000000{{{h{c}}}Ij{}}000000{ce{}{}}000000``{{{h{CCh}}}{{h{G`}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{AhCCh}}}Bh}{{}CCh}{cc{}}6{{{h{CCh}}}Ef}2{{{h{AhCCh}}A`CB`}Bh}{{{h{AhCCh}}cCB`}BhEl}{{{h{AhCCh}}{h{{Ad{A`}}}}CB`}{{h{{Ad{A`}}}}}}{{{h{CCh}}}Hj}==<;````{{{CAn{}{{CAl{c}}}}CB`{h{AhIf}}}Bh{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}c{CBbFbCBdCBf}};;::{{{h{CCj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{CCl}}{h{AhEn}}}{{E`{BhF`}}}}000`99{{{CAn{}{{CAl{c}}}}}Hj{CBbFbCBdCBf}}`{ce{}{}}0{{{CAn{}{{CAl{c}}}}CB`}If{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}If{CBbFbCBdCBf}}{{{h{c}}}If{}}01{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}055`````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{CBj}}}CBj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{CBj}}{h{CBj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0`{{{h{CBj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}=`{{{h{CBj}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}<;;:?````````{{{h{G`}}}{{E`{{CAh{}{{Gb{c}}}}c}}}{FbCBb}}````{{{CAn{}{{CAl{c}}}}CB`{h{AhIf}}}Bh{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}c{CBbFbCBdCBf}}2{{{CAn{}{{CAl{c}}}}}Hj{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}CB`}If{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}If{CBbFbCBdCBf}}0```?>8`{ce{}{}}`{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}2``{{}ALn}{{{h{ALn}}}h}{{{h{ALn}}}{{h{{Ad{A`}}}}}}{{{h{ALn}}}{{h{{Ab{A`}}}}}}1{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{ALn}}}ALn}{{{h{CCn}}}CCn}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{ALn}}{h{ALn}}}Bj}{{}CCn}{c{{E`{ALn}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{ALn}}{h{ALn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCCn}}}{{E`{BhACf}}}}{{{h{AhCCn}}}{{E`{BhBBn}}}}{{{h{ALn}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}ALn}{{{h{Ah{Ab{A`}}}}}{{h{AhALn}}}}{{{h{{Ab{A`}}}}}{{h{ALn}}}}{CCnALn}{{{h{{Ad{A`}}}}}{{E`{ALnFn}}}}0{{{h{G`}}}{{E`{ALn}}}}{{{h{ALn}}{h{Ahc}}}BhGf}{{{h{ALn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCCn}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{ALnBDf}{{{h{CCn}}}{{Ab{A`}}}}{{{h{CCn}}}Hj}{{{h{ALn}}{h{ALn}}}{{Dj{Bj}}}}{{{h{ALn}}c}E`Hn}{ALn}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0::{{{h{AhCCn}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCCn}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}````````````````{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ai}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}IdId{{El{}{{Ej{{Ff{AeAg}}}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ae}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}El}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{CBbACd}}`{c{{E`{BAj}}}Eb}{{{Eb{}{{Gb{c}}}}e}{{E`{c}}}BDjCF`}0000{{{Eb{}{{Gb{c}}}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}{{E`{c}}}BDjCF`}1111111111{{{Eb{}{{Gb{c}}}}{h{G`}}e}{{E`{c}}}BDjCF`}22221{{{Eb{}{{Gb{c}}}}Hje}{{E`{c}}}BDjCF`}{{{Eb{}{{Gb{c}}}}{h{G`}}Hje}{{E`{c}}}BDjCF`}4444442`{{{h{{Eb{}{{Gb{c}}}}}}}EfBDj}{{{h{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}}}Ef{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}`{{{h{Id}}c}E`Hn}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ef}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{{Ad{A`}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBj}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ADb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BB`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A@`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{oe}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{ge}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{Aae}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{Ace}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Hj}{{E`{ie}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{ke}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{me}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ACn}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}AEl}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Dh}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ed}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}=:{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}``````````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{h{CFf}}}CFf}{{{h{CFh}}}CFh}{{{h{c}}{h{Ahe}}}Bh{}{}}0{cBDjCBb}{{}CFf}{{{h{AOf}}}{{h{G`}}}}{{{CFl{}{{CFj{c}}}}e}{{E`{c}}}{}Eb}{c{{E`{BAj}}}Eb}{c{{E`{CFf}}}Eb}{{{Eb{}{{Gb{c}}}}e}{{E`{c}}}BDjCF`}0000{{{Eb{}{{Gb{c}}}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}{{E`{c}}}BDjCF`}1111111111{{{Eb{}{{Gb{c}}}}{h{G`}}e}{{E`{c}}}BDjCF`}22221{{{Eb{}{{Gb{c}}}}Hje}{{E`{c}}}BDjCF`}{{{Eb{}{{Gb{c}}}}{h{G`}}Hje}{{E`{c}}}BDjCF`}4444442{{{h{G`}}}BDj}{{{h{CFf}}{h{CFf}}}Ef}{{{h{CFh}}{h{CFh}}}Ef}{{{h{{CF`{}{{CFj{c}}}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{CFf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{CFn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{c}}{h{AhEn}}}{{E`{BhF`}}}{}}2{{{h{CFh}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ce{}{}}0{{{BDl{}{{CG`{c}}}}}c{{Eb{}{{Gb{e}}}}}BDj}{{Hj{h{CFn}}}BDj}{{CFh{h{CFn}}}BDj}0{{{h{{Eb{}{{Gb{c}}}}}}}EfBDj}={{{CGb{}{{Gb{c}}}}}{{E`{ec}}}BDjBAj}{{{CGb{}{{Gb{c}}}}e}{{E`{c}}}BDjCFl}{{{h{Ah{CGd{}{{Gb{c}}}}}}}{{E`{{Dj{e}}c}}}BDjBAj}{{{h{Ah{CGd{}{{Gb{c}}}}}}e}{{E`{Djc}}}BDjCFl}{{{h{Ah{CGf{}{{Gb{c}}}}}}}{{E`{{Dj{{Ff{eg}}}}c}}}BDjBAjBAj}{{{h{Ah{CGf{}{{Gb{c}}}}}}eg}{{E`{{Dj{Ff}}c}}}BDjCFlCFl}{{{h{Ah{CGf{}{{Gb{c}}}}}}}{{E`{{Dj{e}}c}}}BDjBAj}{{{h{Ah{CGf{}{{Gb{c}}}}}}e}{{E`{Djc}}}BDjCFl}{{{h{Ah{CGf{}{{Gb{c}}}}}}}{{E`{ec}}}BDjBAj}{{{h{Ah{CGf{}{{Gb{c}}}}}}e}{{E`{c}}}BDjCFl}{{{h{AOf}}{h{AhCGh}}}Bh}{{{h{{CGd{}{{Gb{c}}}}}}}{{Dj{Hj}}}BDj}{{{h{{CGf{}{{Gb{c}}}}}}}{{Dj{Hj}}}BDj}{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{CGb{}{{Gb{c}}}}{h{{Ad{{h{G`}}}}}}e}{{E`{c}}}BDjCF`}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{CGb{}{{Gb{c}}}}Hje}{{E`{c}}}BDjCF`}{{{h{c}}}Ij{}}0{{{CGb{}{{Gb{c}}}}}{{E`{Bhc}}}BDj}{{{h{G`}}{h{{Ad{{h{G`}}}}}}}BDj}0`{{{CGl{}{{Gb{c}}{CGj{e}}}}}{{E`{{Ff{ge}}c}}}BDj{{CGb{}{{Gb{c}}}}}BAj}{{{CGl{}{{Gb{c}}{CGj{e}}}}g}{{E`{{Ff{e}}c}}}BDj{{CGb{}{{Gb{c}}}}}CFl}{{{CF`{}{{CFj{c}}}}Ef}{{E`{ce}}}{}BDj}{{CFfEf}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}{h{{Ad{A`}}}}}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}{h{G`}}}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}{ADl{A`}}}{{E`{ce}}}{}BDj}2{{CFf{h{{Ad{A`}}}}}{{E`{c}}}BDj}{{{CF`{}{{CFj{c}}}}BBj}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}CGl}{{CFfc}E`CGl}{{{CF`{}{{CFj{c}}}}CFb}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}ADb}{{E`{ce}}}{}BDj}{{CFfADb}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}CFd}{{E`{ce}}}{}BDj}{{CFfCFd}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}BB`}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}BBb}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}A@`}{{E`{ce}}}{}BDj}{{CFfA@`}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}BBd}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}CGf}{{CFfc}E`CGf}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}Eb}{{CFfc}E`Eb}{{{CF`{}{{CFj{c}}}}}{{E`{ce}}}{}BDj}{CFf{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}CGd}{{CFfc}E`CGd}54{{{CF`{}{{CFj{c}}}}{h{G`}}}{{E`{ce}}}{}BDj}{{CFf{h{G`}}}{{E`{c}}}BDj}{{{CF`{}{{CFj{c}}}}If}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}ACn}{{E`{ce}}}{}BDj}{{CFfACn}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}AEl}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}Dh}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}Ed}{{E`{ce}}}{}BDj}{{CFfEd}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}A`}{{E`{ce}}}{}BDj}=<{ce{}{}}0`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0000000000000000000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000000000000000000000000{{{h{{CGn{c}}}}}{{CGn{c}}}{}}{{{h{{CH`{c}}}}}{{CH`{c}}}{}}{{{h{{CHb{c}}}}}{{CHb{c}}}{}}{{{h{{CHd{c}}}}}{{CHd{c}}}{}}{{{h{{BDn{c}}}}}{{BDn{c}}}{}}{{{h{{CHf{c}}}}}{{CHf{c}}}{}}{{{h{{CHh{c}}}}}{{CHh{c}}}{}}{{{h{{CHj{c}}}}}{{CHj{c}}}{}}{{{h{{CHl{ce}}}}}{{CHl{ce}}}{GnAl}{}}{{{h{CHn}}}CHn}{{{h{{CI`{c}}}}}{{CI`{c}}}{}}{{{h{{CIb{c}}}}}{{CIb{c}}}{}}{{{h{{CId{c}}}}}{{CId{c}}}{}}{{{h{{CIf{c}}}}}{{CIf{c}}}{}}{{{h{{CIh{c}}}}}{{CIh{c}}}{}}{{{h{{CIj{c}}}}}{{CIj{c}}}{}}{{{h{{CIl{c}}}}}{{CIl{c}}}{}}{{{h{{CIn{c}}}}}{{CIn{c}}}{}}{{{h{{CJ`{c}}}}}{{CJ`{c}}}{}}{{{h{{CJb{c}}}}}{{CJb{c}}}{}}{{{h{{CJd{c}}}}}{{CJd{c}}}{}}{{{h{{CJf{c}}}}}{{CJf{c}}}{}}{{{h{{CJh{c}}}}}{{CJh{c}}}{}}{{{h{{CJj{c}}}}}{{CJj{c}}}{}}{{{h{{CJl{c}}}}}{{CJl{c}}}{}}{{{h{{CJn{ce}}}}}{{CJn{ce}}}AlAl}{{{h{{CK`{c}}}}}{{CK`{c}}}Al}{{{h{{CKb{c}}}}}{{CKb{c}}}Al}{{{h{{CKd{c}}}}}{{CKd{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000000000000000000000{cCHnCBb}0{{{h{CHn}}}{{h{G`}}}}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}{h{{Ad{{h{G`}}}}}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CId{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}{h{{Ad{{h{G`}}}}}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}e}E`BDjCF`}{{{CId{c}}{h{G`}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}{h{{Ad{{h{G`}}}}}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CId{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}{h{{Ad{{h{G`}}}}}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGlCF`}{{{CGn{c}}Hje}E`BDjCF`}{{{CH`{c}}Hje}E`BDjCF`}{{{CHb{c}}Hje}E`BDjCF`}{{{CHd{c}}Hje}E`BDjCF`}{{{BDn{c}}Hje}E`BDjCF`}{{{CHf{c}}Hje}E`BDjCF`}{{{CHh{c}}Hje}E`BDjCF`}{{{CHj{c}}Hje}E`BDjCF`}{{{CHl{ce}}Hjg}E`GnBDjCF`}{{{CI`{c}}Hje}E`BDjCF`}{{{CIb{c}}Hje}E`BDjCF`}{{{CId{c}}Hje}E`BDjCF`}{{{CIf{c}}Hje}E`BDjCF`}{{{CIh{c}}Hje}E`BDjCF`}{{{CIj{c}}Hje}E`BDjCF`}{{{CIl{c}}Hje}E`BDjCF`}{{{CIn{c}}Hje}E`BDjCF`}{{{CJ`{c}}Hje}E`BDjCF`}{{{CJb{c}}Hje}E`BDjCF`}{{{CJd{c}}Hje}E`BDjCF`}{{{CJf{c}}Hje}E`BDjCF`}{{{CJh{c}}Hje}E`BDjCF`}{{{CJj{c}}Hje}E`BDjCF`}{{{CJl{c}}Hje}E`BDjCF`}{{{CJn{gc}}Hji}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}Hje}E`CGdCF`}{{{CKb{c}}Hje}E`CGfCF`}{{{CKd{c}}Hje}E`CGlCF`}{{{CGn{c}}{h{G`}}Hje}E`BDjCF`}{{{CH`{c}}{h{G`}}Hje}E`BDjCF`}{{{CHb{c}}{h{G`}}Hje}E`BDjCF`}{{{CHd{c}}{h{G`}}Hje}E`BDjCF`}{{{BDn{c}}{h{G`}}Hje}E`BDjCF`}{{{CHf{c}}{h{G`}}Hje}E`BDjCF`}{{{CHh{c}}{h{G`}}Hje}E`BDjCF`}{{{CHj{c}}{h{G`}}Hje}E`BDjCF`}{{{CHl{ce}}{h{G`}}Hjg}E`GnBDjCF`}{{{CI`{c}}{h{G`}}Hje}E`BDjCF`}{{{CIb{c}}{h{G`}}Hje}E`BDjCF`}{{{CId{c}}{h{G`}}Hje}E`BDjCF`}{{{CIf{c}}{h{G`}}Hje}E`BDjCF`}{{{CIh{c}}{h{G`}}Hje}E`BDjCF`}{{{CIj{c}}{h{G`}}Hje}E`BDjCF`}{{{CIl{c}}{h{G`}}Hje}E`BDjCF`}{{{CIn{c}}{h{G`}}Hje}E`BDjCF`}{{{CJ`{c}}{h{G`}}Hje}E`BDjCF`}{{{CJb{c}}{h{G`}}Hje}E`BDjCF`}{{{CJd{c}}{h{G`}}Hje}E`BDjCF`}{{{CJf{c}}{h{G`}}Hje}E`BDjCF`}{{{CJh{c}}{h{G`}}Hje}E`BDjCF`}{{{CJj{c}}{h{G`}}Hje}E`BDjCF`}{{{CJl{c}}{h{G`}}Hje}E`BDjCF`}{{{CJn{gc}}{h{G`}}Hji}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}Hje}E`CGdCF`}{{{CKb{c}}{h{G`}}Hje}E`CGfCF`}{{{CKd{c}}{h{G`}}Hje}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}e}E`BDjCF`}{{{CId{c}}{h{G`}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}e}E`CGlCF`}{{{CHl{ce}}}{{E`{Bhe}}}GnBDj}{{{CJn{ce}}}{{E`{Bhe}}}GnBDj}{{{h{CHn}}{h{CHn}}}Ef}{{{h{{CGn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CH`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHd{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{BDn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHf{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHh{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHl{ce}}}}{h{AhEn}}}{{E`{BhF`}}}{GnFb}{}}{{{h{CHn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{CI`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CId{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIf{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIh{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIl{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJ`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJd{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJf{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJh{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJl{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJn{ce}}}}{h{AhEn}}}{{E`{BhF`}}}Fb{}}{{{h{{CK`{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{CKb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{CKd{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{cc{}}0000000000000000000000000000{ce{}{}}0000000000000000000000000000{{}{{CGn{c}}}{}}{Dh{{CH`{c}}}{}}{{{h{G`}}}{{CHb{c}}}{}}{{{h{G`}}}{{CHd{c}}}{}}{If{{BDn{c}}}{}}{{{AEh{G`}}}{{CHf{c}}}{}}{{{h{{Ad{A`}}}}}{{CHh{c}}}{}}{{{h{{Ad{A`}}}}}{{CHj{c}}}{}}{c{{CHl{ce}}}Gn{}}{Ef{{CI`{c}}}{}}{BBd{{CIb{c}}}{}}{BB`{{CId{c}}}{}}{BBb{{CIf{c}}}{}}{A@`{{CIh{c}}}{}}{CFd{{CIj{c}}}{}}{CKf{{CIl{c}}}{}}{A`{{CIn{c}}}{}}{AEl{{CJ`{c}}}{}}{Ed{{CJb{c}}}{}}{ACn{{CJd{c}}}{}}{Hj{{CJf{c}}}{}}{CFb{{CJh{c}}}{}}{ADb{{CJj{c}}}{}}{BBj{{CJl{c}}}{}}{c{{CJn{ce}}}Gn{}}{c{{CK`{c}}}{}}{c{{CKb{c}}}{}}{c{{CKd{c}}}{}}{{{h{Ah{CHl{ce}}}}g}{{E`{Dj}}}GnBDjCFl}{{{h{Ah{CJn{gc}}}}i}{{E`{Dj}}}BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CFl}{{{h{Ah{CHl{ce}}}}gi}{{E`{{Dj{Ff}}}}}GnBDjCFlCFl}2{{{h{Ah{CHl{ce}}}}g}E`GnBDjCFl}{{{h{{CHl{ce}}}}}{{Dj{Hj}}}GnBDj}0{{{h{{CJn{gc}}}}}{{Dj{Hj}}}BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}}{{{h{c}}}e{}{}}0000000000000000000000000000{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000000000000000000000000000000000000000000000000000000000{{{h{c}}}Ij{}}0000000000000000000000000000{{{CH`{c}}e}{{E`{Ff}}}BDjCFl}{{{CHb{c}}e}{{E`{Ff}}}BDjCFl}{{{CHd{c}}e}{{E`{Ff}}}BDjCFl}{{{BDn{c}}e}{{E`{Ff}}}BDjCFl}{{{CHf{c}}e}{{E`{Ff}}}BDjCFl}{{{CKb{c}}e}{{E`{Ff}}}CGfCFl}{ce{}{}}0000000000000000000000000000```````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ai}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}IdId{{El{}{{Ej{{Ff{AeAg}}}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ae}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}El}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{CBbACd}}{cCE`CBb}{{{h{AOf}}}{{h{G`}}}}{{{AJb{AOf}}}{{E`{{AJb{c}}{AJb{AOf}}}}}AOf}00{{{h{AhAOf}}}{{Dj{{h{Ahc}}}}}AOf}00{{{h{AOf}}}{{Dj{{h{c}}}}}AOf}00{{{CEb{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEd{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEf{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEh{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEj{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEl{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEn{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CKh{ce}}}{{E`{ce}}}{}CE`}000000{cc{}}{ce{}{}}{{{h{AOf}}}Ef}00{{{h{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}}}Ef{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{AOf}}{h{AhCGh}}}Bh}{{{h{Id}}c}E`Hn}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ef}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{{Ad{A`}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBj}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEb{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEd{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CKh{ce}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}0{{{h{Ah{CEj{}{{CD`{c}}{Gb{e}}}}}}{h{g}}{h{i}}}{{E`{Bhe}}}{}CE`{IdACd}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ADb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEf{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEh{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEl{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEn{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}7{{{h{Ah{CKh{ce}}}}{h{G`}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}08{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BB`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A@`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEj{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}>{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{oe}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{ge}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{Aae}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{Ace}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Hj}{{E`{ie}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{ke}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{me}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ACn}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}AEl}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Dh}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ed}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}=:{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEj{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CKh{ce}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEl{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}}{{E`{Bhe}}}{}CE`}{{{h{Ah{CEn{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}}{{E`{Bhe}}}{}CE`}{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{h{AOf}}}CKj}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}```{c{{E`{CKl}}}Eb}{{{h{{Ad{A`}}}}}{{E`{CKlFn}}}}{{{h{CKl}}c}E`Hn}``{{}CKn}{{{h{CKn}}}h}{{{h{CKn}}}{{h{{Ab{A`}}}}}}{{{h{CKn}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}10{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CKn}}}CKn}{{{h{CL`}}}CL`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CKn}}{h{CKn}}}Bj}{{}CL`}{c{{E`{CKn}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{CKn}}{h{CKn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCL`}}}{{E`{BhBBn}}}}{{{h{AhCL`}}}{{E`{BhACf}}}}{{{h{CKn}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CKn}{{{h{Ah{Ab{A`}}}}}{{h{AhCKn}}}}{{{h{{Ab{A`}}}}}{{h{CKn}}}}{CL`CKn}{{{h{{Ad{A`}}}}}{{E`{CKnFn}}}}0{{{h{G`}}}{{E`{CKn}}}}{{{h{CKn}}{h{Ahc}}}BhGf}{{{h{CKn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCL`}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CL`}}}{{Ab{A`}}}}{{{h{CL`}}}Hj}{{{h{CKn}}{h{CKn}}}{{Dj{Bj}}}}{{{h{CKn}}c}E`Hn}{CKn}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099{{{h{AhCL`}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhCL`}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}```{{}n}{{{h{n}}}h}{{{h{n}}}{{h{{Ab{A`}}}}}}{{{h{n}}}{{h{{Ad{A`}}}}}}{{{h{CLb}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}2001{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{n}}}n}{{{h{ADf}}}ADf}{{{h{CLb}}}CLb}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{n}}{h{n}}}Bj}{{{h{CLb}}{h{CLb}}}Bj}{{{h{Ahc}}}{{E`{nAC`}}}{ACbACd}}{{{h{n}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{Ad{A`}}}}}n}{{}ADf}{{}CLb}{c{{E`{n}}}Eb}{c{{E`{CLb}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{n}}{h{n}}}Ef}{{{h{CLb}}{h{CLb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{AhADf}}}{{E`{BhBBn}}}}{{{h{AhADf}}}{{E`{BhACf}}}}{{{h{n}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{CLb}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}{dn}{L`n}22{{}n}{{{Ab{A`}}}CLb}{{{h{Ah{Ab{A`}}}}}{{h{Ahn}}}}{{{h{{Ab{A`}}}}}{{h{n}}}}{ADfn}{{{h{G`}}}{{E`{CLb}}}}{{CLbHj}ADf}{{{h{{Ad{A`}}}}}{{E`{nFn}}}}{{{h{{Ad{A`}}}}}{{E`{CLbFn}}}}10{{{h{G`}}}{{E`{n}}}}4{{{h{n}}{h{Ahc}}}BhGf}{{{h{CLb}}{h{Ahc}}}BhGf}{{{h{n}}}Mh}{{{h{{Ad{A`}}}}}CLb}{{{h{n}}c}h{{Gj{{Ad{A`}}}}}}{{{h{CLb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhADf}}{h{{Ad{A`}}}}}Bh}{ce{}{}}00{nBDf}{{{h{ADf}}}CLb}{{{h{ADf}}}Hj}{{{h{n}}{h{n}}}{{Dj{Bj}}}}{{{h{CLb}}{h{CLb}}}{{Dj{Bj}}}}{{{h{n}}c}E`Hn}{{{h{CLb}}c}E`Hn}{n}{CLb{{Ab{A`}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00==={{{h{AhADf}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhADf}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}`{{}Mh}{{{h{Mh}}}h}{{{h{Mh}}}{{h{{Ab{A`}}}}}}{{{h{Mh}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}1{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{Mh}}}Mh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Mh}}{h{Mh}}}Bj}{{{h{Ahc}}}{{E`{MhAC`}}}{ACbACd}}{{{h{Mh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{c{{E`{Mh}}}Eb}{{}}{{{h{Mh}}{h{Mh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{Mh}}{h{AhEn}}}{{E`{BhF`}}}}000{DbMh}{D`Mh}{KhMh}{KjMh}{KbMh}{LjMh}{KdMh}{LbMh}{cc{}}{LhMh}{KlMh}{ALlMh}{{}Mh}{{{h{Ah{Ab{A`}}}}}{{h{AhMh}}}}{{{h{{Ab{A`}}}}}{{h{Mh}}}}{ADfMh}{{{h{{Ad{A`}}}}}{{E`{MhFn}}}}0{{{h{G`}}}{{E`{Mh}}}}{{{h{Mh}}{h{Ahc}}}BhGf}{{{h{Mh}}c}h{{Gj{{Ad{A`}}}}}}{ce{}{}}{{{h{Mh}}{h{Mh}}}{{Dj{Bj}}}}{{{h{Mh}}c}E`Hn}{Mh}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7``{{}{{Mn{c}}}CLd}{{{h{{Mn{c}}}}}hCLd}{{{h{{Mn{c}}}}}{{h{{Ad{A`}}}}}CLd}{{{h{{Mn{c}}}}}{{h{{Ab{A`}}}}}CLd}1{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{Mn{c}}}}}{{Mn{c}}}CLd}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{{Mn{c}}}}{h{{Mn{c}}}}}BjCLd}8{c{{E`{{Mn{e}}}}}EbCLd}{{}ADf}{{}}{{{h{{Mn{c}}}}{h{{Mn{c}}}}}EfCLd}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{{Mn{c}}}}{h{AhEn}}}{{E`{BhF`}}}CLd}000{Ll{{Mn{Ml}}}}{cc{}}{Mb{{Mn{Nd}}}}{M`{{Mn{Nb}}}}{Ln{{Mn{N`}}}}{{}{{Mn{c}}}CLd}{{{h{Ah{Ab{A`}}}}}{{h{Ah{Mn{c}}}}}CLd}{{{h{{Ab{A`}}}}}{{h{{Mn{c}}}}}CLd}{ADf{{Mn{c}}}CLd}{{{h{{Ad{A`}}}}}{{E`{{Mn{c}}Fn}}}CLd}0{{{h{G`}}}{{E`{{Mn{c}}}}}CLd}{{{h{{Mn{c}}}}{h{Ahe}}}BhCLdGf}{{{h{{Mn{c}}}}e}hCLd{{Gj{{Ad{A`}}}}}}{ce{}{}}{{{h{{Mn{c}}}}{h{{Mn{c}}}}}{{Dj{Bj}}}CLd}{{{h{{Mn{c}}}}e}E`CLdHn}{{{Mn{c}}}{}CLd}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7``{{}CLf}{{{h{CLf}}}h}{{{h{CLf}}}{{h{{Ab{A`}}}}}}{{{h{CLf}}}{{h{{Ad{A`}}}}}}0{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CLf}}}CLf}{{{h{CLh}}}CLh}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CLf}}{h{CLf}}}Bj}{{}CLh}{c{{E`{CLf}}}Eb}{{}}{{{h{CLf}}{h{CLf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{CLf}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CLf}{{{h{Ah{Ab{A`}}}}}{{h{AhCLf}}}}{{{h{{Ab{A`}}}}}{{h{CLf}}}}{CLhCLf}{{{h{{Ad{A`}}}}}{{E`{CLfFn}}}}0{{{h{G`}}}{{E`{CLf}}}}{{{h{CLf}}{h{Ahc}}}BhGf}{{{h{CLf}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCLh}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CLh}}}{{Ab{A`}}}}{{{h{CLh}}}Hj}{{{h{CLf}}{h{CLf}}}{{Dj{Bj}}}}{{{h{CLf}}c}E`Hn}{CLf}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099``{{}CLj}{{{h{CLj}}}h}{{{h{CLj}}}{{h{{Ad{A`}}}}}}{{{h{CLj}}}{{h{{Ab{A`}}}}}}1{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CLj}}}CLj}{{{h{CLl}}}CLl}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CLj}}{h{CLj}}}Bj}{{}CLl}{c{{E`{CLj}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{CLj}}{h{CLj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCLl}}}{{E`{BhACf}}}}{{{h{AhCLl}}}{{E`{BhBBn}}}}{{{h{CLj}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CLj}{{{h{Ah{Ab{A`}}}}}{{h{AhCLj}}}}{{{h{{Ab{A`}}}}}{{h{CLj}}}}{CLlCLj}{{{h{{Ad{A`}}}}}{{E`{CLjFn}}}}0{{{h{G`}}}{{E`{CLj}}}}{{{h{CLj}}{h{Ahc}}}BhGf}{{{h{CLj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCLl}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CLl}}}{{Ab{A`}}}}{{{h{CLl}}}Hj}{{{h{CLj}}{h{CLj}}}{{Dj{Bj}}}}{{{h{CLj}}c}E`Hn}{CLj}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099{{{h{AhCLl}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhCLl}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}``{{}CLn}{{{h{CLn}}}h}{{{h{CLn}}}{{h{{Ad{A`}}}}}}{{{h{CLn}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}20{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CLn}}}CLn}{{{h{CM`}}}CM`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CLn}}{h{CLn}}}Bj}{{}CM`}{c{{E`{CLn}}}Eb}{{}}{{{h{CLn}}{h{CLn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{CLn}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CLn}{{{h{Ah{Ab{A`}}}}}{{h{AhCLn}}}}{{{h{{Ab{A`}}}}}{{h{CLn}}}}{CM`CLn}{{{h{{Ad{A`}}}}}{{E`{CLnFn}}}}0{{{h{G`}}}{{E`{CLn}}}}{{{h{CLn}}{h{Ahc}}}BhGf}{{{h{CLn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCM`}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CM`}}}{{Ab{A`}}}}{{{h{CM`}}}Hj}{{{h{CLn}}{h{CLn}}}{{Dj{Bj}}}}{{{h{CLn}}c}E`Hn}{CLn}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099```{{}CMb}{{{h{CMb}}}h}{{{h{CMb}}}{{h{{Ad{A`}}}}}}{{{h{CMb}}}{{h{{Ab{A`}}}}}}{{{h{CMb}}}Ed}{{{h{c}}}{{h{e}}}{}{}}300{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{CMb}}}CMb}{{{h{CMd}}}CMd}{{{h{CMf}}}CMf}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{CMb}}{h{CMb}}}Bj}{{}CMf}{c{{E`{CMb}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{CMb}}{h{CMb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCMf}}}{{E`{BhACf}}}}{{{h{AhCMf}}}{{E`{BhBBn}}}}{{{h{CMb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{CMd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{CMf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{{}CMb}{{{h{Ah{Ab{A`}}}}}{{h{AhCMb}}}}{{{h{{Ab{A`}}}}}{{h{CMb}}}}{CMfCMb}{CMfEd}{{{h{{Ad{A`}}}}}{{E`{CMbFn}}}}0{{{h{G`}}}{{E`{CMb}}}}{EdCMb}{{{h{CMb}}{h{Ahc}}}BhGf}{{EdEd{h{{Ad{A`}}}}}Ed}{{EdEd{h{{Ad{A`}}}}}CMb}{{{h{CMb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCMf}}{h{{Ad{A`}}}}}Bh}{ce{}{}}00{{{h{CMf}}}{{Ff{EdEd}}}}{{{h{CMf}}}CMd}{{{h{CMf}}}Hj}{{}CMf}{{{h{CMb}}{h{CMb}}}{{Dj{Bj}}}}{{{h{CMb}}c}E`Hn}{CMb}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00;;;{{EdEd}CMf}{{{h{AhCMf}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhCMf}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000{{{h{ACf}}}{{Dj{{h{AOf}}}}}}{{{h{CMh}}}CMh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{AhACb}}Hj}Bh}{{{h{Ah{CMj{c}}}}Hj}Bh{ACbACd}}{{{h{Ah{CMl{c}}}}Hj}Bh{{AD`{{Ad{A`}}}}}}{{{h{ACf}}}{{h{G`}}}}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{{h{CMh}}{h{CMh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhACb}}}{{E`{{h{{Ad{A`}}}}ACf}}}}{{{h{Ah{CMj{c}}}}}{{E`{{h{{Ad{A`}}}}ACf}}}{ACbACd}}{{{h{Ah{CMl{c}}}}}{{E`{{h{{Ad{A`}}}}ACf}}}{{AD`{{Ad{A`}}}}}}{{{h{AhACh}}}{{E`{BhACf}}}}{{{h{AhCMn}}}{{E`{BhACf}}}}{{{h{AhCMn}}}{{E`{BhBBn}}}}{{{h{ACf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CMh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000{BBnACf}{CMhACf}{AO`CMh}3{{{h{ACf}}}{{Dj{{h{AOf}}}}}}{{{h{CMh}}{h{Ahc}}}BhGf}`{ce{}{}}0000{{{CMl{c}}}c{{AD`{{Ad{A`}}}}}}{{{h{ACf}}}CMh}{c{{CMl{c}}}{{AD`{{Ad{A`}}}}}}{{CMhc}ACf{{AHb{{AJb{AOf}}}}}}{{{h{{CMl{c}}}}}Ed{{AD`{{Ad{A`}}}}}}{{{h{AhAKh}}{h{Ah{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{Ah{CMj{c}}}}{h{Ah{Ad{A`}}}}}{{E`{HjACf}}}{AKhACd}}{{{h{Ah{CMl{c}}}}{h{Ah{Ad{A`}}}}}{{E`{HjACf}}}{{AD`{{Ad{A`}}}}}}{{{h{Ahc}}}{{E`{EfAC`}}}{}}0{{{h{AhAKh}}{h{Ah{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{Ahc}}}{{E`{BB`AC`}}}{}}0{{{h{Ahc}}}{{E`{BBbAC`}}}{}}0{{{h{Ahc}}}{{E`{A@`AC`}}}{}}0{{{h{Ahc}}}{{E`{BBdAC`}}}{}}0{{{h{Ahc}}{h{Ah{Ad{A`}}}}}{{E`{BhAC`}}}{}}0{{{h{Ah{CMj{c}}}}{h{Ah{ADl{A`}}}}}{{E`{HjACf}}}{AKhACd}}{{{h{AhAKh}}{h{Ah{ADl{A`}}}}Ed}{{E`{HjACf}}}}{{{h{Ahc}}}{{E`{AElAC`}}}{}}0{{{h{Ahc}}}{{E`{DhAC`}}}{}}0{{{h{Ahc}}}{{E`{EdAC`}}}{}}0{{{h{Ahc}}}{{E`{A`AC`}}}{}}0{{}CMn}{{{h{ACf}}}{{Dj{{h{AOf}}}}}}{{{h{AhAKh}}Ed}{{CMj{AKh}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000000000{{{h{c}}}Ij{}}0000{ce{}{}}0000{{{h{AhACh}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhACh}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{BhBBn}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}```````````````````````````````````````{{AG`{h{{Jd{c}}}}{h{Jf}}}{{E`{AG`Jj}}}Jl}{{{h{AG`}}}}{{{h{AhAG`}}}}{{{h{AhAG`}}}CN`}{{{h{AG`}}}CN`}{{JhJh}}{{{h{c}}}{{h{e}}}{}{}}000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000000000{{{h{{Jd{c}}}}}{{Jd{c}}}CNb}{{{h{AG`}}}AG`}{{{h{Jh}}}Jh}{{{h{AMb}}}AMb}{{{h{ACj}}}ACj}{{{h{CNd}}}CNd}{{{h{AH`}}}AH`}{{{h{AHj}}}AHj}{{{h{AHh}}}AHh}{{{h{CNf}}}CNf}{{{h{AGf}}}AGf}{{{h{CNh}}}CNh}{{{h{CNj}}}CNj}{{{h{c}}{h{Ahe}}}Bh{}{}}000000000000{{{h{AG`}}{h{AG`}}}Bj}{{{h{Jh}}{h{Jh}}}Bj}{{{h{AMb}}{h{AMb}}}Bj}{{{h{ACj}}{h{ACj}}}Bj}{{{h{CNd}}{h{CNd}}}Bj}4``{{{h{{Jd{c}}}}}{{CNn{CNl}}}CNb}{{{COd{}{{CO`{c}}{COb{e}}}}}e{}{}}{AG`CNd}{JbACj}1{{}{{Jd{COf}}}}{c{{E`{AG`}}}Eb}{c{{E`{Jh}}}Eb}{c{{E`{ACj}}}Eb}{c{{E`{CNd}}}Eb}{{{h{AG`}}}COh}{{{h{Ah{Jd{c}}}}}BhCNb}{{{h{{Jd{c}}}}{h{{Jd{c}}}}}EfCNb}{{{h{AG`}}{h{AG`}}}Ef}{{{h{Jh}}{h{Jh}}}Ef}{{{h{AMb}}{h{AMb}}}Ef}{{{h{ACj}}{h{ACj}}}Ef}{{{h{CNd}}{h{CNd}}}Ef}{{{h{AH`}}{h{AH`}}}Ef}{{{h{AHj}}{h{AHj}}}Ef}{{{h{AHh}}{h{AHh}}}Ef}{{{h{CNf}}{h{CNf}}}Ef}{{{h{AGf}}{h{AGf}}}Ef}{{{h{CNh}}{h{CNh}}}Ef}{{{h{CNj}}{h{CNj}}}Ef};{{{h{c}}{h{e}}}Ef{}{}}0000000000000000000000000{{{h{{Jd{c}}}}{h{AhEn}}}{{E`{BhF`}}}CNb}{{{h{AG`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Jh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AMb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ACj}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{CNd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AH`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CNf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AGf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CNh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CNj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{CNdAG`}111{CNdACj}222{JjAH`}{AO`AH`}{CNhAHj}{AObAHj}{CNjAHj}7{AO`AHj}{JjAHj}9{AH`AHh}{AO`AHh}{BIfCNf}{AO`CNf}={JjCNf}>>>{BBb{{E`{JhCOj}}}}={{{CNn{CNl}}}{{COn{{Jd{COl}}}}}}{{{CNn{CNl}}}{{COn{{Jd{D@`}}}}}}{{{CNn{CNl}}}{{COn{{Jd{D@b}}}}}}{{{h{{Jd{c}}}}{h{{Ad{A`}}}}}{{E`{AG`Jj}}}AGd}{{{h{{Jd{c}}}}{h{G`}}}{{E`{AG`Jj}}}AGd}{{{h{{Jd{c}}}}{h{AJl}}}AG`AGd}{{{h{G`}}}{{E`{AG`}}}}{A`{{E`{JhCOj}}}}{{}{{Jd{c}}}CNb}{{{h{{Jd{c}}}}{h{Ahe}}}{{Ff{AJlAEd}}}AGd{D@dACd}}{{{h{AG`}}{h{Ahc}}}BhGf}{{{h{Jh}}{h{Ahc}}}BhGf}{{{h{AMb}}{h{Ahc}}}BhGf}{{{h{ACj}}{h{Ahc}}}BhGf}{{{h{CNd}}{h{Ahc}}}BhGf}``{ce{}{}}000000000000{{{h{CNj}}}A`}{{{h{CNh}}}Hj}`{{}{{Jd{COf}}}}{{{h{{Jd{c}}}}{h{Ahe}}}AG`AGd{D@dACd}}{{{h{AhAG`}}}Bh}{{{h{AG`}}{h{AG`}}}{{Dj{Bj}}}}{{{h{Jh}}{h{Jh}}}{{Dj{Bj}}}}{{{h{AMb}}{h{AMb}}}{{Dj{Bj}}}}{{{h{ACj}}{h{ACj}}}{{Dj{Bj}}}}{{{h{CNd}}{h{CNd}}}{{Dj{Bj}}}}{{}Hj}000{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{c}}Jj}}}{CNbD@h}}{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{COl}}Jj}}}}{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{D@`}}Jj}}}}{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{D@b}}Jj}}}}{{{h{AG`}}}AEd}{{{h{CNd}}}{{Ff{ACjJh}}}}{{{h{Ah{Jd{c}}}}{h{Ahe}}}BhCNb{D@dACd}}{{{h{{Jd{c}}}}{h{AKl}}{h{D@j}}}{{E`{AEdJj}}}Jl}{{{h{AG`}}}{{Ab{A`}}}}{{{h{AG`}}}AJl}{{{h{Ah{Jd{c}}}}{h{{Ab{A`}}}}}BhCNb}{{{h{AG`}}c}E`Hn}{{{h{Jh}}c}E`Hn}{{{h{ACj}}}{{Ab{A`}}}}{{{h{ACj}}c}E`Hn}{{{h{CNd}}c}E`Hn}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}}C@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}Hj}C@jAGd}1{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}}D@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}{h{{Ab{A`}}}}}D@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}{h{{Ab{A`}}}}}C@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AG`}}}AMnAGd}0{{{h{{Jd{c}}}}{h{AKl}}{h{AG`}}{h{{Ab{A`}}}}}AMnAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AG`}}{h{Ahe}}}AMnAGd{D@dD@l}}{{}{{Jd{D@n}}}}{{{h{AH`}}}{{Dj{{h{AOf}}}}}}{{{h{AHj}}}{{Dj{{h{AOf}}}}}}{{{h{AHh}}}{{Dj{{h{AOf}}}}}}{{{h{CNf}}}{{Dj{{h{AOf}}}}}}{{{h{AGf}}}{{Dj{{h{AOf}}}}}}{{{COd{}{{CO`{c}}{COb{e}}}}{h{{Jd{g}}}}{Dj{M`}}}c{}{}Jl}{{AG`{h{{Jd{c}}}}{Dj{M`}}}CNdJl}{JhBBb}{ACjJb}{CNdAG`}{{{h{c}}}e{}{}}000000000000{{{h{c}}}If{}}0000000{JhA`}{c{{E`{e}}}{}{}}00{A`{{E`{Jh}}}}{BBb{{E`{Jh}}}}22222222222222222222222{{{h{c}}}Ij{}}000000000000{{}{{Jd{DA`}}}}{{{h{{Jd{c}}}}{h{AKl}}{h{C@j}}{h{AEd}}}{{E`{BhJj}}}Jl}{{{h{{Jd{c}}}}{h{AMn}}{h{AKl}}{h{Jb}}}{{E`{BhJj}}}Jl}{ce{}{}}000000000000{{{h{AG`}}}{{Ff{JbJh}}}}`````````````{{{h{DAb}}}{{h{{ADl{Ef}}}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{e{{Dj{c}}}{CAdBNf}{{Gn{}{{Ej{c}}}}}}{{{h{Ah{Ad{c}}}}}{{Dj{c}}}{CAdBNf}}{{{h{DAb}}}DAb}{{{h{ADn}}}ADn}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{Ahc}}}{{E`{DAbAC`}}}{ACbACd}}{{{h{DAb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAb}}{h{DAb}}}Ef}{{{h{ADn}}{h{ADn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{DAb}}{h{Ah{ADl{D`}}}}{h{Ah{ADl{Dh}}}}}{{E`{KhADn}}}}{{{h{DAb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ADn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{AO`ADn}{{{h{{Ad{D`}}}}{h{{Ad{Ef}}}}}DAb}{{{h{DAb}}}{{h{{ADl{Kh}}}}}}`{ce{}{}}0{{{h{DAb}}}Dh}{{{h{ADn}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000`{{{h{c}}}Ij{}}066```````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{AFj}}}AFj}{{{h{DAd}}}DAd}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{AFj}}{h{AFj}}}Ef}{{{h{DAd}}{h{DAd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{AFj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DAd}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ce{}{}}0{{{h{AFj}}}{{Dj{{h{AOf}}}}}}{{{h{DAd}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}066{c{{E`{Cn}}}Eb}{{{h{Cn}}c}E`Hn}``````````````````{{{h{AhDAf}}DAf}DAf}``{{{h{AhAGb}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhAGb}}}{{h{Ah{Ad{A`}}}}}}{{{h{AGb}}}{{h{{Ab{A`}}}}}}{{{h{AGb}}}{{h{{Ad{A`}}}}}}{{DAfDAf}DAf}{{{h{AhDAf}}DAf}Bh}10{{{h{c}}}{{h{e}}}{}{}}003400{{{h{Ahc}}}{{h{Ahe}}}{}{}}007600{{{h{BAf}}}BAf}{{{h{DAf}}}DAf}{{{h{AGb}}}AGb}{{{h{DAh}}}DAh}{{{h{DAj}}}DAj}{{{h{c}}{h{Ahe}}}Bh{}{}}0000{{{h{DAf}}{h{DAf}}}Bj}{{{h{AGb}}{h{AGb}}}Bj}{{{h{Ahc}}}{{E`{BAfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DAfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AGbAC`}}}{ACbACd}}{{{h{BAf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AGb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{}DAf}{{{h{BAf}}{h{BAf}}}Ef}{{{h{DAf}}{h{DAf}}}Ef}{{{h{AGb}}{h{AGb}}}Ef}{{{h{DAh}}{h{DAh}}}Ef}{{{h{DAj}}{h{DAj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000{{{h{BAf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DAf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AGb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{DAh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DAj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{EdDAf}1{CnAGb}222{{{Ab{A`}}}AGb}{cAGb{{AD`{Nh}}}}{{{h{G`}}}{{E`{AGb}}}}{{DAfDAf}Ef}{{{h{BAf}}{h{Ahc}}}BhGf}{{{h{DAf}}{h{Ahc}}}BhGf}{{{h{AGb}}{h{Ahc}}}BhGf}{ce{}{}}0000``````{{{h{BEh}}DAf}BAf}{{{h{DAf}}{h{DAf}}}{{Dj{Bj}}}}{{{h{AGb}}{h{AGb}}}{{Dj{Bj}}}}`{{{h{AhDAf}}DAf}DAf}`{{{h{BAf}}}{{E`{BEhACf}}}}{{{h{DAh}}}{{Dj{{h{AOf}}}}}}{{{h{DAj}}}{{Dj{{h{AOf}}}}}}{AGb{{Ab{A`}}}}{{{h{c}}}e{}{}}0000{{{h{BAf}}}{{E`{BBn}}}}{{{h{c}}}If{}}000{DAfEd}{c{{E`{e}}}{}{}}000000000{{{h{c}}}Ij{}}0000>>>>>````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{DAl}}}DAl}{{{h{BAd}}}BAd}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{Ahc}}}{{E`{DAlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BAdAC`}}}{ACbACd}}{{{h{DAl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BAd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAl}}{h{DAl}}}Ef}{{{h{BAd}}{h{BAd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{DAl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BAd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}0{{{h{DAl}}{h{Ahc}}}BhGf}{{{h{BAd}}{h{Ahc}}}BhGf}{ce{}{}}0````{{{h{BAd}}}{{E`{BEhACf}}}}`{{{h{c}}}e{}{}}0{{{h{BAd}}}{{E`{BBn}}}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}055```````````````````````````````````````````{{{h{DAn}}}{{h{G`}}}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{DAn}}}DAn}{{{h{DB`}}}DB`}{{{h{DBb}}}DBb}{{{h{DBd}}}DBd}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{DBb}}}{{h{G`}}}}{{{h{DBd}}}{{h{G`}}}}{{{h{DBb}}}DAn}{{{h{DBd}}}DAn}{{{h{Ahc}}}{{E`{DAnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBbAC`}}}{ACbACd}}0{{{h{DAn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAn}}{h{DAn}}}Ef}{{{h{DB`}}{h{DB`}}}Ef}{{{h{DBb}}{h{DBb}}}Ef}{{{h{DBd}}{h{DBd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{DAn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DB`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DBb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000{{{h{G`}}}{{E`{DAn}}}}{ce{}{}}000{{{h{DBb}}}{{h{AGb}}}}{{AGbDBd}DBb}{{{h{DBb}}}{{h{DBd}}}}{{{h{DB`}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}07{c{{E`{e}}}{}{}}{{{AJb{G`}}}{{E`{DAn}}}}{If{{E`{DAn}}}}222{{{h{G`}}}{{E`{DAnDB`}}}}3333{{{h{c}}}Ij{}}000;;;;`````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{BAb}}}BAb}{{{h{DBf}}}DBf}{{{h{DBh}}}DBh}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{BAb}}{h{BAb}}}Bj}{{{h{Ahc}}}{{E`{BAbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBhAC`}}}{ACbACd}}10{{{h{BAb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BAb}}{h{BAb}}}Ef}{{{h{DBf}}{h{DBf}}}Ef}{{{h{DBh}}{h{DBh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{BAb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{{{h{BAb}}{h{Ahc}}}BhGf}{ce{}{}}00``{{{h{BAb}}}{{Dj{{Ab{A`}}}}}}{{{ADl{Db}}Db}DBf}{{{ADl{Db}}Db}DBh}{{{h{BAb}}{h{BAb}}}{{Dj{Bj}}}}``{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00``777````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{DBj}}}DBj}{{{h{DBl}}}DBl}{{{h{DBn}}}DBn}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{Ahc}}}{{E`{DBjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBnAC`}}}{ACbACd}}20{{{h{DBj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}`{{{h{DBj}}{h{DBj}}}Ef}{{{h{DBl}}{h{DBl}}}Ef}{{{h{DBn}}{h{DBn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000``{{{h{DBj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00`{ce{}{}}00{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}00000`{{{h{c}}}Ij{}}00333````{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{DC`}}}DC`}{{{h{DCb}}}DCb}{{{h{DCd}}}DCd}{{{h{DCf}}}DCf}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{DC`}}{h{DC`}}}Bj}{{{h{DCb}}{h{DCb}}}Bj}{{{h{DCd}}{h{DCd}}}Bj}{{{h{DCf}}{h{DCf}}}Bj}`{{{h{Ahc}}}{{E`{DC`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCfAC`}}}{ACbACd}}3210{{{h{DC`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DC`}}{h{DC`}}}Ef}{{{h{DCb}}{h{DCb}}}Ef}{{{h{DCd}}{h{DCd}}}Ef}{{{h{DCf}}{h{DCf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{DC`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000{{{h{DC`}}{h{Ahc}}}BhGf}{{{h{DCb}}{h{Ahc}}}BhGf}{{{h{DCd}}{h{Ahc}}}BhGf}{{{h{DCf}}{h{Ahc}}}BhGf}{ce{}{}}000{{{h{DC`}}{h{DC`}}}{{Dj{Bj}}}}{{{h{DCb}}{h{DCb}}}{{Dj{Bj}}}}{{{h{DCd}}{h{DCd}}}{{Dj{Bj}}}}{{{h{DCf}}{h{DCf}}}{{Dj{Bj}}}}`{{{h{c}}}e{}{}}000`{c{{E`{e}}}{}{}}0000000`{{{h{c}}}Ij{}}000`7777```````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{DCh}}}DCh}{{{h{DCj}}}DCj}{{{h{DCl}}}DCl}{{{h{DCn}}}DCn}{{{h{DD`}}}DD`}{{{h{DDb}}}DDb}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{Ahc}}}{{E`{DChAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DClAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DD`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DDbAC`}}}{ACbACd}}543210{{{h{DCh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DD`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCh}}{h{DCh}}}Ef}{{{h{DCj}}{h{DCj}}}Ef}{{{h{DCl}}{h{DCl}}}Ef}{{{h{DCn}}{h{DCn}}}Ef}{{{h{DD`}}{h{DD`}}}Ef}{{{h{DDb}}{h{DDb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000`````````{{{h{DCh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DD`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDb}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00000{ce{}{}}00000````````{{{h{c}}}e{}{}}00000{c{{E`{e}}}{}{}}00000000000{{{h{c}}}Ij{}}00000333333```````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00`{{{h{DDd}}}DDd}{{{h{DDf}}}DDf}{{{h{DDh}}}DDh}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{Ahc}}}{{E`{DDdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DDfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DDhAC`}}}{ACbACd}}20{{{h{DDd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDd}}{h{DDd}}}Ef}{{{h{DDf}}{h{DDf}}}Ef}{{{h{DDh}}{h{DDh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{DDd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00`{ce{}{}}00`{{DAfA@`BAfBAfEdIfBBb}DDd}````````{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00``444`{{{h{BMj}}}{{h{DDj}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{BMj}}}BMj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{BMj}}{h{BMj}}}Ef}??{{{h{BMj}}{h{AhEn}}}{{E`{BhF`}}}}0<{{{h{BMj}}}{{h{G`}}}}<{{{h{BMj}}}{{Dj{{h{AOf}}}}}};{{{h{c}}}If{}};;:>````````{{A@`A@`}A@`}`````````````````````````````````````````````````````````````````````````````````````````````99999999999998888888888888{{{h{DDl}}}DDl}{{{h{BKb}}}BKb}{{{h{ALd}}}ALd}{{{h{DDn}}}DDn}{{{h{DE`}}}DE`}{{{h{DEb}}}DEb}{{{h{AKn}}}AKn}{{{h{AE`}}}AE`}{{{h{DEd}}}DEd}{{{h{DEf}}}DEf}{{{h{DEh}}}DEh}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000{{{h{ALd}}{h{ALd}}}Bj}{{{h{DE`}}{h{DE`}}}Bj}{{{h{DEb}}{h{DEb}}}Bj}{{{h{DEf}}{h{DEf}}}Bj}{{{h{AhDDl}}DDl}Bh}{{{h{AhDEh}}DEh}Bh}{{}DDl}{{}DEh}{c{{E`{DDl}}}Eb}{c{{E`{DEf}}}Eb}{c{{E`{DEh}}}Eb}{DEf{{E`{ABbAHd}}}}{{{h{DEh}}}{{E`{ABbAHd}}}}{{{h{DDl}}{h{DDl}}}Ef}{{{h{BKb}}{h{BKb}}}Ef}{{{h{ALd}}{h{ALd}}}Ef}{{{h{DDn}}{h{DDn}}}Ef}{{{h{DE`}}{h{DE`}}}Ef}{{{h{DEb}}{h{DEb}}}Ef}{{{h{AKn}}{h{AKn}}}Ef}{{{h{AE`}}{h{AE`}}}Ef}{{{h{DEd}}{h{DEd}}}Ef}{{{h{DEf}}{h{DEf}}}Ef}{{{h{DEh}}{h{DEh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000000000000000``{{{h{ABn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DDl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BKb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ALd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DE`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DEb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AKn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AE`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{AO`ABn}{AC`ABn}{FnABn}{ACfABn}4444{AO`DDn}{BDhDDn}66{DElAKn}7{DEdAKn}{AO`AKn}{DEnAKn}{AO`AE`};;{AO`DEd}{AO`DEj}={AB`DEf}>{ABbDEf}?{{{h{G`}}}{{E`{DEf}}}}{DhDEf}{{{h{{ALf{}{{Gb{c}}}}}}BKb{h{{Jd{e}}}}}{{E`{{Dj{AAn}}c}}}FbAGd}{{{h{DDl}}{h{Ahc}}}BhGf}{{{h{DE`}}{h{Ahc}}}BhGf}{{{h{DEb}}{h{Ahc}}}BhGf}{{{h{DEf}}{h{Ahc}}}BhGf}{{{h{DEh}}{h{Ahc}}}BhGf}```{ce{}{}}000000000000``{{{h{ALd}}{h{ALd}}}{{Dj{Bj}}}}{{{h{DE`}}{h{DE`}}}{{Dj{Bj}}}}{{{h{DEb}}{h{DEb}}}{{Dj{Bj}}}}{{{h{DEf}}{h{DEf}}}{{Dj{Bj}}}}`````````{{{h{DDl}}c}E`Hn}{{{h{DEf}}c}E`Hn}{{{h{DEh}}c}E`Hn}``{{{h{DE`}}}DEb}{{{h{ABn}}}{{Dj{{h{AOf}}}}}}{{{h{DDn}}}{{Dj{{h{AOf}}}}}}{{{h{AKn}}}{{Dj{{h{AOf}}}}}}{{{h{AE`}}}{{Dj{{h{AOf}}}}}}{{{h{DEd}}}{{Dj{{h{AOf}}}}}}{{{h{DEj}}}{{Dj{{h{AOf}}}}}}`````````{DEf{{E`{AB`AFh}}}}{{{h{DEh}}}{{E`{AB`AFh}}}}{{{h{c}}}e{}{}}0000000000{{{h{c}}}If{}}000000{DEfDh}{c{{E`{e}}}{}{}}0000000000000000000000000{{{h{c}}}Ij{}}000000000000````{{{h{AhDDl}}{h{{Cl{AMh}}}}}{{E`{{Cl{AAj}}DF`}}}}{{{h{AhDEh}}{h{{Cl{AMh}}}}}{{E`{{Cl{AAj}}DF`}}}}`{ce{}{}}000000000000`````````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{{DFb{c}}}}}{{DFb{c}}}{AlBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFf}}}DFf}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{{DFb{c}}}}{h{{DFb{c}}}}}Bj{BlBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFf}}{h{DFf}}}Bj}{{{h{Ahc}}}{{E`{{DFb{e}}AC`}}}{ACbACd}{BBh{DFd{A`}}{AHb{A`}}}}{{{h{{DFb{c}}}}{h{Ahe}}}{{E`{HjACf}}}{BBh{DFd{A`}}{AHb{A`}}}{AChACd}}{c{{E`{{DFb{e}}}}}Eb{BBh{DFd{A`}}{AHb{A`}}BAj}}{c{{E`{DFh}}}Eb}{c{{E`{DFf}}}Eb}{{{h{{DFb{c}}}}{h{{DFb{c}}}}}Ef{EhBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFh}}{h{DFh}}}Ef}{{{h{DFf}}{h{DFf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{{DFb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DFf}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00{{{h{{DFb{c}}}}{h{Ahe}}}Bh{GhBBh{DFd{A`}}{AHb{A`}}}Gf}{{{h{DFf}}{h{Ahc}}}BhGf}{ce{}{}}00```{{{h{{DFb{c}}}}{h{{DFb{c}}}}}{{Dj{Bj}}}{HlBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFf}}{h{DFf}}}{{Dj{Bj}}}}`{{{h{{DFb{c}}}}e}E`{BBh{DFd{A`}}{AHb{A`}}Id}Hn}{{{h{DFh}}c}E`Hn}{{{h{DFf}}c}E`Hn}`{{{h{{DFb{c}}}}}DFf{BBh{DFd{A`}}{AHb{A`}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{DFf{{E`{{DFb{c}}}}}{BBh{DFd{A`}}{AHb{A`}}}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00``;;;````````````````````````````````````````{{AEd{h{{Jd{c}}}}{h{Jf}}}{{E`{AEdJj}}}Jl}{{AJl{h{Jf}}}{{E`{AJlJj}}}}{{{h{AJl}}}}{{{h{AEd}}}}{{{h{AKl}}}}{{{h{AhAJl}}}}{{{h{AhAEd}}}}{{{h{AhAKl}}}}{{{h{AhAEd}}}DFj}{{{h{AEd}}}DFj}{{{h{AJl}}}{{h{{Ab{A`}}}}}}{{{h{AKl}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000000000{{{h{D@`}}}D@`}{{{h{D@b}}}D@b}{{{h{COl}}}COl}{{{h{D@n}}}D@n}{{{h{DA`}}}DA`}{{{h{COf}}}COf}{{{h{AJl}}}AJl}{{{h{AEd}}}AEd}{{{h{COj}}}COj}{{{h{Jf}}}Jf}{{{h{AKl}}}AKl}{{{h{Jj}}}Jj}{{{h{c}}{h{Ahe}}}Bh{}{}}00000000000{{{h{D@`}}{h{D@`}}}Bj}{{{h{D@b}}{h{D@b}}}Bj}{{{h{COl}}{h{COl}}}Bj}{{{h{D@n}}{h{D@n}}}Bj}{{{h{DA`}}{h{DA`}}}Bj}{{{h{COf}}{h{COf}}}Bj}{{{h{AEd}}{h{AEd}}}Bj}{{{h{COj}}{h{COj}}}Bj}{{{h{Jf}}{h{Jf}}}Bj}{{{h{AKl}}{h{AKl}}}Bj}{{{h{Jj}}{h{Jj}}}Bj}4{{{h{AEd}}{h{AEd}}}{{E`{AEdJj}}}}{{{h{{Ad{{h{AEd}}}}}}}{{E`{AEdJj}}}}`{{A`Hj}Bh}000000{c{{E`{AJl}}}Eb}{c{{E`{AEd}}}Eb}{{{h{AJl}}}COh}```{{{h{D@`}}{h{D@`}}}Ef}{{{h{D@b}}{h{D@b}}}Ef}{{{h{COl}}{h{COl}}}Ef}{{{h{D@n}}{h{D@n}}}Ef}{{{h{DA`}}{h{DA`}}}Ef}{{{h{COf}}{h{COf}}}Ef}{{{h{AJl}}{h{AJl}}}Ef}{{{h{AEd}}{h{AEd}}}Ef}{{{h{COj}}{h{COj}}}Ef}{{{h{Jf}}{h{Jf}}}Ef}{{{h{AKl}}{h{AKl}}}Ef}{{{h{Jj}}{h{Jj}}}Ef}4{{{h{c}}{h{e}}}Ef{}{}}00000000000000000000000{{{h{D@`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{D@b}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{COl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{D@n}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DA`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{COf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AJl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AEd}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{COj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Jf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AKl}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{Jj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00000{AG`AJl}{{{h{AG`}}}AJl}2{cAJlDFl}{{{h{AG`}}}AEd}4{DFjAEd}{AG`AEd}66{AJlJf}{LhAKl}{LjAKl}{cAKlDFl}:{LlAKl};{COjJj}{{{Ab{A`}}}{{E`{JfDFn}}}}{{{Ab{A`}}}AKl}{{{h{{Ad{A`}}}}}{{E`{AKlJj}}}}{DG`AEd}><3{{{h{{Jd{c}}}}{h{AJl}}}AEdAGd}{{{h{{Ad{A`}}}}}{{E`{AJlJj}}}}{{{h{{Ad{A`}}}}}{{E`{AEdJj}}}}4{{{h{G`}}}{{E`{AJlJj}}}}{{{h{G`}}}{{E`{AEdJj}}}}{{JbJh}AEd}{{{h{D@`}}{h{Ahc}}}BhGf}{{{h{D@b}}{h{Ahc}}}BhGf}{{{h{COl}}{h{Ahc}}}BhGf}{{{h{D@n}}{h{Ahc}}}BhGf}{{{h{DA`}}{h{Ahc}}}BhGf}{{{h{COf}}{h{Ahc}}}BhGf}{{{h{AEd}}{h{Ahc}}}BhGf}{{{h{COj}}{h{Ahc}}}BhGf}{{{h{Jf}}{h{Ahc}}}BhGf}{{{h{AKl}}{h{Ahc}}}BhGf}{{{h{Jj}}{h{Ahc}}}BhGf}``{{{h{AJl}}c}h{}}{{{h{Jf}}c}h{}}{{{h{AKl}}c}h{}}{ce{}{}}00000000000{DFl{{Ab{A`}}}}{{{h{AJl}}{h{{Jd{c}}}}}AG`AGd}{{AJl{h{Jf}}}{{E`{AJlJj}}}}{{AEd{h{{Jd{c}}}}{h{Jf}}}{{E`{AEdJj}}}Jl}{AJlAJl}{{AEd{h{{Jd{c}}}}}AEdJl}{{{h{Ahc}}}AJl{D@dACd}}{{{h{AhAJl}}}Bh}{{{h{AhJf}}}Bh}{{{h{D@`}}{h{D@`}}}{{Dj{Bj}}}}{{{h{D@b}}{h{D@b}}}{{Dj{Bj}}}}{{{h{COl}}{h{COl}}}{{Dj{Bj}}}}{{{h{D@n}}{h{D@n}}}{{Dj{Bj}}}}{{{h{DA`}}{h{DA`}}}{{Dj{Bj}}}}{{{h{COf}}{h{COf}}}{{Dj{Bj}}}}{{{h{AEd}}{h{AEd}}}{{Dj{Bj}}}}{{{h{COj}}{h{COj}}}{{Dj{Bj}}}}{{{h{Jf}}{h{Jf}}}{{Dj{Bj}}}}{{{h{AKl}}{h{AKl}}}{{Dj{Bj}}}}{{{h{Jj}}{h{Jj}}}{{Dj{Bj}}}}{{{h{AJl}}{h{{Jd{c}}}}}AEdAGd}{{}Jf}{cJfD@d}``{{{h{AJl}}}{{Ab{A`}}}}{{{h{AJl}}c}E`Hn}{{{h{AEd}}c}E`Hn}{{{h{AEd}}}{{Ab{A`}}}}0{{{h{Jj}}}{{Dj{{h{AOf}}}}}}{Jf{{Ab{A`}}}}{{{h{Mj}}}Mj}{{{h{ALl}}}ALl}2{{{h{c}}}e{}{}}00000000000{{{h{AEd}}}AAj}{{{h{ALn}}}ALn}{{{h{n}}}n}{{{h{c}}}If{}}000{c{{E`{e}}}{}{}}00000000000000000000000{{{h{c}}}Ij{}}00000000000{{{h{AEd}}{h{{Jd{c}}}}{h{AKl}}{h{C@j}}}{{E`{BhJj}}}Jl}{ce{}{}}00000000000{{{h{AJl}}{h{{Jd{c}}}}}{{Ff{JbJh}}}AGd}{{{h{AEd}}}{{Ff{JbJh}}}}`````````````````{{{h{DGb}}}{{h{{Ad{A`}}}}}}0{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DGb}}}DGb}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DGb}}{h{DGb}}}Bj}{c{{E`{DGb}}}Eb}{{{h{DGb}}}COh}{{{h{DGb}}{h{DGb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{DGb}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{{{Ab{A`}}}DGb}{{{h{{Ad{A`}}}}}{{E`{DGbJj}}}}{{{h{G`}}}{{E`{DGbJj}}}}{{{h{DGb}}{h{Ahc}}}BhGf}{ce{}{}}{{{h{AEd}}{h{AJl}}}DGb}{{{h{AhDGb}}}Bh}{{{h{DGb}}{h{DGb}}}{{Dj{Bj}}}}{{{h{DGb}}}{{Ab{A`}}}}{{{h{DGb}}c}E`Hn}{{{h{AEd}}{h{AJl}}}{{Ab{A`}}}}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}9````{{{h{D@j}}}}{{{h{C@j}}}}{{{h{AhD@j}}}}{{{h{AhC@j}}}}{{{h{AhD@j}}}DGd}{{{h{AhC@j}}}DGf}{{{h{D@j}}}DGd}{{{h{C@j}}}DGf}{{{h{DGh}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}0100{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{DGh}}}Hj}{{{h{DGj}}}DGj}{{{h{D@j}}}D@j}{{{h{DGh}}}DGh}{{{h{C@j}}}C@j}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{DGj}}{h{DGj}}}Bj}{{{h{D@j}}{h{D@j}}}Bj}{{{h{DGh}}{h{DGh}}}Bj}{{{h{C@j}}{h{C@j}}}Bj}0<{c{{E`{C@j}}}Eb}{{{h{DGj}}{h{DGj}}}Ef}{{{h{D@j}}{h{D@j}}}Ef}{{{h{DGh}}{h{DGh}}}Ef}{{{h{DGh}}{h{{Ad{A`}}}}}Ef}{{{h{C@j}}{h{C@j}}}Ef}0{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{DGj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{D@j}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DGh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@j}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{DGdD@j}11{C@jDGh}{{{h{C@j}}}DGh}{DGfC@j}4{{{h{{Ad{A`}}}}DGj}{{E`{D@jJj}}}}{{{h{{Ad{A`}}}}}{{E`{C@jJj}}}}00{BBb{{E`{DGjJj}}}}4{{{h{G`}}}{{E`{C@jJj}}}}{{{h{D@j}}{h{Ahc}}}BhGf}{{{h{DGh}}{h{Ahc}}}BhGf}{{{h{C@j}}{h{Ahc}}}BhGf}{ce{}{}}000{{{h{DGh}}}}{DGh}{{{h{DGh}}}Ef}{{{h{DGh}}}Hj}{{{h{AhC@j}}}Bh}{{{h{DGj}}{h{DGj}}}{{Dj{Bj}}}}{{{h{D@j}}{h{D@j}}}{{Dj{Bj}}}}{{{h{DGh}}{h{{Ad{A`}}}}}{{Dj{Bj}}}}{{{h{DGh}}{h{DGh}}}{{Dj{Bj}}}}{{{h{C@j}}{h{C@j}}}{{Dj{Bj}}}}{{{h{C@j}}c}E`Hn}{{{h{D@j}}}{{Ff{DGj{Ab{A`}}}}}}{{{h{C@j}}}{{Ab{A`}}}}{{{h{C@j}}}DGh}`{DGjBBb}{{{h{c}}}e{}{}}000{{{h{DGh}}}{{E`{C@jJj}}}}{{{h{D@j}}}C@j}{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{DGh}}}{{E`{C@j}}}}{DGh{{E`{C@j}}}}2222{{{h{c}}}Ij{}}000{ce{}{}}000``{{{h{DGl}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DGl}}}DGl}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DGl}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}7{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}8{{{h{AhDGl}}}Dj}0{{{h{AhDGl}}Hj}Dj}{{{h{DGl}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0?>`````{{{h{DG`}}}}{{{h{AhDG`}}}}{{{h{DGn}}}{{h{{Ab{A`}}}}}}???>>>{{{h{DG`}}}DG`}{{{h{DGn}}}DGn}{{{h{DH`}}}DH`}???{{{h{DG`}}{h{DG`}}}Bj}{{{h{DGn}}{h{DGn}}}Bj}{{{h{DH`}}{h{DH`}}}Bj}{{{h{DG`}}{h{DG`}}}Ef}{{{h{DGn}}{h{DGn}}}Ef}{{{h{DH`}}{h{DH`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{DG`}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{DGn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DH`}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{{{Ab{A`}}}DG`}{AEdDG`}{{{h{{Jd{c}}}}AJl{Dj{{Ab{A`}}}}}DG`Jl}{{{Ab{A`}}}DGn}{{{h{G`}}}{{E`{DG`}}}}{{{h{DG`}}{h{Ahc}}}BhGf}{{{h{DGn}}{h{Ahc}}}BhGf}{{{h{DH`}}{h{Ahc}}}BhGf}{ce{}{}}00{{AJl{Ab{A`}}}DG`}{{{h{DG`}}{h{DG`}}}{{Dj{Bj}}}}{{{h{DGn}}{h{DGn}}}{{Dj{Bj}}}}{{{h{DH`}}{h{DH`}}}{{Dj{Bj}}}}{{DG`DG`AJlDH`{Dj{{h{{Ad{A`}}}}}}}DGn}{{DG`DG`AJlDH`c}DGn{{Hf{{Ab{A`}}{Ab{A`}}{Ab{A`}}}{{Hd{DGn}}}}}}{{{h{DG`}}}{{Ab{A`}}}}{{{h{c}}}e{}{}}00{DGn{{Ab{A`}}}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00<<<``````````````````````````{{{h{{DHd{}{{DHb{c}}}}}}}c{}}{{{h{DFj}}}}{{{h{DGf}}}}{{{h{Mf}}}}{{{h{CN`}}}}{{{h{DHf}}}}{{{h{Ah{DHd{}{{DHb{c}}}}}}}c{}}{{{h{AhDFj}}}}{{{h{AhDGf}}}}{{{h{AhMf}}}}{{{h{AhCN`}}}}{{{h{AhDHf}}}}{{{h{DFj}}}{{h{{Ab{A`}}}}}}{{{h{DGf}}}{{h{{Ab{A`}}}}}}{{{h{Mf}}}{{h{{Ab{A`}}}}}}{{{h{CN`}}}{{h{{Ab{A`}}}}}}{{{h{DHf}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000{{{h{CNl}}}CNl}{{{h{DFj}}}DFj}{{{h{DGf}}}DGf}{{{h{Mf}}}Mf}{{{h{CN`}}}CN`}{{{h{DHf}}}DHf}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{DFj}}{h{DFj}}}Bj}{{{h{DGf}}{h{DGf}}}Bj}{{{h{Mf}}{h{Mf}}}Bj}{{{h{CN`}}{h{CN`}}}Bj}{{{h{DHf}}{h{DHf}}}Bj}43210{{CNlDGfA`Hj}BBb}{{{h{DFj}}{h{DFj}}}Ef}{{{h{DGf}}{h{DGf}}}Ef}{{{h{Mf}}{h{Mf}}}Ef}{{{h{CN`}}{h{CN`}}}Ef}{{{h{DHf}}{h{DHf}}}Ef}43210{{{h{c}}{h{e}}}Ef{}{}}000000000{{{h{CNl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DFj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DGf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Mf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{CN`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DHf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000000{{{Ab{A`}}}DHf}{{{Ab{A`}}}DFj}{{{Ab{A`}}}DGf}{{{Ab{A`}}}Mf}{{{Ab{A`}}}CN`}{{{h{DFj}}{h{Ahc}}}BhGf}{{{h{DGf}}{h{Ahc}}}BhGf}{{{h{Mf}}{h{Ahc}}}BhGf}{{{h{CN`}}{h{Ahc}}}BhGf}{{{h{DHf}}{h{Ahc}}}BhGf}``{{{h{DFj}}c}h{}}{{{h{DGf}}c}h{}}{{{h{Mf}}c}h{}}{{{h{CN`}}c}h{}}{{{h{DHf}}c}h{}}{ce{}{}}000000{{{Dj{{DHj{A`A`HjA`A`A`HjDHh}{{Hd{BBb}}}}}}DHh}DHl}{{}DFj}{{}DGf}{{}Mf}{{}CN`}{{{h{AhCN`}}}Bh}{{{h{Ahc}}c}Bh{}}{{{h{DFj}}{h{DFj}}}{{Dj{Bj}}}}{{{h{DGf}}{h{DGf}}}{{Dj{Bj}}}}{{{h{Mf}}{h{Mf}}}{{Dj{Bj}}}}{{{h{CN`}}{h{CN`}}}{{Dj{Bj}}}}{{{h{DHf}}{h{DHf}}}{{Dj{Bj}}}}`{Dh{{CNn{CNl}}}}{{{CNn{CNl}}}Bh}{{BBdDHh}Bh}021`{{CNl{CNn{DHh}}}{{CNn{CNl}}}}{CNlHj}{{{CNn{DHh}}Dh}{{CNn{CNl}}}}4{DhHj}{{{CNn{CNl}}A`}BBb}{{CNlDFjDFj}BBb}{{CNlDFjDFjHj}BBb}{{CNlDFjA`}BBb}{{CNlDFj}BBb}{{CNlDFjA`Hj}BBb}{{CNlA`HjDFjDh}BBb}33{{CNlA`}BBb}{{CNlA`A`}BBb}01{{CNlA`DFjA`{Dj{{DHj{A`A`A`DHh}{{Hd{BBb}}}}}}DHh}BBb}`{{CNlDGfA`A`{Dj{{DHj{A`A`A`A`DHhDh}{{Hd{BBb}}}}}}DHh}BBb}{{CNlDGfDGf}BBb}{{CNlDGfA`}BBb}{{CNlDGfA`Hj}BBb}{{CNlA`DGf}BBb}{{CNlA`HjDGf}BBb}{{CNlDGfA`DFj}BBb}{{CNlA`A`A`}BBb}9{{CNlA`DFjA`}BBb}{{CNlA`A`A`A`BBb{Dj{{DHj{A`A`A`A`DHh}{{Hd{BBb}}}}}}DHh}BBb}`{{CNlCN`A`}BBb}{{CNlDFjCN`}BBb}{{CNlA`CN`}BBb}{{CNlMfBBbCN`}BBb}3```{{CNlA`A`CN`A`}BBb}{{CNlA`A`HjCN`DHl}BBb}{{CNlA`A`HjMf}BBb}{{CNlMfMf}BBb}{{CNlMfBBbDFj}BBb}{{CNlMfA`}BBb}{{CNlA`Mf}BBb}{{CNlDFjMfA`}BBb}{{CNlA`BBbMfA`}BBb}{DHf{{Ab{A`}}}}{{{h{c}}}e{}{}}00000{c{{E`{e}}}{}{}}0000000000000{{{h{c}}}Ij{}}000000`{DFj{{Ab{A`}}}}{DGf{{Ab{A`}}}}{Mf{{Ab{A`}}}}{CN`{{Ab{A`}}}}{ce{}{}}000000`{{{h{DGd}}}}{{{h{AhDGd}}}}{{{h{DGd}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DGd}}}DGd}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DGd}}{h{DGd}}}Bj}0{{}DGd}{{{h{DGd}}{h{DGd}}}Ef}0{{{h{c}}{h{e}}}Ef{}{}}0{{{h{DGd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{{{h{DGd}}{h{Ahc}}}BhGf}{{{h{DGd}}c}h{}}?6{{{h{DGd}}{h{DGd}}}{{Dj{Bj}}}}{{CNlDFjDGdA`}BBb}{{CNlDGfDGd}BBb}{{CNlDGdA`BBb}BBb}{{CNlA`BBbDGd}BBb}{{CNlDGdA`A`{Dj{{DHj{A`A`A`A`DHhDh}{{Hd{BBb}}}}}}DHh}BBb}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}``{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0`````{{{h{D@f}}}D@f}{{{h{c}}{h{Ahe}}}Bh{}{}}{{}D@f}{{{h{DHh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}077`:999988772```````````{{}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{}{{DHn{c}}}CAd}{{{h{{CAd{}{{CA`{c}}{CAb{e}}}}}}}{{h{e}}}CAf{CAhBBh}}{{{h{{DHn{c}}}}}hCAd}::{{{h{{DHn{c}}}}}{{h{{Ad{A`}}}}}CAd};:::`{{{h{{DI`{c}}}}}{{DI`{c}}}{AlCAd}}{{{h{Fn}}}Fn}{{{h{{DHn{c}}}}}{{DHn{c}}}{AlCAd}};;;{{{h{{DHn{c}}}}{h{{DHn{c}}}}}Bj{BlCAd}}{{}{{DI`{c}}}CAd}{c{{E`{{DHn{e}}}}}Eb{CAdBAj}}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}c{}}{{{h{Fn}}{h{Fn}}}Ef}{{{h{{DHn{c}}}}{h{{DHn{c}}}}}Ef{EhCAd}}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{Fn}}}Hj}{{{h{Ah{DI`{c}}}}}{{E`{BhACf}}}CAd}{{{h{Ah{DI`{c}}}}}{{E`{BhBBn}}}CAd}{{{h{Fn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DHn{c}}}}{h{AhEn}}}{{E`{BhF`}}}CAd}00{cc{}}00{c{{CAd{}{{CA`{e}}{CAb{c}}}}}{CAhBBh}CAf}{{}{{DHn{c}}}CAd}{c{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{DI`{c}}}{{DHn{c}}}CAd}{{}{{DI`{c}}}CAd}{{{h{{Ad{A`}}}}}{{E`{{CAd{}{{CA`{c}}{CAb{e}}}}Fn}}}CAf{CAhBBh}}{{{h{{Ad{A`}}}}}{{E`{{DHn{c}}Fn}}}CAd}{{{h{G`}}}{{E`{{DHn{c}}}}}{CAdDIb}}{{{h{{Ad{A`}}}}}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{h{{DHn{c}}}}{h{Ahe}}}Bh{GhCAd}Gf}{e{{CAd{}{{CA`{g}}{CAb{i}}}}}{{AD`{{Ad{A`}}}}}{{El{}{{Ej{c}}}}}CAf{CAhBBh}}``{{{h{{DHn{c}}}}AIf}{{h{{Ad{A`}}}}}CAd}{{{h{{DHn{c}}}}{AI`{Hj}}}{{h{{Ad{A`}}}}}CAd}{{{h{{DHn{c}}}}{AIb{Hj}}}{{h{{Ad{A`}}}}}CAd}{{{h{{DHn{c}}}}Hj}{{h{A`}}}CAd}{{{h{{DHn{c}}}}{AIj{Hj}}}{{h{{Ad{A`}}}}}CAd}{{{h{Ah{CAf{}{{CAj{c}}}}}}{h{{Ad{A`}}}}}Bh{}}{{{h{Ah{DI`{c}}}}{h{{Ad{A`}}}}}BhCAd}{ce{}{}}00{{{h{Fn}}}Hj}{{{h{{CAf{}{{CAj{c}}}}}}}c{}}{{{h{{DI`{c}}}}}{}CAd}{{{h{{CAf{}{{CAj{c}}}}}}}Hj{}}{{{h{{DI`{c}}}}}HjCAd}{{{h{{Ad{A`}}}}}{{DI`{c}}}CAd}{{{h{{DHn{c}}}}{h{{DHn{c}}}}}{{Dj{Bj}}}{HlCAd}}`{{{h{{DHn{c}}}}e}E`{CAdId}Hn}`{{{CAd{}{{CA`{c}}{CAb{e}}}}}eCAf{CAhBBh}}{{{DHn{c}}}{}CAd}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00>>>{{{h{Ah{DI`{c}}}}{h{{Ad{A`}}}}}{{E`{HjACf}}}CAd}{{{h{Ah{DI`{c}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}CAd}`````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DId}}}{{Dj{{DIf{Dh}}}}}}`{{{h{AhD@d}}{h{Ahc}}}Bh{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}Bh}{{{h{DId}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{DIf{Dh}}}DId}{DIlDId}{{}{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{c{{E`{{DJ`{}{{DIn{e}}}}DId}}}DIj{DJb{DJd{{Ad{A`}}}}}}{c{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{{{h{AhD@d}}}c{}}{{{h{AhD@d}}ADb}Ef}{{{h{AhD@d}}e}cDJf{{DJh{c}}}}{{{h{AhD@d}}DhDh}Ef}{{{h{DId}}}{{h{AOf}}}}{ce{}{}}{cDId{{AHb{{AJb{AOf}}}}}}{{{h{AhDIj}}}Dh}{{{h{AhDIj}}}Ed}`{{}c{}}{{{h{DId}}}{{Dj{BBb}}}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}{{E`{HjBBn}}}}`{{{h{AhD@d}}e}c{}{{DJj{c}}}}{{D@de}{{DJl{eD@dc}}}{}{{DJj{c}}}}{Ed{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}`{{{h{DId}}}{{Dj{{h{AOf}}}}}}{DId{{AJb{AOf}}}}{{}DJn}{{{h{c}}}If{}}{{{h{AhDIh}}{h{Ahc}}}{{E`{BhDId}}}{D@dACd}}{{{h{AhD@d}}{h{Ahc}}}{{E`{BhDId}}}{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}```````````````````{{{h{DK`}}{h{Ahc}}{h{AhIf}}Hj}Bh{D@dACd}}{{{h{DKb}}{h{Ahc}}{h{AhIf}}Hj}Bh{D@dACd}}{{{h{DKd}}{h{Ahc}}{h{AhIf}}Hj}Bh{D@dACd}}{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000000000{c{{Dj{Ch}}}{}}{c{{Dj{Il}}}{}}{{{h{DKf}}}DKf}{{{h{DKh}}}DKh}{{{h{DKj}}}DKj}{{{h{DKl}}}DKl}{{{h{DKb}}}DKb}{{{h{{DKn{c}}}}}{{DKn{c}}}Al}{{{h{{DL`{c}}}}}{{DL`{c}}}{AlDJfHl}}{{{h{DLb}}}DLb}{{{h{{DLd{c}}}}}{{DLd{c}}}{AlDJf}}{{{h{DKd}}}DKd}{{{h{c}}{h{Ahe}}}Bh{}{}}000000000{{{h{DKf}}{h{DKf}}}Ef}{{{h{DKh}}{h{DKh}}}Ef}{{{h{{DL`{c}}}}{h{{DL`{c}}}}}Ef{EhDJfHl}}{{{h{DLb}}{h{DLb}}}Ef}{{{h{{DLd{c}}}}{h{{DLd{c}}}}}Ef{EhDJf}}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{DKf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DKh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DJl{ceg}}}}{h{AhEn}}}{{E`{BhF`}}}FbFbFb}{{{h{{DLf{cegi}}}}{h{AhEn}}}{{E`{BhF`}}}FbFbFbFb}{{{h{DKj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DKl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DKb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{DKn{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{DL`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDJfHl}}{{{h{DLb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DLd{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDJf}}{{{h{DKd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000000000{{{AI`{c}}}{{DLd{c}}}DJf}1{{{AIl{c}}}{{DLd{c}}}DJf}2{{DhDh}{{E`{DKfDKh}}}}{ce{}{}}00000000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}1{{DJjg}{{DLf{DJjgce}}}{}{}{{AFd{c}{{Hd{e}}}}}}{ADb{{E`{DKfDKh}}}}{{{h{{Ad{c}}}}}{{E`{{DKn{c}}DLh}}}{}}{c{{E`{{DL`{e}}DLb}}}El{DLjAlDJbDJfHl}}{{eg}{{DLd{c}}}DJf{{DLl{c}}}{{DLl{c}}}}0{{{h{Ah{DJl{egc}}}}}{{Dj{c}}}{}{{DJj{c}}}D@d}{{{h{DJj}}{h{Ahc}}}e{D@dACd}{}}{{{h{DKf}}{h{Ahc}}}Ef{D@dACd}}{{{h{{DLf{eicg}}}}{h{Ahk}}}g{}{{DJj{c}}}{}{{AFd{c}{{Hd{g}}}}}{D@dACd}}{{{h{DKj}}{h{Ahc}}}CFb{D@dACd}}{{{h{DKj}}{h{Ahc}}}ADb{D@dACd}}{{{h{DKl}}{h{Ahc}}}CFb{D@dACd}}{{{h{DKl}}{h{Ahc}}}ADb{D@dACd}}{{{h{DKb}}{h{Ahc}}}A`{D@dACd}}{{{h{{DKn{c}}}}{h{Ahe}}}{{h{c}}}{}{D@dACd}}{{{h{{DL`{c}}}}{h{Ahe}}}Hj{DJfHl}{D@dACd}}{{{h{{DLd{c}}}}{h{Ahe}}}cDJf{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{DLn{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}{{Ab{e}}}{D@dACd}{}}0{{{h{DKd}}{h{Ahc}}}BBj{D@dACd}}1{{{h{DKd}}{h{Ahc}}}Dh{D@dACd}}{{{h{DKd}}{h{Ahc}}}BBb{D@dACd}}{{{h{DKd}}{h{Ahc}}}Ef{D@dACd}}444{{{h{DKd}}{h{Ahc}}}BBd{D@dACd}}5{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAeAgAi}}}{D@dACd}{}{}{}{}{}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{DIf{ACn}}}{D@dACd}}7{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAe}}}{D@dACd}{}{}{}{}{}{}{}{}{}}88888{{{h{DKd}}{h{Ahc}}}A`{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}A@`{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikm}}}{D@dACd}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAeAg}}}{D@dACd}{}{}{}{}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAeAgAiAk}}}{D@dACd}{}{}{}{}{}{}{}{}{}{}{}{}}>{{{h{DKd}}{h{Ahc}}}CFb{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egi}}}{D@dACd}{}{}{}}{{{h{DKd}}{h{Ahc}}}ADb{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAc}}}{D@dACd}{}{}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}CFd{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ab{e}}}{D@dACd}{}}0{{{h{DKd}}{h{Ahc}}}{{Ff{eg}}}{D@dACd}{}{}}1{{{h{DKd}}{h{Ahc}}}AEl{D@dACd}}2{{{h{DKd}}{h{Ahc}}}{{Ff{egik}}}{D@dACd}{}{}{}{}}3{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAa}}}{D@dACd}{}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{DIf{AEl}}}{D@dACd}}555555{{{h{DKd}}{h{Ahc}}}{{DIf{A`}}}{D@dACd}}{{{h{DKd}}{h{Ahc}}}Ed{D@dACd}}7{{{h{DKd}}{h{Ahc}}}BB`{D@dACd}}{{{h{DKd}}{h{Ahc}}}ACn{D@dACd}}9{{{h{DKd}}{h{Ahc}}}{{DIf{Hj}}}{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{DIf{Dh}}}{D@dACd}};{{{h{DKd}}{h{Ahc}}}CKf{D@dACd}}{{{h{DKd}}{h{Ahc}}}Bh{D@dACd}}=={{{h{DKd}}{h{Ahc}}}{{DIf{Ed}}}{D@dACd}}>{{{h{DKd}}{h{Ahc}}}{{Dj{e}}}{D@dACd}{}}?{{{h{DKd}}{h{Ahc}}}Hj{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmo}}}{D@dACd}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{Ab{e}}}{D@dACd}{}}{{DJjc}{{DJl{DJjce}}}D@d{}}{{{h{DK`}}{h{Ahc}}Hj}If{D@dACd}}{{{h{{DJl{egc}}}}}{{Ff{Hj{Dj{Hj}}}}}{}{{DJj{c}}}D@d}{{{h{c}}}e{}{}}000000000{{{h{c}}}If{}}0{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}00000000000000000000000{{{h{c}}}Ij{}}00000000000`{{{h{Ah{DL`{c}}}}{h{{Ad{{Ff{Hj{h{c}}}}}}}}}{{E`{BhDLb}}}{DLjDM`AlDJbDJfHl}}{ce{}{}}00000000000````````````{{{h{DLl}}}{{h{c}}}{}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{{DMb{c}}}}}{{DMb{c}}}Al}{{{h{DMd}}}DMd}{{{h{{DMf{c}}}}}{{DMf{c}}}Al}{{{h{DMh}}}DMh}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{{DMb{c}}}}{h{{DMb{c}}}}}EfEh}{{{h{{DMf{c}}}}{h{{DMf{c}}}}}EfEh}{{{h{{DMb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{DMd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{DMf{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{DMh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000????{{{h{DJh}}}Ef}{{eg}{{DMl{}{{DMj{c}}}}}{}{{DLl{c}}}{{DLl{c}}}}{{ce}{{DMb{A@`}}}DLlDLl}{{ce}{{DMb{BBb}}}DLlDLl}{{ce}{{DMb{Hj}}}DLlDLl}{{ce}{{DMb{BBd}}}DLlDLl}{{ce}{{DMb{AEl}}}DLlDLl}{{ce}{{DMb{ACn}}}DLlDLl}{{ce}{{DMb{A`}}}DLlDLl}{{ce}{{DMb{BB`}}}DLlDLl}{{ce}{{DMb{Ed}}}DLlDLl}{{ce}{{DMb{CKf}}}DLlDLl}{{ce}{{DMb{CFd}}}DLlDLl}{{ce}{{DMb{Dh}}}DLlDLl}{{ce}DMdDLlDLl}{{ce}{{DMf{ADb}}}DLlDLl}{{ce}{{DMf{CFb}}}DLlDLl}{{ce}DMhDLlDLl}{{eg}{{DMl{}{{DMj{c}}}}}{}{{DLl{c}}}{{DLl{c}}}}:{{ce}{{DMb{A@`}}}DLlDLl}?:8<9{{ce}{{DMb{BBb}}}DLlDLl}?87>6543{{{h{{DMl{}{{DMj{c}}}}}}{h{Ahe}}}c{}{D@dACd}}{{{h{{DMb{BBd}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{ACn}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{Ed}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{AEl}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{BBb}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{Dh}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{A`}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{A@`}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{BB`}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{CFd}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{Hj}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{CKf}}}}{h{Ahc}}}{}{D@dACd}}{{{h{DMd}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMf{CFb}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMf{ADb}}}}{h{Ahc}}}{}{D@dACd}}{{{h{DMh}}{h{Ahc}}}DMn{D@dACd}}{{DJh{h{Ahc}}}e{DIjACd}{}}{{eg{h{Ahi}}}c{}{{DLl{c}}}{{DLl{c}}}{D@dACd}}{{ce{h{Ahg}}}{}DLlDLl{D@dACd}}00000000000001000000000000{{{h{c}}}e{}{}}000{c{{E`{e}}}{}{}}0000000{{{h{c}}}Ij{}}000{ce{}{}}000`````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{DN`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDNb}}{cc{}}4{{{ADl{c}}}{{E`{{DN`{c}}DLb}}}DNb}7765```````````{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{c}}}}}{}{D@dACd}}{{DNf{h{Ahc}}}{{Dj{e}}}{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{DNh{{DNd{}{{Ej{c}}}}c}}}{}{D@dACd}}{{DNf{h{Ahc}}Hj}{{ADl{e}}}{D@dACd}{}}{{DNf{h{Ahc}}{h{Ah{Ad{e}}}}}Hj{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hji}{{E`{{DNh{{DNd{}{{Ej{c}}}}c}}DLb}}}{}{D@dACd}{{AHb{ADb}}}{{AFd{{h{c}}}{{Hd{g}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{Ahc}}}}}{}{D@dACd}}5{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{c}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{Ahc}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{AhD@d}}{h{Ahc}}}Bh{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}Bh}{{}{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{c{{E`{{DJ`{}{{DIn{e}}}}DId}}}DIj{DJb{DJd{{Ad{A`}}}}}}{c{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{{{h{AhD@d}}}c{}}{{{h{AhD@d}}ADb}Ef}{{{h{AhD@d}}e}cDJf{{DJh{c}}}}{{{h{AhD@d}}DhDh}Ef}{{DJjg}{{DLf{DJjgce}}}{}{}{{AFd{c}{{Hd{e}}}}}}{{{h{AhDIj}}}Dh}{{{h{AhDIj}}}Ed}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{Ff{{h{Ah{Ad{c}}}}{h{Ah{Ad{c}}}}}}}{}{D@dACd}}{{}c{}}{{{h{DJj}}{h{Ahc}}}e{D@dACd}{}}{{{h{AhD@d}}e}c{}{{DJj{c}}}}{{DJjc}{{DJl{DJjce}}}D@d{}}{{D@de}{{DJl{eD@dc}}}{}{{DJj{c}}}}{Ed{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}Bh{}{D@dACd}}{{}DJn}{{{h{AhD@d}}{h{Ahc}}}{{E`{BhDId}}}{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}````{{{h{Ahc}}}{{h{AhDIj}}}{}}00{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{DNj}}}DNj}{{{h{DNl}}}DNl}{{{h{DJn}}}DJn}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{}DNj}:{{{h{DNl}}{h{DNl}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhDNj}}{h{Ah{Ad{A`}}}}}Bh}{{{h{AhDNl}}{h{Ah{Ad{A`}}}}}Bh}{{{h{AhDJn}}{h{Ah{Ad{A`}}}}}Bh}{{{h{DNj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DNl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DJn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{c{{E`{DNlDId}}}DIj}{{}DNl}{ce{}{}}00`{{{h{AhDNj}}}Dh}{{{h{AhDNl}}}Dh}{{{h{AhDJn}}}Dh}{{{h{AhDNj}}}Ed}{{{h{AhDNl}}}Ed}{{{h{AhDJn}}}Ed}{{{h{c}}}e{}{}}00{{{h{AhDNj}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{{{h{AhDNl}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{{{h{AhDJn}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00<<<```{{{h{Ahc}}}{{h{AhDIj}}}{}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{{DNn{ce}}}}}{{DNn{ce}}}{DO`DJ`Al}{DIjAl}}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Ah{DOb{c}}}}{h{Ah{Ad{A`}}}}}BhBHb}{{{h{Ah{DNn{ce}}}}{h{Ah{Ad{A`}}}}}Bh{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{{{h{{DOb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{DOd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DNn{ce}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDO`DJ`}{FbDIj}}{cc{}}00{ce{}{}}00{c{{DOb{c}}}BHb}{{cEde}{{DNn{ce}}}{DO`DJ`}DIj}{{{h{Ah{DOb{c}}}}}DhBHb}{{{h{Ah{DNn{ce}}}}}Dh{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{{{h{Ah{DOb{c}}}}}EdBHb}{{{h{Ah{DNn{ce}}}}}Ed{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{{{h{Ah{DNn{ce}}}}}{{E`{BhDId}}}{DO`DJ`}DIj}{{{h{DOd}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{{{h{Ah{DOb{c}}}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}BHb}{{{h{Ah{DNn{ce}}}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00>>>`{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DOf}}}DOf}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DOf}}{h{DOf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhDOf}}{h{Ah{Ad{A`}}}}}Bh}{{{h{DOf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{ce{}{}}{{EdEd}DOf}{{{h{AhDOf}}}Dh}{{{h{AhDOf}}}Ed}{{{h{c}}}e{}{}}{{{h{AhDOf}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{c}}}}}{}{D@dACd}}{{DNf{h{Ahc}}}{{Dj{e}}}{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{DNh{{DNd{}{{Ej{c}}}}c}}}{}{D@dACd}}{{DNf{h{Ahc}}Hj}{{ADl{e}}}{D@dACd}{}}{{DNf{h{Ahc}}{h{Ah{Ad{e}}}}}Hj{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hji}{{E`{{DNh{{DNd{}{{Ej{c}}}}c}}DLb}}}{}{D@dACd}{{AHb{ADb}}}{{AFd{{h{c}}}{{Hd{g}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{Ahc}}}}}{}{D@dACd}}5{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{c}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{Ahc}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{{DNh{ce}}}}{h{AhEn}}}{{E`{BhF`}}}{FbACd}Fb}{cc{}}`{ce{}{}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}1{{{h{{DNh{ec}}}}}Hj{}{{DOh{Hj}{{Hd{c}}}}ACd}}{{{h{Ah{DNh{ec}}}}}Dj{}{{DOh{Hj}{{Hd{c}}}}ACd}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{Ff{{h{Ah{Ad{c}}}}{h{Ah{Ad{c}}}}}}}{}{D@dACd}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}Bh{}{D@dACd}}{{{h{{DNh{ec}}}}}{{Ff{Hj{Dj{Hj}}}}}{}{{DOh{Hj}{{Hd{c}}}}ACd}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}9```{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{DOj}}}DOj}{{{h{DOl}}}DOl}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{DOj}}{h{DOj}}}Ef}{{{h{DOj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DOn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DOl}}{h{AhEn}}}{{E`{BhF`}}}}{{{ADl{Dh}}}DOj}{{{ADl{Hj}}}DOj}{cc{}}00{{{h{DOj}}Hj}Hj}{ce{}{}}00{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}0{DOjDOl}22{DOj{{ADl{Hj}}}}{{{h{DOj}}}Ef}{{{h{DOj}}}DOn}{{{h{DOj}}}Hj}{{{h{AhDOn}}}{{Dj{Hj}}}}{{{h{AhDOl}}}Dj}{{{h{Ahc}}HjHj}DOj{D@dACd}}{{{h{Ahc}}HjgHj}{{E`{DOjDLb}}}{D@dACd}{{AHb{ADb}}}{{AFd{Hj}{{Hd{e}}}}}}{{{h{DOn}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{DOl}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}0{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00{ce{}{}}00``{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DFn}}}DFn}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DFn}}{h{DFn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{DFn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{h{DFn}}{h{Ahc}}}BhGf}9={{{h{c}}}If{}}<<;:`{{{h{AMn}}}}{{{h{AhAMn}}}}{{{h{AMn}}}{{h{{Ab{A`}}}}}}<;{{{h{AMn}}}AMn}:{{{h{AMn}}{h{AMn}}}Bj}{c{{E`{AMn}}}Eb}{{{h{AMn}}{h{AMn}}}Ef};;{{{h{AMn}}{h{AhEn}}}{{E`{BhF`}}}}00:{{{h{{Ad{A`}}}}}{{E`{AMnJj}}}}{{{h{G`}}}{{E`{AMnJj}}}}{{{h{AMn}}{h{Ahc}}}BhGf}{{{h{AMn}}c}h{}}{ce{}{}}{{{h{AMn}}{h{AMn}}}{{Dj{Bj}}}}{{{h{AMn}}}{{Ab{A`}}}}{{{h{AMn}}c}E`Hn}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7`````````````````````````````````````````````````````{{{h{E@`}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000000000000{{{h{{E@b{c}}}}}{{E@b{c}}}{Al{Dl{AAf}}}}{{{h{AEn}}}AEn}{{{h{E@d}}}E@d}{{{h{E@f}}}E@f}{{{h{E@h}}}E@h}{{{h{AFh}}}AFh}{{{h{AHd}}}AHd}{{{h{E@j}}}E@j}{{{h{E@`}}}E@`}{{{h{DEl}}}DEl}{{{h{DEn}}}DEn}{{{h{E@l}}}E@l}{{{h{E@n}}}E@n}{{{h{c}}{h{Ahe}}}Bh{}{}}000000000000{{{h{{E@b{c}}}}{h{{E@b{c}}}}}Bj{Bl{Dl{AAf}}}}{{{h{AEn}}{h{AEn}}}Bj}{{{h{E@`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{E@b{c}}}}{h{{E@b{c}}}}}Ef{Eh{Dl{AAf}}}}{{{h{AEn}}{h{AEn}}}Ef}{{{h{E@d}}{h{E@d}}}Ef}{{{h{E@f}}{h{E@f}}}Ef}{{{h{E@h}}{h{E@h}}}Ef}{{{h{AFh}}{h{AFh}}}Ef}{{{h{AHd}}{h{AHd}}}Ef}{{{h{E@j}}{h{E@j}}}Ef}{{{h{E@`}}{h{E@`}}}Ef}{{{h{DEl}}{h{DEl}}}Ef}{{{h{DEn}}{h{DEn}}}Ef}{{{h{E@l}}{h{E@l}}}Ef}{{{h{E@n}}{h{E@n}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000000000000000000000{{{h{{AKj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{Fb{Dl{Cd}}}}{{{h{{E@b{c}}}}{h{AhEn}}}{{E`{BhF`}}}{Fb{Dl{AAf}}}}{{{h{AEn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{E@d}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@f}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@h}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AFh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@j}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DEl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@n}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{EA`{c}}}}{h{AhEn}}}{{E`{BhF`}}}CBb}{{{h{{EA`{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{cc{}}000000{AO`E@h}1111{AMdDEl}{AO`DEl}{E@dDEl}4{E@fDEl}{E@hDEl}6{AMdDEn}{AO`DEn}8{AO`E@n}99{AO`{{EA`{c}}}{}}{ACf{{EA`{c}}}{}}{{{h{{E@b{c}}}}{h{Ahe}}}Bh{Gh{Dl{AAf}}}Gf}{{{h{AEn}}{h{Ahc}}}BhGf}{{{h{E@`}}{h{Ahc}}}BhGf}`{ce{}{}}000000000000000{{{AKj{c}}}c{{Dl{Cd}}}}{{{EAb{c}}}{{E`{Efc}}}{}}{{{h{AEn}}}Ln}{{{h{{AKj{c}}}}{h{Ahe}}Hj{h{Md}}g}{{EAb{{EA`{AMd}}}}}{{Dl{Cd}}}{AChACd}{{AHb{Dh}}}}{{{h{{AKj{c}}}}Hj{h{Md}}Dh}{{E`{LhAMd}}}{{Dl{Cd}}}}{{{EAb{c}}g}{{EAb{e}}}{}{}{{BE`{c}{{Hd{e}}}}}}{c{{AKj{c}}}{{Dl{Cd}}}}{{{h{Md}}AGj}AEn}{{{h{{Ad{A`}}}}}{{E`{E@`E@n}}}}`{{{h{Ah{AKj{c}}}}Hj{h{Md}}ChABb}{{E`{LjDEn}}}{{Dl{Cd}}}}{{{h{Ah{AKj{c}}}}Hj{h{Md}}ChABb}{{E`{LjAMd}}}{{Dl{Cd}}}}{{{h{{E@b{c}}}}{h{{E@b{c}}}}}{{Dj{Bj}}}{Hl{Dl{AAf}}}}{{{h{AEn}}{h{AEn}}}{{Dj{Bj}}}}{{{h{Ah{AKj{c}}}}{h{Ahe}}Hj{h{Md}}ChABb}{{E`{Bh{EA`{AMd}}}}}{{Dl{Cd}}}{AChACd}}{{{h{E@d}}}{{Dj{{h{AOf}}}}}}{{{h{E@f}}}{{Dj{{h{AOf}}}}}}{{{h{E@h}}}{{Dj{{h{AOf}}}}}}{{{h{AFh}}}{{Dj{{h{AOf}}}}}}{{{h{AHd}}}{{Dj{{h{AOf}}}}}}{{{h{E@j}}}{{Dj{{h{AOf}}}}}}{{{h{DEl}}}{{Dj{{h{AOf}}}}}}{{{h{DEn}}}{{Dj{{h{AOf}}}}}}{{{h{E@l}}}{{Dj{{h{AOf}}}}}}{{{h{E@n}}}{{Dj{{h{AOf}}}}}}{{{h{{EA`{c}}}}}{{Dj{{h{AOf}}}}}AOf}{{{h{Ah{AKj{c}}}}{h{Ahe}}Hj{h{{E@b{g}}}}{Dj{E@`}}{Dj{{Ff{LnDh}}}}AB`}{{E`{Bh{EA`{DEl}}}}}{{Dl{Cd}}}{AChACd}{{Dl{AAf}}}}{{{h{Ah{AKj{c}}}}Hj{h{{E@b{e}}}}AB`}{{E`{LlDEl}}}{{Dl{Cd}}}{{Dl{AAf}}}}{{{h{Ah{AKj{c}}}}Hj{h{{E@b{e}}}}gAB`}{{E`{LlDEl}}}{{Dl{Cd}}}{{Dl{AAf}}}{{AHb{Ln}}}}{{{h{Ah{AKj{c}}}}Hj{h{{E@b{e}}}}{Dj{E@`}}{Dj{{Ff{LnDh}}}}AB`}{{E`{LlDEl}}}{{Dl{Cd}}}{{Dl{AAf}}}}{{{h{c}}}e{}{}}000000000000{{{h{c}}}If{}}0000000000{{{h{{AKj{c}}}}}{{h{Cd}}}{{Dl{Cd}}}}{c{{E`{e}}}{}{}}0000000000000000000000000000000{{{h{c}}}Ij{}}000000000000000`{ce{}{}}000000000000000{{{h{Md}}}AEn}{{{h{Ah{AKj{c}}}}Hj}{{Dj{{h{AhA@j}}}}}{{EAd{Cd}}}}```````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{EAf}}}EAf}{{{h{EAh}}}EAh}{{{h{c}}{h{Ahe}}}Bh{}{}}0`{{{h{EAf}}{h{EAf}}}Ef}{{{h{EAh}}{h{EAh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{EAf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EAh}}{h{AhEn}}}{{E`{BhF`}}}}0{JjEAf}{AO`EAf}{cc{}}0{{{h{G`}}}{{E`{EAhEAf}}}}{{{h{{Ad{A`}}}}}{{E`{EAhEAf}}}}1{ce{}{}}0{{{h{EAh}}{h{{Jd{c}}}}{h{Jn}}Mh}{{E`{EfEAf}}}Jl}{{D@jEf}EAh}{{{h{EAh}}{h{{Jd{c}}}}Mh}{{E`{AAjEAf}}}Jl}{{{h{EAh}}}{{Ab{A`}}}}`{{{h{G`}}}Mh}{{{h{EAf}}}{{Dj{{h{AOf}}}}}}{EAhIf}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0;;`````````````````````````````````````````````````````{{EAjA`M`}{{E`{EAjEAl}}}}{{EAjA`Cf}{{E`{EAjEAl}}}}{{EAjA`CfAGj}{{E`{EAjEAl}}}}{{{h{EAn}}}{{Dj{{h{M`}}}}}}{{{h{BCd}}}{{h{{Ad{M`}}}}}}{{{h{AhBCd}}}{{h{Ah{Ad{M`}}}}}}1{{{h{EAn}}}{{Dj{{Ff{{h{Md}}AGj}}}}}}2{{{h{c}}}{{h{e}}}{}{}}0003000000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0003000000000000000{{{h{AK`}}}AK`}{{{h{EB`}}}EB`}{{{h{BCd}}}BCd}{{{h{AFb}}}AFb}{{{h{EAj}}}EAj}{{{h{EBb}}}EBb}{{{h{EBd}}}EBd}{{{h{EBf}}}EBf}{{{h{EBh}}}EBh}{{{h{EAn}}}EAn}{{{h{AF`}}}AF`}{{{h{EBj}}}EBj}{{{h{AKd}}}AKd}{{{h{EBl}}}EBl}{{{h{AGj}}}AGj}{{{h{EAl}}}EAl}{{{h{EBn}}}EBn}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000000000{{{h{AK`}}{h{AK`}}}Bj}{{{h{BCd}}{h{BCd}}}Bj}{{{h{AFb}}{h{AFb}}}Bj}{{{h{EAj}}{h{EAj}}}Bj}{{{h{EBh}}{h{EBh}}}Bj}{{{h{EAn}}{h{EAn}}}Bj}{{{h{AF`}}{h{AF`}}}Bj}{{{h{EBj}}{h{EBj}}}Bj}{{{h{AKd}}{h{AKd}}}Bj}{{{h{EBl}}{h{EBl}}}Bj}{{{h{AGj}}{h{AGj}}}Bj}{{EBhEBh}{{E`{EBhEAl}}}}{{{h{AFb}}{h{{Ff{CfAGj}}}}}{{Dj{AKd}}}}{{{h{{Ad{A`}}}}}{{E`{BCdEBn}}}}{{{h{{Ad{A`}}}}}{{E`{AKdEBn}}}}{{}BCd}{{}EAj}{{{h{AF`}}}A`}{{{h{BCd}}}h}{{{h{AhBCd}}}{{h{Ah}}}}{c{{E`{AK`}}}Eb}{c{{E`{BCd}}}Eb}{c{{E`{EBf}}}Eb}{c{{E`{EBh}}}Eb}{c{{E`{EAn}}}Eb}{c{{E`{AKd}}}Eb}{c{{E`{AGj}}}Eb}{{{h{BCd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AKd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AK`}}{h{AK`}}}Ef}{{{h{EB`}}{h{EB`}}}Ef}{{{h{BCd}}{h{BCd}}}Ef}{{{h{AFb}}{h{AFb}}}Ef}{{{h{EAj}}{h{EAj}}}Ef}{{{h{EBb}}{h{EBb}}}Ef}{{{h{EBd}}{h{EBd}}}Ef}{{{h{EBf}}{h{EBf}}}Ef}{{{h{EBh}}{h{EBh}}}Ef}{{{h{EAn}}{h{EAn}}}Ef}{{{h{AF`}}{h{AF`}}}Ef}{{{h{EBj}}{h{EBj}}}Ef}{{{h{AKd}}{h{AKd}}}Ef}{{{h{EBl}}{h{EBl}}}Ef}{{{h{AGj}}{h{AGj}}}Ef}{{{h{EAl}}{h{EAl}}}Ef}{{{h{EBn}}{h{EBn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000000000000000000000000000{{EAj{h{{Jd{c}}}}Jb}{{E`{AFbEAj}}}Jl}{{{h{AK`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EB`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BCd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AFb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EAj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EBd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EBf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EAn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AF`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AKd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBl}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AGj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{EAl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EBn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00{AFhEB`}{JjEB`}{AO`EB`}3{{{Ab{M`}}}BCd}000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444{AO`EBb}{AO`EBd}66{EBfEBh}7777777{AO`EAl}88{AO`EBn}{A`{{E`{AGjEBn}}}}{{{h{AF`}}}{{Dj{EBj}}}}{{{h{{Jd{c}}}}JbEBh}AFbJl}{{{h{{Ad{A`}}}}}{{E`{AK`EB`}}}}{{{h{EAj}}}Ef}{{{h{AK`}}{h{Ahc}}}BhGf}{{{h{BCd}}{h{Ahc}}}BhGf}{{{h{AFb}}{h{Ahc}}}BhGf}{{{h{EAj}}{h{Ahc}}}BhGf}{{{h{EBf}}{h{Ahc}}}BhGf}{{{h{EBh}}{h{Ahc}}}BhGf}{{{h{EAn}}{h{Ahc}}}BhGf}{{{h{AF`}}{h{Ahc}}}BhGf}{{{h{EBj}}{h{Ahc}}}BhGf}{{{h{AKd}}{h{Ahc}}}BhGf}{{{h{EBl}}{h{Ahc}}}BhGf}{{{h{AGj}}{h{Ahc}}}BhGf}{{{h{AFb}}}Jb}`{ce{}{}}000000000000000000{EBbEAj}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}0{BCd{{ADl{M`}}}}33{{{h{AhBCd}}}}{BCd}{{{h{BCd}}}}{EBdEBh}{EBfEBh}5{{{h{BCd}}}Ef}{{{h{EAj}}}Ef}{{{h{AF`}}}{{h{EAn}}}}{{{h{AF`}}}{{Dj{Ln}}}}{{{h{EBh}}}EC`}{{{h{AF`}}}{{Dj{AGj}}}}`{{{h{BCd}}}Hj}`{{{h{AF`}}}{{h{BCd}}}}{{{h{EBj}}}{{h{BCd}}}}`{{{h{AFb}}}{{Dj{M`}}}}{{}EAj}{M`AF`}{M`EBh}{{{h{{Jd{c}}}}Jb{Dj{M`}}}AFbJl}{{CfAGj}EBh}{{CfAGj}AF`}{{{h{AhECb}}}Dj}{{{h{AhEC`}}}Dj}10{{{h{EBh}}}M`}{{{h{AF`}}}M`}{{{h{EBf}}}{{h{EBh}}}}{{{h{AFb}}}ACj}{{{h{AFb}}}Jh}`{{{h{AK`}}{h{AK`}}}{{Dj{Bj}}}}{{{h{BCd}}{h{BCd}}}{{Dj{Bj}}}}{{{h{AFb}}{h{AFb}}}{{Dj{Bj}}}}{{{h{EAj}}{h{EAj}}}{{Dj{Bj}}}}{{{h{EBh}}{h{EBh}}}{{Dj{Bj}}}}{{{h{EAn}}{h{EAn}}}{{Dj{Bj}}}}{{{h{AF`}}{h{AF`}}}{{Dj{Bj}}}}{{{h{EBj}}{h{EBj}}}{{Dj{Bj}}}}{{{h{AKd}}{h{AKd}}}{{Dj{Bj}}}}{{{h{EBl}}{h{EBl}}}{{Dj{Bj}}}}{{{h{AGj}}{h{AGj}}}{{Dj{Bj}}}}{{{h{EBf}}}M`}{{{h{AF`}}}{{Dj{{h{Md}}}}}}{{{h{EBj}}}{{h{Md}}}}{{{h{EBf}}}ECb}{{{h{AFb}}}{{h{{AKf{{Ff{CfAGj}}{ECd{BCd}}}}}}}}{{{h{AK`}}c}E`Hn}{AK`ECf}{{{h{BCd}}}{{ADl{A`}}}}{{{h{BCd}}c}E`Hn}{{{h{EBf}}c}E`Hn}{{{h{EBh}}c}E`Hn}{{{h{EAn}}c}E`Hn}{{{h{AKd}}}{{ADl{A`}}}}{{{h{AKd}}c}E`Hn}{{{h{AGj}}c}E`Hn}{{{h{AK`}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}```{{{h{AKd}}}Hj}{{{h{ECb}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{EC`}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{EB`}}}{{Dj{{h{AOf}}}}}}{{{h{EBb}}}{{Dj{{h{AOf}}}}}}{{{h{EBd}}}{{Dj{{h{AOf}}}}}}{{{h{EAl}}}{{Dj{{h{AOf}}}}}}{{{h{EBn}}}{{Dj{{h{AOf}}}}}}{{{h{AFb}}}Mb}{EBlA`}{AGjA`}{{{h{c}}}e{}{}}0000000000000000{{{h{c}}}If{}}000000{AK`{{ADl{A`}}}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{c{{E`{e}}}{}{}}00{{{h{ECf}}}{{E`{AK`}}}}{ECf{{E`{AK`}}}}2{{{AJb{{Ad{M`}}}}}{{E`{BCd}}}}3{{{ADl{M`}}}{{E`{BCd}}}}{{{h{{Ad{M`}}}}}{{E`{BCd}}}}55555{EBh{{E`{EBf}}}}{EAj{{E`{EBf}}}}{EAj{{E`{EBh}}}}8888888888888888888888888888{EAj{{E`{EBhEBb}}}}{EAj{{E`{EBfEBb}}}}{{{h{c}}}Ij{}}000000000000000000{{{h{AKd}}{h{{Jd{c}}}}Jb{h{Md}}}EfJl}{{{h{EBj}}}AGj}{ce{}{}}000000000000000000{HjEAj}{{{h{{Jd{c}}}}Jbe}{{E`{AFbEAl}}}Jl{{El{}{{Ej{{Ff{DhCf}}}}}}}}{c{{E`{EAjEAl}}}{{El{}{{Ej{{Ff{DhCf}}}}}}}}``{{{h{AhECh}}}{{h{Ah{Ad{M`}}}}}}{{{h{ECh}}}{{h{{Ad{M`}}}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{ECh}}}ECh}{{{h{c}}{h{Ahe}}}Bh{}{}}{EChHj}{{{h{ECh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}<{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}={EChDj}{{{h{AhECh}}}Dj}0{{{h{AhECh}}Hj}Dj}0{{{h{ECh}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}``{{{h{ECf}}}{{h{{Ad{A`}}}}}}{{{h{ECj}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}20{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{ECf}}}ECf}{{{h{ECj}}}ECj}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{ECf}}{h{ECf}}}Bj}7{{{h{ECf}}{h{ECf}}}Ef}{{{h{ECf}}{h{{Ad{A`}}}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{ECf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ECj}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{AK`ECf}{{{h{AK`}}}ECf}20{{{h{ECf}}{h{Ahc}}}BhGf}{ce{}{}}0{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}{{{h{ECf}}}}{ECf}3{{{h{ECf}}}Hj}{{{h{AhECj}}}Dj}0{{{h{AhECj}}Hj}Dj}{{{h{ECf}}{h{{Ad{A`}}}}}{{Dj{Bj}}}}{{{h{ECf}}{h{ECf}}}{{Dj{Bj}}}}{{{h{ECj}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}0{{{h{ECf}}}{{E`{AK`EB`}}}}{{{h{c}}}If{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0??{{{h{ECf}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}``{{{h{Ah{ECl{ce}}}}O`Dh}{{ECn{c}}}{f{DFd{Bd}}}ED`}{{{h{Ah{ECl{ce}}}}{h{O`}}Dh}{{ECn{c}}}{f{DFd{Bd}}}ED`}{{{h{Ah{ECl{ce}}}}{ECn{c}}}BhfED`}{{{h{Ah{ECl{ce}}}}{Aj{c}}}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}{Aj{c}}{Dj{Ed}}}{{ECn{c}}}fED`}{{{h{{ECl{ce}}}}}{{h{{Fh{c}}}}}{}{}}{{{h{Ah{ECl{ce}}}}k}{{ECn{c}}}fED`{{AHb{{EDb{Cd}}}}}{{El{}{{Ej{c}}}}}{{El{}{{Ej{{Ff{gi}}}}}}}}{{{h{Ah{ECl{ce}}}}i}{{ECn{c}}}fED`{{AHb{{EDb{Cd}}}}}{{El{}{{Ej{{Ff{gEd}}}}}}}}0{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{{ECn{ce}}}}}{{ECn{ce}}}AlAl}{{{h{c}}{h{Ahe}}}Bh{}{}}{{}{{ECl{ce}}}{}DJb}{{}{{ECn{ce}}}{}DJb}{c{{E`{{ECn{eg}}}}}Eb{BlBAj}BAj}{{{h{{ECn{ce}}}}{h{{ECn{ce}}}}}EfEhEh}{{{h{{ECl{ce}}}}{h{AhEn}}}FdFbFb}{{{h{{ECn{ce}}}}{h{AhEn}}}FdFbFb}{cc{}}0{EDd{{ECn{cEDd}}}{}}{{{EDf{c}}}{{ECn{ce}}}{}DJb}?``{{{h{{ECl{ce}}}}}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}D`c}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}D`Ed}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}g}{{ECn{c}}}fED`{{AHb{{EDb{Cd}}}}}}{{{h{Ah{ECl{ce}}}}AAdAAf}{{ECn{c}}}fED`}{ce{}{}}0{{{h{{ECn{ce}}}}}EffH`}{{{h{Ah{ECn{ce}}}}{ECn{ce}}}BhfH`}{c{{ECl{ec}}}{}{}}{{{h{{ECn{ce}}}}g}E`{BlId}IdHn}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}000`{{{h{c}}}Ij{}}077``{{{h{Ah{ED`{}{{EDh{c}}}}}}c}Bh{}}{{{h{Ah{ED`{}{{EDh{c}}}}}}{h{Cd}}}c{}}{{{h{Ah{ED`{}{{EDh{c}}}}}}AAd{h{AAf}}}c{}}{{{h{{ED`{}{{EDh{c}}}}}}}c{}}{{{h{{ED`{}{{EDh{c}}}}}}{h{Cd}}}Ef{}}````````````{{{h{{EDj{c}}}}}{{AKf{c{Bf{{Cl{Cj}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}e}Bh{AlBlFb}{}}{{{h{Ah{EDj{c}}}}EDd}Bh{AlBlFb}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{{EDj{c}}}}}{{EDj{c}}}Al}{{{h{{EDl{c}}}}}{{EDl{c}}}Al}{{{h{EDd}}}EDd}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{}{{EDj{c}}}{}}{{}EDd}{c{{E`{EDd}}}Eb}{{{h{{EDl{c}}}}{h{{EDl{c}}}}}EfEh}{{{h{EDd}}{h{EDd}}}Ef}{{{h{{EDj{c}}}}{h{AhEn}}}FdFb}{{{h{{EDl{c}}}}{h{AhEn}}}FdFb}0{{{h{EDd}}{h{AhEn}}}Fd}{cc{}}00{{{h{EDn}}}{{Ib{EDd}}}}{{{h{{EDj{c}}}}c}{{Dj{{h{{Cl{Cj}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}Cf}{{Dj{{h{{Ff{cDh}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}{h{Cd}}}e{AlBlFb}{}}{{{h{Ah{EDj{c}}}}AAd{h{AAf}}}e{AlBlFb}{}}{{{h{EDn}}}{{Ib{Bh}}}}{{{h{{EDj{c}}}}}e{AlBlFb}{}}{{{h{{EDj{c}}}}}{{h{{EE`{{Ff{cDh}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}c{Cl{Cj}}}{{E`{Ef{EDl{c}}}}}{AlBlFb}}{ce{}{}}00{{{h{EDd}}}Ef}{{{h{{EDj{c}}}}{h{Cd}}}Ef{AlBlFb}}{{{h{{EDj{c}}}}cDh}Ef{AlBlFb}}{{{h{{EDj{c}}}}c}{{`{{CCd{}{{Ej{{EEb{AAd}}}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}e}{{`{{CCd{}{{Ej{{EEd{cAAd}}}}}}}}}{AlBlFb}{{Hh{c}}}}{{{h{{EDj{c}}}}}{{`{{CCd{}{{Ej{{Ff{c{h{{Cl{Cj}}}}}}}}}}CC`}}}{AlBlFb}}`{{{h{{EDj{c}}}}c}{{Dj{Dh}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{AKf{cDh}}}{AlBlFb}}10{{{h{{EDj{c}}}}}Dh{AlBlFb}}{{{h{Ah{EDj{c}}}}cDh}Bh{AlBlFb}}{{{h{Ah{EDj{c}}}}cDh}Ef{AlBlFb}}{{{h{AhEDd}}EDd}Bh}{{{h{{EDj{c}}}}{h{Cd}}e}Il{AlBlFb}{{Hh{c}}}}{Dh{{EDj{c}}}{}}{{{h{{EDj{c}}}}c}{{Dj{{Ff{DhEf}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}c}{{Dj{{Ff{{EEb{Cf}}EDd}}}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{h{{ECd{{EEd{cAAd}}}}}}}{AlBlFb}}{{{h{EDd}}{h{EDn}}}{{Ib{Bh}}}}2{{{h{Ah{EDj{c}}}}cDh}{{Dj{{Ff{{ADl{{EEb{Cf}}}}EDd}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}{h{{AKf{cDh}}}}}EDd{AlBlFb}}{{{h{{EDj{c}}}}c}{{`{{CCd{}{{Ej{{EEb{Cf}}}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}e}{{`{{Gn{}{{Ej{{EEd{cCf}}}}}}}}}{AlBlFb}{{Hh{c}}}}{{EEf{h{{EDj{c}}}}e}EEf{}{{Hh{c}}}}{{{h{{EDj{c}}}}{h{Cd}}e}{{Ff{ChCh}}}{AlBlFb}{{Hh{c}}}}{{{h{EDd}}c}E`Hn}{{{h{{EDj{c}}}}cDh}{{Dj{Cf}}}{AlBlFb}}{{EEh{h{{EDj{c}}}}}EEh{}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}{c{{E`{e}}}{}{}}00000{{{h{{EDj{c}}}}AAd}{{Dj{{EEd{c{h{AAf}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{`{{CCd{}{{Ej{{EEd{c{Ff{AAd{h{AAf}}}}}}}}}}CC`}}}{AlBlFb}}{{{h{{EDj{c}}}}D`}{{`{{CCd{}{{Ej{{EEd{c{Ff{AAd{h{AAf}}}}}}}}}}}}}{AlBlFb}}{{{h{c}}}Ij{}}00{{{h{{EDj{c}}}}c}{{Dj{{Bf{{Cl{Cj}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}cDh}Ef{AlBlFb}}{{{h{{EDj{c}}}}c}{{`{{CCd{}{{Ej{{EEb{Cf}}}}}}Al}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{`{{CCd{}{{Ej{{EEd{cCf}}}}}}Al}}}{AlBlFb}}{{EEf{h{{EDj{c}}}}}EEf{}}{ce{}{}}00`````{{{h{{EE`{c}}}}}{{h{{AKf{cCf}}}}}{AlBlFb}}{{{h{Ah{EE`{c}}}}e}Bh{AlBlFb}{}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{EE`{c}}}}}{{EE`{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}{{}{{EE`{c}}}{}}{{{h{{EE`{c}}}}{h{AhEn}}}FdFb}{cc{}}{{{h{{EE`{c}}}}Cf}{{Dj{{h{c}}}}}{AlBlFb}}{{{h{Ah{EE`{c}}}}{h{Cd}}}e{AlBlFb}{}}{{{h{Ah{EE`{c}}}}AAd{h{AAf}}}e{AlBlFb}{}}{{{h{{EE`{c}}}}}e{AlBlFb}{}}{{{h{Ah{EE`{c}}}}cCf}Ef{AlBlFb}}>{{{h{{EE`{c}}}}{h{Cd}}}Ef{AlBlFb}}0{{{h{{EE`{c}}}}{h{c}}}Ef{AlBlFb}}{{{h{Ah{EE`{c}}}}{h{c}}}Ef{AlBlFb}}{{{h{{EE`{c}}}}{h{Cd}}e}Il{AlBlFb}{{Hh{c}}}}{{{h{{EE`{c}}}}}{{h{{ECd{{Ff{cAAd}}}}}}}{AlBlFb}}{{{h{{EE`{c}}}}e}{{`{{CCd{}{{Ej{{Ff{{h{c}}AAd}}}}}}}}}{AlBlFb}{{Hh{c}}}}{{{h{Ah{EE`{c}}}}{h{Cd}}}{{ECd{c}}}{AlBlFb}}{{{h{Ah{EE`{c}}}}AAd{h{AAf}}}{{Dj{{h{c}}}}}{AlBlFb}}{{{h{{EE`{c}}}}{h{Cd}}e}{{Ff{ChCh}}}{AlBlFb}{{Hh{c}}}}{{{h{{EE`{c}}}}{h{c}}}{{Dj{Cf}}}{AlBlFb}}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}0{{{h{{EE`{c}}}}AAd}{{Dj{{Ff{{h{c}}{h{AAf}}}}}}}{AlBlFb}}{{{h{{EE`{c}}}}}{{`{{CCd{}{{Ej{{Ff{{h{c}}AAd{h{AAf}}}}}}}}CC`}}}{AlBlFb}}{{{h{{EE`{c}}}}D`}{{`{{CCd{}{{Ej{{Ff{{h{c}}AAd{h{AAf}}}}}}}}}}}{AlBlFb}}{{{h{c}}}Ij{}}={{{h{{EE`{c}}}}e}{{`{{CCd{}{{Ej{{Ff{{h{c}}Cf}}}}}}Al}}}{AlBlFb}{{Hh{c}}}}{ce{}{}}````````````{{{h{AhEEj}}{h{EEl}}}{{E`{BhEEn}}}}{{{h{AhEEj}}{h{Fl}}Dh}{{E`{EElEF`}}}}{{{h{AhEEj}}{h{Fl}}Dhj}{{E`{EElEFb}}}}{{{h{AhEEj}}Af}{{E`{EElEF`}}}}`{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{EEj}}}EEj}{{{h{EEl}}}EEl}{{{h{EEn}}}EEn}{{{h{EFd}}}EFd}{{{h{EF`}}}EF`}{{{h{EFb}}}EFb}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{}EEl}{c{{E`{EEl}}}Eb}{{{h{AhEEj}}j}{{E`{EElEEn}}}}{{{h{EEj}}{h{EEj}}}Ef}{{{h{EEl}}{h{EEl}}}Ef}{{{h{EEn}}{h{EEn}}}Ef}{{{h{EFd}}{h{EFd}}}Ef}{{{h{EF`}}{h{EF`}}}Ef}{{{h{EFb}}{h{EFb}}}Ef}{{{h{EEj}}{h{AhEn}}}Fd}{{{h{EEl}}{h{AhEn}}}Fd}{{{h{EEn}}{h{AhEn}}}Fd}0{{{h{EFd}}{h{AhEn}}}Fd}0{{{h{EF`}}{h{AhEn}}}Fd}0{{{h{EFb}}{h{AhEn}}}Fd}0{cc{}}{cEEl{{El{}{{Ej{{Ff{Dh{Dj{Db}}}}}}}}}}11111{{{AKf{DhDb}}}{{E`{EEjEEn}}}}{EEl{{E`{EEjEEn}}}}{Db{{Ff{EEjEEl}}}}3{cEEl{{El{}{{Ej{{Ff{DhDb}}}}}}}}{{{h{EDn}}}{{Ib{EEl}}}}{Af{{E`{EEjEEn}}}}{{{h{EEj}}}Db}{{{h{EEj}}Dh}{{Dj{Af}}}}{{{h{EEj}}}{{E`{jc}}}{}}`{{{h{EDn}}}{{Ib{Bh}}}}{{{h{EEj}}}EEl}{{{h{AhEEj}}j}{{E`{EElEFd}}}}{ce{}{}}00000{{{h{EEj}}jj}{{E`{{Dj{Ef}}c}}}{}}{{{h{EEl}}}Ef}{{{h{EEj}}}Hb}{{{h{AhEEl}}EEl}Bh}`{{{h{EEl}}{h{EDn}}}{{Ib{Bh}}}}{{{h{EEj}}c}{{`{{Gn{}{{Ej{Af}}}}}}}{{Hh{Dh}}}}{{{h{EEl}}c}E`Hn}{{{h{EEj}}}Af}{{{h{c}}}e{}{}}00000{{{h{c}}}If{}}000{c{{E`{e}}}{}{}}00000`000000{{{h{c}}}Ij{}}00000`<<<<<<`{{{h{EDn}}{h{G`}}{h{{Ad{{h{{Ad{{h{G`}}}}}}}}}}}{{Ib{Bh}}}}```````````{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000{{{EFf{c}}}{{EFh{c}}}{}}{{{EFj{c}}}{{EFl{c}}}Bl}{{}{{EFf{c}}}{}}{{}{{EFj{c}}}{BlAl}}{{{EFf{c}}Af}{{EFf{c}}}{}}{{{h{{EFh{c}}}}}{{Dj{Af}}}{}}{{{EFj{c}}Af}{{EFj{c}}}Bl}{{{h{{EFl{c}}}}}{{Dj{Af}}}{BlAl}}``{{{h{{EFn{c}}}}}{{EFn{c}}}Al}{{{h{EG`}}}EG`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{{EFn{c}}}}{h{{EFn{c}}}}}BjBl}{{{h{EG`}}}Hj}:{{}{{EFh{c}}}{}}{{}{{EFj{c}}}{}}{{}{{EFl{c}}}{}}{{}{{EGb{c}}}{}}{{}{{EGd{ce}}}{}{}}{{{h{{EFn{c}}}}{h{{EFn{c}}}}}EfEh}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{{EFn{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{EFn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbEGf}}{{{h{EG`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{EGb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{EGd{ce}}}}{h{AhEn}}}{{E`{BhF`}}}FbFb}{cc{}}0{{{EFf{c}}}{{EFh{c}}}{}}11{{{EFj{c}}}{{EFl{c}}}{}}2222{{{h{{EFn{c}}}}{h{Ahe}}}BhGhGf}{{{EFf{c}}e}{{EFf{c}}}{}{{Hf{{EFn{c}}EG`}}EGh}}{{{EFj{c}}e}{{EFj{c}}}Bl{{Hf{cDh{h{Md}}}}EGh}}{ce{}{}}0000000{{{h{Ah{EFh{c}}}}}{{`{CC`}}}{}}0{{{h{Ah{EFl{c}}}}c}{{`{{Gn{}{{Ej{{Ff{DhCf}}}}}}}}}{BlAl}}1{{{h{{EFl{c}}}}}{{ADl{c}}}{BlAl}}`{{{h{Ah{EFh{c}}}}}{{Dj{AAd}}}{}}{{{h{Ah{EFh{c}}}}}{{Dj{Cf}}}{}}{{{h{Ah{EFl{c}}}}c}{{Dj{{Ff{DhCf}}}}}{BlAl}}{{{h{Ah{EFh{c}}}}}{{Dj{D`}}}{}}{{{EFf{c}}e}{{EFf{c}}}{}{{El{}{{Ej{AAd}}}}}}``{{{h{{EFn{c}}}}{h{{EFn{c}}}}}{{Dj{Bj}}}Hl}{{{h{{EFh{c}}}}}EG`{}}{{{h{EG`}}}Hj}{{{EFf{{Ff{cDh}}}}{h{{EDj{c}}}}e}{{EFf{{Ff{cDh}}}}}{AlBlFb}{{Hh{c}}}}{{EFfc}EFf{{El{}{{Ej{Cf}}}}}}`{{{EFj{c}}cg}{{EFj{c}}}Bl{{Gn{}{{Ej{{Ff{DhCf}}}}}}EGh}{{El{}{{EGj{e}}}}}}{{{EFj{c}}{h{{EDj{c}}}}}{{EFj{c}}}{AlBlFb}}`{{{EFf{c}}e}{{EFf{c}}}{}{{El{}{{Ej{{Ff{cCf}}}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}7777{c{{E`{e}}}{}{}}000000000000000``{{{EFf{c}}e}{{EFf{c}}}{}{{El{}{{Ej{D`}}}}}}``{{{h{c}}}Ij{}}0000000{{{EFf{{Ff{cDh}}}}{h{{EDj{c}}}}}{{EFf{{Ff{cDh}}}}}{AlBlFb}}{ce{}{}}0000000``````````````{{{h{{Fh{c}}}}}{{h{{ECd{{Ff{cD`}}}}}}}{}}{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{Ff{AAd{h{AAf}}}}}}}}}}}{}}{{{h{{EDf{c}}}}}{{`{{Gn{}{{Ej{Dh}}}}}}}f}```{{{h{Ah{Fh{c}}}}{EDf{c}}}Bh{AlBl}}{{{h{Ah{Fh{c}}}}{Aj{c}}}{{EDf{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}{Aj{c}}{Dj{Ed}}}{{EDf{c}}}{AlBl}}{{{h{{Fh{c}}}}}{{h{{Fh{c}}}}}{}}{{{h{{Fh{c}}}}{h{e}}jik}bf{{Gd{}{{Gb{AO`}}}}}Al{{El{}{{Ej{{Ff{gAAd}}}}}}}{{Hf{{h{g}}Cf}{{Hd{Ef}}}}}}{{{h{Ah{Fh{c}}}}g}{{EDf{c}}}{AlBl}{{AHb{{EDb{Cd}}}}}{{El{}{{Ej{{Ff{eEd}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000{{{h{{Fh{c}}}}{h{Cd}}}{{E`{ChEGl}}}{}}`{c{{Dj{Ch}}}{}}{c{{Dj{Il}}}{}}01{{{h{{Fh{c}}}}}{{Fh{c}}}Al}{{{h{{EGn{ce}}}}}{{EGn{ce}}}AlAl}{{{h{{EH`{ce}}}}}{{EH`{ce}}}AlAl}{{{h{{EDf{c}}}}}{{EDf{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{{EGn{ce}}}}{h{{EGn{ce}}}}}BjBlBl}{{{h{{EH`{ce}}}}{h{{EH`{ce}}}}}BjBlBl}{{}{{Fh{c}}}{}}{{}{{EDf{c}}}{}}{{{h{{EGn{ce}}}}}{{h{g}}}{}{}{}}{c{{E`{{EDf{e}}}}}Eb{BlBAj}}{{{h{{Fh{c}}}}{h{Cd}}}{{`{{Gn{}{{Ej{{Ff{HjD`}}}}}}}}}{}}{{{h{{Fh{c}}}}{h{{Fh{c}}}}}EfEh}{{{h{{EGn{ce}}}}{h{{EGn{ce}}}}}EfEhEh}{{{h{{EH`{ce}}}}{h{{EH`{ce}}}}}EfEhEh}{{{h{EGl}}{h{EGl}}}Ef}{{{h{{EDf{c}}}}{h{{EDf{c}}}}}EfEh}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{{Fh{c}}}}{h{e}}ji}{{`{{Gn{}{{Ej{{Ff{g{Bb{c}}}}}}}}}}}f{{Gd{}{{Gb{AO`}}}}}Al{{El{}{{Ej{{Ff{gAAd}}}}}}}}0{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{Ff{AAd{h{AAf}}}}}}}}}}}{}}{{{h{{Fh{c}}}}{h{AhEn}}}FdFb}{{{h{{EGn{ce}}}}{h{AhEn}}}FdFbFb}{{{h{{EH`{ce}}}}{h{AhEn}}}FdFbFb}{{{h{EGl}}{h{AhEn}}}Fd}0{{{h{{EDf{c}}}}{h{AhEn}}}FdFb}{cc{}}00{{{Aj{c}}}{{Fh{c}}}{BlAl}}1111{{{h{EDn}}}{{Ib{{EDf{c}}}}}{fAlBlIdDf}}{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{EGn{{EDb{Cd}}c}}}}}}}}}{}}{{{h{{Fh{c}}}}{h{e}}jD`}{{Dj{{An{{h{c}}}}}}}f{{Gd{}{{Gb{AO`}}}}}}{{{h{{Fh{c}}}}{h{e}}jAAd}{{Dj{{Ff{{An{{h{c}}}}D`}}}}}f{{Gd{}{{Gb{AO`}}}}}}{{{h{{Fh{c}}}}D`}{{Dj{{EDb{Cd}}}}}{}}{{{h{{Fh{c}}}}D`}{{Dj{{EGn{{EDb{Cd}}c}}}}}{}}{{{h{{Fh{c}}}}AAd}{{Dj{{h{AAf}}}}}{}}{{{h{EDn}}}{{Ib{Bh}}}}{{{h{{Fh{c}}}}}{{EDf{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}D`c}{{EDf{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}D`Ed}{{EDf{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}e}{{EDf{c}}}{AlBl}{{AHb{{EDb{Cd}}}}}}{{{h{Ah{Fh{c}}}}AAdAAf}{{EDf{c}}}{AlBl}}{ce{}{}}000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}011{{{h{{Fh{c}}}}}Ef{}}{{{h{{EDf{c}}}}}EfBl}``{{{h{{Fh{c}}}}{h{e}}j}{{`{{Gn{}{{Ej{{EH`{{EDb{Cd}}c}}}}}}}}}fGd}{{{Fh{c}}g}{{Fh{e}}}{AlBl}{AlBl}{{Hf{c}{{Hd{e}}}}}}{{{EDf{c}}g}{{EDf{e}}}BlBl{{Hf{c}{{Hd{e}}}}}}{{{h{Ah{EDf{c}}}}{EDf{c}}}BhBl}{c{{Fh{e}}}{{El{}{{Ej{Cd}}}}}{AlBl}}{{{h{Ah{EHb{cg}}}}}{{Dj{i}}}{}{}{{Hf{Hj{EDb{Cd}}}{{Hd{{Dj{e}}}}}}}{}}{{{h{Ah{EHd{cg}}}}}{{Dj{i}}}{}{}{{Hf{HjD`}{{Hd{{Dj{e}}}}}}}{}}{{{h{{Fh{c}}}}AAd}{{h{{EHf{D`}}}}}{}}{{{h{{EGn{ce}}}}{h{{EGn{ce}}}}}{{Dj{Bj}}}HlHl}{{{h{{EH`{ce}}}}{h{{EH`{ce}}}}}{{Dj{Bj}}}HlHl}{{{h{{EDf{c}}}}{h{EDn}}}{{Ib{Bh}}}{fAlBlIdDf}}`{{{h{{EDf{c}}}}e}E`{BlId}Hn}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{{{h{{Fh{c}}}}{h{e}}jik}{{E`{b}}}fGdAl{{El{}{{Ej{{Ff{gAAd}}}}}}}{{Hf{{h{g}}Cf}{{Hd{Ef}}}}}}{{{h{{Fh{c}}}}{h{e}}ji}{{`{{Gn{}{{Ej{{E`{{Ff{g{Bb{c}}}}}}}}}}}}}fGdAl{{El{}{{Ej{{Ff{gAAd}}}}}}}}0{c{{E`{e}}}{}{}}000000{{{h{{Fh{c}}}}{h{e}}jD`}{{E`{{Dj{{An{{h{c}}}}}}}}}fGd}{{{h{{Fh{c}}}}{h{e}}jAAd}{{E`{{Dj{{Ff{{An{{h{c}}}}D`}}}}}}}fGd}2222222{{{h{{Fh{c}}}}{h{e}}j}{{`{{Gn{}{{Ej{{E`{{EH`{{EDb{Cd}}c}}}}}}}}}}}fGd}``{{{h{{Fh{c}}}}D`}{{Dj{{AKf{Dh{h{AAf}}}}}}}{}}{{{h{{Fh{c}}}}D`}{{`{{CCd{}{{Ej{{Ff{Dh{h{{EHf{D`}}}}}}}}}}}}}{}}`{{{h{{EDf{c}}}}}{{`{{Gn{}{{Ej{{Ff{AAd{h{AAf}}}}}}}}}}}{}}````{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{EGn{{EDb{Cd}}c}}}}}}}}}{}}{{{h{c}}}Ij{}}000000{ce{}{}}000000{{{h{{Fh{c}}}}ei}{{EHb{ci}}}{AlBl}{{AHb{{EDb{Cd}}}}}{}{{Hf{Hj{EDb{Cd}}}{{Hd{{Dj{g}}}}}}}}{{{h{{Fh{c}}}}{h{Cd}}g}{{EHd{cg}}}{}{}{{Hf{HjD`}{{Hd{{Dj{e}}}}}}}}{{{h{{Fh{c}}}}D`g}{{EHd{cg}}}{AlBl}{}{{Hf{HjD`}{{Hd{{Dj{e}}}}}}}}","D":"AEIlABAf","p":[[5,"Balance",0,14984],[5,"DescriptorId",0,14985],[10,"Anchor",0,14986],[1,"reference"],[5,"BlockId",0,14987],[5,"ConfirmationBlockTime",0,14987],[5,"Hash",8952,14988],[1,"u8"],[1,"array"],[1,"slice"],[5,"CheckPoint",0,14989],[0,"mut"],[5,"TxUpdate",0,14990],[10,"Clone",14991],[6,"ChainPosition",0,14992],[6,"ConfirmationTime",0,14992],[5,"FullTxOut",0,14992],[5,"TxPosInBlock",0,14986],[5,"SpkIterator",0,14993],[1,"unit"],[6,"Ordering",14994],[10,"Ord",14994],[6,"ValueRef",14995],[5,"Impl",0],[8,"FromSqlResult",14996],[5,"Transaction",384,14997],[5,"ScriptBuf",384,14998],[5,"Amount",384,14999],[6,"DescriptorPublicKey",15000],[6,"Descriptor",15001],[6,"Network",384,15002],[5,"Txid",384,14997],[5,"BlockHash",384,15003],[5,"AnchorImpl",0],[10,"DeserializeOwned",7268,15004],[1,"u32"],[6,"Option",15005],[10,"Borrow",15006],[10,"DescriptorExt",0,14985],[6,"Result",15007],[10,"Deserializer",7181,15004],[1,"u64"],[1,"bool"],[10,"PartialEq",14994],[17,"Item"],[10,"IntoIterator",15008],[5,"Formatter",15009],[5,"Error",15009],[10,"Debug",15009],[8,"Result",15009],[1,"tuple"],[5,"TxGraph",14799],[1,"never"],[5,"Header",4526,15003],[5,"FromSliceError",12271,15010],[1,"str"],[17,"Error"],[10,"ChainOracle",0,15011],[10,"Hasher",15012],[10,"Hash",15012],[10,"SliceIndex",15013],[5,"IntoFallible",15014],[10,"Iterator",15015],[10,"Merge",0,15016],[5,"CheckPointIter",0,14989],[17,"Output"],[10,"FnMut",15017],[10,"RangeBounds",15018],[1,"usize"],[10,"PartialOrd",14994],[10,"Serializer",7181,15019],[6,"ToSqlOutput",15020],[8,"Result",15021],[10,"Serialize",7181,15019],[5,"String",3155,15022],[5,"Convert",15014],[5,"TypeId",15023],[5,"SignedAmount",384,14999],[5,"Weight",384,15024],[5,"Work",384,15025],[5,"XOnlyPublicKey",384,15026],[5,"Secp256k1",9586,15027],[5,"Scalar",11343,15028],[6,"Parity",9586,15026],[6,"Error",11343,15027],[10,"Verification",9586,15029],[5,"Address",384,15030],[6,"AddressType",384,15030],[5,"FilterHash",384,15031],[5,"FilterHeader",384,15031],[5,"XKeyIdentifier",384,15032],[5,"TxMerkleNode",384,15003],[5,"WitnessMerkleNode",384,15003],[5,"WitnessCommitment",384,15003],[5,"ScriptHash",384,15033],[5,"WScriptHash",384,15033],[5,"Wtxid",384,14997],[5,"PubkeyHash",384,15034],[5,"WPubkeyHash",384,15034],[5,"LegacySighash",384,15035],[5,"SegwitV0Sighash",384,15035],[5,"TapSighash",384,15035],[5,"TapLeafHash",384,15036],[5,"TapNodeHash",384,15036],[5,"TapTweakHash",384,15036],[5,"Script",384,15037],[5,"XOnlyPublicKey",11963,15038],[5,"Hash",9066,15039],[5,"Hash",6783,15040],[5,"TapSighashTag",384,15035],[5,"Hash",9119,15041],[5,"TapLeafTag",384,15036],[5,"TapBranchTag",384,15036],[5,"TapTweakTag",384,15036],[5,"PushBytes",5418,15042],[5,"Params",6246,15043],[6,"NetworkUnchecked",2777,15030],[10,"NetworkValidation",2777,15030],[5,"TxIn",384,14997],[5,"Block",384,15003],[6,"Bip34Error",4526,15003],[5,"Builder",5418,15044],[5,"Bytes",5418,15037],[5,"ChainHash",4646,15045],[6,"LockTime",4715,15046],[6,"LockTime",4901,15047],[5,"Sequence",384,14997],[1,"i64"],[5,"FeeRate",384,15048],[5,"Opcode",384,15049],[6,"ClassifyContext",5111,15049],[6,"Class",5111,15049],[5,"Witness",384,15050],[6,"Denomination",384,14999],[6,"KnownHrp",384,15030],[5,"WitnessProgram",384,15051],[6,"WitnessVersion",384,15052],[5,"OutPoint",384,14997],[5,"TxOut",384,14997],[5,"VarInt",384,15053],[5,"PublicKey",384,15034],[5,"CompressedPublicKey",384,15034],[5,"PrivateKey",384,15034],[6,"TapSighashType",384,15035],[6,"EcdsaSighashType",384,15035],[5,"MerkleBlock",384,15054],[6,"NetworkKind",384,15002],[5,"Target",384,15025],[5,"CompactTarget",384,15025],[5,"Psbt",384,15055],[6,"Error",10881,15056],[6,"Error",6335,15053],[10,"BufRead",9440,15057],[10,"Sized",15058],[5,"Error",9440,15059],[10,"Write",9440,15057],[5,"TweakedPublicKey",9586,15034],[5,"Token",15060],[1,"u128"],[10,"AsRef",15061],[1,"f64"],[5,"Display",3073,14999],[5,"HashEngine",8952,14988],[6,"Instruction",5418,15062],[6,"Error",15063],[5,"Vec",3155,15064],[6,"MerkleBlockError",9956,15054],[6,"ExtractTxError",10881,15055],[10,"Write",15009],[5,"PublicKey",11343,15026],[5,"Xpub",4167,15032],[6,"Cow",15065],[5,"RelLockTime",15066],[1,"u16"],[5,"ScriptPath",13190,15035],[5,"LeafNode",13594,15036],[5,"TaprootSpendInfo",13594,15036],[10,"Fn",15017],[6,"ParseAmountError",3073,14999],[5,"InvalidSighashTypeError",13190,15035],[5,"ParseNetworkError",10014,15002],[6,"HexToBytesError",6828,15067],[6,"PrefixedHexError",6650,15068],[5,"Keypair",9586,15026],[5,"Magic",10063,15069],[10,"Signing",11343,15029],[5,"UncompressedPublicKeyError",9586,15034],[6,"FromScriptError",2777,15070],[6,"LeafVersion",13594,15036],[5,"TimeOverflowError",4901,15071],[6,"KeyParseError",15072],[6,"FromSliceError",9586,15034],[10,"Into",15061],[5,"NonStandardSighashTypeError",13190,15035],[6,"ParseError",2777,15070],[6,"ParsePublicKeyError",9586,15034],[6,"FromWifError",9586,15034],[6,"ParseError",14999],[6,"UnprefixedHexError",6650,15068],[5,"Range",15018],[5,"RangeTo",15018],[5,"RangeToInclusive",15018],[5,"RangeFull",15018],[6,"Bound",15018],[5,"RangeFrom",15018],[5,"RangeInclusive",15018],[5,"InstructionIndices",5418,15062],[5,"Instructions",5418,15062],[5,"Box",15073],[5,"Height",4715,15074],[5,"Time",4715,15074],[5,"Iter",6231,15050],[6,"Error",5960,15051],[5,"SecretKey",11343,15026],[6,"P2shError",2777,15070],[5,"Signature",13594,15075],[5,"Signature",6563,15076],[5,"ControlBlock",13594,15036],[5,"BTreeMap",15077],[10,"Read",9440,15057],[5,"SighashCache",13190,15035],[5,"Message",11343,15027],[6,"SignError",10881,15055],[6,"PsbtSighashMsg",15063],[6,"SighashError",15063],[6,"SigningKeys",10881,15055],[10,"GetKey",10881,15055],[6,"AddressData",2777,15030],[5,"Fe32",15078],[5,"Hash",15079],[5,"Hash",7110,15080],[5,"OutOfRangeError",14999],[5,"SortKey",9586,15034],[5,"InputsIndexError",6069,14997],[5,"OutputsIndexError",6069,14997],[5,"DefiniteDescriptorKey",15000],[6,"UtxoUpdateError",15063],[6,"OutputUpdateError",15063],[5,"Signature",13159,15081],[5,"UnknownAddressTypeError",2777,15070],[5,"UnknownHrpError",2777,15070],[5,"NetworkValidationError",2777,15070],[5,"InvalidBase58PayloadLengthError",2777,15070],[5,"LegacyAddressTooLongError",2777,15070],[5,"InvalidLegacyPrefixError",2777,15070],[6,"NetworkChecked",2777,15030],[5,"TryFromError",5985,15052],[6,"Infallible",15061],[6,"Error",3155,15082],[5,"DecodeError",15083],[10,"StdError",8747],[10,"CheckedSum",3073,14999],[5,"InputTooLargeError",14999],[5,"TooPreciseError",14999],[5,"MissingDigitsError",14999],[5,"InvalidCharacterError",14999],[10,"SerdeAmount",3134,15084],[10,"SerdeAmountForOpt",3134,15084],[10,"Allocator",15085],[5,"Path",15086],[5,"OsStr",15087],[5,"InvalidCharacterError",3155,15082],[6,"FromSqlError",14996],[5,"ShortId",3863,15088],[6,"Inventory",10403,15089],[5,"AddrV2Message",10219,15090],[5,"Address",10063,15090],[5,"PrefilledTransaction",3863,15088],[10,"Deserialize",7181,15004],[5,"Drain",15091],[5,"Drain",15022],[1,"i16"],[1,"i32"],[1,"i8"],[6,"Value",15092],[10,"Copy",15058],[1,"char"],[5,"ExtractIf",15093],[5,"Error",15094],[5,"TooShortError",3524,15082],[5,"IncorrectChecksumError",3524,15082],[5,"TaprootMerkleBranch",13594,15095],[5,"VecDeque",15096],[5,"PushBytesBuf",5418,15042],[5,"BinaryHeap",15097],[5,"CString",15098],[5,"DerivationPath",4167,15032],[6,"ChildNumber",4167,15032],[5,"FromUtf16Error",15022],[5,"FromUtf8Error",15022],[5,"Assets",15099],[6,"Error",4167,15032],[10,"Error",7268,15004],[10,"IntoDeserializer",7268,15004],[5,"StringDeserializer",7452,15100],[10,"FnOnce",15017],[10,"Pattern",15101],[20,"MaybeUninit",15102],[5,"Splice",15103],[6,"SocketAddr",15104],[5,"IntoIter",15105],[6,"Error",15106],[5,"TryReserveError",15107],[5,"IoSlice",15108],[6,"EncodeSliceError",3567,15109],[6,"DecodeError",3567,15110],[6,"DecodeSliceError",3567,15110],[17,"Config"],[17,"DecodeEstimate"],[10,"Engine",3567,15111],[10,"Config",3713,15111],[10,"DecodeEstimate",3713,15111],[5,"Alphabet",3657,15112],[6,"ParseAlphabetError",3657,15112],[5,"Base64Display",3701,15113],[5,"GeneralPurpose",3713,15114],[5,"GeneralPurposeConfig",3713,15114],[6,"DecodePaddingMode",3713,15111],[5,"DecodeMetadata",3713,15111],[5,"DecoderReader",3818,15115],[10,"Read",15108],[10,"StrConsumer",3831,15116],[5,"EncoderWriter",3831,15117],[10,"Write",15108],[5,"EncoderStringWriter",3831,15116],[6,"Error",3863,15088],[5,"HeaderAndShortIds",3863,15088],[5,"BlockTransactionsRequest",3863,15088],[5,"TxIndexOutOfRangeError",3863,15088],[5,"BlockTransactions",3863,15088],[6,"HexToArrayError",6828,15067],[5,"BlockFilterWriter",4053,15031],[5,"GcsFilterWriter",4053,15031],[6,"Error",4053,15031],[5,"BlockFilter",4053,15031],[5,"BitStreamWriter",4053,15031],[5,"BlockFilterReader",4053,15031],[5,"GcsFilterReader",4053,15031],[5,"BitStreamReader",4053,15031],[5,"ChainCode",4167,15032],[5,"Fingerprint",4167,15032],[5,"DerivationPathIterator",4167,15032],[5,"Xpriv",4167,15032],[5,"InvalidBase58PayloadLengthError",4167,15032],[6,"KeyRequest",10881,15055],[10,"IntoDerivationPath",4167,15032],[5,"Version",4526,15003],[6,"ValidationError",4526,15003],[5,"ParseHeightError",4715,15074],[5,"ParseTimeError",4715,15074],[5,"ConversionError",4715,15074],[6,"ParseError",15074],[5,"AbsLockTime",15118],[5,"Height",4901,15071],[5,"Time",4901,15071],[5,"DisabledLockTimeError",4901,15047],[5,"IncompatibleHeightError",4901,15047],[5,"IncompatibleTimeError",4901,15047],[5,"PushBytesError",5418,15119],[6,"Error",5418,15033],[6,"UintError",15033],[10,"PushBytesErrorReport",5418,15120],[6,"FromStrError",5985,15052],[6,"TryFromInstructionError",5985,15052],[5,"ParseIntError",10848,15121],[6,"ParseOutPointError",6069,14997],[5,"IndexOutOfBoundsError",6069,14997],[5,"Version",6069,14997],[5,"InputWeightPrediction",6069,14997],[10,"Decodable",6246,15053],[10,"Encodable",6246,15053],[10,"WriteExt",6246,15053],[6,"DecodeError",6246,15122],[10,"IntoDeError",6450,15123],[10,"ReadExt",6246,15053],[5,"CheckedData",6335,15053],[6,"FromHexError",6335,15053],[5,"OddLengthStringError",6828,15067],[5,"Hex",6450,15123],[10,"Case",6485,15124],[10,"EncodeBytes",6450,15123],[5,"DecodeInitError",6485,15124],[5,"DecodeError",6485,15124],[5,"Encoder",6485,15124],[5,"Decoder",6485,15124],[5,"SerializedSignature",6563,15076],[6,"Error",6563,15076],[5,"Iter",15125],[5,"Signature",11744,15126],[5,"MissingPrefixError",6650,15068],[5,"ContainsPrefixError",6650,15068],[17,"Engine"],[17,"Bytes"],[10,"Hash",12271,15010],[10,"HashEngine",12271,15010],[10,"FromHex",6828,15127],[17,"MidState"],[17,"Display"],[10,"DisplayHex",6828,15128],[6,"Case",6828,15129],[10,"Display",15009],[10,"LowerHex",15009],[10,"UpperHex",15009],[5,"InvalidCharError",6828,15067],[5,"InvalidLengthError",7048,15067],[5,"HexToBytesIter",6828,15130],[5,"BytesToHexIter",6828,15130],[10,"ExactSizeIterator",15131],[5,"HexDigitsIter",15130],[10,"DoubleEndedIterator",15132],[10,"FusedIterator",15133],[5,"BufEncoder",6992,15134],[5,"DisplayByteSlice",7010,15128],[5,"DisplayArray",7010,15128],[5,"HashEngine",7110,15080],[17,"Ok"],[17,"SerializeSeq"],[17,"SerializeTuple"],[17,"SerializeTupleStruct"],[17,"SerializeTupleVariant"],[17,"SerializeMap"],[17,"SerializeStruct"],[17,"SerializeStructVariant"],[10,"Error",8747,15019],[10,"SerializeSeq",8747,15019],[10,"SerializeTuple",8747,15019],[10,"SerializeTupleStruct",8747,15019],[10,"SerializeTupleVariant",8747,15019],[10,"SerializeMap",8747,15019],[10,"SerializeStruct",8747,15019],[10,"SerializeStructVariant",8747,15019],[10,"Visitor",7268,15004],[1,"f32"],[1,"i128"],[5,"IgnoredAny",7268,15135],[6,"Unexpected",7268,15004],[17,"Value"],[10,"DeserializeSeed",7268,15004],[10,"Expected",7268,15004],[17,"Deserializer"],[10,"VariantAccess",7268,15004],[10,"SeqAccess",7268,15004],[10,"MapAccess",7268,15004],[5,"Request",15136],[17,"Variant"],[10,"EnumAccess",7268,15004],[5,"UnitDeserializer",7452,15100],[5,"U32Deserializer",7452,15100],[5,"StrDeserializer",7452,15100],[5,"BorrowedStrDeserializer",7452,15100],[5,"CowStrDeserializer",7452,15100],[5,"BytesDeserializer",7452,15100],[5,"BorrowedBytesDeserializer",7452,15100],[5,"MapDeserializer",7452,15100],[5,"Error",7452,15100],[5,"BoolDeserializer",7452,15100],[5,"I8Deserializer",7452,15100],[5,"I16Deserializer",7452,15100],[5,"I32Deserializer",7452,15100],[5,"I64Deserializer",7452,15100],[5,"I128Deserializer",7452,15100],[5,"IsizeDeserializer",7452,15100],[5,"U8Deserializer",7452,15100],[5,"U16Deserializer",7452,15100],[5,"U64Deserializer",7452,15100],[5,"U128Deserializer",7452,15100],[5,"UsizeDeserializer",7452,15100],[5,"F32Deserializer",7452,15100],[5,"F64Deserializer",7452,15100],[5,"CharDeserializer",7452,15100],[5,"SeqDeserializer",7452,15100],[5,"SeqAccessDeserializer",7452,15100],[5,"MapAccessDeserializer",7452,15100],[5,"EnumAccessDeserializer",7452,15100],[1,"isize"],[5,"Impossible",8747,15137],[5,"Source",15136],[10,"SerdeHash",8877,15138],[5,"Hash",8882,15139],[5,"HashEngine",8882,15139],[5,"Midstate",8952,14988],[10,"Tag",9119,15041],[5,"Hash",9166,15140],[5,"HashEngine",9166,15140],[5,"Hash",9222,15141],[5,"HashEngine",9222,15141],[5,"Hash",9292,15142],[5,"HashEngine",9292,15142],[5,"Hash",9348,15143],[5,"State",9348,15143],[5,"HashEngine",9348,15143],[6,"ErrorKind",9440,15059],[5,"Take",9440,15057],[5,"Cursor",9440,15057],[5,"Sink",9440,15057],[5,"Keypair",11963,15038],[10,"Context",11343,15029],[5,"TweakedKeypair",9586,15034],[6,"ParseCompressedPublicKeyError",9586,15034],[5,"InvalidBase58PayloadLengthError",9586,15034],[5,"InvalidAddressVersionError",9586,15034],[5,"Context",11963,15038],[5,"NonNull",15144],[17,"TweakedAux"],[17,"TweakedKey"],[10,"TapTweak",9586,15034],[6,"All",11343,15145],[5,"DisplaySecret",15146],[5,"InvalidParityValue",11343,15026],[5,"AllPreallocated",11343,15029],[5,"ManuallyDrop",15147],[5,"SignOnlyPreallocated",11343,15029],[5,"VerifyOnlyPreallocated",11343,15029],[10,"Rng",12385,15148],[5,"AlignedType",12241,15149],[10,"PreallocatedContext",11343,15029],[5,"RecoverableSignature",11744,15150],[10,"CryptoRng",12385,15151],[6,"SignOnly",11343,15145],[6,"VerifyOnly",11343,15145],[5,"PartialMerkleTree",9956,15054],[5,"UnknownChainHashError",10014,15002],[5,"ServiceFlags",10063,15069],[5,"ParseMagicError",10063,15069],[5,"UnknownMagicError",10063,15069],[6,"AddrV2",10219,15090],[5,"CommandString",10274,15152],[5,"CommandStringError",10274,15152],[5,"RawNetworkMessage",10274,15152],[6,"NetworkMessage",10274,15152],[5,"GetBlocksMessage",10403,15089],[5,"GetHeadersMessage",10403,15089],[5,"FilterLoad",10481,15153],[6,"BloomFlags",10481,15153],[5,"FilterAdd",10481,15153],[5,"SendCmpct",10545,15154],[5,"CmpctBlock",10545,15154],[5,"GetBlockTxn",10545,15154],[5,"BlockTxn",10545,15154],[5,"GetCFilters",10638,15155],[5,"CFilter",10638,15155],[5,"GetCFHeaders",10638,15155],[5,"CFHeaders",10638,15155],[5,"GetCFCheckpt",10638,15155],[5,"CFCheckpt",10638,15155],[5,"VersionMessage",10770,15156],[6,"RejectReason",10770,15156],[5,"Reject",10770,15156],[5,"ParseIntError",15157],[5,"Output",10881,15158],[6,"GetKeyError",10881,15055],[6,"OutputType",10881,15055],[6,"SigningAlgorithm",10881,15055],[6,"IndexOutOfBoundsError",10881,15055],[5,"PsbtSighashType",10881,15159],[5,"Input",10881,15159],[6,"PsbtParseError",10881,15160],[6,"TaprootError",13190,15035],[6,"P2wpkhError",13190,15035],[6,"ConversionError",15000],[5,"ProprietaryKey",11272,15161],[10,"From",15061],[5,"Key",11272,15161],[5,"Pair",11272,15161],[5,"PublicKey",11963,15038],[10,"ThirtyTwoByteHash",11343,15027],[5,"OutOfRangeError",13139,15028],[5,"ElligatorSwift",11888,15162],[5,"SharedSecret",11713,15163],[5,"RecoverableSignature",12209,15164],[5,"Signature",11963,15038],[5,"SerializedSignature",11744,15165],[5,"RecoveryId",11744,15150],[5,"IntoIter",11866,15166],[5,"ElligatorSwiftSharedSecret",11888,15162],[6,"ElligatorSwiftParty",11888,15162],[17,"Target"],[10,"CPtr",11963,15038],[5,"ElligatorSwift",11963,15038],[6,"c_void",12241,15167],[1,"fn"],[5,"SchnorrSigExtraParams",11963,15038],[5,"Hmac",12271,15168],[5,"HmacEngine",12271,15168],[10,"FromStr",15169],[5,"Error",12385,15170],[5,"NonZero",15171],[10,"Fill",12385,15148],[10,"RngCore",12385,15151],[5,"Error",15172],[17,"Seed"],[10,"SeedableRng",12385,15151],[10,"Default",15173],[10,"AsMut",15061],[10,"SampleUniform",12712,15174],[10,"SampleRange",12712,15174],[10,"Distribution",12874,15175],[5,"DistIter",12437,15175],[5,"ThreadRng",12918,15176],[10,"DistString",12437,15175],[5,"Alphanumeric",12437,15177],[5,"Standard",12437,15178],[5,"Bernoulli",12437,15179],[6,"BernoulliError",12437,15179],[5,"OpenClosed01",12437,15180],[5,"Open01",12437,15180],[5,"Slice",12437,15181],[5,"WeightedIndex",12437,15182],[6,"WeightedError",12437,15182],[5,"Uniform",12437,15174],[5,"DistMap",12437,15175],[5,"EmptySlice",15181],[10,"AddAssign",15183],[10,"SampleBorrow",12712,15174],[5,"Wrapping",15184],[10,"SubAssign",15183],[5,"UniformInt",12712,15174],[5,"UniformChar",12712,15174],[5,"UniformFloat",12712,15174],[5,"UniformDuration",12712,15174],[17,"X"],[10,"UniformSampler",12712,15174],[5,"Duration",15185],[5,"WeightedIndex",12862,15186],[10,"Weight",12862,15186],[10,"SliceRandom",13050,15187],[10,"IteratorRandom",13050,15187],[5,"SliceChooseIter",13050,15187],[5,"OsRng",12918,15188],[5,"StdRng",12918,15189],[5,"ReseedingRng",12981,15190],[10,"BlockRngCore",15191],[5,"ReadRng",12981,15192],[5,"ReadError",12981,15192],[5,"StepRng",13029,15193],[10,"Index",15194],[6,"IndexVec",13082,15195],[6,"IndexVecIntoIter",13082,15195],[6,"IndexVecIter",13082,15195],[5,"Annex",13190,15035],[6,"Prevouts",13190,15035],[5,"PrevoutsSizeError",13190,15035],[5,"PrevoutsKindError",13190,15035],[6,"PrevoutsIndexError",13190,15035],[5,"SighashTypeParseError",13190,15035],[5,"SingleMissingOutputError",13190,15035],[6,"AnnexError",13190,15035],[6,"SigningDataError",13190,15035],[6,"EncodeSigningDataResult",13190,15035],[10,"BorrowMut",15006],[6,"MessageSignatureError",13539,15196],[5,"MessageSignature",13539,15196],[5,"TaprootBuilder",13594,15036],[6,"TaprootBuilderError",13594,15036],[6,"TapLeaf",13594,15036],[6,"SigFromSliceError",13594,15075],[6,"IncompleteBuilderError",13594,15036],[6,"HiddenNodesError",13594,15036],[5,"TapTree",13594,15036],[5,"NodeInfo",13594,15036],[5,"ScriptLeaf",13594,15036],[5,"FutureLeafVersion",13594,15036],[6,"TaprootError",13594,15036],[5,"LeafNodes",13594,15036],[5,"ScriptLeaves",13594,15036],[5,"BTreeSet",15197],[5,"SerializedSignature",14259,15198],[5,"IntoIter",14233,15095],[5,"IntoIter",14259,15199],[5,"IndexedTxGraph",14314],[5,"ChangeSet",14314],[10,"Indexer",14365],[5,"Arc",15200],[5,"ChangeSet",14374],[5,"ChangeSet",14799],[17,"ChangeSet"],[5,"KeychainTxOutIndex",14374],[6,"InsertDescriptorError",14374],[5,"Transaction",15201],[5,"SpkTxOutIndex",14482],[8,"Indexed",0,15202],[8,"KeychainIndexed",0,15202],[10,"SyncRequestBuilderExt",14374],[10,"FullScanRequestBuilderExt",14374],[5,"LocalChain",14519],[5,"ChangeSet",14519],[5,"MissingGenesisError",14519],[5,"CannotConnectError",14519],[6,"ApplyHeaderError",14519],[5,"AlterCheckPointError",14519],[5,"SyncRequestBuilder",14653,15203],[5,"SyncRequest",14653,15203],[5,"FullScanRequestBuilder",14653,15203],[5,"FullScanRequest",14653,15203],[6,"SyncItem",14653,15203],[5,"SyncProgress",14653,15203],[5,"SyncResult",14653,15203],[5,"FullScanResult",14653,15203],[10,"Any",15023],[10,"Send",15058],[17,"IntoIter"],[6,"CalculateFeeError",14799],[5,"TxNode",14799],[5,"CanonicalTx",14799],[5,"TxAncestors",14799],[5,"TxDescendants",14799],[5,"HashSet",15204],[15,"Confirmed",381],[15,"Unconfirmed",381],[15,"P2pkh",3048],[15,"P2sh",3048],[15,"Segwit",3048],[8,"ExtendedPubKey",4167],[8,"ExtendendPubKey",4167],[8,"ExtendedPrivKey",4167],[8,"ExtendendPrivKey",4167],[15,"Normal",4513],[15,"Hardened",4513],[15,"InvalidChecksum",6428],[15,"OversizedVectorAllocation",6428],[10,"ByteDecoder",6450],[10,"ByteEncoder",6450],[5,"With",6450],[6,"Lower",6485],[6,"Upper",6485],[5,"HmacMidState",7097],[8,"Result",9440],[15,"Unknown",10401],[15,"Unknown",10479],[15,"UnexpectedUnsignedTx",11259],[15,"InvalidPreimageHashPair",11259],[15,"AbsurdFeeRate",11264],[15,"SendingTooMuch",11264],[15,"MissingInputValue",11264],[15,"Inputs",11268],[15,"TxInput",11268],[8,"NonceFn",11963],[8,"EcdhHashFn",11963],[8,"SchnorrNonceFn",11963],[8,"EllswiftEcdhHashFn",11963],[15,"DescriptorAlreadyAssigned",14478],[15,"KeychainAlreadyAssigned",14478]],"r":[[0,14986],[2,14993],[3,14984],[4,14987],[6,15011],[7,14992],[8,14989],[9,14989],[10,14987],[11,14992],[14,14985],[15,14985],[17,14992],[19,15202],[20,14314],[21,14365],[22,15202],[23,15016],[24,14993],[25,14799],[26,14986],[27,14990],[255,14365],[286,15202],[287,14365],[384,15030],[385,15030],[390,14999],[396,15003],[397,15003],[399,15025],[400,15034],[404,14999],[407,15035],[408,15048],[409,15031],[410,15031],[411,15030],[412,15035],[434,15054],[440,15002],[441,15002],[450,15049],[451,14997],[458,15034],[459,15055],[460,15034],[461,15034],[467,15037],[468,14998],[469,15033],[470,15035],[471,14997],[472,14999],[478,15036],[479,15036],[480,15036],[481,15036],[482,15035],[483,15035],[484,15035],[485,15036],[486,15036],[487,15025],[491,14997],[492,14997],[493,15003],[494,14997],[495,14997],[513,15053],[515,15034],[516,15033],[517,15024],[518,15050],[519,15003],[520,15003],[521,15051],[522,15052],[523,15025],[524,14997],[525,15032],[526,15026],[542,15205],[563,15205],[667,15205],[668,15205],[669,15205],[672,15205],[1009,15205],[1134,15206],[1334,15205],[1895,15205],[2032,15206],[2044,15205],[2060,15205],[2085,15205],[2107,15205],[2160,15205],[2162,15205],[2178,15205],[2266,15206],[2270,15205],[2288,15205],[2777,15030],[2778,15030],[2779,15030],[2783,15070],[2786,15070],[2788,15070],[2789,15030],[2791,15070],[2793,15030],[2794,15030],[2795,15030],[2797,15070],[2802,15070],[2806,15070],[2810,15070],[2812,15070],[2905,15030],[3054,15070],[3056,15070],[3058,15070],[3060,15070],[3062,15070],[3063,15070],[3064,15070],[3065,15070],[3067,15070],[3073,14999],[3077,14999],[3078,14999],[3079,14999],[3088,14999],[3091,14999],[3119,14999],[3134,15084],[3135,15084],[3136,15084],[3137,15084],[3145,15207],[3146,15207],[3147,15207],[3148,15208],[3149,15208],[3150,15209],[3151,15209],[3152,15209],[3153,15210],[3154,15210],[3156,15082],[3158,15082],[3159,15022],[3161,15064],[3253,15211],[3254,15211],[3279,15211],[3280,15211],[3281,15211],[3303,15211],[3525,15082],[3527,15082],[3528,15082],[3530,15082],[3568,15110],[3571,15110],[3572,15109],[3573,15111],[3580,15212],[3594,15110],[3596,15110],[3597,15110],[3598,15110],[3602,15110],[3603,15212],[3604,15109],[3606,15109],[3607,15109],[3608,15109],[3611,15109],[3612,15212],[3635,15212],[3636,15212],[3656,15212],[3657,15112],[3658,15112],[3659,15112],[3660,15112],[3662,15112],[3664,15112],[3666,15112],[3667,15112],[3701,15113],[3713,15111],[3715,15111],[3717,15111],[3718,15111],[3719,15111],[3720,15114],[3721,15114],[3766,15111],[3795,15114],[3796,15114],[3797,15114],[3798,15114],[3799,15114],[3800,15114],[3801,15114],[3802,15114],[3809,15111],[3818,15115],[3831,15116],[3832,15117],[3833,15116],[3863,15088],[3864,15088],[3865,15088],[3866,15088],[3868,15088],[3869,15088],[3870,15088],[4053,15031],[4054,15031],[4055,15031],[4056,15031],[4057,15031],[4058,15031],[4059,15031],[4060,15031],[4061,15031],[4062,15031],[4169,15032],[4170,15032],[4171,15032],[4172,15032],[4173,15032],[4174,15032],[4175,15032],[4176,15032],[4177,15032],[4178,15032],[4181,15032],[4183,15032],[4188,15032],[4193,15032],[4194,15032],[4195,15032],[4515,15048],[4516,15024],[4517,15213],[4518,15213],[4519,15213],[4520,15213],[4521,15213],[4522,15213],[4523,15213],[4524,15213],[4525,15213],[4528,15003],[4529,15003],[4530,15003],[4531,15003],[4538,15003],[4541,15003],[4542,15003],[4543,15003],[4544,15003],[4647,15045],[4648,15045],[4649,15045],[4650,15045],[4651,15045],[4652,15045],[4653,15045],[4654,15045],[4655,15045],[4657,15045],[4658,15045],[4660,15045],[4661,15045],[4663,15045],[4694,15045],[4712,15048],[4713,15214],[4714,15214],[4716,15074],[4717,15074],[4718,15074],[4719,15046],[4724,15074],[4725,15074],[4728,15074],[4902,15047],[4903,15071],[4904,15047],[4905,15047],[4906,15047],[4912,15071],[4914,15071],[5111,15049],[5112,15049],[5116,15049],[5117,15049],[5118,15049],[5119,15049],[5120,15049],[5121,15049],[5128,15049],[5162,15215],[5163,15215],[5164,15215],[5165,15215],[5166,15215],[5167,15215],[5168,15215],[5169,15215],[5170,15215],[5171,15215],[5172,15215],[5173,15215],[5174,15215],[5175,15215],[5176,15215],[5177,15215],[5178,15215],[5179,15215],[5180,15215],[5181,15215],[5182,15215],[5183,15215],[5184,15215],[5185,15215],[5186,15215],[5187,15215],[5188,15215],[5189,15215],[5190,15215],[5191,15215],[5192,15215],[5193,15215],[5194,15215],[5195,15215],[5196,15215],[5197,15215],[5198,15215],[5199,15215],[5200,15215],[5201,15215],[5202,15215],[5203,15215],[5204,15215],[5205,15215],[5206,15215],[5207,15215],[5208,15215],[5209,15215],[5210,15215],[5211,15215],[5212,15215],[5213,15215],[5214,15215],[5215,15215],[5216,15215],[5217,15215],[5218,15215],[5219,15215],[5220,15215],[5221,15215],[5222,15215],[5223,15215],[5224,15215],[5225,15215],[5226,15215],[5227,15215],[5228,15215],[5229,15215],[5230,15215],[5231,15215],[5232,15215],[5233,15215],[5234,15215],[5235,15215],[5236,15215],[5237,15215],[5238,15215],[5239,15215],[5240,15215],[5241,15215],[5242,15215],[5243,15215],[5244,15215],[5245,15215],[5246,15215],[5247,15215],[5248,15215],[5249,15215],[5250,15215],[5251,15215],[5252,15215],[5253,15215],[5254,15215],[5255,15215],[5256,15215],[5257,15215],[5258,15215],[5259,15215],[5260,15215],[5261,15215],[5262,15215],[5263,15215],[5264,15215],[5265,15215],[5266,15215],[5267,15215],[5268,15215],[5269,15215],[5270,15215],[5271,15215],[5272,15215],[5273,15215],[5274,15215],[5275,15215],[5276,15215],[5277,15215],[5278,15215],[5279,15215],[5280,15215],[5281,15215],[5282,15215],[5283,15215],[5284,15215],[5285,15215],[5286,15215],[5287,15215],[5288,15215],[5289,15215],[5290,15215],[5291,15215],[5292,15215],[5293,15215],[5294,15215],[5295,15215],[5296,15215],[5297,15215],[5298,15215],[5299,15215],[5300,15215],[5301,15215],[5302,15215],[5303,15215],[5304,15215],[5305,15215],[5306,15215],[5307,15215],[5308,15215],[5309,15215],[5310,15215],[5311,15215],[5312,15215],[5313,15215],[5314,15215],[5315,15215],[5316,15215],[5317,15215],[5318,15215],[5319,15215],[5320,15215],[5321,15215],[5322,15215],[5323,15215],[5324,15215],[5325,15215],[5326,15215],[5327,15215],[5328,15215],[5329,15215],[5330,15215],[5331,15215],[5332,15215],[5333,15215],[5334,15215],[5335,15215],[5336,15215],[5337,15215],[5338,15215],[5339,15215],[5340,15215],[5341,15215],[5342,15215],[5343,15215],[5344,15215],[5345,15215],[5346,15215],[5347,15215],[5348,15215],[5349,15215],[5350,15215],[5351,15215],[5352,15215],[5353,15215],[5354,15215],[5355,15215],[5356,15215],[5357,15215],[5358,15215],[5359,15215],[5360,15215],[5361,15215],[5362,15215],[5363,15215],[5364,15215],[5365,15215],[5366,15215],[5367,15215],[5368,15215],[5369,15215],[5370,15215],[5371,15215],[5372,15215],[5373,15215],[5374,15215],[5375,15215],[5376,15215],[5377,15215],[5378,15215],[5379,15215],[5380,15215],[5381,15215],[5382,15215],[5383,15215],[5384,15215],[5385,15215],[5386,15215],[5387,15215],[5388,15215],[5389,15215],[5390,15215],[5391,15215],[5392,15215],[5393,15215],[5394,15215],[5395,15215],[5396,15215],[5397,15215],[5398,15215],[5399,15215],[5400,15215],[5401,15215],[5402,15215],[5403,15215],[5404,15215],[5405,15215],[5406,15215],[5407,15215],[5408,15215],[5409,15215],[5410,15215],[5411,15215],[5412,15215],[5413,15215],[5414,15215],[5415,15215],[5416,15215],[5417,15215],[5418,15044],[5419,15037],[5421,15033],[5422,15062],[5423,15062],[5424,15062],[5428,15042],[5430,15042],[5431,15119],[5432,15120],[5433,15037],[5434,14998],[5435,15033],[5438,15033],[5894,15033],[5895,15033],[5896,15033],[5957,15033],[5958,15033],[5959,15033],[5960,15051],[5963,15051],[5964,15051],[5965,15051],[5986,15052],[5989,15052],[5990,15052],[6009,15052],[6070,14997],[6071,14997],[6072,14997],[6074,14997],[6075,14997],[6081,14997],[6082,14997],[6085,14997],[6086,14997],[6087,14997],[6088,14997],[6090,14997],[6093,14997],[6122,14997],[6177,14997],[6178,14997],[6229,15024],[6230,15024],[6231,15050],[6232,15050],[6248,15053],[6249,15122],[6250,15053],[6253,15043],[6255,15053],[6259,15053],[6275,15053],[6276,15053],[6288,15122],[6307,15122],[6322,15122],[6323,15053],[6335,15053],[6336,15053],[6338,15053],[6339,15053],[6340,15053],[6343,15053],[6348,15053],[6350,15053],[6351,15053],[6367,15053],[6368,15053],[6369,15053],[6409,15053],[6410,15053],[6432,15043],[6433,15043],[6434,15043],[6435,15043],[6436,15043],[6450,15123],[6451,15123],[6454,15123],[6456,15123],[6458,15123],[6459,15123],[6472,15123],[6485,15124],[6486,15124],[6487,15124],[6488,15124],[6489,15124],[6490,15124],[6491,15124],[6564,15076],[6567,15076],[6569,15076],[6651,15068],[6653,15068],[6656,15121],[6657,15068],[6658,15068],[6733,15003],[6734,15031],[6735,15031],[6736,15003],[6737,14997],[6738,15003],[6739,15003],[6740,14997],[6745,15010],[6746,15010],[6747,15010],[6748,15168],[6749,15168],[6754,15010],[6755,15010],[6761,15010],[6763,15010],[6764,15010],[6765,15010],[6769,15010],[6770,15010],[6771,15010],[6772,15010],[6773,15010],[6774,15010],[6775,15010],[6776,15010],[6777,15010],[6778,15010],[6779,15010],[6780,15010],[6782,15216],[6783,15040],[6828,15130],[6829,15129],[6831,15128],[6833,15127],[6834,15130],[6835,15067],[6836,15067],[6837,15130],[6840,15067],[6844,15067],[6862,15129],[6874,15129],[6890,15129],[6900,15129],[6916,15129],[6939,15129],[6940,15129],[6948,15129],[6991,15129],[6992,15134],[7011,15128],[7012,15128],[7013,15128],[7028,15129],[7032,15129],[7048,15067],[7049,15067],[7052,15067],[7054,15067],[7056,15067],[7078,15127],[7079,15067],[7080,15067],[7087,15128],[7089,15127],[7097,15168],[7098,15168],[7099,15168],[7110,15080],[7111,15080],[7181,15004],[7182,15217],[7183,15004],[7187,15019],[7188,15217],[7196,15019],[7200,15218],[7233,15218],[7236,15218],[7271,15004],[7272,15004],[7273,15004],[7274,15004],[7277,15004],[7278,15004],[7284,15004],[7286,15135],[7287,15004],[7289,15004],[7295,15004],[7301,15004],[7308,15004],[7309,15004],[7405,15004],[7452,15100],[7453,15100],[7454,15100],[7455,15100],[7456,15100],[7457,15100],[7458,15100],[7459,15100],[7460,15100],[7461,15100],[7462,15100],[7463,15100],[7464,15100],[7465,15100],[7466,15100],[7467,15100],[7468,15100],[7469,15100],[7470,15100],[7471,15100],[7472,15100],[7473,15100],[7474,15100],[7475,15100],[7476,15100],[7477,15100],[7478,15100],[7479,15100],[7480,15100],[8747,15019],[8756,15137],[8765,15019],[8766,15019],[8768,15019],[8770,15019],[8772,15019],[8774,15019],[8776,15019],[8778,15019],[8780,15019],[8876,15219],[8878,15138],[8882,15139],[8883,15139],[8952,14988],[8953,14988],[8954,14988],[9066,15039],[9119,15041],[9120,15041],[9166,15140],[9167,15140],[9222,15141],[9223,15141],[9292,15142],[9293,15142],[9348,15143],[9349,15143],[9350,15143],[9444,15057],[9448,15057],[9450,15059],[9451,15059],[9460,15057],[9461,15057],[9462,15057],[9463,15057],[9467,15057],[9518,15057],[9555,15057],[9587,15034],[9590,15034],[9591,15034],[9594,15034],[9596,15034],[9601,15026],[9603,15026],[9604,15034],[9605,15034],[9606,15034],[9607,15034],[9608,15034],[9609,15027],[9613,15034],[9614,15034],[9617,15034],[9618,15034],[9619,15034],[9620,15034],[9621,15034],[9622,15029],[9623,15034],[9624,15026],[9959,15054],[9960,15054],[9966,15054],[9974,15220],[9975,15220],[10016,15002],[10017,15002],[10018,15002],[10023,15002],[10024,15002],[10061,15221],[10062,15221],[10063,15090],[10068,15069],[10073,15069],[10074,15069],[10077,15069],[10079,15069],[10082,15069],[10172,15069],[10173,15069],[10174,15069],[10175,15069],[10176,15069],[10177,15069],[10219,15090],[10220,15090],[10221,15090],[10283,15152],[10284,15152],[10299,15152],[10300,15152],[10303,15152],[10307,15152],[10406,15089],[10407,15089],[10408,15089],[10482,15153],[10483,15153],[10484,15153],[10545,15154],[10546,15154],[10547,15154],[10548,15154],[10638,15155],[10639,15155],[10640,15155],[10641,15155],[10642,15155],[10643,15155],[10778,15156],[10779,15156],[10780,15156],[10848,15121],[10869,15222],[10870,15222],[10871,15222],[10872,15222],[10873,15222],[10874,15222],[10875,15222],[10876,15222],[10877,15222],[10878,15025],[10879,15025],[10880,15025],[10891,15056],[10893,15055],[10895,15055],[10896,15055],[10898,15055],[10899,15159],[10917,15055],[10932,15158],[10933,15055],[10936,15055],[10938,15160],[10939,15159],[10949,15055],[10950,15055],[10951,15055],[10952,15055],[10953,15055],[11149,15055],[11153,15055],[11272,15161],[11273,15161],[11274,15161],[11275,15161],[11343,15145],[11344,15029],[11345,15029],[11347,15027],[11353,15026],[11362,15026],[11364,15027],[11368,15026],[11369,15029],[11370,15026],[11371,15028],[11372,15027],[11373,15026],[11374,15145],[11375,15029],[11376,15029],[11377,15027],[11378,15029],[11379,15145],[11380,15029],[11381,15026],[11457,15027],[11468,15027],[11469,15027],[11470,15027],[11575,15027],[11576,15027],[11615,15027],[11616,15027],[11697,15223],[11698,15223],[11699,15223],[11700,15223],[11701,15223],[11702,15223],[11703,15223],[11704,15223],[11705,15223],[11706,15223],[11707,15223],[11708,15223],[11709,15223],[11710,15223],[11711,15223],[11712,15223],[11713,15163],[11738,15163],[11744,15150],[11745,15150],[11746,15165],[11747,15126],[11838,15126],[11866,15166],[11867,15165],[11890,15162],[11891,15162],[11892,15162],[11963,15038],[11964,15038],[11965,15038],[11966,15038],[11967,15038],[11968,15038],[11969,15038],[11974,15038],[11975,15038],[11976,15038],[11977,15038],[11978,15038],[11979,15038],[11980,15038],[11981,15038],[11982,15038],[11988,15038],[12042,15038],[12086,15038],[12087,15038],[12106,15038],[12112,15038],[12113,15038],[12114,15038],[12115,15038],[12116,15038],[12117,15038],[12118,15038],[12119,15038],[12120,15038],[12121,15038],[12122,15038],[12123,15038],[12124,15038],[12125,15038],[12126,15038],[12127,15038],[12128,15038],[12129,15038],[12130,15038],[12131,15038],[12132,15038],[12133,15038],[12134,15038],[12135,15038],[12136,15038],[12137,15038],[12138,15038],[12139,15038],[12140,15038],[12141,15038],[12142,15038],[12143,15038],[12144,15038],[12145,15038],[12146,15038],[12147,15038],[12148,15038],[12149,15038],[12150,15038],[12151,15038],[12152,15038],[12153,15038],[12154,15038],[12155,15038],[12156,15038],[12157,15038],[12158,15038],[12159,15038],[12160,15038],[12161,15038],[12162,15038],[12163,15038],[12164,15038],[12165,15038],[12166,15038],[12167,15038],[12168,15038],[12197,15038],[12209,15164],[12231,15164],[12232,15164],[12233,15164],[12234,15164],[12235,15164],[12241,15149],[12247,15149],[12248,15149],[12249,15149],[12250,15149],[12251,15167],[12260,15149],[12275,15010],[12276,15010],[12277,15010],[12278,15168],[12279,15168],[12293,15010],[12342,15010],[12343,15010],[12361,15010],[12363,15010],[12386,15151],[12387,15170],[12388,15148],[12390,15148],[12391,15151],[12393,15151],[12397,15224],[12417,15224],[12418,15224],[12421,15224],[12425,15224],[12428,15176],[12438,15177],[12439,15179],[12440,15179],[12441,15175],[12442,15175],[12443,15175],[12444,15175],[12448,15180],[12449,15180],[12450,15181],[12451,15178],[12453,15174],[12454,15182],[12455,15182],[12697,15178],[12711,15178],[12712,15174],[12713,15174],[12714,15174],[12716,15174],[12717,15174],[12718,15174],[12719,15174],[12720,15174],[12721,15174],[12859,15182],[12860,15182],[12861,15225],[12862,15186],[12863,15186],[12874,15151],[12875,15175],[12877,15187],[12878,15148],[12879,15151],[12881,15151],[12882,15187],[12883,15189],[12884,15176],[12908,15224],[12915,15176],[12918,15188],[12919,15189],[12920,15176],[12921,15226],[12956,15226],[12981,15192],[12982,15192],[12983,15190],[13029,15193],[13051,15187],[13052,15187],[13053,15187],[13068,15187],[13082,15195],[13083,15195],[13084,15195],[13119,15195],[13120,15195],[13139,15028],[13140,15028],[13159,15081],[13195,15035],[13196,15035],[13198,15035],[13200,15035],[13206,15035],[13208,15035],[13209,15035],[13216,15035],[13217,15035],[13219,15035],[13221,15035],[13223,15035],[13224,15035],[13225,15035],[13228,15035],[13230,15035],[13231,15035],[13235,15035],[13238,15035],[13239,15035],[13240,15035],[13241,15035],[13539,15227],[13543,15196],[13544,15196],[13579,15227],[13594,15036],[13598,15036],[13600,15036],[13603,15036],[13612,15036],[13613,15036],[13614,15036],[13615,15036],[13620,15036],[13621,15036],[13623,15075],[13625,15075],[13626,15036],[13627,15036],[13628,15036],[13629,15036],[13630,15036],[13631,15036],[13632,15036],[13633,15036],[13634,15036],[13635,15036],[13636,15036],[13637,15036],[13639,15036],[13640,15036],[13641,15036],[13642,15036],[13643,15036],[13644,15036],[13645,15095],[13646,15036],[14053,15036],[14101,15036],[14233,15095],[14234,15095],[14259,15199],[14260,15198],[14525,14989],[14526,14989],[14653,15203],[14654,15203],[14655,15203],[14658,15203],[14659,15203],[14660,15203],[14661,15203],[14662,15203],[14812,14990]],"b":[[38,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[39,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[105,"impl-FromSql-for-Impl%3CDescriptorId%3E"],[106,"impl-FromSql-for-Impl%3CTransaction%3E"],[107,"impl-FromSql-for-Impl%3CScriptBuf%3E"],[108,"impl-FromSql-for-Impl%3CAmount%3E"],[109,"impl-FromSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[110,"impl-FromSql-for-Impl%3CNetwork%3E"],[111,"impl-FromSql-for-Impl%3CTxid%3E"],[112,"impl-FromSql-for-Impl%3CBlockHash%3E"],[167,"impl-Debug-for-Balance"],[168,"impl-Display-for-Balance"],[173,"impl-Debug-for-DescriptorId"],[174,"impl-LowerHex-for-DescriptorId"],[175,"impl-UpperHex-for-DescriptorId"],[176,"impl-Display-for-DescriptorId"],[179,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[180,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[181,"impl-From%3CTxPosInBlock%3C\'b%3E%3E-for-BlockId"],[302,"impl-ToSql-for-Impl%3CBlockHash%3E"],[303,"impl-ToSql-for-Impl%3CNetwork%3E"],[304,"impl-ToSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[305,"impl-ToSql-for-Impl%3CTransaction%3E"],[306,"impl-ToSql-for-Impl%3CAmount%3E"],[307,"impl-ToSql-for-Impl%3CTxid%3E"],[308,"impl-ToSql-for-Impl%3CDescriptorId%3E"],[309,"impl-ToSql-for-Impl%3CScriptBuf%3E"],[585,"impl-AsMut%3CScript%3E-for-Script"],[586,"impl-AsMut%3C%5Bu8%5D%3E-for-Script"],[587,"impl-AsMut%3C%5Bu8%5D%3E-for-ScriptBuf"],[588,"impl-AsMut%3CScript%3E-for-ScriptBuf"],[613,"impl-AsRef%3C%5Bu8;+bitcoin::::bip158::%7Bimpl%2317%7D::%7Bconstant%230%7D%5D%3E-for-FilterHash"],[614,"impl-AsRef%3C%5Bu8%5D%3E-for-FilterHash"],[615,"impl-AsRef%3C%5Bu8;+bitcoin::::bip158::%7Bimpl%2324%7D::%7Bconstant%230%7D%5D%3E-for-FilterHeader"],[616,"impl-AsRef%3C%5Bu8%5D%3E-for-FilterHeader"],[617,"impl-AsRef%3C%5Bu8%5D%3E-for-XKeyIdentifier"],[618,"impl-AsRef%3C%5Bu8;+bitcoin::::bip32::%7Bimpl%23106%7D::%7Bconstant%230%7D%5D%3E-for-XKeyIdentifier"],[619,"impl-AsRef%3C%5Bu8%5D%3E-for-BlockHash"],[620,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2322%7D::%7Bconstant%230%7D%5D%3E-for-BlockHash"],[621,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2329%7D::%7Bconstant%230%7D%5D%3E-for-TxMerkleNode"],[622,"impl-AsRef%3C%5Bu8%5D%3E-for-TxMerkleNode"],[623,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2336%7D::%7Bconstant%230%7D%5D%3E-for-WitnessMerkleNode"],[624,"impl-AsRef%3C%5Bu8%5D%3E-for-WitnessMerkleNode"],[625,"impl-AsRef%3C%5Bu8%5D%3E-for-WitnessCommitment"],[626,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2343%7D::%7Bconstant%230%7D%5D%3E-for-WitnessCommitment"],[627,"impl-AsRef%3C%5Bu8%5D%3E-for-Script"],[628,"impl-AsRef%3CScript%3E-for-Script"],[629,"impl-AsRef%3C%5Bu8%5D%3E-for-ScriptBuf"],[630,"impl-AsRef%3CScript%3E-for-ScriptBuf"],[631,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::script::%7Bimpl%2356%7D::%7Bconstant%230%7D%5D%3E-for-ScriptHash"],[632,"impl-AsRef%3C%5Bu8%5D%3E-for-ScriptHash"],[633,"impl-AsRef%3CPushBytes%3E-for-ScriptHash"],[634,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::script::%7Bimpl%2363%7D::%7Bconstant%230%7D%5D%3E-for-WScriptHash"],[635,"impl-AsRef%3C%5Bu8%5D%3E-for-WScriptHash"],[636,"impl-AsRef%3CPushBytes%3E-for-WScriptHash"],[637,"impl-AsRef%3C%5Bu8%5D%3E-for-Txid"],[638,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::transaction::%7Bimpl%2349%7D::%7Bconstant%230%7D%5D%3E-for-Txid"],[639,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::transaction::%7Bimpl%2356%7D::%7Bconstant%230%7D%5D%3E-for-Wtxid"],[640,"impl-AsRef%3C%5Bu8%5D%3E-for-Wtxid"],[641,"impl-AsRef%3CPushBytes%3E-for-PubkeyHash"],[642,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::key::%7Bimpl%2383%7D::%7Bconstant%230%7D%5D%3E-for-PubkeyHash"],[643,"impl-AsRef%3C%5Bu8%5D%3E-for-PubkeyHash"],[644,"impl-AsRef%3CPushBytes%3E-for-WPubkeyHash"],[645,"impl-AsRef%3C%5Bu8%5D%3E-for-WPubkeyHash"],[646,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::key::%7Bimpl%2390%7D::%7Bconstant%230%7D%5D%3E-for-WPubkeyHash"],[647,"impl-AsRef%3C%5Bu8%5D%3E-for-LegacySighash"],[648,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::sighash::%7Bimpl%2349%7D::%7Bconstant%230%7D%5D%3E-for-LegacySighash"],[649,"impl-AsRef%3C%5Bu8%5D%3E-for-SegwitV0Sighash"],[650,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::sighash::%7Bimpl%2356%7D::%7Bconstant%230%7D%5D%3E-for-SegwitV0Sighash"],[651,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::sighash::%7Bimpl%23109%7D::%7Bconstant%230%7D%5D%3E-for-TapSighash"],[652,"impl-AsRef%3C%5Bu8%5D%3E-for-TapSighash"],[654,"impl-AsRef%3C%5Bu8;+bitcoin::::taproot::%7Bimpl%2371%7D::%7Bconstant%230%7D%5D%3E-for-TapLeafHash"],[655,"impl-AsRef%3C%5Bu8%5D%3E-for-TapLeafHash"],[656,"impl-AsRef%3C%5Bu8%5D%3E-for-TapNodeHash"],[657,"impl-AsRef%3C%5Bu8;+bitcoin::::taproot::%7Bimpl%23104%7D::%7Bconstant%230%7D%5D%3E-for-TapNodeHash"],[658,"impl-AsRef%3C%5Bu8;+bitcoin::::taproot::%7Bimpl%23137%7D::%7Bconstant%230%7D%5D%3E-for-TapTweakHash"],[659,"impl-AsRef%3C%5Bu8%5D%3E-for-TapTweakHash"],[1113,"impl-Psbt"],[1114,"impl-Deserialize%3C\'de%3E-for-Psbt"],[1125,"impl-Div%3CWeight%3E-for-Amount"],[1126,"impl-Div%3Cu64%3E-for-Amount"],[1128,"impl-Div-for-Weight"],[1129,"impl-Div%3Cu64%3E-for-Weight"],[1178,"impl-PartialEq-for-Script"],[1179,"impl-PartialEq%3CScriptBuf%3E-for-Script"],[1180,"impl-PartialEq-for-ScriptBuf"],[1181,"impl-PartialEq%3CScript%3E-for-ScriptBuf"],[1355,"impl-Display-for-Denomination"],[1356,"impl-Debug-for-Denomination"],[1357,"impl-Display-for-Amount"],[1358,"impl-Debug-for-Amount"],[1359,"impl-Display-for-SignedAmount"],[1360,"impl-Debug-for-SignedAmount"],[1361,"impl-Display-for-FeeRate"],[1362,"impl-Debug-for-FeeRate"],[1363,"impl-Display-for-XOnlyPublicKey"],[1364,"impl-Debug-for-XOnlyPublicKey"],[1365,"impl-LowerHex-for-XOnlyPublicKey"],[1366,"impl-Display-for-Weight"],[1367,"impl-Debug-for-Weight"],[1368,"impl-Display-for-AddressType"],[1369,"impl-Debug-for-AddressType"],[1371,"impl-Debug-for-Address%3CV%3E"],[1372,"impl-Display-for-Address"],[1373,"impl-Display-for-FilterHash"],[1374,"impl-Debug-for-FilterHash"],[1375,"impl-UpperHex-for-FilterHash"],[1376,"impl-LowerHex-for-FilterHash"],[1377,"impl-Debug-for-FilterHeader"],[1378,"impl-Display-for-FilterHeader"],[1379,"impl-LowerHex-for-FilterHeader"],[1380,"impl-UpperHex-for-FilterHeader"],[1381,"impl-Display-for-XKeyIdentifier"],[1382,"impl-Debug-for-XKeyIdentifier"],[1383,"impl-UpperHex-for-XKeyIdentifier"],[1384,"impl-LowerHex-for-XKeyIdentifier"],[1385,"impl-UpperHex-for-BlockHash"],[1386,"impl-Display-for-BlockHash"],[1387,"impl-Debug-for-BlockHash"],[1388,"impl-LowerHex-for-BlockHash"],[1389,"impl-Display-for-TxMerkleNode"],[1390,"impl-LowerHex-for-TxMerkleNode"],[1391,"impl-UpperHex-for-TxMerkleNode"],[1392,"impl-Debug-for-TxMerkleNode"],[1393,"impl-Debug-for-WitnessMerkleNode"],[1394,"impl-LowerHex-for-WitnessMerkleNode"],[1395,"impl-Display-for-WitnessMerkleNode"],[1396,"impl-UpperHex-for-WitnessMerkleNode"],[1397,"impl-Debug-for-WitnessCommitment"],[1398,"impl-Display-for-WitnessCommitment"],[1399,"impl-LowerHex-for-WitnessCommitment"],[1400,"impl-UpperHex-for-WitnessCommitment"],[1402,"impl-Debug-for-Opcode"],[1403,"impl-Display-for-Opcode"],[1404,"impl-Debug-for-Script"],[1405,"impl-UpperHex-for-Script"],[1406,"impl-LowerHex-for-Script"],[1407,"impl-Display-for-Script"],[1408,"impl-UpperHex-for-ScriptBuf"],[1409,"impl-LowerHex-for-ScriptBuf"],[1410,"impl-Display-for-ScriptBuf"],[1411,"impl-Debug-for-ScriptBuf"],[1413,"impl-Debug-for-WitnessVersion"],[1414,"impl-Display-for-WitnessVersion"],[1415,"impl-Display-for-ScriptHash"],[1416,"impl-UpperHex-for-ScriptHash"],[1417,"impl-Debug-for-ScriptHash"],[1418,"impl-LowerHex-for-ScriptHash"],[1419,"impl-Display-for-WScriptHash"],[1420,"impl-UpperHex-for-WScriptHash"],[1421,"impl-Debug-for-WScriptHash"],[1422,"impl-LowerHex-for-WScriptHash"],[1423,"impl-LowerHex-for-Txid"],[1424,"impl-Display-for-Txid"],[1425,"impl-Debug-for-Txid"],[1426,"impl-UpperHex-for-Txid"],[1427,"impl-LowerHex-for-Wtxid"],[1428,"impl-Display-for-Wtxid"],[1429,"impl-Debug-for-Wtxid"],[1430,"impl-UpperHex-for-Wtxid"],[1431,"impl-Debug-for-OutPoint"],[1432,"impl-Display-for-OutPoint"],[1434,"impl-Display-for-Sequence"],[1435,"impl-UpperHex-for-Sequence"],[1436,"impl-Debug-for-Sequence"],[1437,"impl-LowerHex-for-Sequence"],[1442,"impl-Display-for-PublicKey"],[1443,"impl-Debug-for-PublicKey"],[1444,"impl-LowerHex-for-PubkeyHash"],[1445,"impl-Display-for-PubkeyHash"],[1446,"impl-UpperHex-for-PubkeyHash"],[1447,"impl-Debug-for-PubkeyHash"],[1448,"impl-Display-for-WPubkeyHash"],[1449,"impl-LowerHex-for-WPubkeyHash"],[1450,"impl-UpperHex-for-WPubkeyHash"],[1451,"impl-Debug-for-WPubkeyHash"],[1452,"impl-Display-for-CompressedPublicKey"],[1453,"impl-Debug-for-CompressedPublicKey"],[1454,"impl-Debug-for-PrivateKey"],[1455,"impl-Display-for-PrivateKey"],[1456,"impl-LowerHex-for-LegacySighash"],[1457,"impl-Debug-for-LegacySighash"],[1458,"impl-Display-for-LegacySighash"],[1459,"impl-UpperHex-for-LegacySighash"],[1460,"impl-LowerHex-for-SegwitV0Sighash"],[1461,"impl-Debug-for-SegwitV0Sighash"],[1462,"impl-UpperHex-for-SegwitV0Sighash"],[1463,"impl-Display-for-SegwitV0Sighash"],[1464,"impl-LowerHex-for-TapSighash"],[1465,"impl-UpperHex-for-TapSighash"],[1466,"impl-Debug-for-TapSighash"],[1467,"impl-Display-for-TapSighash"],[1468,"impl-Debug-for-TapSighashType"],[1469,"impl-Display-for-TapSighashType"],[1470,"impl-Display-for-EcdsaSighashType"],[1471,"impl-Debug-for-EcdsaSighashType"],[1474,"impl-Display-for-Network"],[1475,"impl-Debug-for-Network"],[1476,"impl-Display-for-Work"],[1477,"impl-UpperHex-for-Work"],[1478,"impl-Debug-for-Work"],[1479,"impl-LowerHex-for-Work"],[1480,"impl-Display-for-Target"],[1481,"impl-LowerHex-for-Target"],[1482,"impl-Debug-for-Target"],[1483,"impl-UpperHex-for-Target"],[1484,"impl-UpperHex-for-CompactTarget"],[1485,"impl-LowerHex-for-CompactTarget"],[1486,"impl-Debug-for-CompactTarget"],[1487,"impl-Debug-for-Psbt"],[1488,"impl-Display-for-Psbt"],[1489,"impl-Display-for-TapLeafHash"],[1490,"impl-UpperHex-for-TapLeafHash"],[1491,"impl-LowerHex-for-TapLeafHash"],[1492,"impl-Debug-for-TapLeafHash"],[1493,"impl-Display-for-TapNodeHash"],[1494,"impl-UpperHex-for-TapNodeHash"],[1495,"impl-Debug-for-TapNodeHash"],[1496,"impl-LowerHex-for-TapNodeHash"],[1497,"impl-UpperHex-for-TapTweakHash"],[1498,"impl-Display-for-TapTweakHash"],[1499,"impl-LowerHex-for-TapTweakHash"],[1500,"impl-Debug-for-TapTweakHash"],[1509,"impl-From%3CXOnlyPublicKey%3E-for-XOnlyPublicKey"],[1510,"impl-From%3CPublicKey%3E-for-XOnlyPublicKey"],[1511,"impl-From%3CTweakedPublicKey%3E-for-XOnlyPublicKey"],[1512,"impl-From%3CPublicKey%3E-for-XOnlyPublicKey"],[1514,"impl-From%3CCompressedPublicKey%3E-for-XOnlyPublicKey"],[1525,"impl-From%3CHash%3E-for-XKeyIdentifier"],[1526,"impl-From%3CXpub%3E-for-XKeyIdentifier"],[1527,"impl-From%3C%26Xpub%3E-for-XKeyIdentifier"],[1528,"impl-From%3C%26Block%3E-for-BlockHash"],[1529,"impl-From%3CHeader%3E-for-BlockHash"],[1530,"impl-From%3CHash%3E-for-BlockHash"],[1532,"impl-From%3CBlock%3E-for-BlockHash"],[1533,"impl-From%3C%26Header%3E-for-BlockHash"],[1535,"impl-From%3CTxid%3E-for-TxMerkleNode"],[1536,"impl-From%3CHash%3E-for-TxMerkleNode"],[1538,"impl-From%3CHash%3E-for-WitnessMerkleNode"],[1539,"impl-From%3CWtxid%3E-for-WitnessMerkleNode"],[1543,"impl-From%3CWitnessVersion%3E-for-Opcode"],[1544,"impl-From%3Cu8%3E-for-Opcode"],[1546,"impl-From%3CVec%3Cu8%3E%3E-for-ScriptBuf"],[1547,"impl-From%3CCow%3C\'a,+Script%3E%3E-for-ScriptBuf"],[1548,"impl-From%3CAddress%3E-for-ScriptBuf"],[1550,"impl-From%3C%26Script%3E-for-ScriptBuf"],[1553,"impl-From%3CScriptBuf%3E-for-ScriptHash"],[1554,"impl-From%3C%26Script%3E-for-ScriptHash"],[1555,"impl-From%3CHash%3E-for-ScriptHash"],[1557,"impl-From%3C%26ScriptBuf%3E-for-ScriptHash"],[1558,"impl-From%3C%26Script%3E-for-WScriptHash"],[1559,"impl-From%3C%26ScriptBuf%3E-for-WScriptHash"],[1560,"impl-From%3CHash%3E-for-WScriptHash"],[1561,"impl-From%3CScriptBuf%3E-for-WScriptHash"],[1563,"impl-From%3C%26Transaction%3E-for-Txid"],[1565,"impl-From%3CTransaction%3E-for-Txid"],[1566,"impl-From%3CHash%3E-for-Txid"],[1568,"impl-From%3CHash%3E-for-Wtxid"],[1569,"impl-From%3CTransaction%3E-for-Wtxid"],[1570,"impl-From%3C%26Transaction%3E-for-Wtxid"],[1574,"impl-From%3CLockTime%3E-for-Sequence"],[1575,"impl-From%3CRelLockTime%3E-for-Sequence"],[1578,"impl-From%3CVec%3C%26%5Bu8%5D%3E%3E-for-Witness"],[1579,"impl-From%3CVec%3CVec%3Cu8%3E%3E%3E-for-Witness"],[1580,"impl-From%3C%26%5BVec%3Cu8%3E%5D%3E-for-Witness"],[1581,"impl-From%3C%26%5B%26%5Bu8%5D%5D%3E-for-Witness"],[1583,"impl-From%3Cu32%3E-for-VarInt"],[1585,"impl-From%3Cu16%3E-for-VarInt"],[1586,"impl-From%3Cusize%3E-for-VarInt"],[1587,"impl-From%3Cu64%3E-for-VarInt"],[1588,"impl-From%3Cu8%3E-for-VarInt"],[1589,"impl-From%3CCompressedPublicKey%3E-for-PublicKey"],[1590,"impl-From%3CPublicKey%3E-for-PublicKey"],[1592,"impl-From%3CCompressedPublicKey%3E-for-PubkeyHash"],[1593,"impl-From%3CPublicKey%3E-for-PubkeyHash"],[1594,"impl-From%3C%26PublicKey%3E-for-PubkeyHash"],[1596,"impl-From%3C%26CompressedPublicKey%3E-for-PubkeyHash"],[1597,"impl-From%3CHash%3E-for-PubkeyHash"],[1599,"impl-From%3CHash%3E-for-WPubkeyHash"],[1600,"impl-From%3C%26CompressedPublicKey%3E-for-WPubkeyHash"],[1601,"impl-From%3CCompressedPublicKey%3E-for-WPubkeyHash"],[1624,"impl-From%3CHash%3CTapLeafTag%3E%3E-for-TapLeafHash"],[1626,"impl-From%3CScriptPath%3C\'s%3E%3E-for-TapLeafHash"],[1628,"impl-From%3CTapLeafHash%3E-for-TapNodeHash"],[1629,"impl-From%3CLeafNode%3E-for-TapNodeHash"],[1630,"impl-From%3C%26LeafNode%3E-for-TapNodeHash"],[1632,"impl-From%3CHash%3CTapBranchTag%3E%3E-for-TapNodeHash"],[1634,"impl-From%3C%26TaprootSpendInfo%3E-for-TapTweakHash"],[1635,"impl-From%3CTaprootSpendInfo%3E-for-TapTweakHash"],[1637,"impl-From%3CHash%3CTapTweakTag%3E%3E-for-TapTweakHash"],[1742,"impl-ParseableKey-for-XOnlyPublicKey"],[1743,"impl-XOnlyPublicKey"],[1756,"impl-PublicKey"],[1757,"impl-ParseableKey-for-PublicKey"],[1905,"impl-Index%3CRange%3Cusize%3E%3E-for-Script"],[1906,"impl-Index%3CRangeTo%3Cusize%3E%3E-for-Script"],[1907,"impl-Index%3CRangeToInclusive%3Cusize%3E%3E-for-Script"],[1908,"impl-Index%3CRangeFull%3E-for-Script"],[1909,"impl-Index%3C(Bound%3Cusize%3E,+Bound%3Cusize%3E)%3E-for-Script"],[1910,"impl-Index%3CRangeFrom%3Cusize%3E%3E-for-Script"],[1911,"impl-Index%3CRangeInclusive%3Cusize%3E%3E-for-Script"],[2054,"impl-Mul%3CFeeRate%3E-for-Weight"],[2055,"impl-Mul%3Cu64%3E-for-Weight"],[2123,"impl-PartialOrd%3CScriptBuf%3E-for-Script"],[2124,"impl-PartialOrd-for-Script"],[2125,"impl-PartialOrd%3CScript%3E-for-ScriptBuf"],[2126,"impl-PartialOrd-for-ScriptBuf"],[2220,"impl-Serialize-for-XOnlyPublicKey"],[2221,"impl-XOnlyPublicKey"],[2259,"impl-Psbt"],[2260,"impl-Serialize-for-Psbt"],[2285,"impl-Sum%3C%26Weight%3E-for-Weight"],[2286,"impl-Sum-for-Weight"],[2497,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-FeeRate"],[2498,"impl-TryFrom%3CString%3E-for-FeeRate"],[2499,"impl-TryFrom%3C%26str%3E-for-FeeRate"],[2502,"impl-TryFrom%3C%26str%3E-for-Weight"],[2503,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Weight"],[2504,"impl-TryFrom%3CString%3E-for-Weight"],[2520,"impl-TryFrom%3CFe32%3E-for-WitnessVersion"],[2521,"impl-TryFrom%3Cu8%3E-for-WitnessVersion"],[2522,"impl-TryFrom%3COpcode%3E-for-WitnessVersion"],[2523,"impl-TryFrom%3CInstruction%3C\'a%3E%3E-for-WitnessVersion"],[2531,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Sequence"],[2532,"impl-TryFrom%3C%26str%3E-for-Sequence"],[2533,"impl-TryFrom%3CString%3E-for-Sequence"],[2553,"impl-TryFrom%3CChainHash%3E-for-Network"],[2554,"impl-TryFrom%3CMagic%3E-for-Network"],[2906,"impl-Display-for-FromScriptError"],[2907,"impl-Debug-for-FromScriptError"],[2908,"impl-Display-for-P2shError"],[2909,"impl-Debug-for-P2shError"],[2910,"impl-Debug-for-UnknownAddressTypeError"],[2911,"impl-Display-for-UnknownAddressTypeError"],[2912,"impl-Debug-for-ParseError"],[2913,"impl-Display-for-ParseError"],[2914,"impl-Debug-for-UnknownHrpError"],[2915,"impl-Display-for-UnknownHrpError"],[2916,"impl-Display-for-NetworkValidationError"],[2917,"impl-Debug-for-NetworkValidationError"],[2918,"impl-Display-for-InvalidBase58PayloadLengthError"],[2919,"impl-Debug-for-InvalidBase58PayloadLengthError"],[2920,"impl-Display-for-LegacyAddressTooLongError"],[2921,"impl-Debug-for-LegacyAddressTooLongError"],[2922,"impl-Display-for-InvalidLegacyPrefixError"],[2923,"impl-Debug-for-InvalidLegacyPrefixError"],[2927,"impl-From%3CTryFromError%3E-for-FromScriptError"],[2929,"impl-From%3CError%3E-for-FromScriptError"],[2930,"impl-From%3CInfallible%3E-for-FromScriptError"],[2934,"impl-From%3CError%3E-for-ParseError"],[2935,"impl-From%3CError%3E-for-ParseError"],[2936,"impl-From%3CInvalidBase58PayloadLengthError%3E-for-ParseError"],[2937,"impl-From%3CTryFromError%3E-for-ParseError"],[2938,"impl-From%3CLegacyAddressTooLongError%3E-for-ParseError"],[2939,"impl-From%3CInvalidLegacyPrefixError%3E-for-ParseError"],[2940,"impl-From%3CNetworkValidationError%3E-for-ParseError"],[2941,"impl-From%3CInfallible%3E-for-ParseError"],[2942,"impl-From%3CDecodeError%3E-for-ParseError"],[2944,"impl-From%3CUnknownHrpError%3E-for-ParseError"],[3105,"impl-Debug-for-ParseAmountError"],[3106,"impl-Display-for-ParseAmountError"],[3107,"impl-Debug-for-Display"],[3108,"impl-Display-for-Display"],[3110,"impl-From%3CInputTooLargeError%3E-for-ParseAmountError"],[3111,"impl-From%3CInfallible%3E-for-ParseAmountError"],[3112,"impl-From%3CTooPreciseError%3E-for-ParseAmountError"],[3113,"impl-From%3CMissingDigitsError%3E-for-ParseAmountError"],[3114,"impl-From%3COutOfRangeError%3E-for-ParseAmountError"],[3115,"impl-From%3CInvalidCharacterError%3E-for-ParseAmountError"],[3168,"impl-AsMut%3C%5BT%5D%3E-for-Vec%3CT,+A%3E"],[3169,"impl-AsMut%3CVec%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3176,"impl-AsRef%3CVec%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3177,"impl-AsRef%3C%5BT%5D%3E-for-Vec%3CT,+A%3E"],[3178,"impl-AsRef%3CPath%3E-for-String"],[3179,"impl-AsRef%3COsStr%3E-for-String"],[3180,"impl-AsRef%3Cstr%3E-for-String"],[3181,"impl-AsRef%3C%5Bu8%5D%3E-for-String"],[3215,"impl-Decodable-for-Vec%3CBlockHash%3E"],[3216,"impl-Decodable-for-Vec%3CTxMerkleNode%3E"],[3217,"impl-Decodable-for-Vec%3CShortId%3E"],[3218,"impl-Decodable-for-Vec%3Cu8%3E"],[3219,"impl-Decodable-for-Vec%3CInventory%3E"],[3220,"impl-Decodable-for-Vec%3CFilterHash%3E"],[3221,"impl-Decodable-for-Vec%3CVarInt%3E"],[3222,"impl-Decodable-for-Vec%3CAddrV2Message%3E"],[3223,"impl-Decodable-for-Vec%3CHeader%3E"],[3224,"impl-Decodable-for-Vec%3C(u32,+Address)%3E"],[3225,"impl-Decodable-for-Vec%3CVec%3Cu8%3E%3E"],[3226,"impl-Decodable-for-Vec%3CTapLeafHash%3E"],[3227,"impl-Decodable-for-Vec%3Cu64%3E"],[3228,"impl-Decodable-for-Vec%3CTxOut%3E"],[3229,"impl-Decodable-for-Vec%3CTransaction%3E"],[3230,"impl-Decodable-for-Vec%3CTxIn%3E"],[3231,"impl-Decodable-for-Vec%3CFilterHeader%3E"],[3232,"impl-Decodable-for-Vec%3CPrefilledTransaction%3E"],[3233,"impl-Encodable-for-Vec%3CHeader%3E"],[3234,"impl-Encodable-for-Vec%3CBlockHash%3E"],[3235,"impl-Encodable-for-Vec%3CTxOut%3E"],[3236,"impl-Encodable-for-Vec%3CFilterHeader%3E"],[3237,"impl-Encodable-for-Vec%3CTapLeafHash%3E"],[3238,"impl-Encodable-for-Vec%3Cu8%3E"],[3239,"impl-Encodable-for-Vec%3CVec%3Cu8%3E%3E"],[3240,"impl-Encodable-for-Vec%3CAddrV2Message%3E"],[3241,"impl-Encodable-for-Vec%3CTxIn%3E"],[3242,"impl-Encodable-for-Vec%3C(u32,+Address)%3E"],[3243,"impl-Encodable-for-Vec%3CTxMerkleNode%3E"],[3244,"impl-Encodable-for-Vec%3CTransaction%3E"],[3245,"impl-Encodable-for-Vec%3CFilterHash%3E"],[3246,"impl-Encodable-for-Vec%3CVarInt%3E"],[3247,"impl-Encodable-for-Vec%3CShortId%3E"],[3248,"impl-Encodable-for-Vec%3CInventory%3E"],[3249,"impl-Encodable-for-Vec%3Cu64%3E"],[3250,"impl-Encodable-for-Vec%3CPrefilledTransaction%3E"],[3284,"impl-PartialEq%3C%26%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3285,"impl-PartialEq%3C%26mut+%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3286,"impl-PartialEq%3C%26%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3287,"impl-PartialEq%3C%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3288,"impl-PartialEq%3CVec%3CU,+A2%3E%3E-for-Vec%3CT,+A1%3E"],[3289,"impl-PartialEq%3C%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3290,"impl-PartialEq%3CCow%3C\'a,+str%3E%3E-for-String"],[3291,"impl-PartialEq-for-String"],[3292,"impl-PartialEq%3C%26str%3E-for-String"],[3293,"impl-PartialEq%3CValue%3E-for-String"],[3294,"impl-PartialEq%3Cstr%3E-for-String"],[3304,"impl-Extend%3CT%3E-for-Vec%3CT,+A%3E"],[3305,"impl-Extend%3C%26T%3E-for-Vec%3CT,+A%3E"],[3306,"impl-Extend%3CBox%3Cstr%3E%3E-for-String"],[3307,"impl-Extend%3CString%3E-for-String"],[3308,"impl-Extend%3Cchar%3E-for-String"],[3309,"impl-Extend%3C%26str%3E-for-String"],[3310,"impl-Extend%3CCow%3C\'a,+str%3E%3E-for-String"],[3311,"impl-Extend%3C%26char%3E-for-String"],[3315,"impl-Extend%3CT%3E-for-Vec%3CT,+A%3E"],[3316,"impl-Extend%3C%26T%3E-for-Vec%3CT,+A%3E"],[3317,"impl-Extend%3C%26str%3E-for-String"],[3318,"impl-Extend%3Cchar%3E-for-String"],[3319,"impl-Extend%3CString%3E-for-String"],[3320,"impl-Extend%3CCow%3C\'a,+str%3E%3E-for-String"],[3321,"impl-Extend%3C%26char%3E-for-String"],[3322,"impl-Extend%3C%26T%3E-for-Vec%3CT,+A%3E"],[3323,"impl-Extend%3CT%3E-for-Vec%3CT,+A%3E"],[3324,"impl-Extend%3C%26char%3E-for-String"],[3325,"impl-Extend%3Cchar%3E-for-String"],[3327,"impl-Write-for-Vec%3Cu8%3E"],[3328,"impl-Write-for-Vec%3Cu8,+A%3E"],[3329,"impl-Display-for-Error"],[3330,"impl-Debug-for-Error"],[3331,"impl-Display-for-InvalidCharacterError"],[3332,"impl-Debug-for-InvalidCharacterError"],[3334,"impl-Debug-for-String"],[3335,"impl-Display-for-String"],[3337,"impl-From%3CTooShortError%3E-for-Error"],[3338,"impl-From%3CInvalidCharacterError%3E-for-Error"],[3339,"impl-From%3CIncorrectChecksumError%3E-for-Error"],[3340,"impl-From%3CInfallible%3E-for-Error"],[3342,"impl-From%3CTaprootMerkleBranch%3E-for-Vec%3CTapNodeHash%3E"],[3343,"impl-From%3CVecDeque%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3344,"impl-From%3C%26mut+%5BT%5D%3E-for-Vec%3CT%3E"],[3345,"impl-From%3CCow%3C\'a,+%5BT%5D%3E%3E-for-Vec%3CT%3E"],[3346,"impl-From%3CPushBytesBuf%3E-for-Vec%3Cu8%3E"],[3347,"impl-From%3C%5BT;+N%5D%3E-for-Vec%3CT%3E"],[3348,"impl-From%3CBinaryHeap%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3349,"impl-From%3CString%3E-for-Vec%3Cu8%3E"],[3350,"impl-From%3C%26%5BT%5D%3E-for-Vec%3CT%3E"],[3351,"impl-From%3CBox%3C%5BT%5D,+A%3E%3E-for-Vec%3CT,+A%3E"],[3352,"impl-From%3CScriptBuf%3E-for-Vec%3Cu8%3E"],[3353,"impl-From%3CCString%3E-for-Vec%3Cu8%3E"],[3355,"impl-From%3C%26mut+%5BT;+N%5D%3E-for-Vec%3CT%3E"],[3356,"impl-From%3C%26str%3E-for-Vec%3Cu8%3E"],[3357,"impl-From%3CDerivationPath%3E-for-Vec%3CChildNumber%3E"],[3358,"impl-From%3C%26%5BT;+N%5D%3E-for-Vec%3CT%3E"],[3359,"impl-From%3C%26str%3E-for-String"],[3360,"impl-From%3C%26String%3E-for-String"],[3362,"impl-From%3CBox%3Cstr%3E%3E-for-String"],[3363,"impl-From%3Cchar%3E-for-String"],[3364,"impl-From%3C%26mut+str%3E-for-String"],[3365,"impl-From%3CCow%3C\'a,+str%3E%3E-for-String"],[3368,"impl-FromIterator%3Cchar%3E-for-String"],[3369,"impl-FromIterator%3CCow%3C\'a,+str%3E%3E-for-String"],[3370,"impl-FromIterator%3C%26str%3E-for-String"],[3371,"impl-FromIterator%3C%26char%3E-for-String"],[3372,"impl-FromIterator%3CBox%3Cstr%3E%3E-for-String"],[3373,"impl-FromIterator%3CString%3E-for-String"],[3410,"impl-IntoIterator-for-%26Vec%3CT,+A%3E"],[3411,"impl-IntoIterator-for-%26mut+Vec%3CT,+A%3E"],[3412,"impl-IntoIterator-for-Vec%3CT,+A%3E"],[3419,"impl-Merge-for-Vec%3CT%3E"],[3420,"impl-Vec%3CT,+A%3E"],[3430,"impl-PartialEq%3C%26mut+%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3431,"impl-PartialEq%3C%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3432,"impl-PartialEq%3CVec%3CU,+A2%3E%3E-for-Vec%3CT,+A1%3E"],[3433,"impl-PartialEq%3C%26%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3434,"impl-PartialEq%3C%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3435,"impl-PartialEq%3C%26%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3436,"impl-PartialEq%3C%26str%3E-for-String"],[3437,"impl-PartialEq%3CCow%3C\'a,+str%3E%3E-for-String"],[3438,"impl-PartialEq%3Cstr%3E-for-String"],[3518,"impl-Write-for-Vec%3Cu8,+A%3E"],[3519,"impl-Write-for-Vec%3Cu8%3E"],[3545,"impl-Debug-for-IncorrectChecksumError"],[3546,"impl-Display-for-IncorrectChecksumError"],[3547,"impl-Display-for-TooShortError"],[3548,"impl-Debug-for-TooShortError"],[3622,"impl-Display-for-EncodeSliceError"],[3623,"impl-Debug-for-EncodeSliceError"],[3624,"impl-Debug-for-DecodeError"],[3625,"impl-Display-for-DecodeError"],[3626,"impl-Display-for-DecodeSliceError"],[3627,"impl-Debug-for-DecodeSliceError"],[3683,"impl-Debug-for-ParseAlphabetError"],[3684,"impl-Display-for-ParseAlphabetError"],[3873,"impl-AsMut%3C%5Bu8%5D%3E-for-ShortId"],[3874,"impl-AsMut%3C%5Bu8;+6%5D%3E-for-ShortId"],[3878,"impl-AsRef%3C%5Bu8;+6%5D%3E-for-ShortId"],[3879,"impl-AsRef%3C%5Bu8%5D%3E-for-ShortId"],[3885,"impl-Borrow%3C%5Bu8%5D%3E-for-ShortId"],[3886,"impl-Borrow%3C%5Bu8;+6%5D%3E-for-ShortId"],[3894,"impl-BorrowMut%3C%5Bu8;+6%5D%3E-for-ShortId"],[3895,"impl-BorrowMut%3C%5Bu8%5D%3E-for-ShortId"],[3955,"impl-Debug-for-Error"],[3956,"impl-Display-for-Error"],[3958,"impl-Debug-for-ShortId"],[3959,"impl-UpperHex-for-ShortId"],[3960,"impl-Display-for-ShortId"],[3961,"impl-LowerHex-for-ShortId"],[3964,"impl-Display-for-TxIndexOutOfRangeError"],[3965,"impl-Debug-for-TxIndexOutOfRangeError"],[3970,"impl-From%3C%26%5Bu8;+6%5D%3E-for-ShortId"],[3972,"impl-From%3C%5Bu8;+6%5D%3E-for-ShortId"],[4095,"impl-Display-for-Error"],[4096,"impl-Debug-for-Error"],[4104,"impl-From%3CInfallible%3E-for-Error"],[4105,"impl-From%3CError%3E-for-Error"],[4198,"impl-AsMut%3C%5Bu8%5D%3E-for-ChainCode"],[4199,"impl-AsMut%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4200,"impl-AsMut%3C%5Bu8%5D%3E-for-Fingerprint"],[4201,"impl-AsMut%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4206,"impl-AsRef%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4207,"impl-AsRef%3C%5Bu8%5D%3E-for-ChainCode"],[4208,"impl-AsRef%3C%5Bu8%5D%3E-for-Fingerprint"],[4209,"impl-AsRef%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4214,"impl-Borrow%3C%5Bu8%5D%3E-for-ChainCode"],[4215,"impl-Borrow%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4217,"impl-Borrow%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4218,"impl-Borrow%3C%5Bu8%5D%3E-for-Fingerprint"],[4227,"impl-BorrowMut%3C%5Bu8%5D%3E-for-ChainCode"],[4228,"impl-BorrowMut%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4229,"impl-BorrowMut%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4231,"impl-BorrowMut%3C%5Bu8%5D%3E-for-Fingerprint"],[4324,"impl-Display-for-ChainCode"],[4325,"impl-UpperHex-for-ChainCode"],[4326,"impl-LowerHex-for-ChainCode"],[4327,"impl-Debug-for-ChainCode"],[4328,"impl-UpperHex-for-Fingerprint"],[4329,"impl-LowerHex-for-Fingerprint"],[4330,"impl-Display-for-Fingerprint"],[4331,"impl-Debug-for-Fingerprint"],[4332,"impl-Display-for-Xpriv"],[4333,"impl-Debug-for-Xpriv"],[4334,"impl-Debug-for-Xpub"],[4335,"impl-Display-for-Xpub"],[4336,"impl-Debug-for-ChildNumber"],[4337,"impl-Display-for-ChildNumber"],[4338,"impl-Debug-for-DerivationPath"],[4339,"impl-Display-for-DerivationPath"],[4340,"impl-Debug-for-Error"],[4341,"impl-Display-for-Error"],[4342,"impl-Display-for-InvalidBase58PayloadLengthError"],[4343,"impl-Debug-for-InvalidBase58PayloadLengthError"],[4345,"impl-From%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4346,"impl-From%3C%26%5Bu8;+32%5D%3E-for-ChainCode"],[4349,"impl-From%3C%26%5Bu8;+4%5D%3E-for-Fingerprint"],[4350,"impl-From%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4355,"impl-From%3C%26%5BChildNumber%5D%3E-for-DerivationPath"],[4356,"impl-From%3CVec%3CChildNumber%3E%3E-for-DerivationPath"],[4358,"impl-From%3CInvalidBase58PayloadLengthError%3E-for-Error"],[4359,"impl-From%3CInfallible%3E-for-Error"],[4360,"impl-From%3CError%3E-for-Error"],[4361,"impl-From%3CError%3E-for-Error"],[4589,"impl-Debug-for-Bip34Error"],[4590,"impl-Display-for-Bip34Error"],[4591,"impl-Debug-for-ValidationError"],[4592,"impl-Display-for-ValidationError"],[4665,"impl-AsMut%3C%5Bu8%5D%3E-for-ChainHash"],[4666,"impl-AsMut%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4669,"impl-AsRef%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4670,"impl-AsRef%3C%5Bu8%5D%3E-for-ChainHash"],[4671,"impl-Borrow%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4673,"impl-Borrow%3C%5Bu8%5D%3E-for-ChainHash"],[4674,"impl-BorrowMut%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4675,"impl-BorrowMut%3C%5Bu8%5D%3E-for-ChainHash"],[4684,"impl-UpperHex-for-ChainHash"],[4685,"impl-Display-for-ChainHash"],[4686,"impl-LowerHex-for-ChainHash"],[4687,"impl-Debug-for-ChainHash"],[4689,"impl-From%3C%26%5Bu8;+32%5D%3E-for-ChainHash"],[4690,"impl-From%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4783,"impl-Display-for-Height"],[4784,"impl-Debug-for-Height"],[4785,"impl-Debug-for-ParseHeightError"],[4786,"impl-Display-for-ParseHeightError"],[4787,"impl-Debug-for-Time"],[4788,"impl-Display-for-Time"],[4789,"impl-Debug-for-ParseTimeError"],[4790,"impl-Display-for-ParseTimeError"],[4791,"impl-Debug-for-ConversionError"],[4792,"impl-Display-for-ConversionError"],[4793,"impl-Debug-for-LockTime"],[4794,"impl-Display-for-LockTime"],[4802,"impl-From%3CHeight%3E-for-LockTime"],[4803,"impl-From%3CTime%3E-for-LockTime"],[4804,"impl-From%3CAbsLockTime%3E-for-LockTime"],[4869,"impl-TryFrom%3C%26str%3E-for-Height"],[4870,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Height"],[4871,"impl-TryFrom%3CString%3E-for-Height"],[4873,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Time"],[4875,"impl-TryFrom%3CString%3E-for-Time"],[4876,"impl-TryFrom%3C%26str%3E-for-Time"],[4880,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-LockTime"],[4881,"impl-TryFrom%3CString%3E-for-LockTime"],[4882,"impl-TryFrom%3C%26str%3E-for-LockTime"],[4978,"impl-Display-for-Height"],[4979,"impl-Debug-for-Height"],[4980,"impl-Display-for-Time"],[4981,"impl-Debug-for-Time"],[4982,"impl-Display-for-TimeOverflowError"],[4983,"impl-Debug-for-TimeOverflowError"],[4984,"impl-Debug-for-LockTime"],[4985,"impl-Display-for-LockTime"],[4986,"impl-Debug-for-DisabledLockTimeError"],[4987,"impl-Display-for-DisabledLockTimeError"],[4988,"impl-Debug-for-IncompatibleHeightError"],[4989,"impl-Display-for-IncompatibleHeightError"],[4990,"impl-Display-for-IncompatibleTimeError"],[4991,"impl-Debug-for-IncompatibleTimeError"],[4996,"impl-From%3CHeight%3E-for-LockTime"],[4998,"impl-From%3CTime%3E-for-LockTime"],[4999,"impl-From%3CRelLockTime%3E-for-LockTime"],[5075,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Height"],[5076,"impl-TryFrom%3CString%3E-for-Height"],[5077,"impl-TryFrom%3C%26str%3E-for-Height"],[5078,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Time"],[5080,"impl-TryFrom%3CString%3E-for-Time"],[5081,"impl-TryFrom%3C%26str%3E-for-Time"],[5441,"impl-AsMut%3CPushBytes%3E-for-PushBytes"],[5442,"impl-AsMut%3C%5Bu8%5D%3E-for-PushBytes"],[5447,"impl-AsRef%3C%5Bu8%5D%3E-for-PushBytes"],[5448,"impl-AsRef%3CPushBytes%3E-for-PushBytes"],[5515,"impl-Debug-for-Builder"],[5516,"impl-Display-for-Builder"],[5522,"impl-Debug-for-PushBytesError"],[5523,"impl-Display-for-PushBytesError"],[5524,"impl-Debug-for-Error"],[5525,"impl-Display-for-Error"],[5532,"impl-From%3C%26%5Bu8;+64%5D%3E-for-%26PushBytes"],[5533,"impl-From%3C%26%5Bu8;+40%5D%3E-for-%26PushBytes"],[5534,"impl-From%3C%26%5Bu8;+37%5D%3E-for-%26PushBytes"],[5535,"impl-From%3C%26%5Bu8;+12%5D%3E-for-%26PushBytes"],[5536,"impl-From%3C%26mut+%5Bu8;+11%5D%3E-for-%26mut+PushBytes"],[5537,"impl-From%3C%26%5Bu8;+33%5D%3E-for-%26PushBytes"],[5538,"impl-From%3C%26%5Bu8;+16%5D%3E-for-%26PushBytes"],[5539,"impl-From%3C%26mut+%5Bu8;+45%5D%3E-for-%26mut+PushBytes"],[5540,"impl-From%3C%26mut+%5Bu8;+69%5D%3E-for-%26mut+PushBytes"],[5541,"impl-From%3C%26%5Bu8;+13%5D%3E-for-%26PushBytes"],[5542,"impl-From%3C%26%5Bu8;+20%5D%3E-for-%26PushBytes"],[5543,"impl-From%3C%26%5Bu8;+61%5D%3E-for-%26PushBytes"],[5544,"impl-From%3C%26mut+%5Bu8;+64%5D%3E-for-%26mut+PushBytes"],[5545,"impl-From%3C%26%5Bu8;+29%5D%3E-for-%26PushBytes"],[5546,"impl-From%3C%26%5Bu8;+1%5D%3E-for-%26PushBytes"],[5547,"impl-From%3C%26mut+%5Bu8;+42%5D%3E-for-%26mut+PushBytes"],[5548,"impl-From%3C%26%5Bu8;+63%5D%3E-for-%26PushBytes"],[5549,"impl-From%3C%26%5Bu8;+10%5D%3E-for-%26PushBytes"],[5550,"impl-From%3C%26%5Bu8;+17%5D%3E-for-%26PushBytes"],[5551,"impl-From%3C%26mut+%5Bu8;+28%5D%3E-for-%26mut+PushBytes"],[5552,"impl-From%3C%26mut+%5Bu8;+25%5D%3E-for-%26mut+PushBytes"],[5553,"impl-From%3C%26mut+%5Bu8;+70%5D%3E-for-%26mut+PushBytes"],[5554,"impl-From%3C%26%5Bu8;+70%5D%3E-for-%26PushBytes"],[5555,"impl-From%3C%26%5Bu8;+68%5D%3E-for-%26PushBytes"],[5556,"impl-From%3C%26%5Bu8;+57%5D%3E-for-%26PushBytes"],[5557,"impl-From%3C%26mut+%5Bu8;+9%5D%3E-for-%26mut+PushBytes"],[5558,"impl-From%3C%26mut+%5Bu8;+63%5D%3E-for-%26mut+PushBytes"],[5559,"impl-From%3C%26%5Bu8;+42%5D%3E-for-%26PushBytes"],[5560,"impl-From%3C%26%5Bu8;+50%5D%3E-for-%26PushBytes"],[5561,"impl-From%3C%26mut+%5Bu8;+20%5D%3E-for-%26mut+PushBytes"],[5562,"impl-From%3C%26mut+%5Bu8;+68%5D%3E-for-%26mut+PushBytes"],[5563,"impl-From%3C%26mut+%5Bu8;+27%5D%3E-for-%26mut+PushBytes"],[5564,"impl-From%3C%26mut+%5Bu8;+49%5D%3E-for-%26mut+PushBytes"],[5565,"impl-From%3C%26mut+%5Bu8;+34%5D%3E-for-%26mut+PushBytes"],[5566,"impl-From%3C%26mut+%5Bu8;+62%5D%3E-for-%26mut+PushBytes"],[5567,"impl-From%3C%26%5Bu8;+39%5D%3E-for-%26PushBytes"],[5568,"impl-From%3C%26mut+%5Bu8;+8%5D%3E-for-%26mut+PushBytes"],[5569,"impl-From%3C%26mut+%5Bu8;+66%5D%3E-for-%26mut+PushBytes"],[5570,"impl-From%3C%26mut+%5Bu8;+55%5D%3E-for-%26mut+PushBytes"],[5571,"impl-From%3C%26mut+%5Bu8;+52%5D%3E-for-%26mut+PushBytes"],[5572,"impl-From%3C%26mut+%5Bu8;+22%5D%3E-for-%26mut+PushBytes"],[5573,"impl-From%3C%26%5Bu8;+27%5D%3E-for-%26PushBytes"],[5574,"impl-From%3C%26mut+%5Bu8;+2%5D%3E-for-%26mut+PushBytes"],[5575,"impl-From%3C%26mut+%5Bu8;+67%5D%3E-for-%26mut+PushBytes"],[5576,"impl-From%3C%26mut+%5Bu8;+31%5D%3E-for-%26mut+PushBytes"],[5577,"impl-From%3C%26%5Bu8;+7%5D%3E-for-%26PushBytes"],[5578,"impl-From%3C%26%5Bu8;+41%5D%3E-for-%26PushBytes"],[5579,"impl-From%3C%26%5Bu8;+56%5D%3E-for-%26PushBytes"],[5580,"impl-From%3C%26mut+%5Bu8;+1%5D%3E-for-%26mut+PushBytes"],[5581,"impl-From%3C%26mut+%5Bu8;+38%5D%3E-for-%26mut+PushBytes"],[5582,"impl-From%3C%26%5Bu8;+22%5D%3E-for-%26PushBytes"],[5583,"impl-From%3C%26mut+%5Bu8;+51%5D%3E-for-%26mut+PushBytes"],[5584,"impl-From%3C%26mut+%5Bu8;+73%5D%3E-for-%26mut+PushBytes"],[5585,"impl-From%3C%26%5Bu8;+49%5D%3E-for-%26PushBytes"],[5586,"impl-From%3C%26%5Bu8;+24%5D%3E-for-%26PushBytes"],[5587,"impl-From%3C%26%5Bu8;+30%5D%3E-for-%26PushBytes"],[5588,"impl-From%3C%26%5Bu8;+0%5D%3E-for-%26PushBytes"],[5589,"impl-From%3C%26%5Bu8;+59%5D%3E-for-%26PushBytes"],[5590,"impl-From%3C%26mut+%5Bu8;+6%5D%3E-for-%26mut+PushBytes"],[5591,"impl-From%3C%26%5Bu8;+71%5D%3E-for-%26PushBytes"],[5592,"impl-From%3C%26%5Bu8;+72%5D%3E-for-%26PushBytes"],[5593,"impl-From%3C%26mut+%5Bu8;+48%5D%3E-for-%26mut+PushBytes"],[5594,"impl-From%3C%26mut+%5Bu8;+53%5D%3E-for-%26mut+PushBytes"],[5595,"impl-From%3C%26%5Bu8;+23%5D%3E-for-%26PushBytes"],[5596,"impl-From%3C%26%5Bu8;+47%5D%3E-for-%26PushBytes"],[5597,"impl-From%3C%26mut+%5Bu8;+35%5D%3E-for-%26mut+PushBytes"],[5598,"impl-From%3C%26mut+%5Bu8;+43%5D%3E-for-%26mut+PushBytes"],[5599,"impl-From%3C%26mut+%5Bu8;+54%5D%3E-for-%26mut+PushBytes"],[5600,"impl-From%3C%26%5Bu8;+45%5D%3E-for-%26PushBytes"],[5601,"impl-From%3C%26%5Bu8;+32%5D%3E-for-%26PushBytes"],[5602,"impl-From%3C%26mut+%5Bu8;+24%5D%3E-for-%26mut+PushBytes"],[5603,"impl-From%3C%26mut+%5Bu8;+21%5D%3E-for-%26mut+PushBytes"],[5604,"impl-From%3C%26%5Bu8;+14%5D%3E-for-%26PushBytes"],[5605,"impl-From%3C%26%5Bu8;+5%5D%3E-for-%26PushBytes"],[5606,"impl-From%3C%26%5Bu8;+25%5D%3E-for-%26PushBytes"],[5607,"impl-From%3C%26%5Bu8;+58%5D%3E-for-%26PushBytes"],[5608,"impl-From%3C%26mut+%5Bu8;+46%5D%3E-for-%26mut+PushBytes"],[5609,"impl-From%3C%26%5Bu8;+18%5D%3E-for-%26PushBytes"],[5610,"impl-From%3C%26mut+%5Bu8;+10%5D%3E-for-%26mut+PushBytes"],[5611,"impl-From%3C%26mut+%5Bu8;+39%5D%3E-for-%26mut+PushBytes"],[5612,"impl-From%3C%26%5Bu8;+6%5D%3E-for-%26PushBytes"],[5613,"impl-From%3C%26mut+%5Bu8;+5%5D%3E-for-%26mut+PushBytes"],[5614,"impl-From%3C%26mut+%5Bu8;+12%5D%3E-for-%26mut+PushBytes"],[5615,"impl-From%3C%26mut+%5Bu8;+23%5D%3E-for-%26mut+PushBytes"],[5616,"impl-From%3C%26mut+%5Bu8;+47%5D%3E-for-%26mut+PushBytes"],[5617,"impl-From%3C%26mut+%5Bu8;+65%5D%3E-for-%26mut+PushBytes"],[5618,"impl-From%3C%26%5Bu8;+4%5D%3E-for-%26PushBytes"],[5619,"impl-From%3C%26mut+%5Bu8;+58%5D%3E-for-%26mut+PushBytes"],[5620,"impl-From%3C%26mut+%5Bu8;+71%5D%3E-for-%26mut+PushBytes"],[5621,"impl-From%3C%26mut+%5Bu8;+57%5D%3E-for-%26mut+PushBytes"],[5622,"impl-From%3C%26mut+%5Bu8;+33%5D%3E-for-%26mut+PushBytes"],[5623,"impl-From%3C%26mut+%5Bu8;+61%5D%3E-for-%26mut+PushBytes"],[5624,"impl-From%3C%26%5Bu8;+52%5D%3E-for-%26PushBytes"],[5625,"impl-From%3C%26%5Bu8;+19%5D%3E-for-%26PushBytes"],[5626,"impl-From%3C%26mut+%5Bu8;+60%5D%3E-for-%26mut+PushBytes"],[5627,"impl-From%3C%26%5Bu8;+69%5D%3E-for-%26PushBytes"],[5628,"impl-From%3C%26mut+%5Bu8;+29%5D%3E-for-%26mut+PushBytes"],[5629,"impl-From%3C%26%5Bu8;+9%5D%3E-for-%26PushBytes"],[5630,"impl-From%3C%26mut+%5Bu8;+3%5D%3E-for-%26mut+PushBytes"],[5631,"impl-From%3C%26%5Bu8;+34%5D%3E-for-%26PushBytes"],[5632,"impl-From%3C%26%5Bu8;+60%5D%3E-for-%26PushBytes"],[5633,"impl-From%3C%26mut+%5Bu8;+16%5D%3E-for-%26mut+PushBytes"],[5634,"impl-From%3C%26mut+%5Bu8;+19%5D%3E-for-%26mut+PushBytes"],[5635,"impl-From%3C%26mut+%5Bu8;+13%5D%3E-for-%26mut+PushBytes"],[5636,"impl-From%3C%26%5Bu8;+54%5D%3E-for-%26PushBytes"],[5637,"impl-From%3C%26mut+%5Bu8;+56%5D%3E-for-%26mut+PushBytes"],[5638,"impl-From%3C%26%5Bu8;+67%5D%3E-for-%26PushBytes"],[5639,"impl-From%3C%26%5Bu8;+3%5D%3E-for-%26PushBytes"],[5640,"impl-From%3C%26mut+%5Bu8;+30%5D%3E-for-%26mut+PushBytes"],[5641,"impl-From%3C%26%5Bu8;+38%5D%3E-for-%26PushBytes"],[5642,"impl-From%3C%26%5Bu8;+65%5D%3E-for-%26PushBytes"],[5643,"impl-From%3C%26mut+%5Bu8;+15%5D%3E-for-%26mut+PushBytes"],[5644,"impl-From%3C%26%5Bu8;+53%5D%3E-for-%26PushBytes"],[5645,"impl-From%3C%26%5Bu8;+62%5D%3E-for-%26PushBytes"],[5646,"impl-From%3C%26%5Bu8;+2%5D%3E-for-%26PushBytes"],[5647,"impl-From%3C%26%5Bu8;+46%5D%3E-for-%26PushBytes"],[5648,"impl-From%3C%26%5Bu8;+48%5D%3E-for-%26PushBytes"],[5649,"impl-From%3C%26mut+%5Bu8;+17%5D%3E-for-%26mut+PushBytes"],[5650,"impl-From%3C%26%5Bu8;+21%5D%3E-for-%26PushBytes"],[5651,"impl-From%3C%26mut+%5Bu8;+18%5D%3E-for-%26mut+PushBytes"],[5652,"impl-From%3C%26%5Bu8;+8%5D%3E-for-%26PushBytes"],[5653,"impl-From%3C%26%5Bu8;+73%5D%3E-for-%26PushBytes"],[5654,"impl-From%3C%26%5Bu8;+51%5D%3E-for-%26PushBytes"],[5655,"impl-From%3C%26mut+%5Bu8;+37%5D%3E-for-%26mut+PushBytes"],[5656,"impl-From%3C%26mut+%5Bu8;+44%5D%3E-for-%26mut+PushBytes"],[5657,"impl-From%3C%26mut+%5Bu8;+32%5D%3E-for-%26mut+PushBytes"],[5658,"impl-From%3C%26%5Bu8;+31%5D%3E-for-%26PushBytes"],[5659,"impl-From%3C%26mut+%5Bu8;+59%5D%3E-for-%26mut+PushBytes"],[5660,"impl-From%3C%26mut+%5Bu8;+72%5D%3E-for-%26mut+PushBytes"],[5661,"impl-From%3C%26mut+%5Bu8;+50%5D%3E-for-%26mut+PushBytes"],[5662,"impl-From%3C%26%5Bu8;+43%5D%3E-for-%26PushBytes"],[5663,"impl-From%3C%26%5Bu8;+55%5D%3E-for-%26PushBytes"],[5664,"impl-From%3C%26mut+%5Bu8;+26%5D%3E-for-%26mut+PushBytes"],[5665,"impl-From%3C%26%5Bu8;+36%5D%3E-for-%26PushBytes"],[5666,"impl-From%3C%26mut+%5Bu8;+4%5D%3E-for-%26mut+PushBytes"],[5667,"impl-From%3C%26%5Bu8;+66%5D%3E-for-%26PushBytes"],[5668,"impl-From%3C%26%5Bu8;+35%5D%3E-for-%26PushBytes"],[5669,"impl-From%3C%26%5Bu8;+26%5D%3E-for-%26PushBytes"],[5670,"impl-From%3C%26%5Bu8;+15%5D%3E-for-%26PushBytes"],[5671,"impl-From%3C%26mut+%5Bu8;+0%5D%3E-for-%26mut+PushBytes"],[5672,"impl-From%3C%26mut+%5Bu8;+36%5D%3E-for-%26mut+PushBytes"],[5673,"impl-From%3C%26mut+%5Bu8;+41%5D%3E-for-%26mut+PushBytes"],[5674,"impl-From%3C%26mut+%5Bu8;+40%5D%3E-for-%26mut+PushBytes"],[5675,"impl-From%3C%26mut+%5Bu8;+14%5D%3E-for-%26mut+PushBytes"],[5676,"impl-From%3C%26mut+%5Bu8;+7%5D%3E-for-%26mut+PushBytes"],[5677,"impl-From%3C%26%5Bu8;+11%5D%3E-for-%26PushBytes"],[5678,"impl-From%3C%26%5Bu8;+44%5D%3E-for-%26PushBytes"],[5679,"impl-From%3C%26%5Bu8;+28%5D%3E-for-%26PushBytes"],[5680,"impl-From%3C%5Bu8;+30%5D%3E-for-PushBytesBuf"],[5681,"impl-From%3C%5Bu8;+41%5D%3E-for-PushBytesBuf"],[5682,"impl-From%3C%26%5Bu8;+61%5D%3E-for-PushBytesBuf"],[5684,"impl-From%3C%26%5Bu8;+0%5D%3E-for-PushBytesBuf"],[5685,"impl-From%3C%5Bu8;+72%5D%3E-for-PushBytesBuf"],[5686,"impl-From%3C%5Bu8;+8%5D%3E-for-PushBytesBuf"],[5687,"impl-From%3C%5Bu8;+22%5D%3E-for-PushBytesBuf"],[5688,"impl-From%3C%26%5Bu8;+40%5D%3E-for-PushBytesBuf"],[5689,"impl-From%3C%5Bu8;+35%5D%3E-for-PushBytesBuf"],[5690,"impl-From%3C%26%5Bu8;+4%5D%3E-for-PushBytesBuf"],[5691,"impl-From%3C%5Bu8;+3%5D%3E-for-PushBytesBuf"],[5692,"impl-From%3C%26%5Bu8;+43%5D%3E-for-PushBytesBuf"],[5693,"impl-From%3C%26%5Bu8;+19%5D%3E-for-PushBytesBuf"],[5694,"impl-From%3C%26%5Bu8;+5%5D%3E-for-PushBytesBuf"],[5695,"impl-From%3CScriptHash%3E-for-PushBytesBuf"],[5696,"impl-From%3C%26%5Bu8;+58%5D%3E-for-PushBytesBuf"],[5697,"impl-From%3C%5Bu8;+13%5D%3E-for-PushBytesBuf"],[5698,"impl-From%3C%5Bu8;+15%5D%3E-for-PushBytesBuf"],[5699,"impl-From%3C%26%5Bu8;+39%5D%3E-for-PushBytesBuf"],[5700,"impl-From%3C%26%5Bu8;+27%5D%3E-for-PushBytesBuf"],[5701,"impl-From%3C%26%5Bu8;+6%5D%3E-for-PushBytesBuf"],[5702,"impl-From%3C%5Bu8;+6%5D%3E-for-PushBytesBuf"],[5703,"impl-From%3C%26%5Bu8;+23%5D%3E-for-PushBytesBuf"],[5704,"impl-From%3C%5Bu8;+58%5D%3E-for-PushBytesBuf"],[5705,"impl-From%3C%5Bu8;+45%5D%3E-for-PushBytesBuf"],[5706,"impl-From%3C%26%5Bu8;+22%5D%3E-for-PushBytesBuf"],[5707,"impl-From%3C%26%5Bu8;+46%5D%3E-for-PushBytesBuf"],[5708,"impl-From%3C%26%5Bu8;+63%5D%3E-for-PushBytesBuf"],[5709,"impl-From%3CWScriptHash%3E-for-PushBytesBuf"],[5710,"impl-From%3C%5Bu8;+11%5D%3E-for-PushBytesBuf"],[5711,"impl-From%3C%26%5Bu8;+66%5D%3E-for-PushBytesBuf"],[5712,"impl-From%3C%5Bu8;+66%5D%3E-for-PushBytesBuf"],[5713,"impl-From%3C%5Bu8;+40%5D%3E-for-PushBytesBuf"],[5714,"impl-From%3C%26%5Bu8;+14%5D%3E-for-PushBytesBuf"],[5715,"impl-From%3C%26%5Bu8;+67%5D%3E-for-PushBytesBuf"],[5716,"impl-From%3C%5Bu8;+18%5D%3E-for-PushBytesBuf"],[5717,"impl-From%3C%5Bu8;+33%5D%3E-for-PushBytesBuf"],[5718,"impl-From%3C%26%5Bu8;+12%5D%3E-for-PushBytesBuf"],[5719,"impl-From%3C%5Bu8;+5%5D%3E-for-PushBytesBuf"],[5720,"impl-From%3C%5Bu8;+42%5D%3E-for-PushBytesBuf"],[5721,"impl-From%3C%26%5Bu8;+62%5D%3E-for-PushBytesBuf"],[5722,"impl-From%3C%5Bu8;+67%5D%3E-for-PushBytesBuf"],[5723,"impl-From%3C%26%5Bu8;+48%5D%3E-for-PushBytesBuf"],[5724,"impl-From%3C%5Bu8;+60%5D%3E-for-PushBytesBuf"],[5725,"impl-From%3C%26%5Bu8;+55%5D%3E-for-PushBytesBuf"],[5726,"impl-From%3C%26%5Bu8;+36%5D%3E-for-PushBytesBuf"],[5727,"impl-From%3C%26%5Bu8;+24%5D%3E-for-PushBytesBuf"],[5728,"impl-From%3C%26%5Bu8;+50%5D%3E-for-PushBytesBuf"],[5729,"impl-From%3C%26%5Bu8;+64%5D%3E-for-PushBytesBuf"],[5730,"impl-From%3C%5Bu8;+16%5D%3E-for-PushBytesBuf"],[5731,"impl-From%3C%26%5Bu8;+17%5D%3E-for-PushBytesBuf"],[5732,"impl-From%3C%26%5Bu8;+33%5D%3E-for-PushBytesBuf"],[5733,"impl-From%3C%5Bu8;+68%5D%3E-for-PushBytesBuf"],[5734,"impl-From%3C%5Bu8;+25%5D%3E-for-PushBytesBuf"],[5735,"impl-From%3C%26%5Bu8;+25%5D%3E-for-PushBytesBuf"],[5736,"impl-From%3C%26%5Bu8;+53%5D%3E-for-PushBytesBuf"],[5737,"impl-From%3C%5Bu8;+69%5D%3E-for-PushBytesBuf"],[5738,"impl-From%3C%5Bu8;+53%5D%3E-for-PushBytesBuf"],[5739,"impl-From%3C%26%5Bu8;+73%5D%3E-for-PushBytesBuf"],[5740,"impl-From%3C%5Bu8;+63%5D%3E-for-PushBytesBuf"],[5741,"impl-From%3C%26%5Bu8;+60%5D%3E-for-PushBytesBuf"],[5742,"impl-From%3C%26%5Bu8;+41%5D%3E-for-PushBytesBuf"],[5743,"impl-From%3C%26%5Bu8;+45%5D%3E-for-PushBytesBuf"],[5744,"impl-From%3C%26%5Bu8;+16%5D%3E-for-PushBytesBuf"],[5745,"impl-From%3C%26%5Bu8;+49%5D%3E-for-PushBytesBuf"],[5746,"impl-From%3C%26%5Bu8;+20%5D%3E-for-PushBytesBuf"],[5747,"impl-From%3C%5Bu8;+70%5D%3E-for-PushBytesBuf"],[5748,"impl-From%3C%5Bu8;+71%5D%3E-for-PushBytesBuf"],[5749,"impl-From%3C%26%5Bu8;+29%5D%3E-for-PushBytesBuf"],[5750,"impl-From%3C%5Bu8;+19%5D%3E-for-PushBytesBuf"],[5751,"impl-From%3C%26%5Bu8;+1%5D%3E-for-PushBytesBuf"],[5752,"impl-From%3C%26%5Bu8;+7%5D%3E-for-PushBytesBuf"],[5753,"impl-From%3C%26%5Bu8;+44%5D%3E-for-PushBytesBuf"],[5754,"impl-From%3C%26%5Bu8;+21%5D%3E-for-PushBytesBuf"],[5755,"impl-From%3C%5Bu8;+50%5D%3E-for-PushBytesBuf"],[5756,"impl-From%3C%5Bu8;+57%5D%3E-for-PushBytesBuf"],[5757,"impl-From%3C%5Bu8;+64%5D%3E-for-PushBytesBuf"],[5758,"impl-From%3C%5Bu8;+28%5D%3E-for-PushBytesBuf"],[5759,"impl-From%3C%5Bu8;+61%5D%3E-for-PushBytesBuf"],[5760,"impl-From%3C%26%5Bu8;+52%5D%3E-for-PushBytesBuf"],[5761,"impl-From%3C%5Bu8;+37%5D%3E-for-PushBytesBuf"],[5762,"impl-From%3C%5Bu8;+52%5D%3E-for-PushBytesBuf"],[5763,"impl-From%3C%26%5Bu8;+38%5D%3E-for-PushBytesBuf"],[5764,"impl-From%3C%5Bu8;+32%5D%3E-for-PushBytesBuf"],[5765,"impl-From%3C%5Bu8;+12%5D%3E-for-PushBytesBuf"],[5766,"impl-From%3C%5Bu8;+43%5D%3E-for-PushBytesBuf"],[5767,"impl-From%3C%26%5Bu8;+15%5D%3E-for-PushBytesBuf"],[5768,"impl-From%3C%26%5Bu8;+11%5D%3E-for-PushBytesBuf"],[5769,"impl-From%3C%26%5Bu8;+10%5D%3E-for-PushBytesBuf"],[5770,"impl-From%3C%5Bu8;+59%5D%3E-for-PushBytesBuf"],[5771,"impl-From%3C%5Bu8;+14%5D%3E-for-PushBytesBuf"],[5772,"impl-From%3C%26%5Bu8;+72%5D%3E-for-PushBytesBuf"],[5773,"impl-From%3C%26%5Bu8;+42%5D%3E-for-PushBytesBuf"],[5774,"impl-From%3C%5Bu8;+9%5D%3E-for-PushBytesBuf"],[5775,"impl-From%3C%26%5Bu8;+2%5D%3E-for-PushBytesBuf"],[5776,"impl-From%3C%5Bu8;+48%5D%3E-for-PushBytesBuf"],[5777,"impl-From%3C%5Bu8;+46%5D%3E-for-PushBytesBuf"],[5778,"impl-From%3C%5Bu8;+65%5D%3E-for-PushBytesBuf"],[5779,"impl-From%3C%5Bu8;+39%5D%3E-for-PushBytesBuf"],[5780,"impl-From%3C%5Bu8;+23%5D%3E-for-PushBytesBuf"],[5781,"impl-From%3C%5Bu8;+20%5D%3E-for-PushBytesBuf"],[5782,"impl-From%3C%26%5Bu8;+31%5D%3E-for-PushBytesBuf"],[5783,"impl-From%3C%26%5Bu8;+70%5D%3E-for-PushBytesBuf"],[5784,"impl-From%3C%26%5Bu8;+65%5D%3E-for-PushBytesBuf"],[5785,"impl-From%3C%5Bu8;+1%5D%3E-for-PushBytesBuf"],[5786,"impl-From%3C%5Bu8;+62%5D%3E-for-PushBytesBuf"],[5787,"impl-From%3C%26%5Bu8;+18%5D%3E-for-PushBytesBuf"],[5788,"impl-From%3C%26%5Bu8;+51%5D%3E-for-PushBytesBuf"],[5789,"impl-From%3C%5Bu8;+54%5D%3E-for-PushBytesBuf"],[5790,"impl-From%3C%26%5Bu8;+57%5D%3E-for-PushBytesBuf"],[5791,"impl-From%3C%5Bu8;+4%5D%3E-for-PushBytesBuf"],[5792,"impl-From%3C%5Bu8;+51%5D%3E-for-PushBytesBuf"],[5793,"impl-From%3C%26%5Bu8;+13%5D%3E-for-PushBytesBuf"],[5794,"impl-From%3C%5Bu8;+24%5D%3E-for-PushBytesBuf"],[5795,"impl-From%3C%26%5Bu8;+37%5D%3E-for-PushBytesBuf"],[5796,"impl-From%3C%26%5Bu8;+32%5D%3E-for-PushBytesBuf"],[5797,"impl-From%3C%5Bu8;+29%5D%3E-for-PushBytesBuf"],[5798,"impl-From%3C%5Bu8;+7%5D%3E-for-PushBytesBuf"],[5799,"impl-From%3C%5Bu8;+26%5D%3E-for-PushBytesBuf"],[5800,"impl-From%3C%5Bu8;+31%5D%3E-for-PushBytesBuf"],[5801,"impl-From%3C%26%5Bu8;+34%5D%3E-for-PushBytesBuf"],[5802,"impl-From%3C%5Bu8;+38%5D%3E-for-PushBytesBuf"],[5803,"impl-From%3C%26%5Bu8;+28%5D%3E-for-PushBytesBuf"],[5804,"impl-From%3C%26%5Bu8;+71%5D%3E-for-PushBytesBuf"],[5805,"impl-From%3C%26%5Bu8;+30%5D%3E-for-PushBytesBuf"],[5806,"impl-From%3C%5Bu8;+36%5D%3E-for-PushBytesBuf"],[5807,"impl-From%3C%5Bu8;+44%5D%3E-for-PushBytesBuf"],[5808,"impl-From%3C%26%5Bu8;+35%5D%3E-for-PushBytesBuf"],[5809,"impl-From%3C%5Bu8;+17%5D%3E-for-PushBytesBuf"],[5810,"impl-From%3C%5Bu8;+27%5D%3E-for-PushBytesBuf"],[5811,"impl-From%3C%5Bu8;+0%5D%3E-for-PushBytesBuf"],[5812,"impl-From%3C%26%5Bu8;+56%5D%3E-for-PushBytesBuf"],[5813,"impl-From%3C%26%5Bu8;+9%5D%3E-for-PushBytesBuf"],[5814,"impl-From%3C%5Bu8;+34%5D%3E-for-PushBytesBuf"],[5815,"impl-From%3C%5Bu8;+21%5D%3E-for-PushBytesBuf"],[5816,"impl-From%3CWPubkeyHash%3E-for-PushBytesBuf"],[5817,"impl-From%3C%5Bu8;+73%5D%3E-for-PushBytesBuf"],[5818,"impl-From%3C%5Bu8;+55%5D%3E-for-PushBytesBuf"],[5819,"impl-From%3C%5Bu8;+56%5D%3E-for-PushBytesBuf"],[5820,"impl-From%3C%26%5Bu8;+47%5D%3E-for-PushBytesBuf"],[5821,"impl-From%3C%5Bu8;+2%5D%3E-for-PushBytesBuf"],[5822,"impl-From%3CPubkeyHash%3E-for-PushBytesBuf"],[5823,"impl-From%3C%26%5Bu8;+54%5D%3E-for-PushBytesBuf"],[5824,"impl-From%3C%26%5Bu8;+69%5D%3E-for-PushBytesBuf"],[5825,"impl-From%3C%26%5Bu8;+3%5D%3E-for-PushBytesBuf"],[5826,"impl-From%3C%26%5Bu8;+8%5D%3E-for-PushBytesBuf"],[5827,"impl-From%3C%26%5Bu8;+68%5D%3E-for-PushBytesBuf"],[5828,"impl-From%3C%26%5Bu8;+26%5D%3E-for-PushBytesBuf"],[5829,"impl-From%3C%5Bu8;+47%5D%3E-for-PushBytesBuf"],[5830,"impl-From%3C%5Bu8;+10%5D%3E-for-PushBytesBuf"],[5831,"impl-From%3C%5Bu8;+49%5D%3E-for-PushBytesBuf"],[5832,"impl-From%3C%26%5Bu8;+59%5D%3E-for-PushBytesBuf"],[5834,"impl-From%3CInfallible%3E-for-Error"],[5835,"impl-From%3CUintError%3E-for-Error"],[5839,"impl-Index%3C(Bound%3Cusize%3E,+Bound%3Cusize%3E)%3E-for-PushBytes"],[5840,"impl-Index%3Cusize%3E-for-PushBytes"],[5841,"impl-Index%3CRangeFull%3E-for-PushBytes"],[5842,"impl-Index%3CRangeToInclusive%3Cusize%3E%3E-for-PushBytes"],[5843,"impl-Index%3CRangeTo%3Cusize%3E%3E-for-PushBytes"],[5844,"impl-Index%3CRangeFrom%3Cusize%3E%3E-for-PushBytes"],[5845,"impl-Index%3CRangeInclusive%3Cusize%3E%3E-for-PushBytes"],[5846,"impl-Index%3CRange%3Cusize%3E%3E-for-PushBytes"],[5925,"impl-TryFrom%3C%26mut+%5Bu8%5D%3E-for-%26mut+PushBytes"],[5926,"impl-TryFrom%3C%26%5Bu8%5D%3E-for-%26PushBytes"],[5973,"impl-Display-for-Error"],[5974,"impl-Debug-for-Error"],[6031,"impl-Debug-for-FromStrError"],[6032,"impl-Display-for-FromStrError"],[6033,"impl-Display-for-TryFromInstructionError"],[6034,"impl-Debug-for-TryFromInstructionError"],[6035,"impl-Debug-for-TryFromError"],[6036,"impl-Display-for-TryFromError"],[6038,"impl-From%3CTryFromError%3E-for-FromStrError"],[6039,"impl-From%3CInfallible%3E-for-FromStrError"],[6040,"impl-From%3CParseIntError%3E-for-FromStrError"],[6042,"impl-From%3CTryFromError%3E-for-TryFromInstructionError"],[6043,"impl-From%3CInfallible%3E-for-TryFromInstructionError"],[6138,"impl-Debug-for-ParseOutPointError"],[6139,"impl-Display-for-ParseOutPointError"],[6140,"impl-Display-for-InputsIndexError"],[6141,"impl-Debug-for-InputsIndexError"],[6142,"impl-Debug-for-OutputsIndexError"],[6143,"impl-Display-for-OutputsIndexError"],[6144,"impl-Debug-for-IndexOutOfBoundsError"],[6145,"impl-Display-for-IndexOutOfBoundsError"],[6146,"impl-Display-for-Version"],[6147,"impl-Debug-for-Version"],[6290,"impl-Display-for-DecodeError%3CE%3E"],[6291,"impl-Debug-for-DecodeError%3CE%3E"],[6292,"impl-From%3C%26Network%3E-for-%26Params"],[6294,"impl-From%3CNetwork%3E-for-%26Params"],[6295,"impl-From%3CNetwork%3E-for-Params"],[6296,"impl-From%3C%26Network%3E-for-Params"],[6383,"impl-Debug-for-Error"],[6384,"impl-Display-for-Error"],[6385,"impl-Debug-for-FromHexError"],[6386,"impl-Display-for-FromHexError"],[6389,"impl-From%3CInfallible%3E-for-Error"],[6390,"impl-From%3CError%3E-for-Error"],[6571,"impl-AsRef%3CPushBytes%3E-for-SerializedSignature"],[6572,"impl-AsRef%3C%5Bu8%5D%3E-for-SerializedSignature"],[6599,"impl-Debug-for-Signature"],[6600,"impl-Display-for-Signature"],[6601,"impl-LowerHex-for-SerializedSignature"],[6602,"impl-Display-for-SerializedSignature"],[6603,"impl-Debug-for-SerializedSignature"],[6604,"impl-UpperHex-for-SerializedSignature"],[6605,"impl-Debug-for-Error"],[6606,"impl-Display-for-Error"],[6609,"impl-From%3CError%3E-for-Error"],[6611,"impl-From%3CHexToBytesError%3E-for-Error"],[6612,"impl-From%3CInfallible%3E-for-Error"],[6613,"impl-From%3CNonStandardSighashTypeError%3E-for-Error"],[6623,"impl-Serialize-for-Signature"],[6624,"impl-Signature"],[6687,"impl-Debug-for-PrefixedHexError"],[6688,"impl-Display-for-PrefixedHexError"],[6689,"impl-Debug-for-UnprefixedHexError"],[6690,"impl-Display-for-UnprefixedHexError"],[6691,"impl-Debug-for-MissingPrefixError"],[6692,"impl-Display-for-MissingPrefixError"],[6693,"impl-Debug-for-ContainsPrefixError"],[6694,"impl-Display-for-ContainsPrefixError"],[6695,"impl-From%3CMissingPrefixError%3E-for-PrefixedHexError"],[6696,"impl-From%3CParseIntError%3E-for-PrefixedHexError"],[6698,"impl-From%3CContainsPrefixError%3E-for-UnprefixedHexError"],[6699,"impl-From%3CParseIntError%3E-for-UnprefixedHexError"],[6786,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::hash160::%7Bimpl%2311%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[6787,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[6799,"impl-Display-for-Hash"],[6800,"impl-Debug-for-Hash"],[6801,"impl-LowerHex-for-Hash"],[6802,"impl-UpperHex-for-Hash"],[6803,"impl-From%3CScriptHash%3E-for-Hash"],[6805,"impl-From%3CWPubkeyHash%3E-for-Hash"],[6806,"impl-From%3CPubkeyHash%3E-for-Hash"],[6807,"impl-From%3CXKeyIdentifier%3E-for-Hash"],[6891,"impl-Display-for-HexToBytesError"],[6892,"impl-Debug-for-HexToBytesError"],[6893,"impl-Debug-for-InvalidCharError"],[6894,"impl-Display-for-InvalidCharError"],[6895,"impl-Display-for-OddLengthStringError"],[6896,"impl-Debug-for-OddLengthStringError"],[6897,"impl-Display-for-HexToArrayError"],[6898,"impl-Debug-for-HexToArrayError"],[6903,"impl-From%3CInvalidCharError%3E-for-HexToBytesError"],[6904,"impl-From%3COddLengthStringError%3E-for-HexToBytesError"],[6908,"impl-From%3CInvalidLengthError%3E-for-HexToArrayError"],[6910,"impl-From%3CInvalidCharError%3E-for-HexToArrayError"],[7020,"impl-UpperHex-for-DisplayByteSlice%3C\'a%3E"],[7021,"impl-Display-for-DisplayByteSlice%3C\'a%3E"],[7022,"impl-LowerHex-for-DisplayByteSlice%3C\'a%3E"],[7023,"impl-Debug-for-DisplayByteSlice%3C\'a%3E"],[7024,"impl-LowerHex-for-DisplayArray%3C\'a,+LEN%3E"],[7025,"impl-Debug-for-DisplayArray%3C\'a,+LEN%3E"],[7026,"impl-Display-for-DisplayArray%3C\'a,+LEN%3E"],[7027,"impl-UpperHex-for-DisplayArray%3C\'a,+LEN%3E"],[7065,"impl-Display-for-InvalidLengthError"],[7066,"impl-Debug-for-InvalidLengthError"],[7114,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[7115,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::ripemd160::%7Bimpl%2314%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[7142,"impl-Write-for-HashEngine"],[7143,"impl-Write-for-HashEngine"],[7144,"impl-LowerHex-for-Hash"],[7145,"impl-UpperHex-for-Hash"],[7146,"impl-Debug-for-Hash"],[7147,"impl-Display-for-Hash"],[7179,"impl-Write-for-HashEngine"],[7180,"impl-Write-for-HashEngine"],[7365,"impl-Display-for-Unexpected%3C\'a%3E"],[7366,"impl-Debug-for-Unexpected%3C\'a%3E"],[7597,"impl-Error-for-Error"],[7598,"impl-Error-for-Error"],[8480,"impl-Debug-for-Error"],[8481,"impl-Display-for-Error"],[8592,"impl-SeqAccess%3C\'de%3E-for-MapDeserializer%3C\'de,+I,+E%3E"],[8593,"impl-MapAccess%3C\'de%3E-for-MapDeserializer%3C\'de,+I,+E%3E"],[8790,"impl-dyn+Error"],[8791,"impl-dyn+Error+%2B+Send"],[8792,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8793,"impl-dyn+Error"],[8794,"impl-dyn+Error+%2B+Send"],[8795,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8796,"impl-dyn+Error+%2B+Send"],[8797,"impl-dyn+Error"],[8798,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8806,"impl-SerializeTupleStruct-for-Impossible%3COk,+Error%3E"],[8807,"impl-SerializeMap-for-Impossible%3COk,+Error%3E"],[8808,"impl-SerializeSeq-for-Impossible%3COk,+Error%3E"],[8809,"impl-SerializeTuple-for-Impossible%3COk,+Error%3E"],[8810,"impl-SerializeStructVariant-for-Impossible%3COk,+Error%3E"],[8811,"impl-SerializeStruct-for-Impossible%3COk,+Error%3E"],[8812,"impl-SerializeTupleVariant-for-Impossible%3COk,+Error%3E"],[8815,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8816,"impl-dyn+Error+%2B+Send"],[8817,"impl-dyn+Error"],[8826,"impl-SerializeTuple-for-Impossible%3COk,+Error%3E"],[8827,"impl-SerializeSeq-for-Impossible%3COk,+Error%3E"],[8835,"impl-SerializeTupleVariant-for-Impossible%3COk,+Error%3E"],[8836,"impl-SerializeStructVariant-for-Impossible%3COk,+Error%3E"],[8837,"impl-SerializeStruct-for-Impossible%3COk,+Error%3E"],[8838,"impl-SerializeTupleStruct-for-Impossible%3COk,+Error%3E"],[8886,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha1::%7Bimpl%2314%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[8887,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[8914,"impl-Write-for-HashEngine"],[8915,"impl-Write-for-HashEngine"],[8916,"impl-UpperHex-for-Hash"],[8917,"impl-Display-for-Hash"],[8918,"impl-Debug-for-Hash"],[8919,"impl-LowerHex-for-Hash"],[8950,"impl-Write-for-HashEngine"],[8951,"impl-Write-for-HashEngine"],[8957,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha256::%7Bimpl%2320%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[8958,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9000,"impl-Write-for-HashEngine"],[9001,"impl-Write-for-HashEngine"],[9002,"impl-UpperHex-for-Hash"],[9003,"impl-LowerHex-for-Hash"],[9004,"impl-Debug-for-Hash"],[9005,"impl-Display-for-Hash"],[9006,"impl-Debug-for-Midstate"],[9007,"impl-UpperHex-for-Midstate"],[9008,"impl-Display-for-Midstate"],[9009,"impl-LowerHex-for-Midstate"],[9011,"impl-From%3CDescriptorId%3E-for-Hash"],[9012,"impl-From%3CWScriptHash%3E-for-Hash"],[9064,"impl-Write-for-HashEngine"],[9065,"impl-Write-for-HashEngine"],[9069,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha256d::%7Bimpl%2311%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9070,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9084,"impl-LowerHex-for-Hash"],[9085,"impl-UpperHex-for-Hash"],[9086,"impl-Display-for-Hash"],[9087,"impl-Debug-for-Hash"],[9088,"impl-From%3CBlockHash%3E-for-Hash"],[9089,"impl-From%3CTxid%3E-for-Hash"],[9090,"impl-From%3CTxMerkleNode%3E-for-Hash"],[9091,"impl-From%3CWitnessMerkleNode%3E-for-Hash"],[9092,"impl-From%3CFilterHash%3E-for-Hash"],[9093,"impl-From%3CSegwitV0Sighash%3E-for-Hash"],[9094,"impl-From%3CFilterHeader%3E-for-Hash"],[9095,"impl-From%3CWtxid%3E-for-Hash"],[9097,"impl-From%3CLegacySighash%3E-for-Hash"],[9098,"impl-From%3CWitnessCommitment%3E-for-Hash"],[9099,"impl-From%3CHash%3E-for-Hash"],[9123,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash%3CT%3E"],[9124,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha256t::%7Bimpl%2311%7D::%7Bconstant%230%7D%5D%3E-for-Hash%3CT%3E"],[9138,"impl-UpperHex-for-Hash%3CT%3E"],[9139,"impl-Debug-for-Hash%3CT%3E"],[9140,"impl-Display-for-Hash%3CT%3E"],[9141,"impl-LowerHex-for-Hash%3CT%3E"],[9142,"impl-From%3CTapSighash%3E-for-Hash%3CTapSighashTag%3E"],[9144,"impl-From%3CTapTweakHash%3E-for-Hash%3CTapTweakTag%3E"],[9145,"impl-From%3CTapNodeHash%3E-for-Hash%3CTapBranchTag%3E"],[9146,"impl-From%3CTapLeafHash%3E-for-Hash%3CTapLeafTag%3E"],[9170,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha384::%7Bimpl%2313%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9171,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9188,"impl-UpperHex-for-Hash"],[9189,"impl-LowerHex-for-Hash"],[9190,"impl-Display-for-Hash"],[9191,"impl-Debug-for-Hash"],[9226,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9227,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha512::%7Bimpl%2315%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9254,"impl-Write-for-HashEngine"],[9255,"impl-Write-for-HashEngine"],[9256,"impl-UpperHex-for-Hash"],[9257,"impl-LowerHex-for-Hash"],[9258,"impl-Debug-for-Hash"],[9259,"impl-Display-for-Hash"],[9290,"impl-Write-for-HashEngine"],[9291,"impl-Write-for-HashEngine"],[9296,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9297,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha512_256::%7Bimpl%2313%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9314,"impl-Debug-for-Hash"],[9315,"impl-UpperHex-for-Hash"],[9316,"impl-Display-for-Hash"],[9317,"impl-LowerHex-for-Hash"],[9353,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9354,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::siphash24::%7Bimpl%2315%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9386,"impl-Write-for-HashEngine"],[9387,"impl-Write-for-HashEngine"],[9388,"impl-LowerHex-for-Hash"],[9389,"impl-Debug-for-Hash"],[9390,"impl-UpperHex-for-Hash"],[9391,"impl-Display-for-Hash"],[9438,"impl-Write-for-HashEngine"],[9439,"impl-Write-for-HashEngine"],[9503,"impl-Write-for-Sink"],[9504,"impl-Write-for-Sink"],[9505,"impl-Display-for-Error"],[9506,"impl-Debug-for-Error"],[9512,"impl-From%3CError%3E-for-Error"],[9513,"impl-From%3CErrorKind%3E-for-Error"],[9581,"impl-Write-for-Sink"],[9582,"impl-Write-for-Sink"],[9584,"impl-Write-for-Sink"],[9585,"impl-Write-for-Sink"],[9747,"impl-Display-for-TweakedPublicKey"],[9748,"impl-LowerHex-for-TweakedPublicKey"],[9749,"impl-Debug-for-TweakedPublicKey"],[9751,"impl-Display-for-FromSliceError"],[9752,"impl-Debug-for-FromSliceError"],[9753,"impl-Debug-for-FromWifError"],[9754,"impl-Display-for-FromWifError"],[9755,"impl-Debug-for-ParsePublicKeyError"],[9756,"impl-Display-for-ParsePublicKeyError"],[9757,"impl-Display-for-ParseCompressedPublicKeyError"],[9758,"impl-Debug-for-ParseCompressedPublicKeyError"],[9759,"impl-Display-for-UncompressedPublicKeyError"],[9760,"impl-Debug-for-UncompressedPublicKeyError"],[9761,"impl-Debug-for-InvalidBase58PayloadLengthError"],[9762,"impl-Display-for-InvalidBase58PayloadLengthError"],[9763,"impl-Debug-for-InvalidAddressVersionError"],[9764,"impl-Display-for-InvalidAddressVersionError"],[9774,"impl-From%3CError%3E-for-FromSliceError"],[9775,"impl-From%3CInfallible%3E-for-FromSliceError"],[9776,"impl-From%3CInvalidBase58PayloadLengthError%3E-for-FromWifError"],[9777,"impl-From%3CError%3E-for-FromWifError"],[9778,"impl-From%3CInvalidAddressVersionError%3E-for-FromWifError"],[9780,"impl-From%3CInfallible%3E-for-FromWifError"],[9781,"impl-From%3CError%3E-for-FromWifError"],[9783,"impl-From%3CFromSliceError%3E-for-ParsePublicKeyError"],[9784,"impl-From%3CInfallible%3E-for-ParsePublicKeyError"],[9785,"impl-From%3CHexToArrayError%3E-for-ParseCompressedPublicKeyError"],[9786,"impl-From%3CInfallible%3E-for-ParseCompressedPublicKeyError"],[9788,"impl-From%3CError%3E-for-ParseCompressedPublicKeyError"],[9852,"impl-TweakedPublicKey"],[9853,"impl-Serialize-for-TweakedPublicKey"],[9901,"impl-TryFrom%3Cu8%3E-for-Parity"],[9902,"impl-TryFrom%3Ci32%3E-for-Parity"],[9990,"impl-Debug-for-MerkleBlockError"],[9991,"impl-Display-for-MerkleBlockError"],[10039,"impl-Debug-for-ParseNetworkError"],[10040,"impl-Display-for-ParseNetworkError"],[10041,"impl-Display-for-UnknownChainHashError"],[10042,"impl-Debug-for-UnknownChainHashError"],[10084,"impl-AsMut%3C%5Bu8;+4%5D%3E-for-Magic"],[10085,"impl-AsMut%3C%5Bu8%5D%3E-for-Magic"],[10086,"impl-AsRef%3C%5Bu8;+4%5D%3E-for-Magic"],[10087,"impl-AsRef%3C%5Bu8%5D%3E-for-Magic"],[10095,"impl-Borrow%3C%5Bu8%5D%3E-for-Magic"],[10096,"impl-Borrow%3C%5Bu8;+4%5D%3E-for-Magic"],[10102,"impl-BorrowMut%3C%5Bu8;+4%5D%3E-for-Magic"],[10103,"impl-BorrowMut%3C%5Bu8%5D%3E-for-Magic"],[10141,"impl-UpperHex-for-ServiceFlags"],[10142,"impl-Display-for-ServiceFlags"],[10143,"impl-Debug-for-ServiceFlags"],[10144,"impl-LowerHex-for-ServiceFlags"],[10145,"impl-Debug-for-Magic"],[10146,"impl-LowerHex-for-Magic"],[10147,"impl-Display-for-Magic"],[10148,"impl-UpperHex-for-Magic"],[10149,"impl-Debug-for-ParseMagicError"],[10150,"impl-Display-for-ParseMagicError"],[10151,"impl-Debug-for-UnknownMagicError"],[10152,"impl-Display-for-UnknownMagicError"],[10356,"impl-Display-for-CommandString"],[10357,"impl-Debug-for-CommandString"],[10358,"impl-Debug-for-CommandStringError"],[10359,"impl-Display-for-CommandStringError"],[10381,"impl-TryFrom%3C%26str%3E-for-CommandString"],[10383,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-CommandString"],[10384,"impl-TryFrom%3CString%3E-for-CommandString"],[10857,"impl-Debug-for-ParseIntError"],[10858,"impl-Display-for-ParseIntError"],[11067,"impl-Debug-for-Error"],[11068,"impl-Display-for-Error"],[11072,"impl-Display-for-GetKeyError"],[11073,"impl-Debug-for-GetKeyError"],[11076,"impl-Display-for-SignError"],[11077,"impl-Debug-for-SignError"],[11078,"impl-Debug-for-ExtractTxError"],[11079,"impl-Display-for-ExtractTxError"],[11080,"impl-Display-for-IndexOutOfBoundsError"],[11081,"impl-Debug-for-IndexOutOfBoundsError"],[11082,"impl-Debug-for-PsbtParseError"],[11083,"impl-Display-for-PsbtParseError"],[11084,"impl-Debug-for-PsbtSighashType"],[11085,"impl-Display-for-PsbtSighashType"],[11088,"impl-From%3CInfallible%3E-for-Error"],[11089,"impl-From%3CError%3E-for-Error"],[11090,"impl-From%3CFromSliceError%3E-for-Error"],[11091,"impl-From%3CError%3E-for-Error"],[11096,"impl-From%3CInfallible%3E-for-GetKeyError"],[11097,"impl-From%3CError%3E-for-GetKeyError"],[11100,"impl-From%3CTaprootError%3E-for-SignError"],[11102,"impl-From%3CIndexOutOfBoundsError%3E-for-SignError"],[11103,"impl-From%3CInfallible%3E-for-SignError"],[11104,"impl-From%3CP2wpkhError%3E-for-SignError"],[11111,"impl-From%3CTapSighashType%3E-for-PsbtSighashType"],[11113,"impl-From%3CEcdsaSighashType%3E-for-PsbtSighashType"],[11304,"impl-Display-for-Key"],[11305,"impl-Debug-for-Key"],[11515,"impl-LowerHex-for-PublicKey"],[11516,"impl-Debug-for-PublicKey"],[11517,"impl-Display-for-PublicKey"],[11518,"impl-Display-for-InvalidParityValue"],[11519,"impl-Debug-for-InvalidParityValue"],[11521,"impl-LowerHex-for-Message"],[11522,"impl-Display-for-Message"],[11523,"impl-Debug-for-Message"],[11524,"impl-Display-for-Error"],[11525,"impl-Debug-for-Error"],[11532,"impl-From%3CKeypair%3E-for-SecretKey"],[11533,"impl-From%3C%26Keypair%3E-for-SecretKey"],[11535,"impl-From%3CT%3E-for-SecretKey"],[11536,"impl-From%3C%26Keypair%3E-for-PublicKey"],[11538,"impl-From%3CPublicKey%3E-for-PublicKey"],[11539,"impl-From%3CKeypair%3E-for-PublicKey"],[11543,"impl-From%3CLegacySighash%3E-for-Message"],[11544,"impl-From%3CSegwitV0Sighash%3E-for-Message"],[11545,"impl-From%3CT%3E-for-Message"],[11547,"impl-From%3CTapSighash%3E-for-Message"],[11619,"impl-Serialize-for-PublicKey"],[11620,"impl-PublicKey"],[11784,"impl-PartialEq-for-SerializedSignature"],[11785,"impl-PartialEq%3C%5Bu8%5D%3E-for-SerializedSignature"],[11798,"impl-Display-for-SerializedSignature"],[11799,"impl-Debug-for-SerializedSignature"],[11800,"impl-Display-for-Signature"],[11801,"impl-Debug-for-Signature"],[11806,"impl-From%3CSignature%3E-for-SerializedSignature"],[11807,"impl-From%3C%26Signature%3E-for-SerializedSignature"],[11824,"impl-IntoIterator-for-%26SerializedSignature"],[11825,"impl-IntoIterator-for-SerializedSignature"],[11831,"impl-PartialOrd%3C%5Bu8%5D%3E-for-SerializedSignature"],[11832,"impl-PartialOrd-for-SerializedSignature"],[11852,"impl-TryFrom%3C%26SerializedSignature%3E-for-Signature"],[11853,"impl-TryFrom%3CSerializedSignature%3E-for-Signature"],[11920,"impl-LowerHex-for-ElligatorSwift"],[11921,"impl-Display-for-ElligatorSwift"],[11922,"impl-Debug-for-ElligatorSwift"],[12321,"impl-Write-for-HmacEngine%3CT%3E"],[12322,"impl-Write-for-HmacEngine%3CT%3E"],[12323,"impl-Display-for-FromSliceError"],[12324,"impl-Debug-for-FromSliceError"],[12325,"impl-Debug-for-Hmac%3CT%3E"],[12326,"impl-Display-for-Hmac%3CT%3E"],[12327,"impl-LowerHex-for-Hmac%3CT%3E"],[12344,"impl-Index%3CRangeFull%3E-for-Hmac%3CT%3E"],[12345,"impl-Index%3CRange%3Cusize%3E%3E-for-Hmac%3CT%3E"],[12346,"impl-Index%3CRangeTo%3Cusize%3E%3E-for-Hmac%3CT%3E"],[12347,"impl-Index%3Cusize%3E-for-Hmac%3CT%3E"],[12348,"impl-Index%3CRangeFrom%3Cusize%3E%3E-for-Hmac%3CT%3E"],[12383,"impl-Write-for-HmacEngine%3CT%3E"],[12384,"impl-Write-for-HmacEngine%3CT%3E"],[12400,"impl-Display-for-Error"],[12401,"impl-Debug-for-Error"],[12403,"impl-From%3CNonZero%3Cu32%3E%3E-for-Error"],[12404,"impl-From%3CError%3E-for-Error"],[12515,"impl-Debug-for-BernoulliError"],[12516,"impl-Display-for-BernoulliError"],[12524,"impl-Debug-for-WeightedError"],[12525,"impl-Display-for-WeightedError"],[12538,"impl-From%3CRange%3CX%3E%3E-for-Uniform%3CX%3E"],[12540,"impl-From%3CRangeInclusive%3CX%3E%3E-for-Uniform%3CX%3E"],[12567,"impl-Distribution%3Cf32%3E-for-OpenClosed01"],[12568,"impl-Distribution%3Cf64%3E-for-OpenClosed01"],[12569,"impl-Distribution%3Cf32%3E-for-Open01"],[12570,"impl-Distribution%3Cf64%3E-for-Open01"],[12575,"impl-Distribution%3CWrapping%3CT%3E%3E-for-Standard"],[12576,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2351%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12577,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2345%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12578,"impl-Distribution%3Cchar%3E-for-Standard"],[12579,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2334%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12580,"impl-Distribution%3Cu32%3E-for-Standard"],[12581,"impl-Distribution%3Ci32%3E-for-Standard"],[12582,"impl-Distribution%3Cbool%3E-for-Standard"],[12583,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2337%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12584,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2336%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12585,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2335%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12586,"impl-Distribution%3Ci8%3E-for-Standard"],[12587,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2324%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12588,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E-for-Standard"],[12589,"impl-Distribution%3CNonZero%3Cu128%3E%3E-for-Standard"],[12590,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2340%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12591,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E-for-Standard"],[12592,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2353%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12593,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2346%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12594,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2348%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12595,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2342%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12596,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2333%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12597,"impl-Distribution%3Cu8%3E-for-Standard"],[12598,"impl-Distribution%3C(A,)%3E-for-Standard"],[12599,"impl-Distribution%3Ci64%3E-for-Standard"],[12600,"impl-Distribution%3C(A,+B,+C,+D,+E)%3E-for-Standard"],[12601,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E-for-Standard"],[12602,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E-for-Standard"],[12603,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2327%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12604,"impl-Distribution%3Cf32%3E-for-Standard"],[12605,"impl-Distribution%3C(A,+B,+C)%3E-for-Standard"],[12606,"impl-Distribution%3Cf64%3E-for-Standard"],[12607,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H)%3E-for-Standard"],[12608,"impl-Distribution%3Ci128%3E-for-Standard"],[12609,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2329%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12610,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2326%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12611,"impl-Distribution%3C(A,+B)%3E-for-Standard"],[12612,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2338%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12613,"impl-Distribution%3Cu16%3E-for-Standard"],[12614,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2347%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12615,"impl-Distribution%3C(A,+B,+C,+D)%3E-for-Standard"],[12616,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2352%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12617,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G)%3E-for-Standard"],[12618,"impl-Distribution%3CNonZero%3Cu16%3E%3E-for-Standard"],[12619,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2339%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12620,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2355%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12621,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2328%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12622,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2325%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12623,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2331%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12624,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2354%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12625,"impl-Distribution%3CNonZero%3Cu8%3E%3E-for-Standard"],[12626,"impl-Distribution%3Cu64%3E-for-Standard"],[12627,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2341%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12628,"impl-Distribution%3Ci16%3E-for-Standard"],[12629,"impl-Distribution%3Cu128%3E-for-Standard"],[12630,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2349%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12631,"impl-Distribution%3CNonZero%3Cusize%3E%3E-for-Standard"],[12632,"impl-Distribution%3CNonZero%3Cu32%3E%3E-for-Standard"],[12633,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2330%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12634,"impl-Distribution%3Cisize%3E-for-Standard"],[12635,"impl-Distribution%3C()%3E-for-Standard"],[12636,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2344%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12637,"impl-Distribution%3C%5BT;+32%5D%3E-for-Standard"],[12638,"impl-Distribution%3CNonZero%3Cu64%3E%3E-for-Standard"],[12639,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2332%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12640,"impl-Distribution%3COption%3CT%3E%3E-for-Standard"],[12641,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2343%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12642,"impl-Distribution%3Cusize%3E-for-Standard"],[12643,"impl-Distribution%3C(A,+B,+C,+D,+E,+F)%3E-for-Standard"],[12644,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2350%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12756,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12757,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12758,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12759,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12760,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12761,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12762,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12763,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12764,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12765,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12766,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12767,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12769,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12770,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12773,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12774,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12775,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12776,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12777,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12778,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12779,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12780,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12781,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12782,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12783,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12784,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12786,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12787,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12790,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12791,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12792,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12793,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12794,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12795,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12796,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12797,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12798,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12799,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12800,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12801,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12803,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12804,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12808,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12809,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12810,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12811,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12812,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12813,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12814,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12815,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12816,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12817,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12818,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12819,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12820,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12821,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12823,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12824,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12825,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12826,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12827,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12828,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12829,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12830,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12831,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12832,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12833,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12834,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12996,"impl-Debug-for-ReadError"],[12997,"impl-Display-for-ReadError"],[13099,"impl-From%3CVec%3Cu32%3E%3E-for-IndexVec"],[13100,"impl-From%3CVec%3Cusize%3E%3E-for-IndexVec"],[13148,"impl-Display-for-OutOfRangeError"],[13149,"impl-Debug-for-OutOfRangeError"],[13172,"impl-Debug-for-Signature"],[13173,"impl-LowerHex-for-Signature"],[13174,"impl-Display-for-Signature"],[13182,"impl-Signature"],[13183,"impl-Serialize-for-Signature"],[13347,"impl-Display-for-PrevoutsSizeError"],[13348,"impl-Debug-for-PrevoutsSizeError"],[13349,"impl-Display-for-PrevoutsKindError"],[13350,"impl-Debug-for-PrevoutsKindError"],[13351,"impl-Display-for-PrevoutsIndexError"],[13352,"impl-Debug-for-PrevoutsIndexError"],[13353,"impl-Debug-for-InvalidSighashTypeError"],[13354,"impl-Display-for-InvalidSighashTypeError"],[13355,"impl-Debug-for-NonStandardSighashTypeError"],[13356,"impl-Display-for-NonStandardSighashTypeError"],[13357,"impl-Display-for-SighashTypeParseError"],[13358,"impl-Debug-for-SighashTypeParseError"],[13360,"impl-Debug-for-TaprootError"],[13361,"impl-Display-for-TaprootError"],[13362,"impl-Display-for-P2wpkhError"],[13363,"impl-Debug-for-P2wpkhError"],[13364,"impl-Display-for-SingleMissingOutputError"],[13365,"impl-Debug-for-SingleMissingOutputError"],[13366,"impl-Debug-for-AnnexError"],[13367,"impl-Display-for-AnnexError"],[13368,"impl-Display-for-SigningDataError%3CE%3E"],[13369,"impl-Debug-for-SigningDataError%3CE%3E"],[13382,"impl-From%3CInputsIndexError%3E-for-TaprootError"],[13383,"impl-From%3CInfallible%3E-for-TaprootError"],[13384,"impl-From%3CPrevoutsSizeError%3E-for-TaprootError"],[13386,"impl-From%3CPrevoutsKindError%3E-for-TaprootError"],[13387,"impl-From%3CPrevoutsIndexError%3E-for-TaprootError"],[13389,"impl-From%3CInputsIndexError%3E-for-P2wpkhError"],[13390,"impl-From%3CInfallible%3E-for-P2wpkhError"],[13395,"impl-From%3CInfallible%3E-for-SigningDataError%3CE%3E"],[13396,"impl-From%3CError%3E-for-SigningDataError%3CE%3E"],[13561,"impl-Display-for-MessageSignatureError"],[13562,"impl-Debug-for-MessageSignatureError"],[13563,"impl-Display-for-MessageSignature"],[13564,"impl-Debug-for-MessageSignature"],[13565,"impl-From%3CError%3E-for-MessageSignatureError"],[13566,"impl-From%3CInfallible%3E-for-MessageSignatureError"],[13812,"impl-Debug-for-SigFromSliceError"],[13813,"impl-Display-for-SigFromSliceError"],[13817,"impl-Debug-for-IncompleteBuilderError"],[13818,"impl-Display-for-IncompleteBuilderError"],[13819,"impl-Debug-for-HiddenNodesError"],[13820,"impl-Display-for-HiddenNodesError"],[13827,"impl-LowerHex-for-FutureLeafVersion"],[13828,"impl-Debug-for-FutureLeafVersion"],[13829,"impl-Display-for-FutureLeafVersion"],[13830,"impl-UpperHex-for-FutureLeafVersion"],[13831,"impl-UpperHex-for-LeafVersion"],[13832,"impl-Debug-for-LeafVersion"],[13833,"impl-Display-for-LeafVersion"],[13834,"impl-LowerHex-for-LeafVersion"],[13835,"impl-Display-for-TaprootBuilderError"],[13836,"impl-Debug-for-TaprootBuilderError"],[13837,"impl-Debug-for-TaprootError"],[13838,"impl-Display-for-TaprootError"],[13842,"impl-From%3CInvalidSighashTypeError%3E-for-SigFromSliceError"],[13843,"impl-From%3CError%3E-for-SigFromSliceError"],[13844,"impl-From%3CInfallible%3E-for-SigFromSliceError"],[13846,"impl-From%3C%5BTapNodeHash;+9%5D%3E-for-TaprootMerkleBranch"],[13847,"impl-From%3C%5BTapNodeHash;+33%5D%3E-for-TaprootMerkleBranch"],[13848,"impl-From%3C%5BTapNodeHash;+72%5D%3E-for-TaprootMerkleBranch"],[13849,"impl-From%3C%5BTapNodeHash;+35%5D%3E-for-TaprootMerkleBranch"],[13850,"impl-From%3C%5BTapNodeHash;+57%5D%3E-for-TaprootMerkleBranch"],[13851,"impl-From%3C%5BTapNodeHash;+48%5D%3E-for-TaprootMerkleBranch"],[13852,"impl-From%3C%5BTapNodeHash;+34%5D%3E-for-TaprootMerkleBranch"],[13853,"impl-From%3C%5BTapNodeHash;+102%5D%3E-for-TaprootMerkleBranch"],[13854,"impl-From%3C%5BTapNodeHash;+105%5D%3E-for-TaprootMerkleBranch"],[13855,"impl-From%3C%5BTapNodeHash;+49%5D%3E-for-TaprootMerkleBranch"],[13856,"impl-From%3C%5BTapNodeHash;+46%5D%3E-for-TaprootMerkleBranch"],[13857,"impl-From%3C%5BTapNodeHash;+40%5D%3E-for-TaprootMerkleBranch"],[13858,"impl-From%3C%5BTapNodeHash;+98%5D%3E-for-TaprootMerkleBranch"],[13859,"impl-From%3C%5BTapNodeHash;+6%5D%3E-for-TaprootMerkleBranch"],[13860,"impl-From%3C%5BTapNodeHash;+60%5D%3E-for-TaprootMerkleBranch"],[13861,"impl-From%3C%5BTapNodeHash;+38%5D%3E-for-TaprootMerkleBranch"],[13862,"impl-From%3C%5BTapNodeHash;+27%5D%3E-for-TaprootMerkleBranch"],[13863,"impl-From%3C%5BTapNodeHash;+120%5D%3E-for-TaprootMerkleBranch"],[13864,"impl-From%3C%5BTapNodeHash;+58%5D%3E-for-TaprootMerkleBranch"],[13865,"impl-From%3C%5BTapNodeHash;+80%5D%3E-for-TaprootMerkleBranch"],[13866,"impl-From%3C%5BTapNodeHash;+24%5D%3E-for-TaprootMerkleBranch"],[13867,"impl-From%3C%5BTapNodeHash;+19%5D%3E-for-TaprootMerkleBranch"],[13868,"impl-From%3C%5BTapNodeHash;+5%5D%3E-for-TaprootMerkleBranch"],[13869,"impl-From%3C%5BTapNodeHash;+55%5D%3E-for-TaprootMerkleBranch"],[13870,"impl-From%3C%5BTapNodeHash;+78%5D%3E-for-TaprootMerkleBranch"],[13871,"impl-From%3C%5BTapNodeHash;+119%5D%3E-for-TaprootMerkleBranch"],[13872,"impl-From%3C%5BTapNodeHash;+103%5D%3E-for-TaprootMerkleBranch"],[13873,"impl-From%3C%5BTapNodeHash;+51%5D%3E-for-TaprootMerkleBranch"],[13874,"impl-From%3C%5BTapNodeHash;+22%5D%3E-for-TaprootMerkleBranch"],[13875,"impl-From%3C%5BTapNodeHash;+0%5D%3E-for-TaprootMerkleBranch"],[13876,"impl-From%3C%5BTapNodeHash;+122%5D%3E-for-TaprootMerkleBranch"],[13877,"impl-From%3C%5BTapNodeHash;+26%5D%3E-for-TaprootMerkleBranch"],[13878,"impl-From%3C%5BTapNodeHash;+107%5D%3E-for-TaprootMerkleBranch"],[13879,"impl-From%3C%5BTapNodeHash;+104%5D%3E-for-TaprootMerkleBranch"],[13880,"impl-From%3C%5BTapNodeHash;+95%5D%3E-for-TaprootMerkleBranch"],[13881,"impl-From%3C%5BTapNodeHash;+12%5D%3E-for-TaprootMerkleBranch"],[13882,"impl-From%3C%5BTapNodeHash;+128%5D%3E-for-TaprootMerkleBranch"],[13883,"impl-From%3C%5BTapNodeHash;+28%5D%3E-for-TaprootMerkleBranch"],[13884,"impl-From%3C%5BTapNodeHash;+118%5D%3E-for-TaprootMerkleBranch"],[13886,"impl-From%3C%5BTapNodeHash;+7%5D%3E-for-TaprootMerkleBranch"],[13887,"impl-From%3C%5BTapNodeHash;+52%5D%3E-for-TaprootMerkleBranch"],[13888,"impl-From%3C%5BTapNodeHash;+82%5D%3E-for-TaprootMerkleBranch"],[13889,"impl-From%3C%5BTapNodeHash;+84%5D%3E-for-TaprootMerkleBranch"],[13890,"impl-From%3C%5BTapNodeHash;+10%5D%3E-for-TaprootMerkleBranch"],[13891,"impl-From%3C%5BTapNodeHash;+64%5D%3E-for-TaprootMerkleBranch"],[13892,"impl-From%3C%5BTapNodeHash;+44%5D%3E-for-TaprootMerkleBranch"],[13893,"impl-From%3C%5BTapNodeHash;+43%5D%3E-for-TaprootMerkleBranch"],[13894,"impl-From%3C%5BTapNodeHash;+61%5D%3E-for-TaprootMerkleBranch"],[13895,"impl-From%3C%5BTapNodeHash;+53%5D%3E-for-TaprootMerkleBranch"],[13896,"impl-From%3C%5BTapNodeHash;+73%5D%3E-for-TaprootMerkleBranch"],[13897,"impl-From%3C%5BTapNodeHash;+91%5D%3E-for-TaprootMerkleBranch"],[13898,"impl-From%3C%5BTapNodeHash;+92%5D%3E-for-TaprootMerkleBranch"],[13899,"impl-From%3C%5BTapNodeHash;+113%5D%3E-for-TaprootMerkleBranch"],[13900,"impl-From%3C%5BTapNodeHash;+32%5D%3E-for-TaprootMerkleBranch"],[13901,"impl-From%3C%5BTapNodeHash;+124%5D%3E-for-TaprootMerkleBranch"],[13902,"impl-From%3C%5BTapNodeHash;+31%5D%3E-for-TaprootMerkleBranch"],[13903,"impl-From%3C%5BTapNodeHash;+25%5D%3E-for-TaprootMerkleBranch"],[13904,"impl-From%3C%5BTapNodeHash;+39%5D%3E-for-TaprootMerkleBranch"],[13905,"impl-From%3C%5BTapNodeHash;+114%5D%3E-for-TaprootMerkleBranch"],[13906,"impl-From%3C%5BTapNodeHash;+3%5D%3E-for-TaprootMerkleBranch"],[13907,"impl-From%3C%5BTapNodeHash;+66%5D%3E-for-TaprootMerkleBranch"],[13908,"impl-From%3C%5BTapNodeHash;+21%5D%3E-for-TaprootMerkleBranch"],[13909,"impl-From%3C%5BTapNodeHash;+110%5D%3E-for-TaprootMerkleBranch"],[13910,"impl-From%3C%5BTapNodeHash;+11%5D%3E-for-TaprootMerkleBranch"],[13911,"impl-From%3C%5BTapNodeHash;+23%5D%3E-for-TaprootMerkleBranch"],[13912,"impl-From%3C%5BTapNodeHash;+100%5D%3E-for-TaprootMerkleBranch"],[13913,"impl-From%3C%5BTapNodeHash;+88%5D%3E-for-TaprootMerkleBranch"],[13914,"impl-From%3C%5BTapNodeHash;+37%5D%3E-for-TaprootMerkleBranch"],[13915,"impl-From%3C%5BTapNodeHash;+123%5D%3E-for-TaprootMerkleBranch"],[13916,"impl-From%3C%5BTapNodeHash;+4%5D%3E-for-TaprootMerkleBranch"],[13917,"impl-From%3C%5BTapNodeHash;+112%5D%3E-for-TaprootMerkleBranch"],[13918,"impl-From%3C%5BTapNodeHash;+76%5D%3E-for-TaprootMerkleBranch"],[13919,"impl-From%3C%5BTapNodeHash;+8%5D%3E-for-TaprootMerkleBranch"],[13920,"impl-From%3C%5BTapNodeHash;+106%5D%3E-for-TaprootMerkleBranch"],[13921,"impl-From%3C%5BTapNodeHash;+90%5D%3E-for-TaprootMerkleBranch"],[13922,"impl-From%3C%5BTapNodeHash;+71%5D%3E-for-TaprootMerkleBranch"],[13923,"impl-From%3C%5BTapNodeHash;+115%5D%3E-for-TaprootMerkleBranch"],[13924,"impl-From%3C%5BTapNodeHash;+83%5D%3E-for-TaprootMerkleBranch"],[13925,"impl-From%3C%5BTapNodeHash;+94%5D%3E-for-TaprootMerkleBranch"],[13926,"impl-From%3C%5BTapNodeHash;+50%5D%3E-for-TaprootMerkleBranch"],[13927,"impl-From%3C%5BTapNodeHash;+68%5D%3E-for-TaprootMerkleBranch"],[13928,"impl-From%3C%5BTapNodeHash;+108%5D%3E-for-TaprootMerkleBranch"],[13929,"impl-From%3C%5BTapNodeHash;+30%5D%3E-for-TaprootMerkleBranch"],[13930,"impl-From%3C%5BTapNodeHash;+121%5D%3E-for-TaprootMerkleBranch"],[13931,"impl-From%3C%5BTapNodeHash;+17%5D%3E-for-TaprootMerkleBranch"],[13932,"impl-From%3C%5BTapNodeHash;+96%5D%3E-for-TaprootMerkleBranch"],[13933,"impl-From%3C%5BTapNodeHash;+29%5D%3E-for-TaprootMerkleBranch"],[13934,"impl-From%3C%5BTapNodeHash;+69%5D%3E-for-TaprootMerkleBranch"],[13935,"impl-From%3C%5BTapNodeHash;+127%5D%3E-for-TaprootMerkleBranch"],[13936,"impl-From%3C%5BTapNodeHash;+101%5D%3E-for-TaprootMerkleBranch"],[13937,"impl-From%3C%5BTapNodeHash;+54%5D%3E-for-TaprootMerkleBranch"],[13938,"impl-From%3C%5BTapNodeHash;+56%5D%3E-for-TaprootMerkleBranch"],[13939,"impl-From%3C%5BTapNodeHash;+75%5D%3E-for-TaprootMerkleBranch"],[13940,"impl-From%3C%5BTapNodeHash;+67%5D%3E-for-TaprootMerkleBranch"],[13941,"impl-From%3C%5BTapNodeHash;+15%5D%3E-for-TaprootMerkleBranch"],[13942,"impl-From%3C%5BTapNodeHash;+63%5D%3E-for-TaprootMerkleBranch"],[13943,"impl-From%3C%5BTapNodeHash;+85%5D%3E-for-TaprootMerkleBranch"],[13944,"impl-From%3C%5BTapNodeHash;+18%5D%3E-for-TaprootMerkleBranch"],[13945,"impl-From%3C%5BTapNodeHash;+65%5D%3E-for-TaprootMerkleBranch"],[13946,"impl-From%3C%5BTapNodeHash;+86%5D%3E-for-TaprootMerkleBranch"],[13947,"impl-From%3C%5BTapNodeHash;+87%5D%3E-for-TaprootMerkleBranch"],[13948,"impl-From%3C%5BTapNodeHash;+45%5D%3E-for-TaprootMerkleBranch"],[13949,"impl-From%3C%5BTapNodeHash;+59%5D%3E-for-TaprootMerkleBranch"],[13950,"impl-From%3C%5BTapNodeHash;+99%5D%3E-for-TaprootMerkleBranch"],[13951,"impl-From%3C%5BTapNodeHash;+42%5D%3E-for-TaprootMerkleBranch"],[13952,"impl-From%3C%5BTapNodeHash;+36%5D%3E-for-TaprootMerkleBranch"],[13953,"impl-From%3C%5BTapNodeHash;+111%5D%3E-for-TaprootMerkleBranch"],[13954,"impl-From%3C%5BTapNodeHash;+13%5D%3E-for-TaprootMerkleBranch"],[13955,"impl-From%3C%5BTapNodeHash;+70%5D%3E-for-TaprootMerkleBranch"],[13956,"impl-From%3C%5BTapNodeHash;+14%5D%3E-for-TaprootMerkleBranch"],[13957,"impl-From%3C%5BTapNodeHash;+116%5D%3E-for-TaprootMerkleBranch"],[13958,"impl-From%3C%5BTapNodeHash;+1%5D%3E-for-TaprootMerkleBranch"],[13959,"impl-From%3C%5BTapNodeHash;+97%5D%3E-for-TaprootMerkleBranch"],[13960,"impl-From%3C%5BTapNodeHash;+117%5D%3E-for-TaprootMerkleBranch"],[13961,"impl-From%3C%5BTapNodeHash;+93%5D%3E-for-TaprootMerkleBranch"],[13962,"impl-From%3C%5BTapNodeHash;+20%5D%3E-for-TaprootMerkleBranch"],[13963,"impl-From%3C%5BTapNodeHash;+77%5D%3E-for-TaprootMerkleBranch"],[13964,"impl-From%3C%5BTapNodeHash;+89%5D%3E-for-TaprootMerkleBranch"],[13965,"impl-From%3C%5BTapNodeHash;+16%5D%3E-for-TaprootMerkleBranch"],[13966,"impl-From%3C%5BTapNodeHash;+74%5D%3E-for-TaprootMerkleBranch"],[13967,"impl-From%3C%5BTapNodeHash;+41%5D%3E-for-TaprootMerkleBranch"],[13968,"impl-From%3C%5BTapNodeHash;+126%5D%3E-for-TaprootMerkleBranch"],[13969,"impl-From%3C%5BTapNodeHash;+62%5D%3E-for-TaprootMerkleBranch"],[13970,"impl-From%3C%5BTapNodeHash;+81%5D%3E-for-TaprootMerkleBranch"],[13971,"impl-From%3C%5BTapNodeHash;+79%5D%3E-for-TaprootMerkleBranch"],[13972,"impl-From%3C%5BTapNodeHash;+47%5D%3E-for-TaprootMerkleBranch"],[13973,"impl-From%3C%5BTapNodeHash;+125%5D%3E-for-TaprootMerkleBranch"],[13974,"impl-From%3C%5BTapNodeHash;+109%5D%3E-for-TaprootMerkleBranch"],[13975,"impl-From%3C%5BTapNodeHash;+2%5D%3E-for-TaprootMerkleBranch"],[14039,"impl-IntoIterator-for-%26mut+TaprootMerkleBranch"],[14040,"impl-IntoIterator-for-TaprootMerkleBranch"],[14041,"impl-IntoIterator-for-%26TaprootMerkleBranch"],[14090,"impl-Serialize-for-Signature"],[14091,"impl-Signature"],[14092,"impl-TaprootMerkleBranch"],[14093,"impl-Serialize-for-TaprootMerkleBranch"],[14097,"impl-ControlBlock"],[14098,"impl-Serialize-for-ControlBlock"],[14145,"impl-TryFrom%3C%26SerializedSignature%3E-for-Signature"],[14146,"impl-TryFrom%3CSerializedSignature%3E-for-Signature"],[14148,"impl-TryFrom%3CBox%3C%5BTapNodeHash%5D%3E%3E-for-TaprootMerkleBranch"],[14150,"impl-TryFrom%3CVec%3CTapNodeHash%3E%3E-for-TaprootMerkleBranch"],[14151,"impl-TryFrom%3C%26%5BTapNodeHash%5D%3E-for-TaprootMerkleBranch"],[14157,"impl-TryFrom%3CNodeInfo%3E-for-TapTree"],[14158,"impl-TryFrom%3CTaprootBuilder%3E-for-TapTree"],[14274,"impl-PartialEq-for-SerializedSignature"],[14275,"impl-PartialEq%3C%5Bu8%5D%3E-for-SerializedSignature"],[14278,"impl-Display-for-SerializedSignature"],[14279,"impl-Debug-for-SerializedSignature"],[14282,"impl-From%3CSignature%3E-for-SerializedSignature"],[14283,"impl-From%3C%26Signature%3E-for-SerializedSignature"],[14290,"impl-IntoIterator-for-%26SerializedSignature"],[14291,"impl-IntoIterator-for-SerializedSignature"],[14297,"impl-PartialOrd%3C%5Bu8%5D%3E-for-SerializedSignature"],[14298,"impl-PartialOrd-for-SerializedSignature"],[14339,"impl-From%3CChangeSet%3E-for-ChangeSet%3CA,+ChangeSet%3E"],[14340,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[14385,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[14386,"impl-KeychainTxOutIndex%3CK%3E"],[14405,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[14406,"impl-Display-for-InsertDescriptorError%3CK%3E"],[14571,"impl-Display-for-MissingGenesisError"],[14572,"impl-Debug-for-MissingGenesisError"],[14573,"impl-Debug-for-AlterCheckPointError"],[14574,"impl-Display-for-AlterCheckPointError"],[14575,"impl-Debug-for-CannotConnectError"],[14576,"impl-Display-for-CannotConnectError"],[14577,"impl-Debug-for-ApplyHeaderError"],[14578,"impl-Display-for-ApplyHeaderError"],[14589,"impl-FromIterator%3C(u32,+Option%3CBlockHash%3E)%3E-for-ChangeSet"],[14590,"impl-FromIterator%3C(u32,+BlockHash)%3E-for-ChangeSet"],[14705,"impl-Debug-for-SyncItem%3C\'i,+I%3E"],[14706,"impl-Display-for-SyncItem%3C\'i,+I%3E"],[14877,"impl-Display-for-CalculateFeeError"],[14878,"impl-Debug-for-CalculateFeeError"]],"c":"OjAAAAEAAAAAADIAEAAAAFACUgJuBOMH+gf+ByIIQwrYCgsODQ4ODg8OFQ4XDhgOGQ5PEFAQURBSEKUYLxmTHJocUSJWIp0lniVyLIAsgSwpLTgtSS3pLeot6y3sLfctMy6oMT4yPzJAMkMyRjK2MrcyVDXVNg==","e":"OjAAAAEAAAAAAK8mEAAAAAAAYISth////+////f/D36+//3/8/9zVSMyZ4cAAOAAEfcjP/2//4P///8H/z//PwAAAAAAAAAAAAAAAAAAAAAAAIA//v/v//++AADA//////8fAPz/////////////////////oQEAwP//////////////////////////APj/////P7////////97wD/8////////////7/////////////////9/A/j3//////////////////////8/wIvKbzu73NeOef1uJxkh6lrg//8A/P8fgAAAAACA/s/5///P/////wMA8P////////j//38AAAAAAAAAAAIAAABAAADwHwAAAAAA4P///////4H/BwAeAPi///P//+8h4P8A/P8fAA/+////////YwAAMDD//////wMA4f///////////////////3/A/////////wED+P///////wcAAAAAAAD4//////////////v//63/AhwA8P///////////wEAAAAAwPu/H/x/+PcOGA9+/h+e//////8/4Of/+P///vF//70IQoB/BPAHxBuaw/8YAAAGwf7nH/CPH/D/P/D/AMD/AwDA/5/A//8BgP8/+L/jA8D/L0D+B8D//wEAAHDweBnAvwDM+f/f////9/////8p4CcAvva//7//HwDA//8OBwYAAPD///9/AAAAgIf/////AQD+/z8D/Pz//+P//820B/n7OAAaAICAD/zhn3/8/////wMAAADw//8///+TBtjj//c8AADM//9NYz8BAPD/////////LzrAOQD+/z/+/////z8AgP/////f/////6MBwAcA4P9/8Pf///9//gAA/P8n/wcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMf///P///7/93/h////////////////////////7////////////////////////9v/AsAB/A0A4P8f/v///x+A//oDAAD4//+/G/z/PwAAgP////f//38GBAAC////78cPjHsAQPgBALxHAADg/wAAflMA4N8CAPD/HwAAAOADwT/g//9/BLD3//8P+P////90R8Hf/wPw/////xvw//8/AAAAAAAA/v/f8/sfAAD+f//3//cfowiAxc8f//H///9YgAf+H8D+AfyNPwAAYHj+////n/z5/78gAAAAAAAAAAAAAAAAAACA/yYAAADA+gAAAP4GhKRIVYkcAAAA/P//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n////z8AAAAAAAAAN/7/8P////////////////////////8PAAAAgEMAgD8AGPBAAAAQHuD/////yZ////H///f///83sX6Of///9////z2///y//57ff/7//8mf/3/+////n/z5/5///3/y5/8f7/////9Hugz7/78BAADA//f/bx9OAHj/86///98GAAAAAJj/////////Qb7/3///////v4hvLwDiAwCADwDYAPjg///7/////4//DwB4/t8J/HsA/P8P//8AAOD//////////yvoADDsf///DwD//88A/wcAAAAAwP9/+P//h4D/3/8DgP////8IkP/nAP//7z8H/PfD///7//9/eHjv33vA/////////wP4AQDg////B8Dv//9/AAD/z/2PPwAAAAAAAAAAAAAAAPD///////98/v////P//x6mZ5UPAMADOH4A/P/v/////w/7/wAA4P///8fAzv3nAAAAAAC08P///////3/wD7/v/////39gmlMA7P8cAAD8H5j2////////9/8AAPj3GPXh4X//7+//lwMexg+e///Hx+/B/v//P+DhuP8PAgDw/4P///8/+MH/PyB8PwDwCf//7//+/////3/427eb//Pu4f8A0L////v9oSy+oMr//wMYNgAgSDwAAPz//////////wEoACDQ////////////P//f//////P/AOD//wfg/9//v/9//n//////wM8HAAAAAAD4//8fw///P/7/AO//v//4hwEIp8f/PwDDPP/Pf/32/1x/AAAAAAAA4P///////////////////weE2/IBAADA/g/////+///////9/wP49/8QoP8HAAAAAAAAYP7///////////8/7D/////////3////uP////+///////////////8xAQn+HwAAwAcAAB74P8gb/PH//49fPv///5////P/f8CPf0///5u4f/0DxP8zAPs9AAD0//+BBQIAAJD/cXDgzxHAkQAA/v//9/8vwBCARf///t8PAP7/Afj+fxICAAASOfz/g///AACA/P/8/+//+BEAAIAFbX7w5w8A/z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","a":{"is_coin_base":[1995],"ntxid":[1005],"read_to_end":[9546],"txid":[1006],"wtxid":[1008]}}],\ -["bdk_core",{"t":"FFFFIIKFOENONNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNONONNNNNNNNMNNMNNNNNNNODNNCNNNNNNNNNNNNNNNNOONNNNNNNNNNFFFPPGFFFFPNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNOONNNNONONNNNNNNNNNNNNNNNNNNNNNNNOONOONNNNNNNNNNNNNNNN","n":["BlockId","CheckPoint","CheckPointIter","ConfirmationBlockTime","Indexed","KeychainIndexed","Merge","TxUpdate","anchors","bitcoin","block_id","block_id","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","confirmation_time","default","default","default","deserialize","deserialize","eq","eq","eq","eq_ptr","extend","extend","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_block_ids","from_header","get","hash","hash","hash","hash","height","height","insert","into","into","into","into","into","into_iter","into_iter","is_empty","iter","map_anchors","merge","new","next","partial_cmp","partial_cmp","prev","push","range","seen_ats","serde","serialize","serialize","spk_client","take","take","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","txouts","txs","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","FullScanRequest","FullScanRequestBuilder","FullScanResult","OutPoint","Spk","SyncItem","SyncProgress","SyncRequest","SyncRequestBuilder","SyncResult","Txid","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","builder","builder","chain_tip","chain_tip","chain_tip","chain_tip","chain_update","chain_update","clone","clone","clone_into","clone_into","cmp","consumed","default","default","default","default","default","default","eq","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","inspect","inspect","into","into","into","into","into","into","into","into","iter_outpoints","iter_spks","iter_spks","iter_txids","keychains","last_active_indices","next_outpoint","next_spk","next_spk","next_txid","outpoints","outpoints_consumed","outpoints_remaining","partial_cmp","progress","remaining","spks","spks_consumed","spks_for_keychain","spks_remaining","spks_with_indexes","to_owned","to_owned","to_string","total","total_outpoints","total_spks","total_txids","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_update","tx_update","txids","txids_consumed","txids_remaining","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"bdk_core"],[116,"bdk_core::spk_client"],[257,"bdk_core::checkpoint"],[258,"bdk_core::block_id"],[259,"bdk_core::tx_update"],[260,"core::clone"],[261,"core::cmp"],[262,"core::result"],[263,"serde::de"],[264,"core::iter::traits::collect"],[265,"core::fmt"],[266,"bitcoin::blockdata::block"],[267,"core::option"],[268,"core::hash"],[269,"bdk_core::merge"],[270,"core::ops::function"],[271,"core::iter::traits::iterator"],[272,"core::ops::range"],[273,"serde::ser"],[274,"core::any"],[275,"core::marker"],[276,"bitcoin::blockdata::script::borrowed"],[277,"bitcoin::blockdata::transaction"],[278,"core::iter::traits::exact_size"],[279,"bitcoin::blockdata::script::owned"],[280,"alloc::vec"],[281,"alloc::string"]],"i":[0,0,0,0,0,0,0,0,6,0,1,5,26,3,5,1,6,26,3,5,1,6,3,5,1,6,3,5,1,6,3,5,5,3,5,6,3,5,3,5,1,1,1,6,3,5,1,6,26,3,3,3,5,1,6,1,1,1,3,5,1,3,1,3,1,26,3,5,1,6,26,1,25,1,6,25,1,26,3,5,1,1,1,6,0,3,5,0,25,25,3,5,1,6,26,3,5,1,6,26,3,5,1,6,6,6,26,3,5,1,6,26,3,5,1,6,0,0,0,37,37,0,0,0,0,0,37,33,34,35,36,37,38,40,41,33,34,35,36,37,38,40,41,33,35,34,36,33,34,35,36,40,41,37,38,37,38,37,38,33,34,35,36,40,41,37,37,37,38,40,41,33,34,34,35,36,36,37,38,40,41,37,33,35,33,34,35,36,37,38,40,41,34,34,36,34,36,41,34,34,36,34,33,38,38,37,34,38,33,38,35,38,33,37,38,37,38,38,38,38,33,34,35,36,37,38,40,41,33,34,35,36,37,38,40,41,40,41,33,38,38,33,34,35,36,37,38,40,41,33,34,35,36,37,38,40,41],"f":"``````````{{{d{b}}}f}`{{{d{c}}}{{d{e}}}{}{}}0000{{{d{hc}}}{{d{he}}}{}{}}0000{{{d{f}}}f}{{{d{j}}}j}{{{d{b}}}b}{{{d{{l{c}}}}}{{l{c}}}n}{{{d{c}}{d{he}}}A`{}{}}000{{{d{f}}{d{f}}}Ab}{{{d{j}}{d{j}}}Ab}`{{}f}{{}j}{{}{{l{c}}}{}}{c{{Ad{f}}}Af}{c{{Ad{j}}}Af}{{{d{f}}{d{f}}}Ah}{{{d{j}}{d{j}}}Ah}{{{d{b}}{d{b}}}Ah}0{{bc}{{Ad{bb}}}{{Al{}{{Aj{f}}}}}}{{{d{h{l{c}}}}{l{c}}}A`An}{{{d{f}}{d{hB`}}}Bb}{{{d{j}}{d{hB`}}}Bb}{{{d{b}}{d{hB`}}}Bb}{{{d{{l{c}}}}{d{hB`}}}BbBd}{cc{}}0{{{Bj{{d{Bf}}{d{Bh}}}}}f}{{{Bj{BfBh}}}f}222{c{{Ad{b{Bl{b}}}}}{{Al{}{{Aj{f}}}}}}{{{d{Bn}}Bf}b}{{{d{b}}Bf}{{Bl{b}}}}{{{d{f}}{d{hc}}}A`C`}{{{d{j}}{d{hc}}}A`C`}{{{d{b}}}Bh}`{{{d{b}}}Bf}`{{bf}b}{ce{}{}}00000{bc{}}{{{d{Cb}}}Ah}{{{d{b}}}Cd}{{{l{c}}g}{{l{e}}}AnAn{{Ch{c}{{Cf{e}}}}}}{{{d{hCb}}Cb}A`}{fb}{{{d{hCd}}}{{Bl{c}}}{}}{{{d{f}}{d{f}}}{{Bl{Ab}}}}{{{d{j}}{d{j}}}{{Bl{Ab}}}}{{{d{b}}}{{Bl{b}}}}{{bf}{{Ad{bb}}}}{{{d{b}}c}{{`{{Cj{}{{Aj{b}}}}}}}{{Cl{Bf}}}}``{{{d{f}}c}AdCn}{{{d{j}}c}AdCn}`{{{d{hCb}}}{{Bl{Cb}}}}0{{{d{c}}}e{}{}}000{c{{Ad{e}}}{}{}}000000000``{{{d{c}}}D`{}}0000{ce{}{}}0000```````````{{{d{c}}}{{d{e}}}{}{}}0000000{{{d{hc}}}{{d{he}}}{}{}}0000000{{{Db{c}}}{{Dd{c}}}{}}{{{Df{c}}}{{Dh{c}}}An}{{}{{Db{c}}}{}}{{}{{Df{c}}}{Ann}}{{{Db{c}}b}{{Db{c}}}{}}{{{d{{Dd{c}}}}}{{Bl{b}}}{}}{{{Df{c}}b}{{Df{c}}}An}{{{d{{Dh{c}}}}}{{Bl{b}}}{Ann}}``{{{d{{Dj{c}}}}}{{Dj{c}}}n}{{{d{Dl}}}Dl}{{{d{c}}{d{he}}}A`{}{}}0{{{d{{Dj{c}}}}{d{{Dj{c}}}}}AbAn}{{{d{Dl}}}Dn}:{{}{{Dd{c}}}{}}{{}{{Df{c}}}{}}{{}{{Dh{c}}}{}}{{}{{E`{c}}}{}}{{}{{Eb{ce}}}{}{}}{{{d{{Dj{c}}}}{d{{Dj{c}}}}}AhEd}{{{d{{Dj{c}}}}{d{hB`}}}Bb{BdEf}}{{{d{{Dj{c}}}}{d{hB`}}}BbBd}{{{d{Dl}}{d{hB`}}}Bb}{{{d{{E`{c}}}}{d{hB`}}}BbBd}{{{d{{Eb{ce}}}}{d{hB`}}}BbBdBd}{cc{}}0{{{Db{c}}}{{Dd{c}}}{}}1{{{Df{c}}}{{Dh{c}}}{}}22222{{{d{{Dj{c}}}}{d{he}}}A`EhC`}{{{Db{c}}e}{{Db{c}}}{}{{Ch{{Dj{c}}Dl}}Ej}}{{{Df{c}}e}{{Df{c}}}An{{Ch{cBf{d{El}}}}Ej}}{ce{}{}}0000000{{{d{h{Dd{c}}}}}{{`{{F`{}{{Aj{En}}}}}}}{}}{{{d{h{Dd{c}}}}}{{`{{F`{}{{Aj{Fb}}}}}}}{}}{{{d{h{Dh{c}}}}c}{{`{{Cj{}{{Aj{{Fd{Fb}}}}}}}}}{Ann}}{{{d{h{Dd{c}}}}}{{`{{F`{}{{Aj{Ff}}}}}}}{}}{{{d{{Dh{c}}}}}{{Fh{c}}}{Ann}}`{{{d{h{Dd{c}}}}}{{Bl{En}}}{}}{{{d{h{Dd{c}}}}}{{Bl{Fb}}}{}}{{{d{h{Dh{c}}}}c}{{Bl{{Fd{Fb}}}}}{Ann}}{{{d{h{Dd{c}}}}}{{Bl{Ff}}}{}}{{{Db{c}}e}{{Db{c}}}{}{{Al{}{{Aj{En}}}}}}``{{{d{{Dj{c}}}}{d{{Dj{c}}}}}{{Bl{Ab}}}Fj}{{{d{{Dd{c}}}}}Dl{}}{{{d{Dl}}}Dn}{{{Db{A`}}c}{{Db{A`}}}{{Al{}{{Aj{Fb}}}}}}`{{{Df{c}}cg}{{Df{c}}}An{{Cj{}{{Aj{{Fd{Fb}}}}}}Ej}{{Al{}{{Fl{e}}}}}}`{{{Db{c}}e}{{Db{c}}}{}{{Al{}{{Aj{{Bj{cFb}}}}}}}}{{{d{c}}}e{}{}}0{{{d{c}}}Fn{}}5555{c{{Ad{e}}}{}{}}000000000000000``{{{Db{c}}e}{{Db{c}}}{}{{Al{}{{Aj{Ff}}}}}}``{{{d{c}}}D`{}}0000000{ce{}{}}0000000","D":"Nj","p":[[5,"CheckPoint",0,257],[1,"reference"],[5,"BlockId",0,258],[0,"mut"],[5,"ConfirmationBlockTime",0,258],[5,"TxUpdate",0,259],[10,"Clone",260],[1,"unit"],[6,"Ordering",261],[6,"Result",262],[10,"Deserializer",263],[1,"bool"],[17,"Item"],[10,"IntoIterator",264],[10,"Ord",261],[5,"Formatter",265],[8,"Result",265],[10,"Debug",265],[1,"u32"],[5,"BlockHash",266],[1,"tuple"],[6,"Option",267],[5,"Header",266],[10,"Hasher",268],[10,"Merge",0,269],[5,"CheckPointIter",0,257],[17,"Output"],[10,"FnMut",270],[10,"Iterator",271],[10,"RangeBounds",272],[10,"Serializer",273],[5,"TypeId",274],[5,"SyncRequestBuilder",116],[5,"SyncRequest",116],[5,"FullScanRequestBuilder",116],[5,"FullScanRequest",116],[6,"SyncItem",116],[5,"SyncProgress",116],[1,"usize"],[5,"SyncResult",116],[5,"FullScanResult",116],[10,"PartialEq",261],[10,"Any",274],[10,"Hash",268],[10,"Send",275],[5,"Script",276],[5,"OutPoint",277],[10,"ExactSizeIterator",278],[5,"ScriptBuf",279],[8,"Indexed",0],[5,"Txid",277],[5,"Vec",280],[10,"PartialOrd",261],[17,"IntoIter"],[5,"String",281]],"r":[[0,258],[1,257],[2,257],[3,258],[6,269],[7,259]],"b":[[50,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[51,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[166,"impl-Display-for-SyncItem%3C\'i,+I%3E"],[167,"impl-Debug-for-SyncItem%3C\'i,+I%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAIwAFQAKAAAADQATACIABwAtAAMAMwABADsAAQBHAAEATgACAFUAAgBbAA0AawAJAIAADwCaAAQAoAALAK4AAACwAAAAtgAAAM4AAADWAAIA3QAPAPIADwA="}],\ +["bdk_chain",{"t":"KFSFFSKGFFFGPPKFRFFIEEIKFEFFPPNNMNNONNNNDEONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNONOONCCNNNNNNNNNNNNNNNNNNNNNNMNNNMNONECNMENNNNNNONNNNNNNNNDCODNNNNNOCENNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNCOOOONNNNNNNNNNNNNNNONNNNNNNNNNNNNNOOOFGPPPPFTTPPPFFPFFTTPGTTGFFFGFTTTTTTTTTTTTTTTTTTTPPFPPPTPGGPPPPTTTTFFPPPPPPFFFFPPTTPFFFFFFPPPPPFFFFFFGFFFPPPFFFFFPPPPPPPPPPPPPPPPPFTFFFFFFFGFFFFTTTTTTNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNONNNNNNCNNNNNNNNNNNNNNNCONNNNNNNNNNNNNNNNNNNNNOOCNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNCONONNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNONONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNCNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONONNONNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNOFGGPPPGTPFPFGPFPGGKPFPPPPGPPPGPPPFPFPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOPPPGPFPFPFPFGGFPFPPPPPFPPPKGFPPPPPPPPGPPFPNNNNMNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNKKCCMMMMMMMHCHHHHCHHHPGPFFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPGPFFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRGPRGGKPPPPPPCNNNNNNNNNNNNMHNHHHNNNHCHNHHHNNHCNNNNNNNNNNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNCFSSSPSPGPSSPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNKRKRFGKFFPPPNNNNNNNNNNNNNNMNNNNNMNNMNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFSSSSSSSSSSRRKMNNNNNNNFNNNNNNNNNNNNFFKNNNNMNNNNNNNNNNNNNNNNNNNNNNNNFFGFPFFFPNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONONNNNNNNNNONNNNNONONNNNNNNNNNNNNONNNNNNNNNNNNNNNONNNNNNNNNNNNNNNFFFFFGFFFFPPNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPFGFFGIIIIFPPKPFPPPPIPPPPFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOONOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNOOOOOONNNOOOOOONNNNNOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOFFCCCCCCCCCPPGFFFTPPTTTFPPGFFFONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNOONNONNNNNONNNNNNNNNNNNNNNONNNNNONNNNNTSFSSSSSSSTSSTSSTSNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNFCCPFFSGTTTTFFTPFTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPFFFFGTTTTTFPFTTTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGGPPPJJJJJFPPPPPPCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSFFPGGFFPPPFPFFKFFFPPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCHGPPSSFNNNNNNNNNNNNNNNNNNNPGPPFGPPPPPPPPPPPPPPPPPPGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPFFFTFFTTTTTGFTPFFFFPFPPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNOONNONHHOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNOOONNNNNNNOSFFFNNNNNNNNNNNNNTPKGKTPFTKTTPKONOOOONNNNNNNNMHHNMMMMMMMMMMCNNNNNNNNNNNNNOOONOCOOOMMMMMMMMMMOCHNNNNNNNNNNNFKPKGGPPSPPPPKPFKNNNNNNNNNNNNMNNHHHMMMMMMMMMMNNNNNNNNNNNNNNNNNNNMMMMMMMMMMHHNNNNNNNNNNNNNNNNNOOOOJFJJJOOOOOOOOOOOOOKKRRKRFRKFNNNNNNMMNNMNCNNMNNNNNNNNNKFFFFGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPGPPFPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNPFPFPPFGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFFFFTRTRFKKFFTRMMQCNMMMNCNQQCMMMCQCCCCCQCCCCMHFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGRKRKIGGFPPFPPPFPNMNNNNNNNNNNNNNNCNNNNNNNNNNNCNNNNNNNNNNNNNNNCNNNNNNNNNQNNNNNNNNNNNMNNNQNNNNNNNNNNNNNNNNNNNNNNCCNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQFNNNNNNNNNNNNNNNNNRFFKNMNNNNNNNNNNNNQNNNQNNNNNNNNNNNNNNNGGPPFPFPFNNNNNNNONNNNONNNNNNNRKGGPPPPMRKRKNMMNNNNFFFNNNONONNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKYKRRRKYRRRRRRRKNNNCMMMMMMMMMNMMMMMMMMMMMMMMMNMMMMMMQNNCMMMMMMNMMMMMMMMMMMMMMMMNMMMMMMMPPPKKKKRPKKRRRRRKPFKPKPPPPPKPKPPPGPPPRRRKKNNNNNNNNNMNNMMNMMMMMMMMNMMMMMMMMMMMMMMMNMMMMMMNNNMNMNNNNNNNNNMNNNNNNMNMNNNMNMNNNNMNNNNNNNMNNMNNCNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKRRRRRRRRFRRRRRRRRKKRKRKRKRKRKRKRKKNNNNNNMNNNNNNNNNNMMMMMMMNNNNNNNNNNNNNNMMMMMMNNNMMMMMMNNNNNMMMMMNMMMMMMMMMMMMNMMMMMMMMNNNNNNNNNCTKNMNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFKNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPKPPPFPFGPPPPPPPPKIFFPPPKPNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNMNNNNNNNNNNNNNNNQNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNPFPPGGPPFPFPPPPFPGGGFFFFPPPFKRRFFFIIKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPFGPPPPPFPPNNNNNHHNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNONNNNPPGGFPPPPFCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHFTTTTFTTTTSFTTFTFTNCONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCCCCNNNONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGFFPPPPPPPOONNNNNNNNNNNNNNNNNNNNNNNNNNOOOONONNNNNNNNNNNPPPPPPPPPFFPPPPPPPPPPPPPPSSPPGPPPFPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOPPPFFGPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNOONNNNNNNNNNNNOONNNOOPGFFPPNNNNNNNNNNNNNNNNNNNNONNNNNNNNNOONNNNNNONNNNNNNNNNNNONNNNNNFFFFNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNONNNNNNNNONNNNONNNNFFFFFFONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOONNNNNNNNNNNNNNNNNNOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPPPPFGFNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNONOOOOOOOONNNNNNNNNNNNOONNNFNNNNNNNNNNNNNNNNNNNNSSSSSSSSHFFFPPPPPPPPPPGRGPKGPGFPPPPPPPPPPPPPPPPPGPPPPPPPPPPPPPPFGPPFPGFPPPPPPPPPGGIGIPPPPPPPPPPPPPPPOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNOOONNNNNNNNNNNNNOONNNNOOOOCOOOCNNNOONNNNNNNOOOOOOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNONNNNNNNNNNNNNOOOOOOOOOOOOOOOOOFFFINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNONNNONNNNNNNNNNNNNNOONNNGFKTGPTPPPFPPPPPPPPFTFPTPGKFFFFGFKKKGFFTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCMNNNNNNNNNCCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCQNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNSSSSSSSSSSSSSSSSFNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNPPFGFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKFIFIFIPPPPFSSSSSIFFPPPPRFMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNQQNNNNNNNNNNNNNNNNNNHNNNNNCHHHHHHJHHHHHHHHHHHHHHHHHHHJHHHHHHHHHHHJHHHHHJJJHHHHHHHHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNHHHHHNNNNNFTNNNNIIIIGNNNNNNNNINNNNNNNNNNTRTRFKKFFTRMNMNNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMNNMNNNNNQQNNNNNMNNNNNMNMNNNQNQMNNNNNNNNNNNNNNNNNNNNTKFKTKKRKNNNCNMNNNNNNNMNNNNNNNMMCHNNCNNNCNNHNMNMNNNNPFFGFFKKPPPFFFFPFGFMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNCKKKRFFFFFKRMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPGFCKFNNNNNNNNNNKKRKKKRKKFFMNMNNMMNMMNMNNMNNNNNMMMHMNNNNMHNMFFFCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNRKFKNNMNMNNMMNMMNNCNNNNNMMNNNNNNGGGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHHNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPFGPGPGPPPPPFPFFPPPPPPGGPGPFPFFFPPFPFGPPPFPPFFGGPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNSPPPFGPNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNOHNNNNNNNNNNNNNNFPPPFPGPPGPPPPPPPPFFGFPPPPFFPGPFSSSSSSSFGFFFPFFFFGGFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONCNNONNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNONNNNRKMMMMMCCFSPKGPFTTKNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNMNNNMNNNNNNNNNNNNNNNNNNNNMNNNOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFGTPFFFFPFFTNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNONNNNNNSHFFFPPGFFFFPNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNOONNNNNONNONNNNNNNNNNNNNNNNNNNNNNNNOONOONNNNNNNNNNNNNNNNNTGFFPPTTTFFFFFNNNOOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOOOONNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorImpl","BIP32_MAX_INDEX","Balance","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","CheckPoint","CheckPointIter","ConfirmationBlockTime","ConfirmationTime","Confirmed","Confirmed","DescriptorExt","DescriptorId","Error","FullTxOut","Impl","Indexed","IndexedTxGraph","Indexer","KeychainIndexed","Merge","SpkIterator","TxGraph","TxPosInBlock","TxUpdate","Unconfirmed","Unconfirmed","add","all_zeros","anchor_block","anchor_block","anchor_block","anchors","as_byte_array","as_raw_hash","as_ref","as_ref","bdk_core","bitcoin","block","block_id","block_id","block_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","column_result","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","confirmed","default","default","default","default","deref","deref","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_ptr","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_block_ids","from_byte_array","from_engine","from_header","from_raw_hash","from_slice","from_slice_delegated","from_str","get","get_chain_tip","hash","hash","hash","hash","hash","hash","hash","height","height","immature","index","indexed_tx_graph","indexer","insert","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_fallible","into_fallible","into_inner","into_inner","into_iter","into_iter","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","iter","keychain_txout","local_chain","map_anchors","merge","miniscript","new","new","new_with_range","next","next","nth","outpoint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","prev","push","range","rusqlite","rusqlite_impl","seen_ats","serde","serialize","serialize","serialize","serialize","serialize","spent_by","spk_client","spk_txout","take","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_sql","to_string","to_string","total","transpose_into_fallible","transpose_into_fallible","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","tx_pos","txout","txouts","txs","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","last_seen","time","Address","AddressType","All","All","AllPlusAnyoneCanPay","AllPlusAnyoneCanPay","Amount","BROADCAST_MIN","BTC","Bit","Bitcoin","Bitcoin","Block","BlockHash","CentiBitcoin","CompactTarget","CompressedPublicKey","DEFAULT_MAX_FEE_RATE","DUST","Default","Denomination","ENABLE_LOCKTIME_NO_RBF","ENABLE_RBF_NO_LOCKTIME","EcdsaSighashType","FeeRate","FilterHash","FilterHeader","KnownHrp","LegacySighash","MAX","MAX","MAX","MAX","MAX","MAX","MAX_ATTAINABLE_MAINNET","MAX_ATTAINABLE_REGTEST","MAX_ATTAINABLE_SIGNET","MAX_ATTAINABLE_TESTNET","MAX_BLOCK","MAX_MONEY","MAX_MONEY","MAX_STANDARD_WEIGHT","MIN","MIN","MIN","MIN","MIN_TRANSACTION","Main","Mainnet","MerkleBlock","MicroBitcoin","MilliBitcoin","MilliSatoshi","NULL","NanoBitcoin","Network","NetworkKind","None","None","NonePlusAnyoneCanPay","NonePlusAnyoneCanPay","ONE_BTC","ONE_BTC","ONE_SAT","ONE_SAT","Opcode","OutPoint","P2pkh","P2sh","P2tr","P2wpkh","P2wsh","PicoBitcoin","PrivateKey","Psbt","PubkeyHash","PublicKey","Regtest","Regtest","SAT","SIZE","Satoshi","Script","ScriptBuf","ScriptHash","SegwitV0Sighash","Sequence","SignedAmount","Signet","Single","Single","SinglePlusAnyoneCanPay","SinglePlusAnyoneCanPay","TapBranchTag","TapLeafHash","TapLeafTag","TapNodeHash","TapSighash","TapSighashTag","TapSighashType","TapTweakHash","TapTweakTag","Target","Test","Testnet","Testnets","Transaction","TxIn","TxMerkleNode","TxOut","Txid","V0","V1","V10","V11","V12","V13","V14","V15","V16","V2","V3","V4","V5","V6","V7","V8","V9","VarInt","WITNESS_SCALE_FACTOR","WPubkeyHash","WScriptHash","Weight","Witness","WitnessCommitment","WitnessMerkleNode","WitnessProgram","WitnessVersion","Work","Wtxid","XKeyIdentifier","XOnlyPublicKey","ZERO","ZERO","ZERO","ZERO","ZERO","ZERO","abs","add","add","add","add","add_assign","add_assign","add_assign","add_tweak","address","address_type","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","all_zeros","amount","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_byte_array","as_bytes","as_c_ptr","as_mut","as_mut","as_mut","as_mut","as_mut_bytes","as_mut_c_ptr","as_mut_ptr","as_mut_script","as_ptr","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_raw_hash","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_script","as_unchecked","assume_checked","assume_checked_ref","assume_hidden","base_size","base_size","bip152","bip158","bip32","bip34_block_height","block_hash","blockdata","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","builder","builder","bytes","chain_hash","check_after","check_merkle_root","check_older","check_older","check_witness_commitment","checked_abs","checked_add","checked_add","checked_add","checked_div","checked_div","checked_div","checked_div","checked_mul","checked_mul","checked_mul","checked_mul","checked_mul_by_weight","checked_rem","checked_rem","checked_sub","checked_sub","checked_sub","classify","clear","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp_fast_unstable","coinbase","combine","compressed","compressed","compute_merkle_root","compute_ntxid","compute_txid","compute_witness_commitment","compute_wtxid","consensus","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","count_sigops","count_sigops_legacy","dangerous_assume_tweaked","default","default","default","default","default","default","default","default","default","default","default","default","deref","deref_mut","des_btc","des_btc","des_sat","des_sat","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize_from_reader","difficulty","difficulty_float","display_dynamic","display_dynamic","display_in","display_in","div","div","div","div","div","div_assign","div_assign","div_assign","dust_value","ecdsa","enables_absolute_lock_time","enables_lock_time","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","engine","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","extend","extract","extract_matches","extract_tx","extract_tx_fee_rate_limit","extract_tx_unchecked_fee_rate","extract_tx_with_fee_rate_limit","fee","fee_vb","fee_wu","filter_header","finalize","finalize_inp","finalize_inp_mall","finalize_inp_mall_mut","finalize_inp_mut","finalize_mall","finalize_mall_mut","finalize_mut","first_opcode","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt_asm","fmt_value_in","fmt_value_in","fmt_wif","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","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","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","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","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_512_second_intervals","from_be_bytes","from_be_bytes","from_block_with_predicate","from_btc","from_btc","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_byte_array","from_bytes","from_bytes","from_bytes_mut","from_chain_hash","from_compact","from_consensus","from_consensus","from_consensus","from_consensus_u8","from_core_arg","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_engine","from_float_in","from_float_in","from_header_txids_with_predicate","from_height","from_hex","from_hex","from_hex","from_hex","from_hex","from_int_btc","from_iter","from_key_and_tweak","from_keypair","from_kwu","from_le_bytes","from_le_bytes","from_magic","from_node_hashes","from_non_witness_data_size","from_private_key","from_private_key","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_raw_hash","from_sat","from_sat","from_sat_per_kwu","from_sat_per_vb","from_sat_per_vb_unchecked","from_script","from_script","from_script","from_seconds_ceil","from_seconds_floor","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_slice_delegated","from_standard","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str","from_str_in","from_str_in","from_str_with_denomination","from_str_with_denomination","from_unprefixed_hex","from_unprefixed_hex","from_unprefixed_hex","from_unprefixed_hex","from_unsigned_tx","from_vb","from_vb_unchecked","from_vb_unwrap","from_wif","from_witness_data_size","from_witness_program","from_wu","from_wu_usize","generate","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash_types","header","header","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","index","inner","inner","input","inputs","instruction_indices","instruction_indices_minimal","instructions","instructions_minimal","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_boxed_script","into_bytes","into_iter","into_script_buf","is_absolute_timelock_satisfied","is_coinbase","is_empty","is_empty","is_explicitly_rbf","is_final","is_height_locked","is_lock_time_enabled","is_mainnet","is_met_by","is_multisig","is_negative","is_null","is_op_return","is_p2pk","is_p2pkh","is_p2sh","is_p2tr","is_p2tr","is_p2wpkh","is_p2wpkh","is_p2wsh","is_p2wsh","is_positive","is_provably_unspendable","is_push_only","is_rbf","is_related_to_pubkey","is_related_to_xonly_pubkey","is_relative_lock_time","is_spend_standard","is_time_locked","is_uncompressed","is_valid_for_network","is_witness_program","is_x_only_key","iter","iter_funding_utxos","key","last","legacy_weight","len","len","lock_time","log2","magic","matches_script_pubkey","max_difficulty_transition_threshold","max_transition_threshold","max_transition_threshold_unchecked","merkle_tree","min_difficulty_transition_threshold","min_transition_threshold","minimal_non_dust","minimal_non_dust","minimal_non_dust_custom","minimal_non_dust_custom","mul","mul","mul","mul","mul","mul_assign","mul_assign","mul_assign","neg","network","network","new","new","new","new","new","new","new","new_op_return","new_p2pk","new_p2pkh","new_p2sh","new_p2tr","new_p2tr_tweaked","new_p2wpkh","new_p2wsh","new_uncompressed","new_uncompressed","new_witness_program","nth","ntxid","null","output","outputs","p2p","p2pk_public_key","p2pkh","p2sh","p2sh_from_hash","p2shwpkh","p2shwsh","p2tr","p2tr","p2tr_key_spend","p2tr_tweaked","p2tr_tweaked","p2wpkh","p2wpkh","p2wpkh","p2wpkh_script_code","p2wpkh_script_code","p2wpkh_script_code","p2wpkh_script_code","p2wsh","p2wsh","params","parse","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","policy","positive_sub","pow","previous_output","program","proprietary","provider_lookup_ecdsa_sig","provider_lookup_hash160","provider_lookup_hash256","provider_lookup_raw_pkh_ecdsa_sig","provider_lookup_raw_pkh_pk","provider_lookup_raw_pkh_tap_leaf_script_sig","provider_lookup_raw_pkh_x_only_pk","provider_lookup_ripemd160","provider_lookup_sha256","provider_lookup_tap_control_block_map","provider_lookup_tap_key_spend_sig","provider_lookup_tap_leaf_script_sig","psbt","pubkey_hash","pubkey_hash","pubkey_hash","public_key","public_key","push","push_ecdsa_signature","push_instruction","push_instruction_no_opt","push_opcode","push_slice","read_from","read_from","rem","rem","rem_assign","rem_assign","require_network","reserve","reserve_exact","scale_by_witness_factor","scan_and_push_verify","script_hash","script_hash","script_pubkey","script_pubkey","script_pubkey_lens","script_sig","second_to_last","segwit_weight","sequence","ser_btc","ser_btc","ser_btc_opt","ser_btc_opt","ser_sat","ser_sat","ser_sat_opt","ser_sat_opt","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize_hex","serialize_to_writer","sighash","sighash_ecdsa","sighash_msg","sign","sign_message","signum","size","size","size","spend_utxo","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sum","sum","sum","sum","tap_tweak","taproot","tapscript","tapscript_leaf_hash","to_address_data","to_asm_string","to_be_bytes","to_be_bytes","to_btc","to_btc","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_byte_array","to_bytes","to_bytes","to_bytes","to_bytes","to_compact_lossy","to_consensus","to_consensus_u32","to_core_arg","to_fe","to_float_in","to_float_in","to_hash160","to_hash160","to_hash256","to_hash256","to_hex_string","to_kwu_floor","to_le_bytes","to_le_bytes","to_num","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_p2sh","to_p2tr","to_p2wsh","to_public_key","to_public_key","to_qr_uri","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_raw_hash","to_relative_lock_time","to_ripemd160","to_ripemd160","to_sat","to_sat","to_sat_per_kwu","to_sat_per_vb_ceil","to_sat_per_vb_floor","to_scalar","to_sha256","to_sha256","to_signed","to_sort_key","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string_in","to_string_in","to_string_with_denomination","to_string_with_denomination","to_target","to_u32","to_u8","to_unsigned","to_vbytes_ceil","to_vbytes_floor","to_vec","to_wif","to_work","to_wu","to_x_only_pubkey","total_sigop_cost","total_size","total_size","total_size","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tweak_add_check","tx_in","tx_out","txdata","txid","txid","txn","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_prefix","type_prefix","unchecked_add","unchecked_add","unchecked_sub","unchecked_sub","unknown","unsigned_abs","unsigned_tx","update_input_with_descriptor","update_output_with_descriptor","value","verify","verify","verify","version","version","version","vout","vsize","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","weight","weight","weight","with_capacity","witness","witness_program","witness_root","witness_version","wpubkey_hash","wpubkey_hash","write_into","write_into","wscript_hash","wtxid","xpub","Address","AddressData","AddressType","Base58","Bech32","ExcessiveScriptSize","FromScriptError","IS_CHECKED","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidLegacyPrefix","InvalidLegacyPrefixError","KnownHrp","LegacyAddressTooLong","LegacyAddressTooLongError","Mainnet","NetworkChecked","NetworkUnchecked","NetworkValidation","NetworkValidation","NetworkValidationError","P2pkh","P2pkh","P2sh","P2sh","P2shError","P2tr","P2wpkh","P2wsh","ParseError","Regtest","Segwit","Testnets","UnknownAddressTypeError","UnknownHrp","UnknownHrpError","UnrecognizedScript","WitnessProgram","WitnessProgram","WitnessVersion","WitnessVersion","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","invalid_base58_payload_length","invalid_legacy_address_prefix","invalid_legcay_address_length","partial_cmp","partial_cmp","partial_cmp","source","source","source","source","source","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","pubkey_hash","script_hash","witness_program","Base58","Bech32","ExcessiveScriptSize","FromScriptError","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidLegacyPrefix","InvalidLegacyPrefixError","LegacyAddressTooLong","LegacyAddressTooLongError","NetworkValidation","NetworkValidationError","P2shError","ParseError","UnknownAddressTypeError","UnknownHrp","UnknownHrpError","UnrecognizedScript","WitnessProgram","WitnessProgram","WitnessVersion","WitnessVersion","Amount","Bit","Bitcoin","CentiBitcoin","CheckedSum","Denomination","Display","InputTooLarge","InvalidCharacter","MicroBitcoin","MilliBitcoin","MilliSatoshi","MissingDigits","NanoBitcoin","OutOfRange","ParseAmountError","PicoBitcoin","Satoshi","SignedAmount","TooPrecise","borrow","borrow","borrow_mut","borrow_mut","checked_sum","clone","clone","clone_into","clone_into","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","serde","show_denomination","source","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","SerdeAmount","SerdeAmountForOpt","as_btc","as_sat","des_btc","des_sat","ser_btc","ser_btc_opt","ser_sat","ser_sat_opt","type_prefix","deserialize","opt","serialize","deserialize","serialize","deserialize","opt","serialize","deserialize","serialize","Decode","Error","IncorrectChecksum","InvalidCharacterError","String","TooShort","Vec","add","add_assign","allocator","append","as_bytes","as_hex","as_mut","as_mut","as_mut","as_mut_ptr","as_mut_slice","as_mut_str","as_mut_vec","as_ptr","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","as_slice","as_str","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capacity","capacity","clear","clear","clone","clone","clone","clone","clone_from","clone_from","clone_into","clone_into","clone_into","clone_into","cmp","cmp","column_result","column_result","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consume","decode","decode_check","dedup","dedup_by","dedup_by_key","default","default","deref","deref","deref_mut","deref_mut","deserialize","deserialize","drain","drain","drop","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","encode","encode_check","encode_check_to_fmt","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","extend","extend","extend","extend","extend","extend","extend","extend","extend_from_slice","extend_from_within","extend_from_within","extend_one","extend_one","extend_one","extend_one","extend_one","extend_one","extend_one","extend_reserve","extend_reserve","extend_reserve","extend_reserve","extract_if","flush","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_hex","from_iter","from_iter","from_iter","from_iter","from_iter","from_iter","from_iter","from_raw_parts","from_raw_parts","from_raw_parts_in","from_str","from_utf16","from_utf16_lossy","from_utf16be","from_utf16be_lossy","from_utf16le","from_utf16le_lossy","from_utf8","from_utf8_lossy","from_utf8_unchecked","hash","hash","hex_reserve_suggestion","index","index","index_mut","index_mut","insert","insert","insert_str","into","into","into","into","into_assets","into_boxed_slice","into_boxed_str","into_bytes","into_derivation_path","into_derivation_path","into_deserializer","into_deserializer","into_flattened","into_iter","into_iter","into_iter","into_raw_parts","into_raw_parts","into_raw_parts_with_alloc","into_searcher","invalid_base58_character","is_contained_in","is_empty","is_empty","is_empty","is_prefix_of","is_suffix_of","is_write_vectored","leak","leak","len","len","merge","ne","ne","ne","ne","ne","ne","ne","ne","ne","new","new","new_in","partial_cmp","partial_cmp","pop","pop","pop_if","push","push","push_str","push_within_capacity","remove","remove","remove_matches","replace_range","reserve","reserve","reserve_exact","reserve_exact","resize","resize_with","retain","retain","retain_mut","serialize","serialize","set_len","shrink_to","shrink_to","shrink_to_fit","shrink_to_fit","source","spare_capacity_mut","splice","split_at_spare_mut","split_off","split_off","strip_prefix_of","strip_suffix_of","swap_remove","to_owned","to_owned","to_owned","to_owned","to_socket_addrs","to_sql","to_sql","to_string","to_string","to_string","truncate","truncate","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_reserve","try_reserve","try_reserve_exact","try_reserve_exact","try_with_capacity","try_with_capacity","try_with_capacity_in","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","with_capacity","with_capacity","with_capacity_in","write","write","write_all","write_char","write_str","write_vectored","Decode","Error","IncorrectChecksum","IncorrectChecksumError","InvalidCharacterError","TooShort","TooShortError","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","incorrect_checksum","into","into","invalid_base58_length","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Config","DecodeError","DecodeError","DecodeEstimate","DecodeSliceError","EncodeSliceError","Engine","InvalidByte","InvalidLastSymbol","InvalidLength","InvalidPadding","OutputSliceTooSmall","OutputSliceTooSmall","alphabet","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","config","decode","decode","decode_engine","decode_engine_slice","decode_engine_vec","decode_slice","decode_slice_unchecked","decode_vec","decoded_len_estimate","display","encode","encode","encode_engine","encode_engine_slice","encode_engine_string","encode_slice","encode_string","encoded_len","engine","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","prelude","read","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write","Alphabet","BCRYPT","BIN_HEX","CRYPT","DuplicatedByte","IMAP_MUTF7","InvalidLength","ParseAlphabetError","ReservedByte","STANDARD","URL_SAFE","UnprintableByte","as_str","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","into","into","new","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Base64Display","borrow","borrow_mut","fmt","from","into","new","to_string","try_from","try_into","type_id","vzip","Config","Config","DecodeEstimate","DecodeEstimate","DecodeMetadata","DecodePaddingMode","Engine","GeneralPurpose","GeneralPurposeConfig","Indifferent","RequireCanonical","RequireNone","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","config","config","decode","decode_slice","decode_slice_unchecked","decode_vec","decoded_len_estimate","default","encode","encode_padding","encode_padding","encode_slice","encode_string","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","general_purpose","into","into","into","into","new","new","to_owned","to_owned","to_owned","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_decode_allow_trailing_bits","with_decode_padding_mode","with_encode_padding","GeneralPurpose","GeneralPurposeConfig","NO_PAD","PAD","STANDARD","STANDARD_NO_PAD","URL_SAFE","URL_SAFE_NO_PAD","BASE64_STANDARD","BASE64_STANDARD_NO_PAD","BASE64_URL_SAFE","BASE64_URL_SAFE_NO_PAD","Config","DecodeEstimate","Engine","config","decode","decode_slice","decode_slice_unchecked","decode_vec","encode","encode_slice","encode_string","DecoderReader","borrow","borrow_mut","fmt","from","into","into_inner","new","read","try_from","try_into","type_id","vzip","EncoderStringWriter","EncoderWriter","StrConsumer","borrow","borrow","borrow_mut","borrow_mut","consume","drop","finish","flush","flush","fmt","from","from","from_consumer","into","into","into_inner","into_inner","new","new","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","BlockTransactions","BlockTransactionsRequest","Error","HeaderAndShortIds","InvalidPrefill","PrefilledTransaction","ShortId","TxIndexOutOfRangeError","UnknownVersion","as_bytes","as_mut","as_mut","as_mut_ptr","as_ptr","as_ref","as_ref","as_ref","block_hash","block_hash","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","calculate_siphash_keys","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","default","deserialize","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_block","from_hex","from_request","from_str","hash","hash","hash","hash","hash","header","idx","index","indexes","into","into","into","into","into","into","into","is_empty","len","nonce","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","prefilled_txs","serialize","short_ids","source","source","to_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","transactions","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","tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_siphash_keys","BitStreamReader","BitStreamWriter","BlockFilter","BlockFilterReader","BlockFilterWriter","Error","FilterHash","FilterHeader","GcsFilterReader","GcsFilterWriter","Io","UtxoMissing","add_element","add_element","add_input_scripts","add_output_scripts","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","content","eq","equivalent","equivalent","filter_header","finish","finish","flush","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","match_all","match_all","match_all","match_any","match_any","match_any","new","new","new","new","new","new","new","new_script_filter","read","source","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write","Base58","CannotDeriveFromHardenedKey","ChainCode","ChildNumber","DerivationPath","DerivationPathIterator","Error","ExtendedPrivKey","ExtendedPubKey","ExtendendPrivKey","ExtendendPubKey","Fingerprint","Hardened","Hex","IntoDerivationPath","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidChildNumber","InvalidChildNumberFormat","InvalidDerivationPathFormat","InvalidPublicKeyHexLength","KeySource","Normal","Secp256k1","UnknownVersion","WrongExtendedKeyLength","XKeyIdentifier","Xpriv","Xpub","as_bytes","as_bytes","as_mut","as_mut","as_mut","as_mut","as_mut_ptr","as_mut_ptr","as_ptr","as_ptr","as_ref","as_ref","as_ref","as_ref","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_derive_hardened","can_derive_hardened","chain_code","chain_code","chain_code","chain_code","chain_code","chain_code","child","child_number","child_number","child_number","child_number","child_number","child_number","children_from","ckd_pub","ckd_pub_tweak","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","decode","decode","default","default","depth","depth","depth","depth","depth","depth","derive_priv","derive_pub","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","encode","encode","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend","fingerprint","fingerprint","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_hardened_idx","from_hex","from_hex","from_iter","from_normal_idx","from_priv","from_str","from_str","from_str","from_str","from_str","from_str","get_key","hardened_children","hash","hash","hash","hash","hash","identifier","identifier","increment","index","index","index","into","into","into","into","into","into","into","into","into","into_child","into_derivation_path","into_derivation_path","into_fallible","into_iter","into_iter","invalid_base58_payload_length","is_empty","is_empty","is_empty","is_hardened","is_master","is_normal","len","len","len","master","network","network","network","network","network","network","new_master","next","normal_children","parent_fingerprint","parent_fingerprint","parent_fingerprint","parent_fingerprint","parent_fingerprint","parent_fingerprint","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","private_key","private_key","private_key","public_key","public_key","public_key","serialize","serialize","serialize","serialize","serialize","serialize","source","start_from","to_bytes","to_bytes","to_keypair","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_priv","to_pub","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_u32_vec","to_x_only_pub","transpose_into_fallible","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","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","xkey_fingerprint","xkey_fingerprint","index","index","FeeRate","Weight","block","constants","fee_rate","locktime","opcodes","script","transaction","weight","witness","BadProofOfWork","BadTarget","Bip34Error","Block","BlockHash","Header","NO_SOFT_FORK_SIGNALLING","NegativeHeight","NotPresent","ONE","SIZE","TWO","TxMerkleNode","UnexpectedPush","Unsupported","ValidationError","Version","WitnessCommitment","WitnessMerkleNode","bits","block_hash","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","default","deserialize","deserialize","difficulty","difficulty_float","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_consensus","hash","hash","header","into","into","into","into","is_signalling_soft_fork","merkle_root","nonce","partial_cmp","partial_cmp","prev_blockhash","serialize","serialize","source","source","target","time","to_consensus","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txdata","type_id","type_id","type_id","type_id","validate_pow","version","vzip","vzip","vzip","vzip","work","BITCOIN","COINBASE_MATURITY","ChainHash","DIFFCHANGE_INTERVAL","DIFFCHANGE_TIMESPAN","MAX_BLOCK_SIGOPS_COST","MAX_SCRIPTNUM_VALUE","MAX_SCRIPT_ELEMENT_SIZE","PUBKEY_ADDRESS_PREFIX_MAIN","PUBKEY_ADDRESS_PREFIX_TEST","REGTEST","SCRIPT_ADDRESS_PREFIX_MAIN","SCRIPT_ADDRESS_PREFIX_TEST","SIGNET","SUBSIDY_HALVING_INTERVAL","TARGET_BLOCK_SPACING","TESTNET","WITNESS_SCALE_FACTOR","as_bytes","as_mut","as_mut","as_mut_ptr","as_ptr","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cmp","deserialize","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from_genesis_block_hash","from_hex","from_str","genesis_block","hash","index","into","is_empty","len","partial_cmp","serialize","to_bytes","to_owned","to_string","try_from","try_from","try_into","type_id","using_genesis_block","using_genesis_block_const","vzip","FeeRate","absolute","relative","Blocks","ConversionError","Height","LOCK_TIME_THRESHOLD","LockTime","MAX","MAX","MIN","MIN","ParseHeightError","ParseTimeError","SIZE","Seconds","Time","ZERO","ZERO","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_after","check_after","check_older","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_encode","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_consensus","from_consensus","from_consensus","from_height","from_hex","from_hex","from_hex","from_str","from_str","from_str","from_time","from_unprefixed_hex","hash","hash","hash","into","into","into","into","into","into","is_block_height","is_block_time","is_implied_by","is_same_unit","is_satisfied_by","partial_cmp","partial_cmp","partial_cmp","provider_lookup_ecdsa_sig","provider_lookup_hash160","provider_lookup_hash256","provider_lookup_raw_pkh_ecdsa_sig","provider_lookup_raw_pkh_pk","provider_lookup_raw_pkh_tap_leaf_script_sig","provider_lookup_raw_pkh_x_only_pk","provider_lookup_ripemd160","provider_lookup_sha256","provider_lookup_tap_control_block_map","provider_lookup_tap_key_spend_sig","provider_lookup_tap_leaf_script_sig","serialize","serialize","serialize","source","source","source","to_consensus_u32","to_consensus_u32","to_consensus_u32","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_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","Blocks","DisabledLockTimeError","Height","IncompatibleHeightError","IncompatibleTimeError","LockTime","MAX","MAX","MIN","MIN","SIZE","Time","Time","TimeOverflowError","ZERO","ZERO","ZERO","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_after","check_older","check_older","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deserialize","deserialize","deserialize","disabled_locktime_value","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from_512_second_intervals","from_512_second_intervals","from_consensus","from_height","from_height","from_seconds_ceil","from_seconds_ceil","from_seconds_floor","from_seconds_floor","from_sequence","from_str","from_str","hash","hash","hash","height","height","into","into","into","into","into","into","into","is_block_height","is_block_time","is_implied_by","is_implied_by_sequence","is_same_unit","is_satisfied_by","is_satisfied_by_height","is_satisfied_by_time","new","partial_cmp","partial_cmp","partial_cmp","provider_lookup_ecdsa_sig","provider_lookup_hash160","provider_lookup_hash256","provider_lookup_raw_pkh_ecdsa_sig","provider_lookup_raw_pkh_pk","provider_lookup_raw_pkh_tap_leaf_script_sig","provider_lookup_raw_pkh_x_only_pk","provider_lookup_ripemd160","provider_lookup_sha256","provider_lookup_tap_control_block_map","provider_lookup_tap_key_spend_sig","provider_lookup_tap_leaf_script_sig","serialize","serialize","serialize","time","time","to_consensus_u32","to_consensus_u32","to_consensus_u32","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_sequence","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_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","value","value","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Class","ClassifyContext","IllegalOp","Legacy","NoOp","OP_0","OP_FALSE","OP_NOP2","OP_NOP3","OP_TRUE","Opcode","Ordinary","PushBytes","PushNum","ReturnOp","SuccessOp","TapScript","all","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","hash","into","into","partial_cmp","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","OP_0NOTEQUAL","OP_1ADD","OP_1SUB","OP_2DIV","OP_2DROP","OP_2DUP","OP_2MUL","OP_2OVER","OP_2ROT","OP_2SWAP","OP_3DUP","OP_ABS","OP_ADD","OP_AND","OP_BOOLAND","OP_BOOLOR","OP_CAT","OP_CHECKMULTISIG","OP_CHECKMULTISIGVERIFY","OP_CHECKSIG","OP_CHECKSIGADD","OP_CHECKSIGVERIFY","OP_CLTV","OP_CODESEPARATOR","OP_CSV","OP_DEPTH","OP_DIV","OP_DROP","OP_DUP","OP_ELSE","OP_ENDIF","OP_EQUAL","OP_EQUALVERIFY","OP_FROMALTSTACK","OP_GREATERTHAN","OP_GREATERTHANOREQUAL","OP_HASH160","OP_HASH256","OP_IF","OP_IFDUP","OP_INVALIDOPCODE","OP_INVERT","OP_LEFT","OP_LESSTHAN","OP_LESSTHANOREQUAL","OP_LSHIFT","OP_MAX","OP_MIN","OP_MOD","OP_MUL","OP_NEGATE","OP_NIP","OP_NOP","OP_NOP1","OP_NOP10","OP_NOP4","OP_NOP5","OP_NOP6","OP_NOP7","OP_NOP8","OP_NOP9","OP_NOT","OP_NOTIF","OP_NUMEQUAL","OP_NUMEQUALVERIFY","OP_NUMNOTEQUAL","OP_OR","OP_OVER","OP_PICK","OP_PUSHBYTES_0","OP_PUSHBYTES_1","OP_PUSHBYTES_10","OP_PUSHBYTES_11","OP_PUSHBYTES_12","OP_PUSHBYTES_13","OP_PUSHBYTES_14","OP_PUSHBYTES_15","OP_PUSHBYTES_16","OP_PUSHBYTES_17","OP_PUSHBYTES_18","OP_PUSHBYTES_19","OP_PUSHBYTES_2","OP_PUSHBYTES_20","OP_PUSHBYTES_21","OP_PUSHBYTES_22","OP_PUSHBYTES_23","OP_PUSHBYTES_24","OP_PUSHBYTES_25","OP_PUSHBYTES_26","OP_PUSHBYTES_27","OP_PUSHBYTES_28","OP_PUSHBYTES_29","OP_PUSHBYTES_3","OP_PUSHBYTES_30","OP_PUSHBYTES_31","OP_PUSHBYTES_32","OP_PUSHBYTES_33","OP_PUSHBYTES_34","OP_PUSHBYTES_35","OP_PUSHBYTES_36","OP_PUSHBYTES_37","OP_PUSHBYTES_38","OP_PUSHBYTES_39","OP_PUSHBYTES_4","OP_PUSHBYTES_40","OP_PUSHBYTES_41","OP_PUSHBYTES_42","OP_PUSHBYTES_43","OP_PUSHBYTES_44","OP_PUSHBYTES_45","OP_PUSHBYTES_46","OP_PUSHBYTES_47","OP_PUSHBYTES_48","OP_PUSHBYTES_49","OP_PUSHBYTES_5","OP_PUSHBYTES_50","OP_PUSHBYTES_51","OP_PUSHBYTES_52","OP_PUSHBYTES_53","OP_PUSHBYTES_54","OP_PUSHBYTES_55","OP_PUSHBYTES_56","OP_PUSHBYTES_57","OP_PUSHBYTES_58","OP_PUSHBYTES_59","OP_PUSHBYTES_6","OP_PUSHBYTES_60","OP_PUSHBYTES_61","OP_PUSHBYTES_62","OP_PUSHBYTES_63","OP_PUSHBYTES_64","OP_PUSHBYTES_65","OP_PUSHBYTES_66","OP_PUSHBYTES_67","OP_PUSHBYTES_68","OP_PUSHBYTES_69","OP_PUSHBYTES_7","OP_PUSHBYTES_70","OP_PUSHBYTES_71","OP_PUSHBYTES_72","OP_PUSHBYTES_73","OP_PUSHBYTES_74","OP_PUSHBYTES_75","OP_PUSHBYTES_8","OP_PUSHBYTES_9","OP_PUSHDATA1","OP_PUSHDATA2","OP_PUSHDATA4","OP_PUSHNUM_1","OP_PUSHNUM_10","OP_PUSHNUM_11","OP_PUSHNUM_12","OP_PUSHNUM_13","OP_PUSHNUM_14","OP_PUSHNUM_15","OP_PUSHNUM_16","OP_PUSHNUM_2","OP_PUSHNUM_3","OP_PUSHNUM_4","OP_PUSHNUM_5","OP_PUSHNUM_6","OP_PUSHNUM_7","OP_PUSHNUM_8","OP_PUSHNUM_9","OP_PUSHNUM_NEG1","OP_RESERVED","OP_RESERVED1","OP_RESERVED2","OP_RETURN","OP_RETURN_187","OP_RETURN_188","OP_RETURN_189","OP_RETURN_190","OP_RETURN_191","OP_RETURN_192","OP_RETURN_193","OP_RETURN_194","OP_RETURN_195","OP_RETURN_196","OP_RETURN_197","OP_RETURN_198","OP_RETURN_199","OP_RETURN_200","OP_RETURN_201","OP_RETURN_202","OP_RETURN_203","OP_RETURN_204","OP_RETURN_205","OP_RETURN_206","OP_RETURN_207","OP_RETURN_208","OP_RETURN_209","OP_RETURN_210","OP_RETURN_211","OP_RETURN_212","OP_RETURN_213","OP_RETURN_214","OP_RETURN_215","OP_RETURN_216","OP_RETURN_217","OP_RETURN_218","OP_RETURN_219","OP_RETURN_220","OP_RETURN_221","OP_RETURN_222","OP_RETURN_223","OP_RETURN_224","OP_RETURN_225","OP_RETURN_226","OP_RETURN_227","OP_RETURN_228","OP_RETURN_229","OP_RETURN_230","OP_RETURN_231","OP_RETURN_232","OP_RETURN_233","OP_RETURN_234","OP_RETURN_235","OP_RETURN_236","OP_RETURN_237","OP_RETURN_238","OP_RETURN_239","OP_RETURN_240","OP_RETURN_241","OP_RETURN_242","OP_RETURN_243","OP_RETURN_244","OP_RETURN_245","OP_RETURN_246","OP_RETURN_247","OP_RETURN_248","OP_RETURN_249","OP_RETURN_250","OP_RETURN_251","OP_RETURN_252","OP_RETURN_253","OP_RETURN_254","OP_RIGHT","OP_RIPEMD160","OP_ROLL","OP_ROT","OP_RSHIFT","OP_SHA1","OP_SHA256","OP_SIZE","OP_SUB","OP_SUBSTR","OP_SWAP","OP_TOALTSTACK","OP_TUCK","OP_VER","OP_VERIF","OP_VERIFY","OP_VERNOTIF","OP_WITHIN","OP_XOR","Builder","Bytes","EarlyEndOfScript","Error","Instruction","InstructionIndices","Instructions","NonMinimalPush","NumericOverflow","Op","PushBytes","PushBytes","PushBytesBuf","PushBytesError","PushBytesErrorReport","Script","ScriptBuf","ScriptHash","Serialization","UnknownSpentOutput","WScriptHash","as_bytes","as_bytes","as_mut","as_mut","as_mut","as_mut_bytes","as_mut_push_bytes","as_push_bytes","as_ref","as_ref","as_ref","as_script","as_script","as_script","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","capacity","clear","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deref_mut","empty","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","extend_from_slice","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","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","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","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","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","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","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","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","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","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","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","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","index","index","index","index","index","index","index","index","input_len","input_len","into","into","into","into","into","into","into","into","into_bytes","into_fallible","into_fallible","into_fallible","into_iter","into_iter","into_iter","into_script","is_empty","is_empty","is_empty","len","len","len","new","new","next","next","next","next_back","nth","nth","nth_back","opcode","partial_cmp","partial_cmp","pop","push","push_bytes","push_int","push_key","push_lock_time","push_opcode","push_sequence","push_slice","push_verify","push_x_only_key","read_scriptbool","read_scriptint","read_scriptint_non_minimal","remove","reserve","script_num","size_hint","size_hint","size_hint","source","source","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","transpose_into_fallible","transpose_into_fallible","transpose_into_fallible","truncate","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","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","with_capacity","witness_program","witness_version","write_scriptint","Error","InvalidLength","InvalidSegwitV0Length","MAX_SIZE","MIN_SIZE","WitnessProgram","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fmt","fmt","from","from","into","source","to_owned","to_string","try_from","try_into","type_id","vzip","DataPush","FromStrError","Invalid","TryFrom","TryFromError","TryFromInstructionError","Unparsable","V0","V1","V10","V11","V12","V13","V14","V15","V16","V2","V3","V4","V5","V6","V7","V8","V9","WitnessVersion","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","invalid_version","source","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Format","IndexOutOfBoundsError","InputWeightPrediction","InputsIndexError","ONE","OutPoint","OutputsIndexError","P2PKH_COMPRESSED_MAX","P2PKH_UNCOMPRESSED_MAX","P2TR_KEY_DEFAULT_SIGHASH","P2TR_KEY_NON_DEFAULT_SIGHASH","P2WPKH_MAX","ParseOutPointError","Sequence","TWO","TooLong","Transaction","TxIn","TxOut","Txid","Txid","Version","Vout","VoutNotCanonical","Wtxid","borrow","borrow","borrow","borrow","borrow","borrow","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","consensus_decode","consensus_encode","deserialize","effective_value","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_slice","ground_p2pkh_compressed","ground_p2wpkh","hash","index","input","into","into","into","into","into","into","is_standard","length","lock_time","new","non_standard","output","partial_cmp","predict_weight","predict_weight_from_slices","previous_output","script_pubkey","script_sig","sequence","serialize","source","source","source","source","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","txid","type_id","type_id","type_id","type_id","type_id","type_id","value","version","vout","vzip","vzip","vzip","vzip","vzip","vzip","weight","witness","WITNESS_SCALE_FACTOR","Weight","Iter","Witness","borrow","borrow_mut","from","into","into_fallible","into_iter","next","size_hint","transpose_into_fallible","try_from","try_into","type_id","vzip","BITCOIN","Consensus","Decodable","DecodeError","Encodable","MAINNET","Other","Params","REGTEST","ReadExt","SIGNET","TESTNET","TooManyBytes","WriteExt","allow_min_difficulty_blocks","as_ref","bip16_time","bip34_height","bip65_height","bip66_height","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","consensus_decode","consensus_decode_from_finite_reader","consensus_encode","deserialize","deserialize_partial","difficulty_adjustment_interval","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","encode","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into_de_error","max_attainable_target","miner_confirmation_window","network","new","no_pow_retargeting","params","pow_limit","pow_target_spacing","pow_target_timespan","read_bool","read_i16","read_i32","read_i64","read_i8","read_slice","read_u16","read_u32","read_u64","read_u8","rule_change_activation_threshold","serde","serialize","source","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","CheckedData","Decodable","Decode","Encodable","Error","FromHexError","InvalidChecksum","Io","MAX_VEC_SIZE","NonMinimalVarInt","OddLengthString","OversizedVectorAllocation","ParseFailed","ReadExt","UnsupportedSegwitFlag","VarInt","WriteExt","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","checksum","clone","clone_into","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","data","deserialize","deserialize_hex","deserialize_partial","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into_data","new","read_bool","read_i16","read_i32","read_i64","read_i8","read_slice","read_u16","read_u32","read_u64","read_u8","serialize","serialize_hex","source","source","to_owned","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","actual","expected","max","requested","MAINNET","Params","REGTEST","SIGNET","TESTNET","allow_min_difficulty_blocks","bip16_time","bip34_height","bip65_height","bip66_height","max_attainable_target","miner_confirmation_window","network","no_pow_retargeting","pow_limit","pow_target_spacing","pow_target_timespan","rule_change_activation_threshold","ByteDecoder","ByteEncoder","DecodeError","Decoder","EncodeBytes","Encoder","Hex","InitError","IntoDeError","With","borrow","borrow","borrow_mut","borrow_mut","default","deserialize","encode_chunk","flush","from","from","from_str","from_str","hex","into","into","into_de_error","serialize","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Case","DecodeError","DecodeInitError","Decoder","Encoder","Lower","Upper","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","encode_chunk","eq","eq","equivalent","equivalent","equivalent","equivalent","flush","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into","into_de_error","into_de_error","into_fallible","into_iter","next","to_owned","to_owned","transpose_into_fallible","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","EmptySignature","Error","Hex","Secp256k1","SerializedSignature","SighashType","Signature","as_mut","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","deref","deref_mut","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_slice","from_str","hash","hash","into","into","into","into_iter","iter","serialize","serialize","serialize_to_writer","sighash_all","sighash_type","signature","source","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_vec","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write_to","ContainsPrefix","ContainsPrefixError","MissingPrefix","MissingPrefixError","ParseInt","ParseInt","ParseIntError","PrefixedHexError","UnprefixedHexError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","into","source","source","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","BlockHash","FilterHash","FilterHeader","TxMerkleNode","Txid","WitnessCommitment","WitnessMerkleNode","Wtxid","BLOCK_SIZE","Bytes","DISPLAY_BACKWARD","Engine","FromSliceError","Hash","HashEngine","Hmac","HmacEngine","LEN","MidState","all_zeros","as_byte_array","borrow_slice_impl","cmp","engine","from_byte_array","from_engine","from_slice","hash","hash160","hash_byte_chunks","hash_newtype","hex_fmt_impl","hmac","input","midstate","n_bytes_hashed","ripemd160","serde_impl","serde_macros","sha1","sha256","sha256d","sha256t","sha256t_hash_newtype","sha384","sha512","sha512_256","siphash24","to_byte_array","fixed_time_eq","Hash","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","into","into_assets","partial_cmp","serialize","to_byte_array","to_owned","to_string","try_from","try_into","type_id","vzip","BytesToHexIter","Case","Display","DisplayHex","Error","FromHex","HexSliceToBytesIter","HexToArrayError","HexToBytesError","HexToBytesIter","InvalidChar","InvalidChar","InvalidCharError","InvalidLength","Lower","OddLengthString","OddLengthStringError","Upper","append_hex_to_string","as_hex","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","buf_encoder","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","default","display","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt_hex_exact","from","from","from","from","from","from","from","from","from","from","from","from_hex","from_pairs","hash","hex_reserve_suggestion","impl_fmt_traits","into","into","into","into","into","into","into","into_fallible","into_fallible","into_iter","into_iter","invalid_char","len","length","new","new","next","next","next_back","next_back","nth","nth_back","parse","prelude","read","size_hint","size_hint","source","source","source","source","test_hex_unwrap","to_hex_string","to_lower_hex_string","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_upper_hex_string","transpose_into_fallible","transpose_into_fallible","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","write_err","BufEncoder","as_str","borrow","borrow_mut","clear","default","from","into","is_full","new","put_byte","put_bytes","put_bytes_min","space_remaining","try_from","try_into","type_id","vzip","Display","DisplayArray","DisplayByteSlice","DisplayHex","append_hex_to_string","as_hex","borrow","borrow","borrow_mut","borrow_mut","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt_hex_exact","from","from","hex_reserve_suggestion","impl_fmt_traits","into","into","to_hex_string","to_lower_hex_string","to_string","to_string","to_upper_hex_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","HexToArrayError","HexToBytesError","InvalidChar","InvalidChar","InvalidCharError","InvalidLength","InvalidLengthError","OddLengthString","OddLengthStringError","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","expected","fmt","fmt","from","into","invalid","source","to_owned","to_string","try_from","try_into","type_id","vzip","Error","FromHex","HexToArrayError","HexToBytesError","InvalidChar","InvalidChar","InvalidLength","OddLengthString","from_hex","Display","DisplayHex","Error","FromHex","append_hex_to_string","as_hex","from_hex","hex_reserve_suggestion","to_hex_string","to_lower_hex_string","to_upper_hex_string","Hmac","HmacEngine","HmacMidState","borrow","borrow_mut","from","inner","into","outer","try_from","try_into","type_id","vzip","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","into_assets","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","Deserialize","Deserialize","Deserializer","Error","Error","Ok","Serialize","Serialize","SerializeMap","SerializeSeq","SerializeStruct","SerializeStructVariant","SerializeTuple","SerializeTupleStruct","SerializeTupleVariant","Serializer","collect_map","collect_seq","collect_str","de","deserialize","deserialize_any","deserialize_bool","deserialize_byte_buf","deserialize_bytes","deserialize_char","deserialize_enum","deserialize_f32","deserialize_f64","deserialize_i128","deserialize_i16","deserialize_i32","deserialize_i64","deserialize_i8","deserialize_identifier","deserialize_ignored_any","deserialize_map","deserialize_newtype_struct","deserialize_option","deserialize_seq","deserialize_str","deserialize_string","deserialize_struct","deserialize_tuple","deserialize_tuple_struct","deserialize_u128","deserialize_u16","deserialize_u32","deserialize_u64","deserialize_u8","deserialize_unit","deserialize_unit_struct","forward_to_deserialize_any","is_human_readable","is_human_readable","ser","serialize","serialize_bool","serialize_bytes","serialize_char","serialize_f32","serialize_f64","serialize_i128","serialize_i16","serialize_i32","serialize_i64","serialize_i8","serialize_map","serialize_newtype_struct","serialize_newtype_variant","serialize_none","serialize_seq","serialize_some","serialize_str","serialize_struct","serialize_struct_variant","serialize_tuple","serialize_tuple_struct","serialize_tuple_variant","serialize_u128","serialize_u16","serialize_u32","serialize_u64","serialize_u8","serialize_unit","serialize_unit_struct","serialize_unit_variant","Bool","Bytes","Char","Deserialize","DeserializeOwned","DeserializeSeed","Deserializer","Deserializer","Enum","EnumAccess","Error","Error","Error","Error","Error","Error","Expected","Float","IgnoredAny","IntoDeserializer","Map","MapAccess","NewtypeStruct","NewtypeVariant","Option","Other","Seq","SeqAccess","Signed","StdError","Str","StructVariant","TupleVariant","Unexpected","Unit","UnitVariant","Unsigned","Value","Value","Variant","VariantAccess","Visitor","borrow","borrow","borrow_mut","borrow_mut","cause","clone","clone","clone_into","clone_into","custom","default","description","deserialize","deserialize","deserialize","deserialize_any","deserialize_bool","deserialize_byte_buf","deserialize_bytes","deserialize_char","deserialize_enum","deserialize_f32","deserialize_f64","deserialize_i128","deserialize_i16","deserialize_i32","deserialize_i64","deserialize_i8","deserialize_identifier","deserialize_ignored_any","deserialize_map","deserialize_newtype_struct","deserialize_option","deserialize_seq","deserialize_str","deserialize_string","deserialize_struct","deserialize_tuple","deserialize_tuple_struct","deserialize_u128","deserialize_u16","deserialize_u32","deserialize_u64","deserialize_u8","deserialize_unit","deserialize_unit_struct","duplicate_field","eq","eq","expecting","expecting","fmt","fmt","fmt","fmt","fmt","fmt","from","from","into","into","into_deserializer","invalid_length","invalid_type","invalid_value","is_human_readable","missing_field","newtype_variant","newtype_variant_seed","next_element","next_element_seed","next_entry","next_entry_seed","next_key","next_key_seed","next_value","next_value_seed","provide","size_hint","size_hint","source","struct_variant","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","tuple_variant","type_id","type_id","unit_variant","unknown_field","unknown_variant","value","variant","variant_seed","visit_bool","visit_bool","visit_borrowed_bytes","visit_borrowed_str","visit_byte_buf","visit_bytes","visit_bytes","visit_char","visit_enum","visit_enum","visit_f32","visit_f64","visit_f64","visit_i128","visit_i128","visit_i16","visit_i32","visit_i64","visit_i64","visit_i8","visit_map","visit_map","visit_newtype_struct","visit_newtype_struct","visit_none","visit_none","visit_seq","visit_seq","visit_some","visit_some","visit_str","visit_str","visit_string","visit_u128","visit_u128","visit_u16","visit_u32","visit_u64","visit_u64","visit_u8","visit_unit","visit_unit","vzip","vzip","BoolDeserializer","BorrowedBytesDeserializer","BorrowedStrDeserializer","BytesDeserializer","CharDeserializer","CowStrDeserializer","EnumAccessDeserializer","Error","F32Deserializer","F64Deserializer","I128Deserializer","I16Deserializer","I32Deserializer","I64Deserializer","I8Deserializer","IsizeDeserializer","MapAccessDeserializer","MapDeserializer","SeqAccessDeserializer","SeqDeserializer","StrDeserializer","StringDeserializer","U128Deserializer","U16Deserializer","U32Deserializer","U64Deserializer","U8Deserializer","UnitDeserializer","UsizeDeserializer","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","custom","custom","description","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_any","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_bool","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_byte_buf","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_bytes","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_char","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_enum","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f32","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_f64","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i128","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i16","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i32","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i64","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_i8","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_identifier","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_ignored_any","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_map","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_newtype_struct","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_option","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_seq","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_str","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_string","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_struct","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_tuple_struct","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u128","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u16","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u32","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u64","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_u8","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","deserialize_unit_struct","end","end","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","next_element_seed","next_element_seed","next_entry_seed","next_key_seed","next_value_seed","size_hint","size_hint","size_hint","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","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_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","variant_seed","variant_seed","variant_seed","variant_seed","variant_seed","variant_seed","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Error","Error","Error","Error","Error","Error","Error","Error","Error","Impossible","Ok","Ok","Ok","Ok","Ok","Ok","Ok","Ok","Serialize","SerializeMap","SerializeMap","SerializeSeq","SerializeSeq","SerializeStruct","SerializeStruct","SerializeStructVariant","SerializeStructVariant","SerializeTuple","SerializeTuple","SerializeTupleStruct","SerializeTupleStruct","SerializeTupleVariant","SerializeTupleVariant","Serializer","StdError","borrow","borrow_mut","cause","collect_map","collect_seq","collect_str","custom","description","downcast","downcast","downcast","downcast_mut","downcast_mut","downcast_mut","downcast_ref","downcast_ref","downcast_ref","end","end","end","end","end","end","end","end","end","end","end","end","end","end","from","into","is","is","is","is_human_readable","provide","serialize","serialize_bool","serialize_bytes","serialize_char","serialize_element","serialize_element","serialize_element","serialize_element","serialize_entry","serialize_f32","serialize_f64","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_field","serialize_i128","serialize_i16","serialize_i32","serialize_i64","serialize_i8","serialize_key","serialize_key","serialize_map","serialize_newtype_struct","serialize_newtype_variant","serialize_none","serialize_seq","serialize_some","serialize_str","serialize_struct","serialize_struct_variant","serialize_tuple","serialize_tuple_struct","serialize_tuple_variant","serialize_u128","serialize_u16","serialize_u32","serialize_u64","serialize_u8","serialize_unit","serialize_unit_struct","serialize_unit_variant","serialize_value","serialize_value","skip_field","skip_field","source","sources","try_from","try_into","type_id","vzip","serde_details","N","SerdeHash","deserialize","from_slice_delegated","serialize","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","Hash","HashEngine","Midstate","all_zeros","as_byte_array","as_ref","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_encode","const_hash","default","default","deserialize","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","eq","equivalent","equivalent","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from_byte_array","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_hex","from_midstate","from_slice","from_slice","from_slice_delegated","from_slice_delegated","from_str","from_str","hash","hash","hash_again","hash_tag","index","index","input","into","into","into","into_assets","midstate","n_bytes_hashed","partial_cmp","partial_cmp","serialize","serialize","to_byte_array","to_byte_array","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write","write","Hash","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","consensus_decode","consensus_encode","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","into","partial_cmp","serialize","to_byte_array","to_owned","to_string","try_from","try_into","type_id","vzip","Hash","Tag","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","default","deserialize","engine","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","into","partial_cmp","serialize","to_byte_array","to_owned","to_string","try_from","try_into","type_id","vzip","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write","write","Hash","HashEngine","all_zeros","as_byte_array","as_ref","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","default","deserialize","engine","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_slice","from_slice_delegated","from_str","hash","index","input","into","into","midstate","n_bytes_hashed","partial_cmp","serialize","to_byte_array","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Hash","HashEngine","State","all_zeros","as_byte_array","as_ref","as_ref","as_u64","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","equivalent","equivalent","flush","flush","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from_byte_array","from_bytes_mut","from_bytes_ref","from_engine","from_engine_to_u64","from_slice","from_slice_delegated","from_str","from_u64","hash","hash_to_u64_with_keys","hash_with_keys","index","input","into","into","into","keys","midstate","n_bytes_hashed","new","partial_cmp","serialize","to_byte_array","to_owned","to_owned","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_keys","write","write","AddrInUse","AddrNotAvailable","AlreadyExists","BrokenPipe","BufRead","ConnectionAborted","ConnectionRefused","ConnectionReset","Cursor","Err","Error","ErrorKind","Interrupted","InvalidData","InvalidInput","NotConnected","NotFound","Ok","Other","PermissionDenied","Read","Result","Sink","Take","TimedOut","UnexpectedEof","WouldBlock","Write","WriteZero","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone_into","consume","consume","consume","description","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","eq","equivalent","equivalent","fill_buf","fill_buf","fill_buf","flush","flush","flush","fmt","fmt","fmt","from","from","from","from","from","from","from","from","get_ref","hash","impl_write","into","into","into","into","into","into_inner","kind","new","new","position","read","read","read","read_bool","read_bool","read_exact","read_i16","read_i16","read_i32","read_i32","read_i64","read_i64","read_i8","read_i8","read_slice","read_slice","read_to_end","read_to_limit","read_u16","read_u16","read_u32","read_u32","read_u64","read_u64","read_u8","read_u8","sink","source","take","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","write","write","write","write_all","write_all","write_all","Base58","CompressedPublicKey","Encoding","Even","FromSliceError","FromWifError","Hex","InvalidAddressVersion","InvalidAddressVersionError","InvalidBase58PayloadLength","InvalidBase58PayloadLengthError","InvalidChar","InvalidHexLength","InvalidKeyPrefix","InvalidLength","Keypair","Odd","Parity","ParseCompressedPublicKeyError","ParsePublicKeyError","PrivateKey","PubkeyHash","PublicKey","Secp256k1","Secp256k1","Secp256k1","Secp256k1","SortKey","TapTweak","TweakedAux","TweakedKey","TweakedKeypair","TweakedPublicKey","UncompressedPublicKeyError","UntweakedKeypair","UntweakedPublicKey","Verification","WPubkeyHash","XOnlyPublicKey","add_xonly_tweak","as_c_ptr","as_mut_c_ptr","as_mut_ptr","as_ptr","bitxor","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp_fast_unstable","compressed","compressed","ctx","dangerous_assume_tweaked","dangerous_assume_tweaked","dangerous_assume_tweaked","dangerous_assume_tweaked","default","deserialize","deserialize","deserialize","deserialize","display_secret","drop","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_i32","from_keypair","from_raw_all","from_raw_signing_only","from_raw_verification_only","from_seckey_slice","from_seckey_str","from_secret_key","from_str","from_u8","gen_new","generate_keypair","hash","hash","hash","hash","hash","inner","inner","into","into","into","into","into","into","into","into","into","into","into","into","into","invalid_address_version","invalid_base58_payload_length","network","new","new","non_secure_erase","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","preallocate_signing_size","preallocate_size","preallocate_size_gen","preallocate_verification_size","preallocated_gen_new","preallocated_new","preallocated_signing_only","preallocated_verification_only","public_key","public_parts","randomize","recover_ecdsa","secret_bytes","secret_key","seeded_randomize","serialize","serialize","serialize","serialize","serialize","sign_ecdsa","sign_ecdsa_grind_r","sign_ecdsa_low_r","sign_ecdsa_recoverable","sign_ecdsa_recoverable_with_noncedata","sign_ecdsa_with_noncedata","sign_schnorr","sign_schnorr_no_aux_rand","sign_schnorr_with_aux_rand","sign_schnorr_with_rng","signing_only","source","source","source","source","source","tap_tweak","tap_tweak","to_i32","to_inner","to_inner","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_u8","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verification_only","verify_ecdsa","verify_schnorr","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","x_only_public_key","BitsArrayOverflow","HashesArrayOverflow","IdenticalHashesFound","MerkleBlock","MerkleBlockError","MerkleRootMismatch","NoTransactions","NotAllBitsConsumed","NotAllHashesConsumed","NotEnoughBits","PartialMerkleTree","TooManyHashes","TooManyTransactions","bits","borrow","borrow","borrow_mut","borrow_mut","calculate_root","calculate_root_inline","clone","clone","clone_into","clone_into","consensus_decode_from_finite_reader","consensus_encode","eq","eq","equivalent","equivalent","equivalent","equivalent","extract_matches","fmt","fmt","fmt","from","from","from","from_txids","hashes","header","into","into","num_transactions","source","to_owned","to_owned","to_string","try_from","try_from","try_into","try_into","txn","type_id","type_id","vzip","vzip","Bitcoin","Main","Network","NetworkKind","ParseNetworkError","Regtest","Signet","Test","Testnet","UnknownChainHashError","as_core_arg","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","into","into","source","source","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","deserialize","serialize","Address","BITCOIN","BLOOM","COMPACT_FILTERS","GETUTXO","Magic","NETWORK","NETWORK_LIMITED","NONE","P2P_V2","PROTOCOL_VERSION","ParseMagicError","REGTEST","SIGNET","ServiceFlags","TESTNET","UnknownMagicError","WITNESS","add","address","address","as_mut","as_mut","as_ref","as_ref","bitor","bitor_assign","bitxor","bitxor_assign","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_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_decode","consensus_decode","consensus_encode","consensus_encode","consensus_encode","default","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_bytes","from_params","from_str","has","hash","hash","hash","into","into","into","into","into","message","message_blockdata","message_bloom","message_compact_blocks","message_filter","message_network","new","partial_cmp","partial_cmp","port","remove","services","socket_addr","source","source","to_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_socket_addrs","to_string","to_string","to_string","to_string","to_u64","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","AddrV2","AddrV2Message","Address","Cjdns","I2p","Ipv4","Ipv6","TorV2","TorV3","Unknown","addr","address","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","consensus_decode","consensus_decode","consensus_encode","consensus_encode","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","from","from","hash","hash","into","into","port","port","services","services","socket_addr","time","to_owned","to_owned","to_socket_addrs","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Addr","AddrV2","Alert","Block","BlockTxn","CFCheckpt","CFHeaders","CFilter","CmpctBlock","CommandString","CommandStringError","FeeFilter","FilterAdd","FilterClear","FilterLoad","GetAddr","GetBlockTxn","GetBlocks","GetCFCheckpt","GetCFHeaders","GetCFilters","GetData","GetHeaders","Headers","Inv","MAX_INV_SIZE","MAX_MSG_SIZE","MemPool","MerkleBlock","NetworkMessage","NotFound","Ping","Pong","RawNetworkMessage","Reject","SendAddrV2","SendCmpct","SendHeaders","Tx","Unknown","Verack","Version","WtxidRelay","as_ref","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmd","cmd","command","command","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from_str","into","into","into","into","magic","new","payload","source","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from_static","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","command","payload","Block","CompactBlock","Error","GetBlocksMessage","GetHeadersMessage","Inventory","Transaction","Unknown","WTx","WitnessBlock","WitnessTransaction","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","from","hash","into","into","into","locator_hashes","locator_hashes","network_hash","new","new","partial_cmp","stop_hash","stop_hash","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","version","version","vzip","vzip","vzip","hash","inv_type","All","BloomFlags","FilterAdd","FilterLoad","None","PubkeyOnly","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","data","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter","flags","fmt","fmt","fmt","from","from","from","hash_funcs","into","into","into","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","tweak","type_id","type_id","type_id","vzip","vzip","vzip","BlockTxn","CmpctBlock","GetBlockTxn","SendCmpct","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compact_block","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","hash","hash","hash","hash","into","into","into","into","partial_cmp","partial_cmp","partial_cmp","partial_cmp","send_compact","to_owned","to_owned","to_owned","to_owned","transactions","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txs_request","type_id","type_id","type_id","type_id","version","vzip","vzip","vzip","vzip","CFCheckpt","CFHeaders","CFilter","GetCFCheckpt","GetCFHeaders","GetCFilters","block_hash","borrow","borrow","borrow","borrow","borrow","borrow","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","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter","filter_hashes","filter_headers","filter_type","filter_type","filter_type","filter_type","filter_type","filter_type","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into","into","previous_filter_header","start_height","start_height","stop_hash","stop_hash","stop_hash","stop_hash","stop_hash","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_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","Checkpoint","Duplicate","Dust","Fee","Invalid","Malformed","NonStandard","Obsolete","Reject","RejectReason","VersionMessage","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","ccode","clone","clone","clone","clone_into","clone_into","clone_into","consensus_decode","consensus_decode","consensus_decode","consensus_decode_from_finite_reader","consensus_decode_from_finite_reader","consensus_encode","consensus_encode","consensus_encode","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","from","hash","into","into","into","message","new","nonce","reason","receiver","relay","sender","services","start_height","timestamp","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","user_agent","version","vzip","vzip","vzip","ParseIntError","as_ref","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fmt","fmt","from","input","into","source","to_owned","to_string","try_from","try_into","type_id","vzip","DEFAULT_BYTES_PER_SIGOP","DEFAULT_INCREMENTAL_RELAY_FEE","DEFAULT_MEMPOOL_EXPIRY","DEFAULT_MIN_RELAY_TX_FEE","DUST_RELAY_TX_FEE","MAX_STANDARD_TX_SIGOPS_COST","MAX_STANDARD_TX_WEIGHT","MIN_STANDARD_TX_NONWITNESS_SIZE","get_virtual_tx_size","CompactTarget","Target","Work","AbsurdFeeRate","Bare","Base64Encoding","Bip32","Bip32","CombineInconsistentKeySources","ConsensusEncoding","DuplicateKey","Ecdsa","Ecdsa","Error","Error","ExtractTxError","FeeOverflow","GetKey","GetKeyError","IndexOutOfBounds","IndexOutOfBoundsError","Input","Inputs","InvalidControlBlock","InvalidEcdsaSignature","InvalidHash","InvalidKey","InvalidLeafVersion","InvalidMagic","InvalidPreimageHashPair","InvalidProprietaryKey","InvalidPublicKey","InvalidSecp256k1PublicKey","InvalidSeparator","InvalidSighashType","InvalidTaprootSignature","InvalidXOnlyPublicKey","Io","KeyNotFound","KeyRequest","MismatchedAlgoKey","MissingInputUtxo","MissingInputValue","MissingRedeemScript","MissingSpendUtxo","MissingUtxo","MissingWitnessScript","MustHaveUnsignedTx","NegativeFee","NoMorePairs","NonStandardSighashType","NotEcdsa","NotSupported","NotWpkh","Output","OutputType","P2wpkhSighash","PartialDataConsumption","Psbt","PsbtEncoding","PsbtParseError","PsbtSighashType","PsbtUtxoOutOfbounds","Pubkey","Schnorr","Schnorr","SegwitV0Sighash","SendingTooMuch","Sh","ShWpkh","ShWsh","SignError","SigningAlgorithm","SigningErrors","SigningKeys","SigningKeysMap","TapTree","Taproot","TaprootError","Tr","TxInput","UnexpectedUnsignedTx","UnknownOutputType","UnsignedTxHasScriptSigs","UnsignedTxHasScriptWitnesses","Unsupported","Version","Wpkh","WrongSigningAlgorithm","Wsh","XPubKey","bip32_derivation","bip32_derivation","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","combine","combine","default","default","deserialize","deserialize","deserialize","ecdsa_hash_ty","ecdsa_hash_ty","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","final_script_sig","final_script_witness","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_str","from_u32","get_key","hash","hash","hash","hash","hash","hash160_preimages","hash256_preimages","inputs","into","into","into","into","into","into","into","into","into","into","into","into","into","non_witness_utxo","outputs","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_sigs","proprietary","proprietary","proprietary","raw","redeem_script","redeem_script","ripemd160_preimages","serialize","serialize","serialize","serialize","sha256_preimages","sighash_type","signing_algorithm","source","source","source","source","source","source","tap_internal_key","tap_internal_key","tap_key_origins","tap_key_origins","tap_key_sig","tap_merkle_root","tap_script_sigs","tap_scripts","tap_tree","taproot_hash_ty","taproot_hash_ty","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_u32","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unknown","unknown","unknown","unsigned_tx","update_with_descriptor_unchecked","update_with_descriptor_unchecked","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","witness_script","witness_script","witness_utxo","xpub","actual","expected","hash","hash_type","preimage","fee_rate","psbt","tx","tx","index","index","length","length","Key","Pair","ProprietaryKey","ProprietaryType","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cmp","consensus_decode","consensus_encode","deserialize","deserialize","deserialize","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","hash","hash","into","into","into","key","key","key","partial_cmp","partial_cmp","prefix","serialize","serialize","serialize","subtype","to_key","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","type_value","value","vzip","vzip","vzip","All","AllPreallocated","Context","DESCRIPTION","Error","Even","FLAGS","IncorrectSignature","InvalidEllSwift","InvalidMessage","InvalidParityValue","InvalidParityValue","InvalidPublicKey","InvalidPublicKeySum","InvalidRecoveryId","InvalidSecretKey","InvalidSharedSecret","InvalidSignature","InvalidTweak","Keypair","MAX","Message","NotEnoughMemory","ONE","Odd","Parity","PreallocatedContext","PublicKey","Scalar","Secp256k1","SecretKey","SignOnly","SignOnlyPreallocated","Signing","ThirtyTwoByteHash","Verification","VerifyOnly","VerifyOnlyPreallocated","XOnlyPublicKey","ZERO","add_exp_tweak","add_tweak","as_c_ptr","as_c_ptr","as_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_ptr","as_ptr","as_ref","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp_fast_unstable","combine","combine_keys","constants","deallocate","deallocate","deallocate","deallocate","deallocate","deallocate","deallocate","deserialize","deserialize","display_secret","ecdh","ecdsa","ellswift","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","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_be_bytes","from_digest","from_digest_slice","from_ellswift","from_keypair","from_keypair","from_le_bytes","from_secret_key","from_slice","from_slice","from_slice","from_str","from_str","from_x_only_public_key","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hashes","impl_array_newtype","index","index","index","into","into","into","into","into","into","into","into","into","into","into","into","into_32","keypair","mul_tweak","mul_tweak","negate","negate","new","non_secure_erase","non_secure_erase","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","public_key","random","random_custom","scalar","schnorr","secret_bytes","serialize","serialize","serialize","serialize_uncompressed","source","to_be_bytes","to_hash160","to_hash256","to_le_bytes","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public_key","to_ripemd160","to_sha256","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verify","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","x_only_public_key","x_only_public_key","COMPACT_SIGNATURE_SIZE","CURVE_ORDER","ELLSWIFT_ENCODING_SIZE","FIELD_SIZE","GENERATOR_X","GENERATOR_Y","KEY_PAIR_SIZE","MAX_SIGNATURE_SIZE","MESSAGE_SIZE","ONE","PUBLIC_KEY_SIZE","SCHNORR_PUBLIC_KEY_SIZE","SCHNORR_SIGNATURE_SIZE","SECRET_KEY_SIZE","UNCOMPRESSED_PUBLIC_KEY_SIZE","ZERO","SharedSecret","as_ref","borrow","borrow","borrow_mut","clone","clone_into","cmp","deserialize","display_secret","eq","equivalent","equivalent","fmt","from","from_bytes","from_slice","from_str","hash","into","new","non_secure_erase","partial_cmp","secret_bytes","serialize","shared_secret_point","to_owned","try_from","try_into","type_id","vzip","RecoverableSignature","RecoveryId","SerializedSignature","Signature","as_c_ptr","as_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_ptr","as_mut_ptr","as_ptr","as_ptr","as_ref","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capacity","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp_fast_unstable","deref","deserialize","eq","eq","eq","eq","eq","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_compact","from_compact","from_der","from_der_lax","from_i32","from_signature","from_str","hash","hash","hash","into","into","into","into","into_iter","into_iter","is_empty","len","normalize_s","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","serialize","serialize_compact","serialize_compact","serialize_der","serialized_signature","to_i32","to_owned","to_owned","to_owned","to_owned","to_signature","to_standard","to_string","to_string","try_from","try_from","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","IntoIter","SerializedSignature","as_slice","borrow","borrow_mut","clone","clone_into","fmt","from","into","into_fallible","into_iter","next","next_back","nth","size_hint","to_owned","transpose_into_fallible","try_from","try_into","type_id","vzip","A","B","ElligatorSwift","ElligatorSwiftParty","ElligatorSwiftSharedSecret","as_c_ptr","as_mut_c_ptr","as_secret_bytes","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","cmp","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from_array","from_pubkey","from_seckey","from_secret_bytes","from_str","hash","hash","hash","into","into","into","new","partial_cmp","partial_cmp","partial_cmp","shared_secret","shared_secret_with_hasher","to_array","to_owned","to_owned","to_owned","to_secret_bytes","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","CPtr","Context","EcdhHashFn","ElligatorSwift","EllswiftEcdhHashFn","Keypair","NonceFn","None","None","None","None","PublicKey","SECP256K1_SER_COMPRESSED","SECP256K1_SER_UNCOMPRESSED","SECP256K1_START_NONE","SECP256K1_START_SIGN","SECP256K1_START_VERIFY","SchnorrNonceFn","SchnorrSigExtraParams","Signature","Some","Some","Some","Some","Target","XOnlyPublicKey","as_c_ptr","as_c_ptr","as_c_ptr","as_c_ptr","as_c_ptr","as_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_mut_c_ptr","as_ref","as_ref","as_ref","as_ref","as_ref","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","cmp","cmp","cmp","cmp","cmp_fast_unstable","cmp_fast_unstable","cmp_fast_unstable","cmp_fast_unstable","cmp_fast_unstable","ecdsa_signature_parse_der_lax","eq","eq","eq","eq","eq","eq_fast_unstable","eq_fast_unstable","eq_fast_unstable","eq_fast_unstable","eq_fast_unstable","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_array","from_array_unchecked","from_array_unchecked","from_array_unchecked","from_array_unchecked","hash","hash","hash","hash","hash","impl_array_newtype","impl_raw_debug","index","index","index","index","index","into","into","into","into","into","into","into","new","new","new","new","new","non_secure_erase","non_secure_erase_impl","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","recovery","rustsecp256k1_v0_10_0_context_create","rustsecp256k1_v0_10_0_context_destroy","rustsecp256k1_v0_10_0_default_error_callback_fn","rustsecp256k1_v0_10_0_default_illegal_callback_fn","secp256k1_context_create","secp256k1_context_destroy","secp256k1_context_no_precomp","secp256k1_context_preallocated_clone","secp256k1_context_preallocated_clone_size","secp256k1_context_preallocated_create","secp256k1_context_preallocated_destroy","secp256k1_context_preallocated_size","secp256k1_context_randomize","secp256k1_ec_pubkey_cmp","secp256k1_ec_pubkey_combine","secp256k1_ec_pubkey_create","secp256k1_ec_pubkey_negate","secp256k1_ec_pubkey_parse","secp256k1_ec_pubkey_serialize","secp256k1_ec_pubkey_tweak_add","secp256k1_ec_pubkey_tweak_mul","secp256k1_ec_seckey_negate","secp256k1_ec_seckey_tweak_add","secp256k1_ec_seckey_tweak_mul","secp256k1_ec_seckey_verify","secp256k1_ecdh","secp256k1_ecdh_hash_function_default","secp256k1_ecdsa_sign","secp256k1_ecdsa_signature_normalize","secp256k1_ecdsa_signature_parse_compact","secp256k1_ecdsa_signature_parse_der","secp256k1_ecdsa_signature_serialize_compact","secp256k1_ecdsa_signature_serialize_der","secp256k1_ecdsa_verify","secp256k1_ellswift_create","secp256k1_ellswift_decode","secp256k1_ellswift_encode","secp256k1_ellswift_xdh","secp256k1_ellswift_xdh_hash_function_bip324","secp256k1_keypair_create","secp256k1_keypair_pub","secp256k1_keypair_sec","secp256k1_keypair_xonly_pub","secp256k1_keypair_xonly_tweak_add","secp256k1_nonce_function_bip340","secp256k1_nonce_function_default","secp256k1_nonce_function_rfc6979","secp256k1_schnorrsig_sign","secp256k1_schnorrsig_sign_custom","secp256k1_schnorrsig_verify","secp256k1_xonly_pubkey_cmp","secp256k1_xonly_pubkey_from_pubkey","secp256k1_xonly_pubkey_parse","secp256k1_xonly_pubkey_serialize","secp256k1_xonly_pubkey_tweak_add","secp256k1_xonly_pubkey_tweak_add_check","to_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_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","types","underlying_bytes","underlying_bytes","underlying_bytes","underlying_bytes","vzip","vzip","vzip","vzip","vzip","vzip","vzip","RecoverableSignature","as_c_ptr","as_mut_c_ptr","as_ref","borrow","borrow_mut","clone","clone_into","cmp","cmp_fast_unstable","default","eq","eq_fast_unstable","equivalent","equivalent","fmt","from","hash","index","into","new","partial_cmp","secp256k1_ecdsa_recover","secp256k1_ecdsa_recoverable_signature_convert","secp256k1_ecdsa_recoverable_signature_parse_compact","secp256k1_ecdsa_recoverable_signature_serialize_compact","secp256k1_ecdsa_sign_recoverable","to_owned","try_from","try_into","type_id","vzip","AlignedType","ZERO","borrow","borrow","borrow_mut","borrow_mut","c_char","c_int","c_uchar","c_uint","c_void","clone","clone_into","default","fmt","from","from","into","into","size_t","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","zeroed","BLOCK_SIZE","Bytes","DISPLAY_BACKWARD","Engine","FromSliceError","Hash","HashEngine","Hmac","HmacEngine","LEN","MidState","all_zeros","all_zeros","as_byte_array","as_byte_array","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_slice_impl","clone","clone","clone","clone_into","clone_into","clone_into","cmp","default","deserialize","emit_bool","emit_i16","emit_i32","emit_i64","emit_i8","emit_slice","emit_u16","emit_u32","emit_u64","emit_u8","engine","eq","eq","equivalent","equivalent","equivalent","equivalent","expected_length","flush","flush","fmt","fmt","fmt","fmt","fmt","from","from","from","from_byte_array","from_byte_array","from_engine","from_engine","from_inner_engines","from_slice","from_slice","from_str","hash","hash","hash_byte_chunks","hash_newtype","hex_fmt_impl","index","index","index","index","index","input","input","into","into","into","invalid_length","midstate","midstate","n_bytes_hashed","n_bytes_hashed","new","partial_cmp","serde_impl","serialize","sha256t_hash_newtype","to_byte_array","to_byte_array","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","write","write","CUSTOM_START","CryptoRng","Error","Fill","INTERNAL_START","Rng","RngCore","Seed","SeedableRng","borrow","borrow_mut","code","distributions","fill","fill_bytes","fmt","fmt","from","from","from","from_entropy","from_rng","from_seed","gen","gen_bool","gen_range","gen_ratio","inner","into","new","next_u32","next_u64","prelude","random","raw_os_error","read","rngs","sample","sample_iter","seed_from_u64","seq","source","take_inner","thread_rng","to_string","try_fill","try_fill","try_fill_bytes","try_from","try_into","type_id","vzip","AllWeightsZero","Alphanumeric","Bernoulli","BernoulliError","DistIter","DistMap","DistString","Distribution","InvalidProbability","InvalidWeight","NoItem","Open01","OpenClosed01","Slice","Standard","TooMany","Uniform","WeightedError","WeightedIndex","append_string","append_string","append_string","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","checked_sum","checked_sum","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_ratio","into","into","into","into","into","into","into","into","into","into","into","into","into_fallible","into_iter","map","new","new","new","new","new_inclusive","next","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample_iter","sample_string","size_hint","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","transpose_into_fallible","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","uniform","update_weights","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","weighted","SampleBorrow","SampleRange","SampleUniform","Sampler","Uniform","UniformChar","UniformDuration","UniformFloat","UniformInt","UniformSampler","X","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from","into","into","into","into","is_empty","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","new_inclusive","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","sample_single_inclusive","to_owned","to_owned","to_owned","to_owned","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","AllWeightsZero","InvalidWeight","NoItem","TooMany","WeightedError","WeightedIndex","alias_method","Weight","WeightedIndex","borrow","borrow_mut","fmt","from","into","new","try_from","try_into","type_id","vzip","CryptoRng","Distribution","Item","IteratorRandom","Rng","RngCore","Seed","SeedableRng","SliceRandom","StdRng","ThreadRng","choose","choose","choose_multiple","choose_multiple","choose_multiple_fill","choose_multiple_weighted","choose_mut","choose_stable","choose_weighted","choose_weighted_mut","fill","fill_bytes","from_entropy","from_rng","from_seed","gen","gen_bool","gen_range","gen_ratio","map","next_u32","next_u64","partial_shuffle","random","sample","sample","sample_iter","sample_iter","seed_from_u64","shuffle","thread_rng","try_fill","try_fill_bytes","OsRng","StdRng","ThreadRng","adapter","as_rngcore","as_rngcore","as_rngcore","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","default","eq","equivalent","equivalent","fill_bytes","fill_bytes","fill_bytes","fmt","fmt","fmt","from","from","from","from_rng","from_seed","into","into","into","mock","next_u32","next_u32","next_u32","next_u64","next_u64","next_u64","to_owned","to_owned","to_owned","try_fill_bytes","try_fill_bytes","try_fill_bytes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","ReadError","ReadRng","ReseedingRng","as_rngcore","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fill_bytes","fill_bytes","fmt","fmt","fmt","fmt","from","from","from","into","into","into","new","new","next_u32","next_u32","next_u64","next_u64","reseed","source","to_owned","to_string","try_fill_bytes","try_fill_bytes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","StepRng","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fill_bytes","fmt","from","into","new","next_u32","next_u64","to_owned","try_fill_bytes","try_from","try_into","type_id","vzip","Item","IteratorRandom","SliceChooseIter","SliceRandom","borrow","borrow_mut","choose","choose","choose_multiple","choose_multiple","choose_multiple_fill","choose_multiple_weighted","choose_mut","choose_stable","choose_weighted","choose_weighted_mut","fmt","from","index","into","into_fallible","into_iter","len","next","partial_shuffle","shuffle","size_hint","transpose_into_fallible","try_from","try_into","type_id","vzip","IndexVec","IndexVecIntoIter","IndexVecIter","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","eq","fmt","fmt","fmt","from","from","from","from","from","index","into","into","into","into_fallible","into_fallible","into_iter","into_iter","into_iter","into_vec","is_empty","iter","len","next","next","sample","sample_weighted","size_hint","size_hint","to_owned","to_owned","transpose_into_fallible","transpose_into_fallible","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","OutOfRangeError","Scalar","borrow","borrow_mut","clone","clone_into","eq","equivalent","equivalent","fmt","fmt","from","hash","into","to_owned","to_string","try_from","try_into","type_id","vzip","Signature","as_c_ptr","as_mut_c_ptr","as_ref","borrow","borrow_mut","clone","clone_into","cmp","deserialize","eq","equivalent","equivalent","fmt","fmt","fmt","from","from_slice","from_str","hash","index","into","partial_cmp","serialize","serialize","to_owned","to_string","try_from","try_into","type_id","vzip","All","All","All","AllPlusAnyoneCanPay","AllPlusAnyoneCanPay","Annex","AnnexError","Default","EcdsaSighashType","Empty","EncodeSigningDataResult","IncorrectPrefix","InputsIndex","InvalidAllIndex","InvalidOneIndex","InvalidSighashType","InvalidSighashTypeError","Io","LegacySighash","NonStandardSighashTypeError","None","None","NonePlusAnyoneCanPay","NonePlusAnyoneCanPay","NotP2wpkhScript","One","P2wpkhError","Prevouts","PrevoutsIndex","PrevoutsIndexError","PrevoutsKind","PrevoutsKindError","PrevoutsSize","PrevoutsSizeError","ScriptPath","SegwitV0Sighash","Sighash","Sighash","SighashCache","SighashSingleBug","SighashTypeParseError","SigningDataError","Single","Single","SingleMissingOutput","SingleMissingOutputError","SinglePlusAnyoneCanPay","SinglePlusAnyoneCanPay","TapSighash","TapSighashTag","TapSighashType","TaprootError","WriteResult","as_bytes","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","consensus_encode","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","hash","input_index","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_transaction","is_sighash_single_bug","leaf_hash","legacy_encode_signing_data_to","legacy_signature_hash","map_err","new","new","new","outputs_length","p2wpkh_signature_hash","p2wsh_signature_hash","partial_cmp","partial_cmp","segwit_v0_encode_signing_data_to","source","source","source","source","source","source","source","source","source","source","source","taproot_encode_signing_data_to","taproot_key_spend_signature_hash","taproot_script_spend_signature_hash","taproot_signature_hash","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","transaction","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unrecognized","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_defaults","witness_mut","BITCOIN_SIGNED_MSG_PREFIX","InvalidBase64","InvalidEncoding","InvalidLength","MessageSignature","MessageSignatureError","UnsupportedAddressType","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","compressed","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from_base64","from_slice","from_str","into","into","is_signed_by_address","new","recover_pubkey","serialize","signature","signed_msg_hash","source","to_base64","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","ControlBlock","EmptyTree","EmptyTree","Future","FutureLeafVersion","Hidden","HiddenNodesError","HiddenParts","HiddenParts","IncompleteBuilderError","InvalidControlBlockSize","InvalidInternalKey","InvalidInternalKey","InvalidMerkleBranchSize","InvalidMerkleTreeDepth","InvalidMerkleTreeDepth","InvalidSignatureSize","InvalidTaprootLeafVersion","LeafNode","LeafNodes","LeafVersion","NodeInfo","NodeNotInDfsOrder","NotFinalized","OverCompleteTree","Script","ScriptLeaf","ScriptLeaves","Secp256k1","SigFromSliceError","SighashType","Signature","TAPROOT_ANNEX_PREFIX","TAPROOT_CONTROL_BASE_SIZE","TAPROOT_CONTROL_MAX_NODE_COUNT","TAPROOT_CONTROL_MAX_SIZE","TAPROOT_CONTROL_NODE_SIZE","TAPROOT_LEAF_MASK","TAPROOT_LEAF_TAPSCRIPT","TapBranchTag","TapLeaf","TapLeafHash","TapLeafTag","TapNodeHash","TapScript","TapTree","TapTweakHash","TapTweakTag","TaprootBuilder","TaprootBuilderError","TaprootError","TaprootMerkleBranch","TaprootSpendInfo","add_hidden_node","add_leaf","add_leaf_with_ver","as_hidden","as_inner","as_mut","as_ref","as_script","as_slice","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","combine","control_block","decode","decode","default","default","depth","deref","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","encode","encode","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","finalize","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","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","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","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","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","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","from","from","from","from_consensus","from_leaf_node","from_node_info","from_slice","has_hidden_nodes","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","internal_key","internal_key","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_builder","into_fallible","into_fallible","into_inner","into_iter","into_iter","into_iter","into_iter","into_iter","into_node_info","into_node_info","into_vec","is_empty","is_finalizable","leaf","leaf_hash","leaf_nodes","leaf_version","leaf_version","len","merkle_branch","merkle_branch","merkle_branch","merkle_branch","merkle_root","new","new_hidden","new_hidden_node","new_key_spend","new_leaf_with_ver","new_script","next","next","next_back","next_back","node_hash","node_hash","node_info","output_key","output_key_parity","output_key_parity","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","root_hash","script","script","script_leaves","script_map","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize_to_writer","serialized_signature","sighash_type","signature","size","size_hint","size_hint","source","source","source","source","source","tap_tweak","to_consensus","to_consensus","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_vec","transpose_into_fallible","transpose_into_fallible","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into_node_info","try_into_taptree","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","verify_taproot_commitment","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","with_capacity","with_huffman_tree","with_huffman_tree","IntoIter","TaprootMerkleBranch","as_mut_slice","as_slice","borrow","borrow_mut","clone","clone_into","count","fmt","from","into","into_fallible","into_iter","last","next","next_back","nth","nth_back","size_hint","to_owned","transpose_into_fallible","try_from","try_into","type_id","vzip","IntoIter","SerializedSignature","as_ref","as_slice","borrow","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","deref","eq","eq","equivalent","equivalent","fmt","fmt","fmt","from","from","from","from","from_signature","hash","into","into","into_fallible","into_iter","into_iter","into_iter","len","next","next_back","nth","partial_cmp","partial_cmp","size_hint","to_owned","to_owned","to_signature","to_string","transpose_into_fallible","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write_to","ChangeSet","IndexedTxGraph","apply_block","apply_block_relevant","apply_changeset","apply_update","apply_update_at","as_ref","batch_insert_relevant","batch_insert_relevant_unconfirmed","batch_insert_unconfirmed","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","index","indexer","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","merge","new","serialize","to_owned","try_from","try_from","try_into","try_into","tx_graph","type_id","type_id","vzip","vzip","ChangeSet","Indexer","apply_changeset","index_tx","index_txout","initial_changeset","is_tx_relevant","keychain_txout","spk_txout","ChangeSet","DEFAULT_LOOKAHEAD","DescriptorAlreadyAssigned","FullScanRequestBuilderExt","InsertDescriptorError","KeychainAlreadyAssigned","KeychainTxOutIndex","LAST_REVEALED_TABLE_NAME","SCHEMA_NAME","SyncRequestBuilderExt","all_unbounded_spk_iters","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","default","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","from_sqlite","get_descriptor","index_of_spk","index_tx","index_txout","init_sqlite_tables","initial_changeset","inner","insert_descriptor","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","merge","net_value","new","next_index","next_unused_spk","outpoints","persist_to_sqlite","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_keychain_spks","revealed_spks","revealed_spks_from_indexer","sent_and_received","serialize","spk_at_index","spks_from_indexer","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","unused_keychain_spks","unused_spks","unused_spks_from_indexer","vzip","vzip","vzip","descriptor","existing_assignment","existing_assignment","keychain","SpkTxOutIndex","all_spks","apply_changeset","borrow","borrow_mut","clone","clone_into","default","fmt","from","index_of_spk","index_tx","index_txout","initial_changeset","insert_spk","into","is_relevant","is_tx_relevant","is_used","mark_used","net_value","outpoints","outputs_in_range","scan","scan_txout","sent_and_received","spk_at_index","to_owned","try_from","try_into","txout","txouts","txouts_in_tx","type_id","unmark_used","unused_spks","vzip","AlterCheckPointError","ApplyHeaderError","BLOCKS_TABLE_NAME","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","SCHEMA_NAME","apply_changeset","apply_header","apply_header_connected_to","apply_update","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","deserialize","disconnect_from","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_blocks","from_changeset","from_genesis_hash","from_iter","from_iter","from_sqlite","from_tip","genesis_hash","get","get_chain_tip","height","init_sqlite_tables","initial_changeset","insert_block","into","into","into","into","into","into","is_block_in_chain","is_empty","iter_checkpoints","merge","original_hash","persist_to_sqlite","range","serialize","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","SCHEMAS_TABLE_NAME","migrate_schema","FullScanRequest","FullScanRequestBuilder","FullScanResult","OutPoint","Spk","SyncItem","SyncProgress","SyncRequest","SyncRequestBuilder","SyncResult","Txid","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","builder","builder","chain_tip","chain_tip","chain_tip","chain_tip","chain_update","chain_update","clone","clone","clone_into","clone_into","cmp","consumed","default","default","default","default","default","default","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","inspect","inspect","into","into","into","into","into","into","into","into","iter_outpoints","iter_spks","iter_spks","iter_txids","keychains","last_active_indices","next_outpoint","next_spk","next_spk","next_txid","outpoints","outpoints_consumed","outpoints_remaining","partial_cmp","progress","remaining","revealed_spks_from_indexer","spks","spks_consumed","spks_for_keychain","spks_from_indexer","spks_remaining","spks_with_indexes","to_owned","to_owned","to_string","total","total_outpoints","total_spks","total_txids","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_update","tx_update","txids","txids_consumed","txids_remaining","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unused_spks_from_indexer","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","ANCHORS_TABLE_NAME","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","SCHEMA_NAME","TXOUTS_TABLE_NAME","TXS_TABLE_NAME","TxAncestors","TxDescendants","TxGraph","TxNode","TxUpdate","all_anchors","all_txouts","anchor_heights","anchors","anchors","anchors","apply_changeset","apply_update","apply_update_at","as_ref","balance","batch_insert_unconfirmed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_sqlite","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","init_sqlite_tables","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_fallible","into_fallible","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_canonical_txs","map_anchors","map_anchors","merge","new","next","next","outspends","partial_cmp","partial_cmp","persist_to_sqlite","seen_ats","serialize","to_owned","to_owned","to_owned","to_owned","to_string","transpose_into_fallible","transpose_into_fallible","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_list_canonical_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txouts","txs","txs","txs_with_no_anchor_or_last_seen","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","walk_ancestors","walk_conflicts","walk_descendants"],"q":[[0,"bdk_chain"],[381,"bdk_chain::ConfirmationTime"],[384,"bdk_chain::bitcoin"],[2777,"bdk_chain::bitcoin::address"],[3048,"bdk_chain::bitcoin::address::AddressData"],[3051,"bdk_chain::bitcoin::address::error"],[3073,"bdk_chain::bitcoin::amount"],[3134,"bdk_chain::bitcoin::amount::serde"],[3145,"bdk_chain::bitcoin::amount::serde::as_btc"],[3148,"bdk_chain::bitcoin::amount::serde::as_btc::opt"],[3150,"bdk_chain::bitcoin::amount::serde::as_sat"],[3153,"bdk_chain::bitcoin::amount::serde::as_sat::opt"],[3155,"bdk_chain::bitcoin::base58"],[3524,"bdk_chain::bitcoin::base58::error"],[3567,"bdk_chain::bitcoin::base64"],[3657,"bdk_chain::bitcoin::base64::alphabet"],[3701,"bdk_chain::bitcoin::base64::display"],[3713,"bdk_chain::bitcoin::base64::engine"],[3795,"bdk_chain::bitcoin::base64::engine::general_purpose"],[3803,"bdk_chain::bitcoin::base64::prelude"],[3818,"bdk_chain::bitcoin::base64::read"],[3831,"bdk_chain::bitcoin::base64::write"],[3863,"bdk_chain::bitcoin::bip152"],[4053,"bdk_chain::bitcoin::bip158"],[4167,"bdk_chain::bitcoin::bip32"],[4513,"bdk_chain::bitcoin::bip32::ChildNumber"],[4515,"bdk_chain::bitcoin::blockdata"],[4526,"bdk_chain::bitcoin::blockdata::block"],[4646,"bdk_chain::bitcoin::blockdata::constants"],[4712,"bdk_chain::bitcoin::blockdata::fee_rate"],[4713,"bdk_chain::bitcoin::blockdata::locktime"],[4715,"bdk_chain::bitcoin::blockdata::locktime::absolute"],[4901,"bdk_chain::bitcoin::blockdata::locktime::relative"],[5111,"bdk_chain::bitcoin::blockdata::opcodes"],[5162,"bdk_chain::bitcoin::blockdata::opcodes::all"],[5418,"bdk_chain::bitcoin::blockdata::script"],[5960,"bdk_chain::bitcoin::blockdata::script::witness_program"],[5985,"bdk_chain::bitcoin::blockdata::script::witness_version"],[6069,"bdk_chain::bitcoin::blockdata::transaction"],[6229,"bdk_chain::bitcoin::blockdata::weight"],[6231,"bdk_chain::bitcoin::blockdata::witness"],[6246,"bdk_chain::bitcoin::consensus"],[6335,"bdk_chain::bitcoin::consensus::encode"],[6428,"bdk_chain::bitcoin::consensus::encode::Error"],[6432,"bdk_chain::bitcoin::consensus::params"],[6450,"bdk_chain::bitcoin::consensus::serde"],[6485,"bdk_chain::bitcoin::consensus::serde::hex"],[6563,"bdk_chain::bitcoin::ecdsa"],[6650,"bdk_chain::bitcoin::error"],[6733,"bdk_chain::bitcoin::hash_types"],[6741,"bdk_chain::bitcoin::hashes"],[6782,"bdk_chain::bitcoin::hashes::cmp"],[6783,"bdk_chain::bitcoin::hashes::hash160"],[6828,"bdk_chain::bitcoin::hashes::hex"],[6992,"bdk_chain::bitcoin::hashes::hex::buf_encoder"],[7010,"bdk_chain::bitcoin::hashes::hex::display"],[7048,"bdk_chain::bitcoin::hashes::hex::error"],[7077,"bdk_chain::bitcoin::hashes::hex::parse"],[7086,"bdk_chain::bitcoin::hashes::hex::prelude"],[7097,"bdk_chain::bitcoin::hashes::hmac"],[7110,"bdk_chain::bitcoin::hashes::ripemd160"],[7181,"bdk_chain::bitcoin::hashes::serde"],[7268,"bdk_chain::bitcoin::hashes::serde::de"],[7452,"bdk_chain::bitcoin::hashes::serde::de::value"],[8747,"bdk_chain::bitcoin::hashes::serde::ser"],[8876,"bdk_chain::bitcoin::hashes::serde_macros"],[8877,"bdk_chain::bitcoin::hashes::serde_macros::serde_details"],[8882,"bdk_chain::bitcoin::hashes::sha1"],[8952,"bdk_chain::bitcoin::hashes::sha256"],[9066,"bdk_chain::bitcoin::hashes::sha256d"],[9119,"bdk_chain::bitcoin::hashes::sha256t"],[9166,"bdk_chain::bitcoin::hashes::sha384"],[9222,"bdk_chain::bitcoin::hashes::sha512"],[9292,"bdk_chain::bitcoin::hashes::sha512_256"],[9348,"bdk_chain::bitcoin::hashes::siphash24"],[9440,"bdk_chain::bitcoin::io"],[9586,"bdk_chain::bitcoin::key"],[9956,"bdk_chain::bitcoin::merkle_tree"],[10014,"bdk_chain::bitcoin::network"],[10061,"bdk_chain::bitcoin::network::as_core_arg"],[10063,"bdk_chain::bitcoin::p2p"],[10219,"bdk_chain::bitcoin::p2p::address"],[10274,"bdk_chain::bitcoin::p2p::message"],[10401,"bdk_chain::bitcoin::p2p::message::NetworkMessage"],[10403,"bdk_chain::bitcoin::p2p::message_blockdata"],[10479,"bdk_chain::bitcoin::p2p::message_blockdata::Inventory"],[10481,"bdk_chain::bitcoin::p2p::message_bloom"],[10545,"bdk_chain::bitcoin::p2p::message_compact_blocks"],[10638,"bdk_chain::bitcoin::p2p::message_filter"],[10770,"bdk_chain::bitcoin::p2p::message_network"],[10848,"bdk_chain::bitcoin::parse"],[10869,"bdk_chain::bitcoin::policy"],[10878,"bdk_chain::bitcoin::pow"],[10881,"bdk_chain::bitcoin::psbt"],[11259,"bdk_chain::bitcoin::psbt::Error"],[11264,"bdk_chain::bitcoin::psbt::ExtractTxError"],[11268,"bdk_chain::bitcoin::psbt::IndexOutOfBoundsError"],[11272,"bdk_chain::bitcoin::psbt::raw"],[11343,"bdk_chain::bitcoin::secp256k1"],[11697,"bdk_chain::bitcoin::secp256k1::constants"],[11713,"bdk_chain::bitcoin::secp256k1::ecdh"],[11744,"bdk_chain::bitcoin::secp256k1::ecdsa"],[11866,"bdk_chain::bitcoin::secp256k1::ecdsa::serialized_signature"],[11888,"bdk_chain::bitcoin::secp256k1::ellswift"],[11963,"bdk_chain::bitcoin::secp256k1::ffi"],[12209,"bdk_chain::bitcoin::secp256k1::ffi::recovery"],[12241,"bdk_chain::bitcoin::secp256k1::ffi::types"],[12271,"bdk_chain::bitcoin::secp256k1::hashes"],[12385,"bdk_chain::bitcoin::secp256k1::rand"],[12437,"bdk_chain::bitcoin::secp256k1::rand::distributions"],[12712,"bdk_chain::bitcoin::secp256k1::rand::distributions::uniform"],[12855,"bdk_chain::bitcoin::secp256k1::rand::distributions::weighted"],[12862,"bdk_chain::bitcoin::secp256k1::rand::distributions::weighted::alias_method"],[12874,"bdk_chain::bitcoin::secp256k1::rand::prelude"],[12918,"bdk_chain::bitcoin::secp256k1::rand::rngs"],[12981,"bdk_chain::bitcoin::secp256k1::rand::rngs::adapter"],[13029,"bdk_chain::bitcoin::secp256k1::rand::rngs::mock"],[13050,"bdk_chain::bitcoin::secp256k1::rand::seq"],[13082,"bdk_chain::bitcoin::secp256k1::rand::seq::index"],[13139,"bdk_chain::bitcoin::secp256k1::scalar"],[13159,"bdk_chain::bitcoin::secp256k1::schnorr"],[13190,"bdk_chain::bitcoin::sighash"],[13539,"bdk_chain::bitcoin::sign_message"],[13594,"bdk_chain::bitcoin::taproot"],[14233,"bdk_chain::bitcoin::taproot::merkle_branch"],[14259,"bdk_chain::bitcoin::taproot::serialized_signature"],[14314,"bdk_chain::indexed_tx_graph"],[14365,"bdk_chain::indexer"],[14374,"bdk_chain::indexer::keychain_txout"],[14478,"bdk_chain::indexer::keychain_txout::InsertDescriptorError"],[14482,"bdk_chain::indexer::spk_txout"],[14519,"bdk_chain::local_chain"],[14651,"bdk_chain::rusqlite_impl"],[14653,"bdk_chain::spk_client"],[14799,"bdk_chain::tx_graph"],[14984,"bdk_chain::balance"],[14985,"bdk_chain::descriptor_ext"],[14986,"bdk_chain::tx_data_traits"],[14987,"bdk_core::block_id"],[14988,"bitcoin_hashes::sha256"],[14989,"bdk_core::checkpoint"],[14990,"bdk_core::tx_update"],[14991,"core::clone"],[14992,"bdk_chain::chain_data"],[14993,"bdk_chain::spk_iter"],[14994,"core::cmp"],[14995,"rusqlite::types::value_ref"],[14996,"miniscript::descriptor::key"],[14997,"miniscript::descriptor"],[14998,"rusqlite::types::from_sql"],[14999,"bitcoin::blockdata::block"],[15000,"bitcoin::blockdata::transaction"],[15001,"bitcoin::blockdata::script::owned"],[15002,"bitcoin_units::amount"],[15003,"bitcoin::network"],[15004,"serde::de"],[15005,"core::option"],[15006,"core::borrow"],[15007,"core::result"],[15008,"core::iter::traits::collect"],[15009,"core::fmt"],[15010,"bitcoin_hashes"],[15011,"bdk_chain::chain_oracle"],[15012,"core::hash"],[15013,"core::slice::index"],[15014,"fallible_iterator"],[15015,"core::iter::traits::iterator"],[15016,"bdk_core::merge"],[15017,"core::ops::function"],[15018,"core::ops::range"],[15019,"serde::ser"],[15020,"rusqlite::types::to_sql"],[15021,"rusqlite"],[15022,"alloc::string"],[15023,"core::any"],[15024,"bitcoin_units::weight"],[15025,"bitcoin::pow"],[15026,"secp256k1::key"],[15027,"secp256k1"],[15028,"secp256k1::scalar"],[15029,"secp256k1::context"],[15030,"bitcoin::address"],[15031,"bitcoin::bip158"],[15032,"bitcoin::bip32"],[15033,"bitcoin::blockdata::script"],[15034,"bitcoin::crypto::key"],[15035,"bitcoin::crypto::sighash"],[15036,"bitcoin::taproot"],[15037,"bitcoin::blockdata::script::borrowed"],[15038,"secp256k1_sys"],[15039,"bitcoin_hashes::sha256d"],[15040,"bitcoin_hashes::hash160"],[15041,"bitcoin_hashes::sha256t"],[15042,"bitcoin::blockdata::script::push_bytes::primitive"],[15043,"bitcoin::consensus::params"],[15044,"bitcoin::blockdata::script::builder"],[15045,"bitcoin::blockdata::constants"],[15046,"bitcoin::blockdata::locktime::absolute"],[15047,"bitcoin::blockdata::locktime::relative"],[15048,"bitcoin_units::fee_rate"],[15049,"bitcoin::blockdata::opcodes"],[15050,"bitcoin::blockdata::witness"],[15051,"bitcoin::blockdata::script::witness_program"],[15052,"bitcoin::blockdata::script::witness_version"],[15053,"bitcoin::consensus::encode"],[15054,"bitcoin::merkle_tree::block"],[15055,"bitcoin::psbt"],[15056,"bitcoin::psbt::error"],[15057,"bitcoin_io"],[15058,"core::marker"],[15059,"bitcoin_io::error"],[15060,"bitcoin_units::amount::serde::private"],[15061,"core::convert"],[15062,"bitcoin::blockdata::script::instruction"],[15063,"miniscript::psbt"],[15064,"alloc::vec"],[15065,"alloc::borrow"],[15066,"miniscript::primitives::relative_locktime"],[15067,"hex_conservative::error"],[15068,"bitcoin::error"],[15069,"bitcoin::p2p"],[15070,"bitcoin::address::error"],[15071,"bitcoin_units::locktime::relative"],[15072,"miniscript::miniscript::decode"],[15073,"alloc::boxed"],[15074,"bitcoin_units::locktime::absolute"],[15075,"bitcoin::crypto::taproot"],[15076,"bitcoin::crypto::ecdsa"],[15077,"alloc::collections::btree::map"],[15078,"bech32::primitives::gf32"],[15079,"miniscript::miniscript::hash256"],[15080,"bitcoin_hashes::ripemd160"],[15081,"secp256k1::schnorr"],[15082,"base58ck::error"],[15083,"bech32::segwit"],[15084,"bitcoin_units::amount::serde"],[15085,"core::alloc"],[15086,"std::ffi::os_str"],[15087,"std::path"],[15088,"bitcoin::p2p::address"],[15089,"bitcoin::bip152"],[15090,"bitcoin::p2p::message_blockdata"],[15091,"alloc::vec::drain"],[15092,"serde_json::value"],[15093,"alloc::vec::extract_if"],[15094,"std::io::error"],[15095,"alloc::ffi::c_str"],[15096,"alloc::collections::vec_deque"],[15097,"bitcoin::taproot::merkle_branch"],[15098,"alloc::collections::binary_heap"],[15099,"miniscript::plan"],[15100,"serde::de::value"],[15101,"core::str::pattern"],[15102,"core::mem::maybe_uninit"],[15103,"alloc::vec::splice"],[15104,"core::net::socket_addr"],[15105,"alloc::vec::into_iter"],[15106,"rusqlite::error"],[15107,"alloc::collections"],[15108,"std::io"],[15109,"base64::encode"],[15110,"base64::decode"],[15111,"base64::engine"],[15112,"base64::alphabet"],[15113,"base64::display"],[15114,"base64::engine::general_purpose"],[15115,"base64::read::decoder"],[15116,"base64::write::encoder_string_writer"],[15117,"base64::write::encoder"],[15118,"miniscript::primitives::absolute_locktime"],[15119,"bitcoin::blockdata::script::push_bytes::error"],[15120,"bitcoin::blockdata::script::push_bytes"],[15121,"bitcoin_units::parse"],[15122,"bitcoin::consensus"],[15123,"bitcoin::consensus::serde"],[15124,"bitcoin::consensus::serde::hex"],[15125,"core::slice::iter"],[15126,"secp256k1::ecdsa"],[15127,"hex_conservative::parse"],[15128,"hex_conservative::display"],[15129,"hex_conservative"],[15130,"hex_conservative::iter"],[15131,"core::iter::traits::exact_size"],[15132,"core::iter::traits::double_ended"],[15133,"core::iter::traits::marker"],[15134,"hex_conservative::buf_encoder"],[15135,"serde::de::ignored_any"],[15136,"core::error"],[15137,"serde::ser::impossible"],[15138,"bitcoin_hashes::serde_macros::serde_details"],[15139,"bitcoin_hashes::sha1"],[15140,"bitcoin_hashes::sha384"],[15141,"bitcoin_hashes::sha512"],[15142,"bitcoin_hashes::sha512_256"],[15143,"bitcoin_hashes::siphash24"],[15144,"core::ptr::non_null"],[15145,"secp256k1::context::alloc_only"],[15146,"secp256k1::secret"],[15147,"core::mem::manually_drop"],[15148,"rand::rng"],[15149,"secp256k1_sys::types"],[15150,"secp256k1::ecdsa::recovery"],[15151,"rand_core"],[15152,"bitcoin::p2p::message"],[15153,"bitcoin::p2p::message_bloom"],[15154,"bitcoin::p2p::message_compact_blocks"],[15155,"bitcoin::p2p::message_filter"],[15156,"bitcoin::p2p::message_network"],[15157,"core::num::error"],[15158,"bitcoin::psbt::map::output"],[15159,"bitcoin::psbt::map::input"],[15160,"bitcoin::psbt::display_from_str"],[15161,"bitcoin::psbt::raw"],[15162,"secp256k1::ellswift"],[15163,"secp256k1::ecdh"],[15164,"secp256k1_sys::recovery"],[15165,"secp256k1::ecdsa::serialized_signature"],[15166,"secp256k1::ecdsa::serialized_signature::into_iter"],[15167,"core::ffi"],[15168,"bitcoin_hashes::hmac"],[15169,"core::str::traits"],[15170,"rand_core::error"],[15171,"core::num::nonzero"],[15172,"getrandom::error"],[15173,"core::default"],[15174,"rand::distributions::uniform"],[15175,"rand::distributions::distribution"],[15176,"rand::rngs::thread"],[15177,"rand::distributions::other"],[15178,"rand::distributions"],[15179,"rand::distributions::bernoulli"],[15180,"rand::distributions::float"],[15181,"rand::distributions::slice"],[15182,"rand::distributions::weighted_index"],[15183,"core::ops::arith"],[15184,"core::num::wrapping"],[15185,"core::time"],[15186,"rand::distributions::weighted::alias_method"],[15187,"rand::seq"],[15188,"rand_core::os"],[15189,"rand::rngs::std"],[15190,"rand::rngs::adapter::reseeding"],[15191,"rand_core::block"],[15192,"rand::rngs::adapter::read"],[15193,"rand::rngs::mock"],[15194,"core::ops::index"],[15195,"rand::seq::index"],[15196,"bitcoin::sign_message::message_signing"],[15197,"alloc::collections::btree::set"],[15198,"bitcoin::taproot::serialized_signature"],[15199,"bitcoin::taproot::serialized_signature::into_iter"],[15200,"alloc::sync"],[15201,"rusqlite::transaction"],[15202,"bdk_core"],[15203,"bdk_core::spk_client"],[15204,"std::collections::hash::set"],[15205,"bitcoin"],[15206,"bitcoin::crypto"],[15207,"bitcoin_units::amount::serde::as_btc"],[15208,"bitcoin_units::amount::serde::as_btc::opt"],[15209,"bitcoin_units::amount::serde::as_sat"],[15210,"bitcoin_units::amount::serde::as_sat::opt"],[15211,"base58ck"],[15212,"base64"],[15213,"bitcoin::blockdata"],[15214,"bitcoin::blockdata::locktime"],[15215,"bitcoin::blockdata::opcodes::all"],[15216,"bitcoin_hashes::cmp"],[15217,"serde_derive"],[15218,"serde"],[15219,"bitcoin_hashes::serde_macros"],[15220,"bitcoin::merkle_tree"],[15221,"bitcoin::network::as_core_arg"],[15222,"bitcoin::policy"],[15223,"secp256k1::constants"],[15224,"rand"],[15225,"rand::distributions::weighted"],[15226,"rand::rngs"],[15227,"bitcoin::sign_message"]],"i":[0,0,0,0,0,0,0,0,0,0,0,0,15,16,0,0,58,0,0,0,0,0,0,0,0,0,0,0,15,16,1,2,3,5,6,13,2,2,2,2,0,0,18,11,6,18,65,5,6,11,13,26,34,1,15,16,17,18,2,2,19,65,5,6,11,13,26,34,1,15,16,17,18,2,19,17,5,6,11,13,1,15,16,17,18,2,19,5,6,11,13,1,15,16,17,18,2,19,15,5,6,15,16,17,2,26,26,26,26,26,26,26,26,34,6,3,3,15,6,1,5,6,13,1,26,34,19,39,5,6,1,16,2,39,2,5,6,11,1,15,16,17,18,2,11,5,5,6,6,1,1,15,15,16,16,17,17,18,18,2,2,11,13,5,6,11,13,1,1,15,16,17,18,2,2,2,2,65,5,5,5,5,6,6,11,13,13,26,26,26,34,34,34,1,15,16,16,17,18,2,2,19,11,2,2,11,2,2,2,2,11,58,5,6,11,15,16,2,5,11,5,1,2,0,0,11,65,5,6,11,13,26,34,1,15,16,17,18,2,19,65,19,26,34,65,11,19,58,15,16,17,64,17,17,11,0,0,13,64,0,11,19,19,65,19,19,17,5,6,15,16,17,2,11,11,11,0,0,13,0,5,6,1,16,2,17,0,0,64,2,5,6,11,13,1,15,16,17,18,2,19,2,26,26,26,26,26,26,26,26,34,1,2,1,65,19,1,1,65,5,6,11,13,26,34,1,15,16,17,18,2,19,65,5,6,11,13,26,34,1,15,16,17,18,2,19,0,18,17,13,13,65,5,6,11,13,26,34,1,15,16,17,18,2,19,16,1,65,5,6,11,13,26,34,1,15,16,17,18,2,19,708,709,708,0,0,144,145,144,145,0,129,134,134,134,33,0,0,134,0,0,150,129,144,0,126,126,0,0,0,0,0,0,32,78,129,79,126,148,148,148,148,148,79,32,78,30,32,78,129,79,79,147,135,0,134,134,134,139,134,0,0,144,145,144,145,32,78,32,78,0,0,88,88,88,88,88,134,0,0,0,0,135,33,134,32,134,0,0,0,0,0,0,33,144,145,144,145,0,0,0,0,0,0,0,0,0,0,147,33,135,0,0,0,0,0,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,79,0,0,0,0,0,0,0,0,0,0,0,0,32,78,129,79,126,148,78,32,78,79,80,32,78,79,81,0,87,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,0,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,106,81,106,106,31,31,106,81,81,31,81,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,89,89,90,90,91,91,28,28,92,92,93,93,94,94,106,106,31,31,95,95,95,96,96,96,29,29,97,97,98,98,98,99,99,99,100,100,101,101,102,102,33,103,103,104,104,105,105,31,87,87,87,104,119,30,0,0,0,120,120,0,134,32,78,129,81,79,88,135,87,89,89,90,90,91,91,28,28,92,92,93,93,94,94,120,130,106,31,31,136,137,95,95,96,96,29,29,97,97,138,119,126,139,30,133,140,141,98,98,99,99,142,143,100,100,101,101,110,102,102,144,145,146,147,33,80,148,149,150,112,103,103,113,104,104,114,105,105,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,106,31,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,106,31,106,33,126,120,126,126,120,78,32,78,79,32,78,129,79,32,78,129,79,129,32,78,32,78,79,130,133,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,106,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,100,101,110,102,144,147,33,80,148,149,112,103,113,104,114,105,81,120,150,141,143,120,30,30,120,30,0,32,89,90,28,92,93,120,29,97,138,126,139,133,140,146,149,103,120,31,119,139,30,32,89,90,28,92,93,120,106,31,29,97,138,119,126,139,30,133,140,146,149,103,106,106,81,32,78,31,138,119,126,133,110,149,112,113,114,31,31,32,78,32,78,32,129,81,79,87,89,90,91,28,92,93,94,120,106,31,95,96,29,97,138,119,126,139,30,133,141,98,99,142,143,100,101,102,144,145,33,80,148,149,150,150,103,104,105,150,148,148,32,78,32,78,32,32,78,79,79,32,78,79,106,0,126,119,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,110,102,112,103,113,104,114,105,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,106,106,31,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,81,134,134,32,32,78,78,129,129,81,81,79,79,88,88,135,135,87,87,89,89,90,90,91,91,28,28,92,92,93,93,94,94,120,120,130,130,106,106,31,31,136,136,137,137,95,95,96,96,29,29,97,97,138,138,119,119,126,126,139,139,30,30,133,133,140,140,141,141,98,98,99,99,142,142,143,143,100,100,101,101,110,110,102,102,144,144,145,145,146,146,147,147,33,33,80,80,148,148,149,149,150,150,112,112,103,103,113,113,104,104,114,114,105,105,0,31,150,146,150,150,150,150,150,129,129,89,150,150,150,150,150,150,150,150,106,134,134,32,32,78,78,129,129,81,81,81,79,79,88,88,135,87,87,89,89,89,89,90,90,90,90,91,91,91,91,28,28,28,28,92,92,92,92,93,93,93,93,94,94,94,94,120,130,130,106,106,106,106,31,31,31,31,136,137,137,95,95,95,95,96,96,96,96,29,29,29,29,97,97,97,97,138,138,119,126,126,126,126,139,30,133,140,141,141,98,98,98,98,99,99,99,99,142,142,143,143,100,100,100,100,101,101,101,101,102,102,102,102,144,144,145,145,146,147,33,33,80,80,80,80,148,148,148,148,149,149,149,150,150,103,103,103,103,104,104,104,104,105,105,105,105,106,32,78,143,134,32,78,129,81,81,81,81,81,81,79,88,135,135,87,89,89,90,90,91,91,91,91,28,28,28,28,28,28,92,92,92,93,93,93,94,94,120,130,130,130,31,31,31,31,31,136,137,95,95,95,95,95,96,96,96,96,96,29,29,29,29,97,97,97,97,138,119,126,126,126,139,30,133,133,133,133,133,140,140,140,140,140,140,141,141,141,98,98,98,98,98,98,99,99,99,99,142,143,100,100,101,101,110,102,102,144,144,145,146,147,147,33,80,148,148,149,150,112,103,103,103,113,104,104,104,104,104,114,105,105,105,105,126,80,148,146,32,78,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,106,31,106,33,148,126,145,149,144,33,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,32,78,146,126,31,126,80,148,149,32,31,105,81,79,80,148,33,104,79,141,142,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,32,78,129,129,129,87,103,104,126,126,81,81,89,90,91,28,92,93,94,95,96,29,97,133,141,141,98,99,142,143,100,101,102,103,104,105,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,145,134,32,78,129,81,79,88,87,89,90,91,28,92,93,94,137,95,96,29,97,138,126,141,98,99,142,143,100,101,102,144,145,33,150,103,104,105,32,78,32,78,126,80,148,149,150,79,79,79,143,79,87,79,79,143,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,106,31,136,137,95,96,29,97,138,119,126,139,30,133,141,98,99,142,100,101,110,102,144,145,147,33,80,148,149,150,112,103,113,104,114,105,0,120,146,89,90,91,28,92,93,94,106,106,106,106,106,106,106,95,96,29,97,133,98,99,143,100,101,102,103,104,105,141,143,30,150,106,106,106,106,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,31,31,133,106,30,30,106,133,30,126,126,30,147,148,106,78,138,106,106,106,106,106,136,106,136,106,136,78,106,106,126,87,87,126,87,126,141,87,106,81,133,150,0,133,119,106,133,30,80,33,87,148,148,148,0,148,148,106,139,106,139,32,78,129,79,79,32,78,79,78,0,143,106,31,136,138,133,141,143,31,31,31,31,31,31,31,31,141,143,31,133,30,138,30,150,0,106,87,87,87,87,87,87,136,133,87,136,87,136,133,106,31,141,142,87,136,33,0,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,106,106,31,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,100,101,110,102,144,147,33,80,148,149,112,103,113,104,114,105,0,78,0,119,136,150,126,126,126,126,126,126,126,126,126,126,126,126,0,87,141,142,81,143,133,133,31,31,31,31,141,142,32,78,32,78,87,31,31,79,31,87,106,87,139,30,119,133,119,119,32,78,32,78,32,78,32,78,32,129,81,81,79,87,89,90,91,28,92,93,94,120,130,106,31,95,96,29,97,138,119,126,139,30,133,141,98,99,142,143,100,101,102,144,145,33,80,148,149,150,150,103,104,105,150,150,0,150,150,150,0,78,139,133,140,150,32,78,79,80,32,78,79,32,78,79,79,81,0,133,106,87,106,80,148,32,78,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,106,141,142,143,148,149,126,33,137,32,78,81,141,81,141,106,79,80,148,137,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,106,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,106,106,106,81,141,87,89,90,91,28,92,93,94,95,96,29,97,98,99,100,101,102,103,104,105,126,81,141,32,78,129,129,129,105,81,141,32,141,134,32,78,129,81,79,88,87,89,90,91,28,92,93,94,130,106,31,137,95,96,29,97,138,126,141,98,99,142,143,100,101,102,144,145,33,80,148,150,103,104,105,32,78,32,78,80,145,130,78,79,79,133,143,148,79,81,30,120,119,30,134,32,32,78,78,129,129,129,129,81,79,79,79,79,88,135,87,89,90,91,28,92,93,94,120,130,31,136,137,137,137,137,137,95,96,29,97,138,119,126,126,126,126,139,30,133,140,141,98,99,142,142,143,100,101,110,102,144,145,146,147,33,33,33,80,148,149,150,112,103,113,104,114,105,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,81,30,30,120,30,138,146,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,106,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,32,78,32,78,32,78,150,78,150,150,150,139,81,141,142,136,30,150,138,30,134,32,78,129,81,79,88,135,87,89,90,91,28,92,93,94,120,130,31,136,137,95,96,29,97,138,119,126,139,30,133,140,141,98,99,142,143,100,101,110,102,144,145,146,147,33,80,148,149,150,112,103,113,104,114,105,120,139,30,31,119,87,120,106,141,142,141,142,106,30,150,0,0,0,195,195,215,0,118,195,0,195,0,0,195,0,135,0,0,0,195,0,88,228,88,228,0,88,88,88,0,135,228,135,0,195,0,188,188,195,188,195,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,188,215,215,240,240,195,195,241,241,242,242,243,243,244,244,245,245,246,246,117,117,228,228,0,188,188,215,215,240,240,195,195,241,241,242,242,243,243,244,244,245,245,246,117,228,188,188,188,188,215,215,240,195,195,195,195,195,195,195,195,195,195,195,241,242,243,244,245,246,117,228,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,243,245,244,246,117,228,188,215,240,195,241,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,188,215,240,195,241,242,243,244,245,246,117,228,710,711,712,195,195,215,0,195,0,195,0,195,0,195,0,0,0,0,195,0,188,188,195,188,195,0,134,134,134,0,0,0,179,179,134,134,134,179,134,179,0,134,134,0,179,179,162,179,162,252,179,162,179,162,179,179,179,179,179,162,162,179,179,179,179,179,179,179,162,179,162,0,162,179,179,162,179,162,179,162,179,162,179,162,179,162,0,0,0,0,257,257,257,258,257,258,258,0,0,0,0,0,0,0,0,0,0,249,0,249,0,0,249,0,75,75,166,166,75,166,166,166,75,166,166,75,75,166,166,166,75,75,75,75,166,75,249,262,166,166,75,75,249,262,166,166,75,75,166,75,166,75,249,262,166,75,166,75,249,262,166,75,166,75,166,75,75,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,75,75,0,0,166,166,166,166,75,166,75,166,75,166,75,166,75,166,166,166,166,166,166,166,166,166,166,166,0,0,0,249,262,166,166,166,166,166,166,75,75,75,75,75,249,249,262,262,166,166,75,75,0,166,166,75,75,75,75,75,75,166,166,75,166,166,75,75,75,75,75,166,166,75,75,166,166,166,249,249,262,262,166,75,75,249,249,249,249,249,262,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,75,75,75,75,75,75,75,166,166,75,75,75,75,75,75,166,75,166,75,75,75,75,75,75,75,75,75,75,166,75,166,166,75,166,75,166,75,75,249,262,166,75,166,166,75,75,166,75,166,75,166,166,166,166,166,75,166,75,262,75,166,166,75,75,75,166,166,75,166,75,166,166,166,166,166,166,166,75,75,75,166,75,166,166,75,166,75,166,166,75,75,166,166,75,75,75,166,75,166,75,166,166,166,75,166,166,75,166,166,75,166,75,249,166,166,166,166,75,75,75,166,249,262,166,75,75,166,75,249,262,75,166,75,249,262,166,75,249,262,166,75,166,75,166,75,166,75,166,249,262,166,75,249,262,166,75,166,75,166,166,166,166,75,75,166,249,0,249,0,0,249,0,281,280,281,280,281,280,281,280,281,280,281,281,280,280,281,281,280,280,281,280,281,281,280,280,281,280,281,280,281,280,281,280,281,280,281,280,310,0,307,310,0,0,0,306,306,306,306,305,307,0,305,306,307,305,306,307,305,306,307,305,306,307,310,0,310,0,0,0,310,310,310,0,0,0,310,0,0,0,310,310,0,0,305,306,307,305,305,306,306,307,307,305,305,306,306,307,307,305,306,307,307,305,306,307,0,0,307,305,306,307,305,306,307,305,306,307,305,306,307,305,306,307,305,306,307,0,0,0,0,0,314,0,314,0,314,0,0,314,313,313,314,313,314,313,313,313,314,313,313,314,314,313,314,314,313,314,313,314,313,313,314,313,313,314,313,314,313,314,313,314,0,315,315,315,315,315,315,315,315,315,315,315,0,310,0,310,0,0,0,0,0,318,318,318,316,317,318,319,316,317,318,319,316,317,318,316,317,318,310,316,310,310,310,310,312,317,310,311,317,310,310,318,319,318,318,319,319,316,317,318,319,316,317,318,319,0,316,317,318,319,316,317,316,317,318,316,317,318,319,316,317,318,319,316,317,318,319,316,317,318,319,317,317,317,0,0,0,0,0,0,0,0,0,0,0,0,310,310,0,310,310,310,310,310,310,310,310,0,320,320,320,320,320,320,320,320,320,320,320,320,0,0,0,323,325,323,325,322,323,323,323,325,323,323,325,325,323,325,323,325,323,325,323,325,323,325,323,325,323,325,323,325,0,0,0,0,326,0,0,0,326,265,265,265,265,265,267,265,265,328,330,326,267,265,265,265,327,328,329,330,326,267,265,265,265,327,328,329,330,265,326,267,265,327,328,329,330,326,267,265,327,328,329,330,267,265,327,328,330,267,265,327,328,330,327,330,267,265,327,328,330,265,265,326,267,265,327,328,329,330,326,326,267,267,265,265,327,327,328,328,329,329,330,330,326,326,267,265,265,265,265,327,328,329,329,330,326,326,267,265,265,265,327,328,329,330,327,265,330,265,267,265,327,328,330,327,267,265,328,326,267,265,327,328,329,330,265,265,327,267,265,327,328,330,327,265,327,326,329,265,326,267,265,327,328,329,330,326,265,329,330,326,267,265,265,327,328,329,330,326,267,265,327,328,329,330,267,326,267,265,327,328,329,330,326,267,265,327,328,329,330,265,0,0,0,0,0,0,0,0,0,0,334,334,332,333,332,332,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,335,335,335,335,335,335,335,332,333,336,334,334,335,332,337,338,333,339,336,334,334,334,335,332,337,338,333,339,336,334,335,337,338,335,337,338,335,332,337,338,333,339,336,335,335,339,334,335,334,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,332,337,338,333,339,336,334,335,336,292,292,0,0,0,0,0,0,0,0,0,0,285,292,0,292,0,292,292,292,292,0,285,292,292,292,0,0,0,340,341,340,340,341,341,340,341,340,341,340,340,341,341,285,284,342,340,340,340,341,341,341,343,171,285,284,292,344,342,340,340,340,341,341,341,343,171,285,284,292,344,343,171,713,714,715,716,343,171,284,713,714,715,716,343,171,284,171,171,340,341,343,171,285,284,292,344,340,341,343,171,285,284,292,344,340,341,171,285,284,343,171,341,284,713,714,715,716,343,171,343,171,340,341,343,171,285,284,343,171,340,341,343,171,285,284,292,344,340,340,341,341,343,343,171,171,285,285,284,284,292,292,344,344,284,343,171,340,340,340,340,341,341,341,341,343,343,171,171,285,285,284,284,292,292,344,344,342,340,340,340,341,341,341,343,171,285,285,284,284,284,292,292,292,292,292,344,285,340,341,284,285,171,340,341,343,171,285,284,343,284,340,341,171,285,284,343,171,285,340,341,284,342,340,341,343,171,285,284,292,344,284,346,284,342,342,284,344,340,341,284,285,284,285,340,341,284,284,713,714,715,716,343,171,343,342,284,713,714,715,716,343,171,340,341,171,285,284,715,716,343,713,714,171,340,341,343,171,285,284,292,342,340,341,343,340,341,343,171,285,284,292,344,343,171,340,341,343,171,285,284,292,344,284,171,342,342,340,340,341,341,343,171,285,284,292,344,342,340,341,343,171,285,284,292,344,342,340,341,343,171,285,284,292,344,342,340,341,343,171,285,284,292,344,343,171,717,718,0,0,0,0,0,0,0,0,0,0,0,348,348,0,0,0,0,347,121,121,347,54,347,0,121,121,0,0,0,0,54,54,54,347,121,348,54,347,121,348,54,347,121,348,54,347,121,348,54,347,54,347,54,54,347,347,54,347,54,54,54,347,121,348,54,54,347,347,121,121,348,348,54,347,121,121,348,348,54,347,121,121,348,348,347,54,347,120,54,347,121,348,347,54,54,54,347,54,54,347,121,348,54,54,347,54,347,121,348,121,348,54,347,121,348,54,347,121,348,120,54,347,121,348,54,54,54,347,121,348,54,124,0,0,0,0,0,0,0,0,0,124,0,0,124,0,0,124,0,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,0,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,0,0,0,125,0,0,0,0,210,211,210,211,0,0,125,125,0,210,125,210,349,211,350,351,125,210,349,211,350,351,125,125,125,125,210,349,211,350,351,125,210,349,211,350,351,125,210,211,125,125,210,211,125,210,349,211,350,351,125,210,210,349,349,211,211,350,350,351,351,125,125,210,210,349,349,211,211,350,350,351,351,125,125,210,349,349,211,350,350,351,125,125,125,125,210,211,125,125,210,211,125,210,211,125,125,125,210,211,125,210,349,211,350,351,125,125,125,125,125,125,210,211,125,125,125,125,125,125,125,125,125,125,125,125,125,210,211,125,349,350,351,210,211,125,210,349,211,350,351,125,210,349,211,350,351,125,210,210,210,210,349,211,211,211,211,350,351,125,125,125,125,210,349,211,350,351,125,210,349,211,350,351,125,210,349,211,350,351,125,127,0,0,0,0,0,354,355,354,355,127,0,127,0,354,355,127,354,355,190,127,356,357,358,354,355,190,127,356,357,358,127,127,127,354,355,190,127,356,357,358,354,355,190,127,356,357,358,354,355,354,355,354,355,127,356,354,355,190,127,356,357,358,354,354,355,355,190,190,127,127,356,356,357,357,358,358,354,354,355,355,190,190,127,127,356,356,357,357,358,358,354,354,355,190,127,127,127,127,356,357,358,355,127,127,354,127,355,127,355,127,127,354,355,354,355,127,357,358,354,355,190,127,356,357,358,127,127,127,127,127,127,127,127,190,354,355,127,127,127,127,127,127,127,127,127,127,127,127,127,354,355,127,357,358,354,355,127,354,355,190,127,356,357,358,127,354,355,190,127,356,357,358,354,354,354,354,355,355,355,355,190,127,127,356,357,358,354,355,190,127,356,357,358,354,355,190,127,356,357,358,354,355,354,355,190,127,356,357,358,0,0,132,131,132,0,0,0,0,0,0,132,132,132,132,132,131,0,131,132,131,132,131,132,131,132,131,131,132,131,131,132,132,131,132,131,132,131,131,132,131,131,132,131,132,131,132,131,132,131,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,360,0,0,0,0,360,360,164,0,164,0,0,0,0,0,0,360,360,0,122,115,115,115,288,115,288,288,115,115,288,122,208,207,123,122,164,208,207,115,288,288,359,360,123,122,164,208,207,115,288,288,359,360,288,288,122,164,208,207,288,359,360,122,164,208,207,288,359,360,115,288,122,288,288,288,115,122,164,115,288,359,360,122,122,164,164,115,115,288,288,359,359,360,360,288,122,122,164,208,207,115,288,359,359,360,360,123,122,122,164,208,207,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,359,360,360,360,115,288,115,115,115,115,115,115,115,115,362,359,123,122,164,208,207,288,359,360,122,123,208,207,123,208,207,122,122,115,288,122,115,288,122,288,123,208,207,123,123,207,123,164,115,288,288,288,164,122,122,122,122,122,122,122,122,0,0,0,288,288,164,123,208,207,359,360,122,164,208,207,115,288,359,360,122,359,360,123,208,207,288,123,122,164,208,207,115,115,288,288,359,360,123,122,164,208,207,288,359,360,123,122,164,208,207,115,288,359,360,123,122,164,208,207,288,359,360,288,0,0,0,0,213,213,0,0,0,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,364,0,363,364,0,0,363,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,0,363,364,248,363,364,248,363,364,248,363,364,248,363,364,248,363,363,364,364,248,248,363,363,364,364,248,248,363,363,363,363,364,364,364,248,363,364,248,248,363,364,363,364,248,363,364,248,363,364,248,363,364,248,363,364,248,363,364,248,366,0,0,0,368,0,0,369,369,369,369,369,0,0,368,366,0,0,0,0,366,0,366,366,0,366,234,235,367,368,369,366,234,235,367,368,369,366,234,235,367,368,369,366,234,235,367,368,369,368,368,368,368,0,366,234,235,367,368,366,366,234,234,235,235,367,367,368,368,366,366,234,234,235,235,367,367,368,368,369,366,366,234,234,235,235,367,368,369,369,369,369,368,367,30,366,234,235,367,368,369,368,367,30,369,368,30,368,0,0,119,139,119,119,368,366,234,235,367,366,234,235,367,368,369,366,234,235,367,368,366,234,235,367,368,369,366,234,235,367,368,369,138,366,234,235,367,368,369,139,30,138,366,234,235,367,368,369,369,119,0,0,0,0,212,212,212,212,212,212,212,212,212,212,212,212,212,116,373,0,0,0,116,373,0,116,0,116,116,373,0,116,116,116,116,116,116,116,373,116,373,116,116,370,370,371,0,0,116,372,372,372,372,372,372,372,372,372,372,0,116,373,373,116,116,116,116,116,373,373,116,373,373,116,116,116,116,116,0,116,116,116,375,375,375,375,375,375,375,375,375,375,116,0,0,373,116,373,116,373,116,373,116,373,116,373,0,0,377,0,0,0,152,152,0,152,377,152,152,0,152,0,0,152,377,376,152,377,376,376,376,376,370,370,376,371,376,376,0,0,0,372,372,372,372,372,372,372,372,372,372,376,376,376,152,152,377,377,376,152,152,152,377,377,376,152,377,376,376,376,375,375,375,375,375,375,375,375,375,375,0,0,152,377,376,152,377,152,377,376,152,377,376,152,377,376,152,377,376,719,719,720,720,0,0,0,0,0,116,116,116,116,116,116,116,116,116,116,116,116,116,0,0,721,721,0,722,0,721,0,0,379,723,379,723,379,723,381,381,379,723,721,379,0,379,723,374,723,379,723,379,723,379,723,379,723,0,0,0,0,0,0,0,724,725,384,385,382,383,724,725,384,385,382,383,382,383,382,383,384,382,383,382,382,383,383,384,382,383,724,725,384,384,385,382,383,724,725,384,385,382,383,382,383,385,385,385,382,383,385,724,725,384,385,382,383,724,725,384,385,382,383,724,725,384,385,382,383,724,725,384,385,382,383,387,0,387,387,0,387,0,386,386,386,217,386,386,387,217,386,386,387,217,386,387,217,386,387,386,386,217,217,386,387,217,217,386,386,387,387,217,217,386,386,386,386,387,387,217,386,387,387,387,387,387,217,217,217,386,217,386,387,386,386,217,217,217,217,217,217,387,217,386,387,217,386,387,217,217,386,387,217,386,387,217,386,387,217,386,387,386,199,0,183,0,183,199,0,0,0,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,183,199,199,390,390,391,391,183,183,199,199,390,390,391,391,183,183,183,199,199,199,390,391,183,199,390,391,183,199,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,183,199,390,391,0,0,0,0,0,0,0,0,395,394,394,394,0,0,0,0,0,394,395,394,394,0,0,394,394,394,394,394,0,394,0,0,0,395,395,395,0,0,0,0,0,0,0,0,0,0,0,0,394,0,0,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,0,0,399,0,396,0,0,0,0,0,182,331,0,331,400,182,0,400,399,399,406,407,182,404,378,331,400,406,407,182,404,378,331,400,0,182,404,378,331,400,182,404,378,331,400,400,0,182,404,378,331,400,182,182,404,404,378,378,331,331,400,400,0,182,182,404,404,378,378,331,331,400,0,406,407,182,182,182,404,378,331,331,331,400,396,406,400,399,0,406,407,182,404,378,331,400,406,407,406,407,404,407,378,406,407,406,407,406,407,406,406,0,0,406,406,407,182,404,378,331,0,399,399,182,404,378,331,400,182,404,378,331,399,406,407,406,407,182,404,378,331,400,406,407,182,404,378,331,400,406,407,182,404,378,331,400,406,407,182,404,378,331,400,0,0,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,399,0,0,0,399,399,413,414,413,414,413,413,413,413,414,414,414,414,0,413,414,399,0,413,414,399,399,413,414,399,413,414,413,414,413,414,413,414,0,0,182,331,0,331,0,182,0,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,396,0,0,0,182,331,331,182,396,399,0,396,0,399,399,396,399,399,399,399,0,0,0,726,726,726,726,726,726,726,726,726,726,0,0,231,231,231,231,231,231,415,231,415,231,415,231,415,231,415,231,415,415,415,415,415,415,415,415,415,415,231,231,231,231,415,415,231,231,231,231,231,415,231,231,231,231,231,231,231,231,231,415,231,415,231,415,415,231,231,231,231,415,231,231,415,231,415,231,415,231,415,415,415,0,0,0,41,71,71,0,0,71,71,71,71,71,71,71,0,71,71,71,0,269,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,0,41,71,0,74,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,436,436,436,0,0,0,0,294,436,0,0,41,442,443,446,441,0,436,0,0,436,0,436,436,436,436,436,0,436,0,436,436,436,0,436,436,436,438,432,446,0,0,435,436,435,436,251,435,436,435,436,293,435,251,438,269,435,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,293,435,436,432,435,439,439,435,435,436,436,435,436,435,436,294,293,293,293,41,293,441,441,442,442,443,443,443,443,443,443,251,442,443,251,441,435,436,436,435,436,435,436,441,435,436,441,293,293,0,446,446,432,435,432,432,432,432,435,432,432,435,432,432,435,432,435,432,432,432,435,432,432,435,432,435,432,435,432,435,432,435,432,435,432,432,435,432,432,432,435,432,432,435,435,436,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,455,455,455,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,454,471,455,447,448,449,450,295,451,452,453,454,455,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,454,471,454,454,454,454,454,471,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,455,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,448,449,450,295,451,473,447,448,449,450,295,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,0,71,425,426,427,428,429,430,431,0,71,425,426,427,428,429,430,431,0,0,71,0,71,0,71,0,71,0,71,0,71,0,71,0,0,476,476,251,71,71,71,424,251,251,251,251,251,251,251,251,251,251,425,426,427,428,429,430,431,476,476,476,476,476,476,476,476,476,251,251,251,71,251,74,71,71,71,425,426,476,476,429,71,71,427,428,430,431,476,476,476,476,71,71,71,71,71,429,476,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,429,476,430,431,251,251,476,476,476,476,0,478,0,478,478,478,0,0,479,479,479,479,479,479,480,479,480,479,480,479,480,479,480,479,480,480,480,480,480,480,480,480,480,480,479,479,479,479,480,480,479,479,479,479,479,480,479,479,479,479,479,479,479,479,479,480,479,480,480,480,479,479,479,479,480,479,479,480,479,480,479,480,479,480,480,480,0,0,0,7,7,7,7,481,7,7,163,481,481,7,163,481,7,163,481,7,163,481,7,481,7,7,7,163,481,7,481,163,163,163,163,163,163,163,163,163,163,7,7,481,7,7,481,481,163,163,7,7,7,7,481,481,481,481,7,7,7,163,481,7,481,7,7,7,481,163,7,481,7,481,7,481,7,481,7,481,7,481,163,7,163,481,7,163,163,7,481,7,481,7,481,7,163,481,7,481,7,163,481,7,163,481,7,163,481,7,163,481,163,163,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,111,111,111,111,111,111,111,111,111,111,111,111,482,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,0,0,483,483,483,483,483,483,484,483,484,483,484,483,484,483,484,483,483,483,483,483,483,483,483,483,483,484,483,483,483,483,483,483,483,483,483,484,483,484,484,484,483,483,483,483,484,483,483,484,483,484,483,484,483,484,0,0,485,485,485,485,485,485,486,485,486,485,486,485,486,485,486,485,486,486,486,486,486,486,486,486,486,486,485,485,485,485,486,486,485,485,485,485,485,486,485,485,485,485,485,485,485,485,485,486,485,486,486,486,485,485,485,485,486,485,485,486,485,486,485,486,485,486,486,486,0,0,487,487,487,487,487,487,488,487,488,487,488,487,488,487,488,487,487,487,487,487,487,487,487,487,487,488,487,487,487,487,487,487,487,487,487,488,487,488,488,488,487,487,487,487,488,487,487,488,487,488,487,488,487,488,0,0,0,489,489,489,489,489,489,489,490,491,489,490,491,489,490,491,489,490,491,489,491,489,491,491,491,491,491,491,491,491,491,491,489,489,489,489,491,491,489,489,489,489,490,491,489,490,491,489,489,489,489,489,489,489,489,489,489,489,489,489,491,489,490,491,491,491,491,491,489,489,489,489,490,491,489,489,490,491,489,490,491,489,490,491,489,490,491,491,491,491,492,492,492,492,0,492,492,492,0,727,0,0,492,492,492,492,492,727,492,492,0,0,0,0,492,492,492,0,492,493,494,495,155,492,493,494,495,155,492,155,492,492,153,493,494,155,495,495,495,495,495,495,495,495,495,495,492,492,492,153,493,494,156,495,495,155,155,492,493,494,495,155,155,155,492,492,155,492,0,493,494,495,155,492,494,155,494,155,494,220,493,494,493,494,220,493,494,493,494,493,494,493,494,493,494,493,220,493,494,493,494,493,494,493,494,0,155,220,492,155,493,494,495,155,492,493,494,495,155,492,493,494,495,155,492,493,494,495,155,492,156,495,495,156,495,495,197,0,196,84,0,0,499,197,0,197,0,196,196,192,192,0,84,0,0,0,0,0,0,0,192,197,499,0,0,506,506,0,0,0,0,0,0,0,0,184,184,184,184,184,84,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,184,84,233,157,498,184,141,143,82,506,184,157,498,82,184,84,157,498,184,82,82,184,84,233,157,498,192,197,196,499,187,500,501,184,82,82,184,184,84,84,233,233,157,157,498,498,192,192,197,197,196,196,499,499,187,187,500,500,501,501,82,184,84,233,157,157,157,498,192,192,197,197,196,196,499,499,187,187,500,500,501,501,82,184,184,84,233,157,157,498,192,192,192,197,197,197,197,197,197,196,196,196,499,499,499,499,187,500,501,84,157,82,82,82,184,184,184,184,84,82,82,184,84,233,157,498,141,143,82,184,84,233,157,498,192,197,196,499,187,500,501,501,500,143,82,184,184,184,84,233,157,498,82,82,82,82,82,82,82,82,184,498,82,82,184,184,82,184,84,157,157,498,82,82,82,82,82,82,82,82,82,82,82,192,197,196,499,187,506,184,84,157,498,82,184,84,233,157,498,192,197,196,499,187,500,501,157,192,197,196,499,187,500,501,84,82,184,84,84,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,184,84,233,157,498,192,197,196,499,187,500,501,82,82,82,82,184,84,233,157,498,192,197,196,499,187,500,501,184,167,167,167,0,0,167,167,167,167,167,0,167,167,521,521,167,521,167,0,0,521,167,521,167,521,521,521,167,521,521,167,167,521,521,167,167,521,167,167,521,521,146,521,167,521,167,521,167,167,521,167,521,167,146,521,167,521,167,33,147,0,0,0,33,33,147,33,0,0,181,522,181,522,181,522,181,522,181,522,181,181,522,522,181,181,522,522,181,522,181,522,181,522,181,522,181,522,181,522,181,522,181,522,181,522,0,0,0,185,523,523,523,0,523,523,523,523,0,0,185,185,0,185,0,523,523,0,266,185,185,185,185,523,523,523,523,266,523,185,185,185,524,525,266,523,185,185,185,524,525,266,523,185,524,525,266,523,185,524,525,523,185,266,523,185,266,523,185,523,266,523,185,524,525,266,266,523,523,185,185,524,524,525,525,266,523,523,523,523,185,185,185,185,524,524,525,525,266,523,523,185,185,524,525,185,185,185,523,266,523,185,266,523,185,524,525,0,0,0,0,0,0,266,523,185,266,523,266,266,524,525,185,266,523,185,524,525,266,523,185,524,525,523,266,523,185,524,525,266,523,185,524,525,266,523,185,524,525,266,523,185,524,525,0,0,0,526,526,526,526,526,526,526,264,266,526,264,526,264,526,264,526,264,526,264,526,264,526,264,526,526,264,264,526,264,526,264,526,264,526,264,266,264,266,264,264,264,526,264,264,526,264,526,264,526,264,526,264,530,530,530,530,530,530,530,530,530,0,0,530,530,530,530,530,530,530,530,530,530,530,530,530,530,0,0,530,530,0,530,530,530,0,530,530,530,530,530,530,530,530,530,527,527,528,529,530,527,528,529,530,527,528,529,530,527,528,529,530,529,530,529,530,527,529,529,527,529,530,527,528,529,530,527,527,528,528,529,529,530,530,527,527,528,528,529,530,527,528,529,530,527,527,528,529,530,529,529,529,528,527,528,529,530,527,528,527,527,527,527,528,529,530,527,527,528,529,530,527,528,529,530,527,528,529,530,728,728,268,268,268,0,0,0,268,268,268,268,268,268,531,532,268,531,532,268,531,532,268,531,532,268,268,531,532,531,532,268,531,532,268,531,532,268,268,531,531,532,532,268,531,532,268,531,532,268,268,531,532,531,532,268,531,532,268,531,532,268,531,532,268,531,532,268,531,532,268,531,532,531,532,268,531,532,729,729,534,0,0,0,534,534,533,534,535,533,534,535,533,534,535,533,534,535,533,534,535,533,535,533,534,535,535,533,534,535,533,533,534,534,535,535,533,533,533,534,535,533,534,535,533,533,534,535,533,534,535,533,534,535,533,534,535,533,533,534,535,533,534,535,0,0,0,0,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,537,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,536,537,537,538,538,539,539,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,537,538,539,536,536,537,538,539,539,536,537,538,539,536,537,538,539,538,536,537,538,539,536,536,537,538,539,0,0,0,0,0,0,541,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,540,541,541,542,542,543,543,544,544,545,545,541,543,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,543,540,542,540,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,540,541,542,543,544,545,547,547,547,547,547,547,547,547,0,0,0,546,547,548,546,547,548,548,546,547,548,546,547,548,546,547,548,546,548,546,547,548,546,547,548,546,546,547,547,548,548,546,547,548,546,547,548,548,546,547,548,548,546,546,548,546,546,546,546,546,546,546,547,548,546,547,548,546,547,548,546,547,548,546,546,546,547,548,0,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,0,0,0,0,0,0,0,0,0,0,0,0,168,552,557,345,551,151,151,151,226,553,0,227,0,151,0,0,223,0,0,554,151,151,151,151,151,151,151,151,151,151,151,223,151,151,151,223,0,223,223,168,223,223,151,223,151,151,151,151,223,551,223,0,0,223,151,0,557,0,0,151,345,226,553,223,168,552,552,552,0,0,0,0,0,151,151,223,552,554,151,223,151,151,223,151,552,223,552,151,550,556,151,550,345,226,551,552,553,223,168,554,557,555,556,151,550,345,226,551,552,553,223,168,554,557,555,556,550,345,226,551,552,553,223,168,554,555,556,550,345,226,551,552,553,223,168,554,555,556,226,552,553,555,550,556,550,556,550,555,556,555,556,550,345,226,551,552,553,223,168,554,555,556,550,550,345,345,226,226,551,551,552,552,553,553,223,223,168,168,554,554,555,555,556,556,556,556,151,151,550,345,226,551,551,552,553,223,223,168,168,554,554,557,557,555,555,556,151,151,151,151,151,550,345,226,551,551,551,552,553,223,223,223,223,223,168,168,554,554,557,557,555,555,555,556,555,555,227,550,552,553,555,556,556,556,150,151,550,345,226,551,552,553,223,168,554,557,555,556,556,150,226,552,553,555,556,550,150,556,0,550,556,556,0,550,555,556,556,556,552,151,551,223,168,554,557,550,556,550,556,556,556,556,556,550,555,556,550,345,226,551,552,553,223,168,554,555,556,151,551,223,168,554,557,555,555,151,550,345,226,551,552,553,223,168,554,557,555,556,151,550,345,226,551,552,553,223,168,554,557,555,556,151,550,345,226,551,552,553,223,168,554,557,555,556,550,150,556,150,550,556,150,151,550,345,226,551,552,553,223,168,554,557,555,556,550,556,556,150,730,730,731,731,731,732,733,732,734,735,736,735,736,0,0,0,0,561,564,563,561,564,563,561,563,561,563,561,563,561,561,561,564,563,561,564,563,561,561,564,564,563,563,561,564,563,563,561,564,563,561,563,561,564,563,561,564,563,561,563,561,561,564,563,561,561,561,563,563,561,561,564,563,561,564,563,561,564,563,563,564,561,564,563,0,0,0,497,0,84,497,85,85,85,0,85,85,85,85,85,85,85,85,0,83,0,85,83,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,170,214,214,170,222,214,170,222,170,170,214,222,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,170,509,83,222,85,170,170,170,0,497,512,513,510,519,520,507,214,170,214,0,0,0,512,513,510,519,520,507,214,170,509,83,222,85,170,512,512,513,513,510,510,519,519,520,520,507,507,214,214,170,170,509,509,83,83,222,222,85,85,512,513,510,519,520,507,214,170,170,170,509,509,83,222,222,222,85,85,512,513,510,519,520,507,214,214,214,214,170,170,170,170,509,83,83,222,222,222,222,222,85,85,83,222,222,170,214,170,83,170,214,170,222,214,170,170,512,513,510,519,520,507,170,509,83,222,85,0,0,214,83,222,512,513,510,519,520,507,214,170,509,83,222,85,566,214,214,170,214,170,214,214,83,512,513,510,519,520,507,170,509,83,222,85,214,83,83,0,0,214,214,170,170,170,85,83,170,170,83,512,513,510,519,520,507,214,170,509,83,222,85,170,170,170,170,509,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,512,513,510,519,520,507,214,170,509,83,222,85,170,512,513,510,519,520,507,214,170,509,83,222,85,214,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,0,569,569,569,569,569,0,0,0,0,517,389,517,389,517,389,517,389,572,573,517,572,572,389,573,517,572,389,572,573,517,572,389,573,517,572,389,573,517,572,389,389,572,389,573,517,572,572,389,389,573,573,517,517,572,572,389,389,573,517,572,572,389,389,573,517,517,572,572,572,389,389,517,389,389,389,573,572,389,517,572,389,573,517,572,389,572,572,572,572,389,573,517,572,572,389,389,517,389,389,0,573,573,517,572,389,572,517,572,389,573,517,572,389,389,389,573,517,572,389,573,517,572,389,573,517,572,389,0,0,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,576,576,0,0,0,568,568,575,568,575,576,568,575,576,568,575,576,568,575,576,568,575,576,568,575,576,568,568,575,575,576,576,568,568,568,575,576,568,575,576,568,568,568,575,568,568,575,576,568,575,576,568,568,575,576,568,568,568,568,575,576,575,568,568,575,576,568,575,576,568,575,576,568,575,576,0,0,0,0,0,0,0,737,738,739,740,0,0,0,0,0,0,0,0,0,737,738,739,740,578,0,578,565,571,107,496,579,578,565,571,107,496,579,565,571,107,496,579,582,502,565,571,107,496,579,582,502,565,571,107,496,579,502,565,571,107,496,579,502,565,571,107,496,579,565,571,107,496,579,565,571,107,496,579,0,565,571,107,496,579,565,571,107,496,579,565,565,571,571,107,107,496,496,579,579,502,565,571,107,496,579,582,502,565,571,107,496,579,579,565,571,107,496,565,571,107,496,579,0,0,565,571,107,496,579,582,502,565,571,107,496,579,582,565,571,107,496,496,0,565,571,107,496,579,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,579,502,565,571,107,496,579,582,502,565,571,107,496,579,582,502,565,571,107,496,579,582,502,565,571,107,496,579,0,565,571,107,496,582,502,565,571,107,496,579,0,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,0,0,0,0,0,570,570,570,570,570,0,515,515,580,515,580,0,0,0,0,0,515,515,515,580,515,580,515,580,0,515,515,580,515,580,515,580,515,580,515,395,394,394,394,0,0,0,0,0,394,395,394,583,394,583,584,55,583,583,584,55,583,0,584,55,583,584,55,583,583,584,583,584,584,584,584,584,584,584,584,584,584,394,55,583,55,55,583,583,55,584,584,55,55,583,583,583,584,55,583,394,583,394,583,584,394,583,583,394,583,394,0,0,583,583,583,583,583,395,584,584,55,583,55,395,584,395,584,584,583,0,583,0,394,583,584,55,583,55,583,584,55,583,584,55,583,584,55,583,584,55,583,584,584,586,0,0,0,586,0,0,592,0,586,586,586,0,514,589,586,586,586,586,586,592,592,592,514,514,514,514,586,586,586,589,589,0,0,586,589,0,514,514,592,0,586,586,0,586,588,514,589,586,586,586,586,609,0,0,0,0,0,0,0,604,609,609,0,0,0,0,609,0,0,0,600,601,602,603,604,598,611,605,606,601,607,608,609,610,602,603,604,598,611,605,606,601,607,608,609,610,602,598,598,603,604,605,606,601,607,608,609,610,602,603,604,605,606,601,607,608,609,610,602,603,604,608,609,610,604,604,609,609,603,604,604,598,611,605,606,601,607,608,609,609,610,602,603,604,598,611,605,606,601,607,608,609,610,610,610,602,603,603,604,598,611,605,606,601,607,608,609,610,602,598,598,597,603,607,608,610,610,598,597,603,611,605,605,606,606,601,607,608,610,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,597,600,598,603,604,605,606,601,607,608,609,610,602,604,609,598,603,604,598,611,605,606,601,607,608,609,610,602,603,604,598,611,605,606,601,607,608,609,610,602,603,604,598,611,605,606,601,607,608,609,610,602,0,608,603,604,598,611,605,606,601,607,608,609,610,602,0,0,0,0,595,0,0,0,0,0,0,622,614,617,618,619,620,617,618,619,620,617,618,619,620,617,618,619,620,617,619,617,618,619,620,617,618,619,620,617,618,619,620,596,622,617,617,617,617,617,617,617,617,617,617,617,617,618,619,619,620,622,617,617,617,617,617,617,617,617,617,617,617,617,618,619,619,620,622,617,617,617,617,617,617,617,617,617,617,617,617,618,619,619,620,596,622,617,617,617,617,617,617,617,617,617,617,617,617,619,619,622,617,617,617,617,617,617,617,617,617,617,617,617,617,618,619,620,617,618,619,620,617,618,619,620,617,618,619,620,617,618,619,620,609,609,609,609,0,0,0,0,0,624,624,624,624,624,624,624,624,624,624,0,0,626,0,0,0,592,0,0,0,0,626,627,626,627,627,626,626,627,626,626,514,589,592,592,592,514,514,514,514,597,589,589,626,0,597,514,597,514,592,626,0,514,589,0,0,0,0,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,599,630,630,630,629,630,599,629,630,599,629,630,599,630,630,629,630,599,0,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,629,630,599,0,0,0,631,633,634,631,633,634,631,631,631,633,631,633,634,634,631,633,634,631,633,634,631,633,631,633,631,633,631,631,634,631,634,633,631,633,634,631,633,634,631,633,634,631,633,634,631,0,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,626,0,0,0,628,628,626,627,626,627,627,626,626,627,626,626,628,628,0,628,628,628,628,628,626,626,628,628,628,628,628,628,0,0,0,637,639,638,637,639,638,637,638,637,638,637,637,639,638,637,637,637,639,638,637,637,639,638,639,638,637,639,638,637,637,637,637,639,638,0,0,639,638,637,638,639,638,637,639,638,637,639,638,637,639,638,637,639,638,0,0,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,0,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,641,144,145,144,145,0,0,144,0,647,0,647,559,644,644,559,0,648,0,0,144,145,144,145,558,641,0,0,559,0,559,0,559,0,0,0,558,648,0,649,0,0,144,145,559,0,144,145,0,0,0,0,649,640,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,641,175,642,643,644,180,194,645,640,559,558,646,647,641,175,642,643,644,180,194,645,640,559,558,646,647,641,175,640,641,175,642,643,644,180,194,645,640,559,558,646,647,641,641,175,175,642,642,643,643,644,644,180,180,194,194,645,645,640,640,559,559,558,558,646,646,647,647,221,641,175,642,642,643,643,644,644,180,180,194,194,645,645,640,559,559,558,558,646,646,647,647,648,648,649,221,641,175,642,643,644,644,180,194,645,640,559,559,559,559,559,559,558,558,558,646,647,647,648,648,648,641,175,640,646,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,221,649,175,221,221,649,221,175,640,646,221,221,641,175,221,642,643,644,180,194,645,559,558,646,647,648,221,221,221,221,641,175,642,643,644,180,194,645,640,559,558,646,647,642,643,644,180,194,645,559,558,646,647,648,221,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,645,649,221,641,175,642,643,644,180,194,645,640,559,558,646,647,648,175,221,0,651,651,651,0,0,651,651,652,651,652,651,652,651,652,652,651,652,651,651,652,652,651,651,652,652,651,651,651,652,652,652,652,651,652,652,652,652,652,652,0,651,652,651,652,651,652,651,652,651,652,651,652,651,652,0,654,663,189,0,655,0,657,658,0,663,654,663,663,654,663,656,663,0,0,0,0,654,657,654,655,0,0,656,0,656,0,0,0,0,0,0,0,0,0,0,0,0,0,189,0,0,0,0,0,0,0,0,653,653,653,655,286,286,286,655,286,665,664,216,656,286,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,665,664,216,656,286,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,286,177,653,660,655,176,661,218,662,189,660,177,286,218,286,653,176,286,286,216,286,659,660,655,218,189,286,218,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,216,216,656,656,286,286,177,177,653,653,657,657,658,658,659,659,660,660,655,655,176,176,661,661,218,218,662,662,189,189,654,654,663,663,653,216,656,656,286,177,653,657,657,658,658,659,660,655,176,661,218,662,662,662,662,189,189,189,189,654,654,663,663,665,664,216,656,656,656,656,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,177,653,657,657,658,658,659,660,660,655,176,661,218,662,189,654,654,663,663,189,661,177,216,653,216,286,177,653,659,660,655,176,661,218,662,189,177,218,665,664,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,657,665,664,286,665,664,286,286,286,658,659,286,286,653,176,176,660,176,218,286,0,176,661,218,177,653,176,660,177,660,176,665,664,665,664,660,176,659,177,177,218,216,286,177,653,660,655,176,661,218,662,189,659,176,661,659,177,216,216,286,286,659,660,655,218,218,189,216,0,216,216,218,665,664,656,657,658,654,663,177,662,189,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,656,657,658,662,189,654,663,216,665,664,665,664,216,216,216,656,286,286,286,286,177,653,657,658,659,659,659,660,660,655,176,661,218,662,189,654,663,665,664,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,653,653,665,664,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,218,661,665,664,216,656,286,177,653,657,658,659,660,655,176,661,218,662,189,654,663,653,177,653,0,0,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,0,0,667,669,667,667,669,667,669,667,669,667,669,667,667,667,667,667,667,667,667,669,667,667,667,669,667,667,667,669,669,667,667,669,667,669,669,669,667,667,669,667,669,667,667,669,667,669,667,669,667,669,667,669,667,0,0,670,670,670,670,670,670,670,670,670,670,671,670,671,671,671,670,671,671,671,670,671,670,671,671,671,670,670,671,670,670,670,670,670,670,671,671,671,670,671,671,670,671,670,671,671,670,671,670,671,672,0,672,672,672,672,672,0,0,0,0,678,0,0,678,0,675,675,0,677,677,677,677,678,675,677,678,675,677,678,675,677,678,675,677,675,675,678,675,677,678,678,675,677,678,675,675,677,677,677,677,675,677,677,677,677,678,675,675,677,677,677,677,677,675,677,677,677,677,677,677,677,675,677,677,677,677,677,675,677,677,677,677,677,683,677,675,677,684,677,678,675,678,677,678,675,677,678,675,677,677,677,677,678,675,677,677,677,677,683,677,678,675,741,741,742,742,0,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,0,0,686,689,0,0,0,0,689,0,0,686,685,685,685,685,686,685,686,687,690,688,689,685,686,687,690,688,689,685,686,687,690,688,689,685,686,687,690,688,689,686,686,685,685,686,687,690,688,689,685,686,687,687,690,690,688,688,689,689,685,686,686,687,690,688,689,685,685,685,686,686,686,685,685,685,685,690,686,685,685,685,686,687,690,688,689,685,686,685,686,690,686,685,686,685,685,686,687,690,688,689,687,690,688,689,685,686,687,690,688,689,688,685,686,687,690,688,689,685,686,687,690,688,689,690,685,686,687,690,688,689,0,0,0,0,0,695,695,0,0,0,0,0,695,691,692,693,694,695,696,697,698,691,692,693,694,695,696,697,698,691,693,692,694,691,692,693,694,697,698,695,696,695,696,695,696,691,692,693,694,697,698,695,695,695,695,695,696,697,698,691,692,692,693,694,694,695,696,697,698,695,691,693,691,692,693,694,695,696,697,698,692,692,694,692,694,698,692,692,694,692,691,696,696,695,692,696,691,691,696,693,693,696,691,695,696,695,696,696,696,696,691,692,693,694,695,696,697,698,691,692,693,694,695,696,697,698,697,698,691,696,696,691,692,693,694,695,696,697,698,691,691,692,693,694,695,696,697,698,674,0,0,0,702,702,674,674,674,0,0,0,0,0,52,52,674,13,703,674,52,52,52,52,52,52,705,706,52,703,704,702,674,705,706,52,703,704,702,674,52,704,705,705,706,706,52,703,704,674,52,703,704,674,703,704,52,674,703,674,52,52,703,704,702,674,703,703,704,704,702,702,52,52,52,52,703,704,702,702,674,705,706,52,52,703,704,702,674,674,52,52,52,52,52,52,674,52,52,52,52,52,705,706,52,703,704,702,674,705,706,705,706,52,674,674,703,52,52,674,674,52,705,706,52,703,704,674,13,674,52,703,704,674,702,705,706,52,52,52,705,706,52,703,704,702,674,52,52,705,706,52,703,704,702,674,52,703,704,52,52,703,674,13,674,13,674,52,705,706,52,703,704,702,674,705,706,52,703,704,702,674,52,52,52],"f":"``````````````````````````````{{bb}b}{{}d}{{{h{f}}}j}{{{h{j}}}j}{{{h{l}}}j}`{{{h{d}}}{{h{c}}}{}}{{{h{d}}}{{h{n}}}}{{{h{d}}}{{h{{Ab{A`}}}}}}{{{h{d}}}{{h{{Ad{A`}}}}}}```{{{h{Af}}}j}``{{{h{c}}}{{h{e}}}{}{}}00000000000200{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000000000`8{{{h{l}}}l}{{{h{Af}}}Af}{{{h{{Aj{c}}}}}{{Aj{c}}}Al}{{{h{b}}}b}{{{h{{An{c}}}}}{{An{c}}}Al}{{{h{B`}}}B`}{{{h{{Bb{c}}}}}{{Bb{c}}}Al}{{{h{Bd}}}Bd}{{{h{d}}}d}{{{h{{Bf{c}}}}}{{Bf{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000{{{An{{h{c}}}}}{{An{c}}}Al}{{{h{j}}{h{j}}}Bj}{{{h{l}}{h{l}}}Bj}{{{h{{An{c}}}}{h{{An{c}}}}}BjBl}{{{h{B`}}{h{B`}}}Bj}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}BjBl}{{{h{d}}{h{d}}}Bj}{Bn{{Cf{{Cd{{Cb{C`}}}}}}}}{Bn{{Cf{{Cd{Ch}}}}}}{Bn{{Cf{{Cd{Cj}}}}}}{Bn{{Cf{{Cd{Cl}}}}}}{Bn{{Cf{{Cd{Cn}}}}}}{Bn{{Cf{{Cd{d}}}}}}{Bn{{Cf{{Cd{D`}}}}}}{Bn{{Cf{{Cd{Db}}}}}}{Bn{{Cf{{Dd{c}}}}}{fDf}}{{{h{l}}}Dh}{{{h{f}}}Dh}0{{{h{{An{c}}}}}{{Dj{Dh}}}f}``{{}j}{{}l}{{}{{Aj{c}}}{}}{{}b}{{{h{{Cd{c}}}}}{{h{e}}}{}{}}{{{h{{Dd{c}}}}}{{h{e}}}{}{}}{{{h{{Bf{c}}}}}{{h{c}}}{{Dl{{Cb{C`}}}}}}{{{h{Dn}}}d}{c{{E`{j}}}Eb}{c{{E`{l}}}Eb}{c{{E`{b}}}Eb}{c{{E`{B`}}}Eb}{c{{E`{d}}}Eb}{{{h{Dn}}}Ed}{{}c{}}{{{h{j}}{h{j}}}Ef}{{{h{l}}{h{l}}}Ef}{{{h{Af}}{h{Af}}}Ef}{{{h{b}}{h{b}}}Ef}{{{h{{An{c}}}}{h{{An{c}}}}}EfEh}{{{h{B`}}{h{B`}}}Ef}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}EfEh}{{{h{Bd}}{h{Bd}}}Ef}{{{h{d}}{h{d}}}Ef}6{{{h{c}}{h{e}}}Ef{}{}}000000000000000{{Afc}{{E`{AfAf}}}{{El{}{{Ej{j}}}}}}{{{h{Ah{Aj{c}}}}{Aj{c}}}BhBl}{{{h{j}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{l}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Af}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{Aj{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{b}}{h{AhEn}}}Fd}0{{{h{{An{c}}}}{h{AhEn}}}FdFb}{{{h{B`}}{h{AhEn}}}Fd}{{{h{{Bb{c}}}}{h{AhEn}}}FdFb}{{{h{Bd}}{h{AhEn}}}Fd}{{{h{d}}{h{AhEn}}}Fd}000{cc{}}0{Bdj}{{{Ff{{h{Dh}}{h{Ch}}}}}j}{{{Ff{DhCh}}}j}3{Bdl}4{{{Fh{c}}}{{Aj{c}}}{}}5{c{{Cd{c}}}{}}6{Fjc{}}{c{{Dd{c}}}{}}18888{{{An{l}}}B`}999{nd}:{c{{E`{Af{Dj{Af}}}}}{{El{}{{Ej{j}}}}}}{cd{}}0{{{h{Fl}}Dh}Af}3{{{h{{Ad{A`}}}}}{{E`{dFn}}}}0{{{h{G`}}}{{E`{dc}}}{}}{{{h{Af}}Dh}{{Dj{Af}}}}{{{h{{Gd{}{{Gb{c}}}}}}}{{E`{jc}}}Fb}{{{h{j}}{h{Ahc}}}BhGf}{{{h{l}}{h{Ahc}}}BhGf}{{{h{Af}}}Ch}{{{h{{An{c}}}}{h{Ahe}}}BhGhGf}{{{h{B`}}{h{Ahc}}}BhGf}{{{h{d}}{h{Ahc}}}BhGf}`{{{h{Af}}}Dh}``{{{h{d}}c}{{h{e}}}{{Gj{{Ad{A`}}}}}{}}``{{Afj}Af}{ce{}{}}0000000000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}0{{{Cd{c}}}c{}}{{{Dd{c}}}c{}}3{Af}4{{{h{{Gd{}{{Gb{c}}}}}}jj}{{E`{{Dj{Ef}}c}}}Fb}{{{h{{An{c}}}}}Ef{}}{{{h{B`}}}Ef}{{{h{{Bb{c}}}}Dh}Eff}{{{h{H`}}}Ef}1`{{{h{Af}}}Hb}``{{{Aj{c}}g}{{Aj{e}}}BlBl{{Hf{c}{{Hd{e}}}}}}{{{h{AhH`}}H`}Bh}`{jAf}{c{{Bf{c}}}{{Dl{{Cb{C`}}}}}}{{ce}{{Bf{c}}}{{Dl{{Cb{C`}}}}}{{Hh{Dh}}}}{{{h{AhHb}}}Dj}{{{h{Ah{Bf{c}}}}}{{Dj{e}}}{{Dl{{Cb{C`}}}}}{}}{{{h{Ah{Bf{c}}}}Hj}{{Dj{e}}}{{Dl{{Cb{C`}}}}}{}}`{{{h{j}}{h{j}}}{{Dj{Bj}}}}{{{h{l}}{h{l}}}{{Dj{Bj}}}}{{{h{{An{c}}}}{h{{An{c}}}}}{{Dj{Bj}}}Hl}{{{h{B`}}{h{B`}}}{{Dj{Bj}}}}{{{h{{Bb{c}}}}{h{{Bb{c}}}}}{{Dj{Bj}}}Hl}{{{h{d}}{h{d}}}{{Dj{Bj}}}}{{{h{Af}}}{{Dj{Af}}}}{{Afj}{{E`{AfAf}}}}{{{h{Af}}c}{{`{{Gn{}{{Ej{Af}}}}}}}{{Hh{Dh}}}}````{{{h{j}}c}E`Hn}{{{h{l}}c}E`Hn}{{{h{b}}c}E`Hn}{{{h{B`}}c}E`Hn}{{{h{d}}c}E`Hn}```{{{h{AhH`}}}{{Dj{H`}}}}{dc{}}{{{h{c}}}e{}{}}0000000000{dn}{{{h{{Cd{Cl}}}}}{{Ib{I`}}}}{{{h{{Cd{Db}}}}}{{Ib{I`}}}}{{{h{{Cd{Cj}}}}}{{Ib{I`}}}}{{{h{{Cd{Ch}}}}}{{Ib{I`}}}}{{{h{{Cd{d}}}}}{{Ib{I`}}}}{{{h{{Cd{D`}}}}}{{Ib{I`}}}}{{{h{{Cd{Cn}}}}}{{Ib{I`}}}}{{{h{{Cd{{Cb{C`}}}}}}}{{Ib{I`}}}}{{{h{{Dd{c}}}}}{{Ib{I`}}}{fId}}{{{h{c}}}If{}}0{{{h{b}}}D`}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0`1{c{{E`{e}}}{}{}}000000000000000000000000000`````{{{h{c}}}Ij{}}0000000000000{EdB`}`{ce{}{}}0000000000000````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````{IlIl}{{D`D`}}{{IlIl}}{{InIn}}{{J`J`}J`}{{{h{AhD`}}D`}Bh}{{{h{AhIl}}Il}Bh}{{{h{AhIn}}In}Bh}{{Jb{h{{Jd{c}}}}{h{Jf}}}{{E`{{Ff{JbJh}}Jj}}}Jl}`{{{h{Jn}}}{{Dj{K`}}}}{{}Kb}{{}Kd}{{}Kf}{{}Ch}{{}Kh}{{}Kj}{{}Kl}{{}Kn}{{}L`}{{}Cj}{{}Lb}{{}Ld}{{}Lf}{{}Lh}{{}Lj}{{}Ll}{{}Ln}{{}M`}{{}Mb}`{{{h{Kb}}}h}{{{h{Kd}}}h}{{{h{Kf}}}h}{{{h{Ch}}}h}{{{h{Kh}}}h}{{{h{Kj}}}h}{{{h{Kl}}}h}{{{h{Kn}}}h}{{{h{L`}}}h}{{{h{Cj}}}h}{{{h{Lb}}}h}{{{h{Ld}}}h}{{{h{Lf}}}h}{{{h{Lh}}}h}{{{h{Lj}}}h}{{{h{Ll}}}h}{{{h{Ln}}}h}{{{h{M`}}}h}{{{h{Mb}}}h}{{{h{Md}}}{{h{{Ad{A`}}}}}}{{{h{Jb}}}}{{{h{AhMd}}}{{h{AhMd}}}}{{{h{AhMd}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhCn}}}{{h{AhMd}}}}{{{h{AhCn}}}{{h{Ah{Ad{A`}}}}}}2{{{h{AhJb}}}}{{{h{AhJb}}}Mf}3{{{h{Jb}}}Mf}{{{h{Kb}}}{{h{Mh}}}}{{{h{Kd}}}{{h{Mh}}}}{{{h{Kf}}}{{h{Mj}}}}{{{h{Ch}}}{{h{Mh}}}}{{{h{Kh}}}{{h{Mh}}}}{{{h{Kj}}}{{h{Mh}}}}{{{h{Kl}}}{{h{Mh}}}}{{{h{Kn}}}{{h{Mj}}}}{{{h{L`}}}{{h{n}}}}{{{h{Cj}}}{{h{Mh}}}}{{{h{Lb}}}{{h{Mh}}}}{{{h{Ld}}}{{h{Mj}}}}{{{h{Lf}}}{{h{Mj}}}}{{{h{Lh}}}{{h{Mh}}}}{{{h{Lj}}}{{h{Mh}}}}{{{h{Ll}}}{{h{{Mn{Ml}}}}}}{{{h{Ln}}}{{h{{Mn{N`}}}}}}{{{h{M`}}}{{h{{Mn{Nb}}}}}}{{{h{Mb}}}{{h{{Mn{Nd}}}}}}{{{h{Kb}}}{{h{{Ad{A`}}}}}}{{{h{Kb}}}{{h{{Ab{A`}}}}}}{{{h{Kd}}}{{h{{Ad{A`}}}}}}{{{h{Kd}}}{{h{{Ab{A`}}}}}}{{{h{Kf}}}{{h{{Ad{A`}}}}}}{{{h{Kf}}}{{h{{Ab{A`}}}}}}{{{h{Ch}}}{{h{{Ad{A`}}}}}}{{{h{Ch}}}{{h{{Ab{A`}}}}}}{{{h{Kh}}}{{h{{Ab{A`}}}}}}{{{h{Kh}}}{{h{{Ad{A`}}}}}}{{{h{Kj}}}{{h{{Ad{A`}}}}}}{{{h{Kj}}}{{h{{Ab{A`}}}}}}{{{h{Kl}}}{{h{{Ab{A`}}}}}}{{{h{Kl}}}{{h{{Ad{A`}}}}}}{{{h{Md}}}{{h{{Ad{A`}}}}}}{{{h{Md}}}{{h{Md}}}}{{{h{Cn}}}{{h{Md}}}}{{{h{Cn}}}{{h{{Ad{A`}}}}}}{{{h{Kn}}}{{h{{Ad{A`}}}}}}{{{h{Kn}}}{{h{{Ab{A`}}}}}}{{{h{Kn}}}{{h{Nf}}}}{{{h{L`}}}{{h{Nf}}}}{{{h{L`}}}{{h{{Ad{A`}}}}}}{{{h{L`}}}{{h{{Ab{A`}}}}}}{{{h{Cj}}}{{h{{Ab{A`}}}}}}{{{h{Cj}}}{{h{{Ad{A`}}}}}}{{{h{Lb}}}{{h{{Ab{A`}}}}}}{{{h{Lb}}}{{h{{Ad{A`}}}}}}{{{h{Ld}}}{{h{Nf}}}}{{{h{Ld}}}{{h{{Ad{A`}}}}}}{{{h{Ld}}}{{h{{Ab{A`}}}}}}{{{h{Lf}}}{{h{Nf}}}}{{{h{Lf}}}{{h{{Ad{A`}}}}}}{{{h{Lf}}}{{h{{Ab{A`}}}}}}{{{h{Lh}}}{{h{{Ad{A`}}}}}}{{{h{Lh}}}{{h{{Ab{A`}}}}}}{{{h{Lj}}}{{h{{Ab{A`}}}}}}{{{h{Lj}}}{{h{{Ad{A`}}}}}}{{{h{Ll}}}{{h{{Ab{A`}}}}}}{{{h{Ll}}}{{h{{Ad{A`}}}}}}{{{h{Db}}}{{h{Nh}}}}{{{h{Ln}}}{{h{{Ab{A`}}}}}}{{{h{Ln}}}{{h{{Ad{A`}}}}}}{{{h{M`}}}{{h{{Ab{A`}}}}}}{{{h{M`}}}{{h{{Ad{A`}}}}}}{{{h{Mb}}}{{h{{Ad{A`}}}}}}{{{h{Mb}}}{{h{{Ab{A`}}}}}}{{{h{Cn}}}{{h{Md}}}}{{{h{{Jn{c}}}}}{{h{{Jn{Nj}}}}}Nl}{{{Jn{Nj}}}Jn}{{{h{{Jn{Nj}}}}}{{h{Jn}}}}{{{Ab{A`}}}M`}{{{h{Nn}}}Hj}{{{h{Cl}}}Hj}```{{{h{O`}}}{{E`{EdOb}}}}{{{h{O`}}}Ch}`{{{h{c}}}{{h{e}}}{}{}}00000000{{{h{Kb}}}{{h{{Ad{A`}}}}}}11{{{h{Kd}}}{{h{{Ad{A`}}}}}}{{{h{Kf}}}{{h{{Ad{A`}}}}}}33{{{h{Ch}}}{{h{{Ad{A`}}}}}}{{{h{Kh}}}{{h{{Ad{A`}}}}}}5{{{h{Kj}}}{{h{{Ad{A`}}}}}}66{{{h{Kl}}}{{h{{Ad{A`}}}}}}7777{{{h{Cn}}}{{h{Md}}}}888{{{h{Kn}}}{{h{{Ad{A`}}}}}}9{{{h{L`}}}{{h{{Ad{A`}}}}}}{{{h{Cj}}}{{h{{Ad{A`}}}}}};{{{h{Lb}}}{{h{{Ad{A`}}}}}}<<<<<<<<<<{{{h{Ld}}}{{h{{Ad{A`}}}}}}{{{h{Lf}}}{{h{{Ad{A`}}}}}}>>>{{{h{Lh}}}{{h{{Ad{A`}}}}}}?{{{h{Lj}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ll}}}{{h{{Ad{A`}}}}}}11111111111{{{h{Ln}}}{{h{{Ad{A`}}}}}}22{{{h{M`}}}{{h{{Ad{A`}}}}}}33{{{h{Mb}}}{{h{{Ad{A`}}}}}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000000000000000{{{h{AhCn}}}{{h{AhMd}}}}11111111111111111111111111111111111111{{}Od}0{{{h{Md}}}Of}{DbOh}{{{h{c}}Oj}Ef{}}{{{h{O`}}}Ef}{{{h{Ol}}On}Ef}{{{h{c}}On}Ef{}}2{Il{{Dj{Il}}}}{{D`D`}{{Dj{D`}}}}{{IlIl}{{Dj{Il}}}}{{InIn}{{Dj{In}}}}{{D`Ed}{{Dj{D`}}}}{{IlA@`}{{Dj{Il}}}}{{A@bEd}{{Dj{A@b}}}}{{InEd}{{Dj{In}}}}3210{{A@bIn}{{Dj{D`}}}}43765{{A@dA@f}A@h}{{{h{AhA@j}}}Bh}{{{h{A@l}}}A@l}{{{h{D`}}}D`}{{{h{Il}}}Il}{{{h{A@b}}}A@b}{{{h{Jb}}}Jb}{{{h{In}}}In}{{{h{K`}}}K`}{{{h{A@n}}}A@n}{{{h{{Jn{c}}}}}{{Jn{c}}}{AlNl}}{{{h{Kb}}}Kb}{{{h{Kd}}}Kd}{{{h{Kf}}}Kf}{{{h{Ch}}}Ch}{{{h{Kh}}}Kh}{{{h{Kj}}}Kj}{{{h{Kl}}}Kl}{{{h{O`}}}O`}{{{h{A@d}}}A@d}{{{h{Cn}}}Cn}{{{h{AA`}}}AA`}{{{h{AAb}}}AAb}{{{h{Kn}}}Kn}{{{h{L`}}}L`}{{{h{Cj}}}Cj}{{{h{Lb}}}Lb}{{{h{AAd}}}AAd}{{{h{Nn}}}Nn}{{{h{Ol}}}Ol}{{{h{AAf}}}AAf}{{{h{Cl}}}Cl}{{{h{A@j}}}A@j}{{{h{AAh}}}AAh}{{{h{AAj}}}AAj}{{{h{Ld}}}Ld}{{{h{Lf}}}Lf}{{{h{AAl}}}AAl}{{{h{AAn}}}AAn}{{{h{Lh}}}Lh}{{{h{Lj}}}Lj}{{{h{Ml}}}Ml}{{{h{Ll}}}Ll}{{{h{AB`}}}AB`}{{{h{ABb}}}ABb}{{{h{ABd}}}ABd}{{{h{ABf}}}ABf}{{{h{Db}}}Db}{{{h{J`}}}J`}{{{h{ABh}}}ABh}{{{h{ABj}}}ABj}{{{h{ABl}}}ABl}{{{h{N`}}}N`}{{{h{Ln}}}Ln}{{{h{Nb}}}Nb}{{{h{M`}}}M`}{{{h{Nd}}}Nd}{{{h{Mb}}}Mb}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000000000000000000000000000000000000000000000000{{{h{D`}}{h{D`}}}Bj}{{{h{Il}}{h{Il}}}Bj}{{{h{A@b}}{h{A@b}}}Bj}{{{h{Jb}}{h{Jb}}}Bj}{{{h{In}}{h{In}}}Bj}{{{h{K`}}{h{K`}}}Bj}{{{h{A@n}}{h{A@n}}}Bj}{{{h{{Jn{c}}}}{h{{Jn{c}}}}}Bj{BlNl}}{{{h{Kb}}{h{Kb}}}Bj}{{{h{Kd}}{h{Kd}}}Bj}{{{h{Kf}}{h{Kf}}}Bj}{{{h{Ch}}{h{Ch}}}Bj}{{{h{Kh}}{h{Kh}}}Bj}{{{h{Kj}}{h{Kj}}}Bj}{{{h{Kl}}{h{Kl}}}Bj}{{{h{Md}}{h{Md}}}Bj}{{{h{Cn}}{h{Cn}}}Bj}{{{h{AA`}}{h{AA`}}}Bj}{{{h{AAb}}{h{AAb}}}Bj}{{{h{Kn}}{h{Kn}}}Bj}{{{h{L`}}{h{L`}}}Bj}{{{h{Cj}}{h{Cj}}}Bj}{{{h{Lb}}{h{Lb}}}Bj}{{{h{AAd}}{h{AAd}}}Bj}{{{h{Nn}}{h{Nn}}}Bj}{{{h{Ol}}{h{Ol}}}Bj}{{{h{AAf}}{h{AAf}}}Bj}{{{h{Cl}}{h{Cl}}}Bj}{{{h{A@j}}{h{A@j}}}Bj}{{{h{AAh}}{h{AAh}}}Bj}{{{h{AAj}}{h{AAj}}}Bj}{{{h{Ld}}{h{Ld}}}Bj}{{{h{Lf}}{h{Lf}}}Bj}{{{h{AAl}}{h{AAl}}}Bj}{{{h{Lh}}{h{Lh}}}Bj}{{{h{Lj}}{h{Lj}}}Bj}{{{h{Ml}}{h{Ml}}}Bj}{{{h{Ll}}{h{Ll}}}Bj}{{{h{AB`}}{h{AB`}}}Bj}{{{h{ABf}}{h{ABf}}}Bj}{{{h{Db}}{h{Db}}}Bj}{{{h{J`}}{h{J`}}}Bj}{{{h{ABh}}{h{ABh}}}Bj}{{{h{ABj}}{h{ABj}}}Bj}{{{h{N`}}{h{N`}}}Bj}{{{h{Ln}}{h{Ln}}}Bj}{{{h{Nb}}{h{Nb}}}Bj}{{{h{M`}}{h{M`}}}Bj}{{{h{Nd}}{h{Nd}}}Bj}{{{h{Mb}}{h{Mb}}}Bj}{{{h{Jb}}{h{Jb}}}Bj}{{{h{O`}}}{{Dj{{h{Cl}}}}}}{{{h{AhABl}}ABl}{{E`{BhABn}}}}``{{{h{O`}}}{{Dj{Kh}}}}{{{h{Cl}}}Mh}{{{h{Cl}}}Cj}{{{h{Kj}}{h{{Ad{A`}}}}}Kl}{{{h{Cl}}}Lb}`{{{h{Ahc}}}{{E`{D`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{ChAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KhAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{KjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{O`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{CjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{LbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AAdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{OlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AAfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{A@jAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AAhAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{ABdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{ABjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{LnAC`}}}{ACbACd}}:{{{h{Ahc}}}{{E`{CnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{NnAC`}}}{ACbACd}}7{{{h{Ahc}}}{{E`{ClAC`}}}{ACbACd}}{{{h{D`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Ch}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Kj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{O`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Md}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Cn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Cj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Lb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AAd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Nn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Ol}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AAf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Cl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{A@j}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AAh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{ABd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{ABj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Ln}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{Md}}}Hj}0{JbACj}{{}D`}{{}Il}{{}Cn}{{}AAd}{{}Nn}{{}Ol}{{}A@j}{{}Ml}{{}ABj}{{}N`}{{}Nb}{{}Nd}{{{h{Cn}}}h}{{{h{AhCn}}}{{h{Ah}}}}{{cACl}{{E`{D`}}}Eb}{{cACl}{{E`{Il}}}Eb}10{c{{E`{D`}}}Eb}{c{{E`{A@b}}}Eb}{c{{E`{Jb}}}Eb}{c{{E`{In}}}Eb}{c{{E`{{Jn{Nj}}}}}Eb}{c{{E`{Kb}}}Eb}{c{{E`{Kd}}}Eb}{c{{E`{Kf}}}Eb}{c{{E`{Ch}}}Eb}{c{{E`{Kh}}}Eb}{c{{E`{Kj}}}Eb}{c{{E`{Kl}}}Eb}{c{{E`{O`}}}Eb}{c{{E`{{h{Md}}}}}Eb}{c{{E`{Cn}}}Eb}{c{{E`{Kn}}}Eb}{c{{E`{L`}}}Eb}{c{{E`{Cj}}}Eb}{c{{E`{Lb}}}Eb}{c{{E`{AAd}}}Eb}{c{{E`{Nn}}}Eb}{c{{E`{Ol}}}Eb}{c{{E`{AAf}}}Eb}{c{{E`{Cl}}}Eb}{c{{E`{A@j}}}Eb}{c{{E`{AAj}}}Eb}{c{{E`{Ld}}}Eb}{c{{E`{Lf}}}Eb}{c{{E`{AAl}}}Eb}{c{{E`{AAn}}}Eb}{c{{E`{Lh}}}Eb}{c{{E`{Lj}}}Eb}{c{{E`{Ll}}}Eb}{c{{E`{AB`}}}Eb}{c{{E`{ABb}}}Eb}{c{{E`{Db}}}Eb}{c{{E`{J`}}}Eb}{c{{E`{ABh}}}Eb}{c{{E`{ABj}}}Eb}{c{{E`{ABl}}}Eb}{{{h{{Ad{A`}}}}}{{E`{ABlABn}}}}{c{{E`{Ln}}}Eb}{c{{E`{M`}}}Eb}{c{{E`{Mb}}}Eb}{{{h{Ahc}}}{{E`{ABlABn}}}ACb}{{{h{ABh}}c}ACn{{AD`{Nh}}}}{{{h{ABh}}}ADb}{D`ADd}{IlADd}{{D`A@l}ADd}{{IlA@l}ADd}{{D`In}}{{D`Ed}}{{IlA@`}}{{InEd}}{{InIn}}{{{h{AhD`}}Ed}Bh}{{{h{AhIl}}A@`}Bh}{{{h{AhIn}}Ed}Bh}{{{h{Md}}}D`}`{{{h{Ol}}}Ef}{{{h{Nn}}}Ef}{{}}00000000000000{{}ADf}1010101{{{h{A@l}}{h{A@l}}}Ef}{{{h{D`}}{h{D`}}}Ef}{{{h{Il}}{h{Il}}}Ef}{{{h{A@b}}{h{A@b}}}Ef}{{{h{Jb}}{h{Jb}}}Ef}{{{h{In}}{h{In}}}Ef}{{{h{K`}}{h{K`}}}Ef}{{{h{A@n}}{h{A@n}}}Ef}{{{h{{Jn{c}}}}{h{{Jn{c}}}}}Ef{EhNl}}{{{h{Kb}}{h{Kb}}}Ef}{{{h{Kd}}{h{Kd}}}Ef}{{{h{Kf}}{h{Kf}}}Ef}{{{h{Ch}}{h{Ch}}}Ef}{{{h{Kh}}{h{Kh}}}Ef}{{{h{Kj}}{h{Kj}}}Ef}{{{h{Kl}}{h{Kl}}}Ef}{{{h{O`}}{h{O`}}}Ef}{{{h{A@d}}{h{A@d}}}Ef}{{{h{Md}}{h{Cn}}}Ef}{{{h{Md}}{h{Md}}}Ef}{{{h{Cn}}{h{Cn}}}Ef}{{{h{Cn}}{h{Md}}}Ef}{{{h{AA`}}{h{AA`}}}Ef}{{{h{AAb}}{h{AAb}}}Ef}{{{h{Kn}}{h{Kn}}}Ef}{{{h{L`}}{h{L`}}}Ef}{{{h{Cj}}{h{Cj}}}Ef}{{{h{Lb}}{h{Lb}}}Ef}{{{h{AAd}}{h{AAd}}}Ef}{{{h{Nn}}{h{Nn}}}Ef}{{{h{Ol}}{h{Ol}}}Ef}{{{h{AAf}}{h{AAf}}}Ef}{{{h{Cl}}{h{Cl}}}Ef}{{{h{A@j}}{h{A@j}}}Ef}{{{h{AAh}}{h{AAh}}}Ef}{{{h{AAj}}{h{AAj}}}Ef}{{{h{Ld}}{h{Ld}}}Ef}{{{h{Lf}}{h{Lf}}}Ef}{{{h{AAl}}{h{AAl}}}Ef}{{{h{AAn}}{h{AAn}}}Ef}{{{h{Lh}}{h{Lh}}}Ef}{{{h{Lj}}{h{Lj}}}Ef}{{{h{Ml}}{h{Ml}}}Ef}{{{h{Ll}}{h{Ll}}}Ef}{{{h{AB`}}{h{AB`}}}Ef}{{{h{ABb}}{h{ABb}}}Ef}{{{h{ABd}}{h{ABd}}}Ef}{{{h{ABf}}{h{ABf}}}Ef}{{{h{Db}}{h{Db}}}Ef}{{{h{J`}}{h{J`}}}Ef}{{{h{ABh}}{h{ABh}}}Ef}{{{h{ABj}}{h{ABj}}}Ef}{{{h{ABl}}{h{ABl}}}Ef}{{{h{N`}}{h{N`}}}Ef}{{{h{Ln}}{h{Ln}}}Ef}{{{h{Nb}}{h{Nb}}}Ef}{{{h{M`}}{h{M`}}}Ef}{{{h{Nd}}{h{Nd}}}Ef}{{{h{Mb}}{h{Mb}}}Ef}{{{h{Jb}}{h{Jb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000`{{{h{AhCn}}c}Bh{{El{}{{Ej{ADh}}}}}}{{{h{ABl}}{h{{Jd{c}}}}}{{E`{ClADj}}}Jl}{{{h{ABd}}{h{Ah{ADl{Cj}}}}{h{Ah{ADl{Dh}}}}}{{E`{BhADn}}}}{ABl{{E`{ClAE`}}}}0{ABlCl}{{ABlA@b}{{E`{ClAE`}}}}{{{h{ABl}}}{{E`{D`ABn}}}}{{A@bEd}{{Dj{D`}}}}{{A@bIn}{{Dj{D`}}}}{{{h{Kb}}{h{Kd}}}Kd}{{ABl{h{{Jd{c}}}}}{{E`{ABl{Ff{ABl{ADl{ADj}}}}}}}Jl}{{ABl{h{{Jd{c}}}}Hj}{{E`{ABl{Ff{ABlADj}}}}}Jl}0{{{h{AhABl}}{h{{Jd{c}}}}Hj}{{E`{BhADj}}}Jl}02{{{h{AhABl}}{h{{Jd{c}}}}}{{E`{Bh{ADl{ADj}}}}}Jl}0{{{h{Md}}}{{Dj{A@d}}}}{{{h{A@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{D`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Il}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{A@b}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Jb}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{In}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{K`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{A@n}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{Jn{c}}}}{h{AhEn}}}{{E`{BhF`}}}Nl}{{{h{Jn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Kb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kd}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Ch}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Kl}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{O`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{A@d}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Md}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Cn}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AA`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AAb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Kn}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{L`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Cj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Lb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AAd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Nn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Ol}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AAf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Cl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{A@j}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AAh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AAj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Ld}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Lf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AAl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AAn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Lh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Lj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Ll}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AB`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ABb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ABd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ABf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Db}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{J`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{ABh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{ABj}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{ABl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Ln}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{M`}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Mb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{Md}}{h{AhAEb}}}{{E`{BhF`}}}}{{D`{h{AhAEb}}A@l}{{E`{BhF`}}}}{{Il{h{AhAEb}}A@l}{{E`{BhF`}}}}{{{h{AAn}}{h{AhAEb}}}{{E`{BhF`}}}}{cc{}}000{AAjJb}{ACjJb}2{AAlJb}{AEdJb}{MfJb}555{DbA@n}6{MhKb}77{MhKd}{{{h{AEf}}}Kf}{AEfKf}{MjKf};;{MhCh}{{{h{O`}}}Ch}{{{h{Fl}}}Ch}{O`Ch}{FlCh}{cc{}}{MhKh}{CjKh}{MhKj}3{LbKj}{MhKl}55{AAbA@d}{A`A@d}7{JnCn}{{{AEh{Md}}}Cn}{{{h{Md}}}Cn}:{{{ADl{A`}}}Cn};;;{{{h{Md}}}Kn}{{{h{Cn}}}Kn}{MjKn}{CnKn}{nL`}{CnL`}{{{h{Md}}}L`}{{{h{Cn}}}L`}{cc{}}0{{{h{Cl}}}Cj}{ClCj}{MhCj}{{{h{Cl}}}Lb}4{ClLb}{MhLb}66{AEjOl}7{OnOl}88{{{ADl{{h{{Ad{A`}}}}}}}A@j}{{{h{{Ad{{h{{Ad{A`}}}}}}}}}A@j}{{{h{{Ad{{ADl{A`}}}}}}}A@j};{{{ADl{{ADl{A`}}}}}A@j}{DhAAh}{HjAAh}{AElAAh}?{EdAAh}{A`AAh}{AEdAAj}{cc{}}{AAlAAj}{AAjLd}{{{h{AAj}}}Ld}{MjLd}{AAlLd}5{{{h{AAl}}}Ld}{{{h{AAl}}}Lf}{MjLf}8{AAlLf}999{MhLh}:{MhLj};{{{Mn{Ml}}}Ll}<{ABbAB`}===={DbABf}>>{ABjABh}????{AEnLn}{cc{}}{{{Mn{N`}}}Ln}1{{{h{AF`}}}M`}{{{Mn{Nb}}}M`}{AF`M`}{LnM`}55{{{h{AFb}}}Mb}{{{Mn{Nd}}}Mb}7{AFbMb}{AElOl}{{{Ab{A`}}}J`}{{{Ab{A`}}}ABh}{{{h{O`}}c}ABd{{AFd{{h{Cj}}}{{Hd{Ef}}}}}}{ADb{{E`{D`AFf}}}}{ADb{{E`{IlAFf}}}}{{}Kb}{{}Kd}{{}Kf}{{}Ch}{{}Kh}{{}Kj}{{}Kl}{{}Kn}{{}L`}{{}Cj}{{}Lb}{{}Ld}{{}Lf}{{}Lh}{{}Lj}{{}Ll}{{}Ln}{{}M`}{{}Mb}{{{h{{Ad{A`}}}}}{{h{Md}}}}{{{ADl{A`}}}Cn}{{{h{Ah{Ad{A`}}}}}{{h{AhMd}}}}{Oh{{Dj{Db}}}}{ABjABh}{DhOl}{DhABb}{DhABj}{A`{{E`{AB`AFh}}}}{{{h{G`}}}{{E`{DbAFj}}}}{{}Kb}{{}Kd}{{}Kf}{{}Ch}{{}Kh}{{}Kj}{{}Kl}{{}Kn}{{}L`}{{}Cj}{{}Lb}{{}Ld}{{}Lf}{{}Lh}{{}Lj}{{}Ll}{{}Ln}{{}M`}{{}Mb}{{ADbA@l}{{E`{D`AFf}}}}{{ADbA@l}{{E`{IlAFf}}}}{{{h{Fl}}{h{{Ad{Cj}}}}c}ABd{{AFd{{h{Cj}}}{{Hd{Ef}}}}}}{AElOl}{{{h{G`}}}{{E`{CnAFl}}}}{{{h{G`}}}{{E`{OlAFn}}}}{{{h{G`}}}{{E`{J`AFn}}}}{{{h{G`}}}{{E`{ABhAFn}}}}{{{h{G`}}}{{E`{ABjAFn}}}}{EdD`}{cCn{{El{}{{Ej{ADh}}}}}}{{Jb{Dj{M`}}}Mb}{{{h{AG`}}}{{Ff{JbJh}}}}{Ed{{Dj{In}}}}{{{Ab{A`}}}J`}{{{Ab{A`}}}ABh}{AGb{{Dj{Db}}}}{{M`M`}M`}{EdIn}{{{h{{Jd{c}}}}{h{AAn}}}AAjAGd}{{{h{{Jd{c}}}}{h{AAn}}}{{E`{AAlAGf}}}AGd}{MhKb}{MhKd}{MjKf}{MhCh}{MhKh}{MhKj}{MhKl}{MjKn}{nL`}{MhCj}{MhLb}{MjLd}{MjLf}{MhLh}{MhLj}{{{Mn{Ml}}}Ll}{{{Mn{N`}}}Ln}{{{Mn{Nb}}}M`}{{{Mn{Nd}}}Mb}{EdD`}{A@`Il}{EdA@b}{Ed{{Dj{A@b}}}}1{{{h{Md}}c}{{E`{JnAGh}}}{{AD`{Nh}}}}{{{h{Md}}AGj}Ln}{{{h{Md}}AGj}M`}{Dh{{E`{OlAGl}}}}0{{{h{{Ad{A`}}}}}{{E`{JbJj}}}}{{{h{{Ad{A`}}}}}{{E`{JbAGn}}}}{{{h{{Ad{A`}}}}}{{E`{KbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KdFn}}}}{{{h{{Ad{A`}}}}}{{E`{KfFn}}}}{{{h{{Ad{A`}}}}}{{E`{ChFn}}}}{{{h{{Ad{A`}}}}}{{E`{KhFn}}}}{{{h{{Ad{A`}}}}}{{E`{KjFn}}}}{{{h{{Ad{A`}}}}}{{E`{KlFn}}}}{{{h{{Ad{A`}}}}}{{E`{KnFn}}}}{{{h{{Ad{A`}}}}}{{E`{L`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{CjFn}}}}{{{h{{Ad{A`}}}}}{{E`{LbFn}}}}{{{h{{Ad{c}}}}}A@j{{AD`{{Ad{A`}}}}}}{{{h{{Ad{A`}}}}}{{E`{AAjAH`}}}}{{{h{{Ad{A`}}}}}{{E`{AAjAGn}}}}{{{h{{Ad{A`}}}}}{{E`{LdFn}}}}{{{h{{Ad{A`}}}}}{{E`{LfFn}}}}{{{h{{Ad{A`}}}}}{{E`{AAlJj}}}}{{{h{{Ad{A`}}}}c}{{E`{AAnJj}}}{{AHb{ABf}}}}{{{h{{Ad{A`}}}}}{{E`{LhFn}}}}{{{h{{Ad{A`}}}}}{{E`{LjFn}}}}{{{h{{Ad{A`}}}}}{{E`{LlFn}}}}{{{h{{Ad{A`}}}}}{{E`{LnFn}}}}{{{h{{Ad{A`}}}}}{{E`{M`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{MbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KbFn}}}}{{{h{{Ad{A`}}}}}{{E`{KdFn}}}}{{{h{{Ad{A`}}}}}{{E`{KfFn}}}}{{{h{{Ad{A`}}}}}{{E`{ChFn}}}}{{{h{{Ad{A`}}}}}{{E`{KhFn}}}}{{{h{{Ad{A`}}}}}{{E`{KjFn}}}}{{{h{{Ad{A`}}}}}{{E`{KlFn}}}}{{{h{{Ad{A`}}}}}{{E`{KnFn}}}}{{{h{{Ad{A`}}}}}{{E`{L`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{CjFn}}}}{{{h{{Ad{A`}}}}}{{E`{LbFn}}}}{{{h{{Ad{A`}}}}}{{E`{LdFn}}}}{{{h{{Ad{A`}}}}}{{E`{LfFn}}}}{{{h{{Ad{A`}}}}}{{E`{LhFn}}}}{{{h{{Ad{A`}}}}}{{E`{LjFn}}}}{{{h{{Ad{A`}}}}}{{E`{LlFn}}}}{{{h{{Ad{A`}}}}}{{E`{LnFn}}}}{{{h{{Ad{A`}}}}}{{E`{M`Fn}}}}{{{h{{Ad{A`}}}}}{{E`{MbFn}}}}{Dh{{E`{ABbAHd}}}}{{{h{G`}}}{{E`{A@l}}}}{{{h{G`}}}{{E`{D`}}}}{{{h{G`}}}{{E`{Il}}}}{{{h{G`}}}{{E`{A@b}}}}{{{h{G`}}}{{E`{JbJj}}}}{{{h{G`}}}{{E`{In}}}}{{{h{G`}}}{{E`{K`}}}}{{{h{G`}}}{{E`{{Jn{Nj}}AHf}}}}{{{h{G`}}}{{E`{Kb}}}}{{{h{G`}}}{{E`{Kd}}}}{{{h{G`}}}{{E`{Kf}}}}{{{h{G`}}}{{E`{Ch}}}}{{{h{G`}}}{{E`{Kh}}}}{{{h{G`}}}{{E`{Kj}}}}{{{h{G`}}}{{E`{Kl}}}}{{{h{G`}}}{{E`{AAb}}}}{{{h{G`}}}{{E`{Kn}}}}{{{h{G`}}}{{E`{L`}}}}{{{h{G`}}}{{E`{Cj}}}}{{{h{G`}}}{{E`{Lb}}}}{{{h{G`}}}{{E`{AAd}}}}{{{h{G`}}}{{E`{Ol}}}}{{{h{G`}}}{{E`{AAjAHh}}}}{{{h{G`}}}{{E`{Ld}}}}{{{h{G`}}}{{E`{Lf}}}}{{{h{G`}}}{{E`{AAl}}}}{{{h{G`}}}{{E`{AAnAHj}}}}{{{h{G`}}}{{E`{Lh}}}}{{{h{G`}}}{{E`{Lj}}}}{{{h{G`}}}{{E`{Ll}}}}{{{h{G`}}}{{E`{AB`}}}}{{{h{G`}}}{{E`{ABb}}}}{{{h{G`}}}{{E`{Db}}}}{{{h{G`}}}{{E`{ABl}}}}{{{h{G`}}}{{E`{Ln}}}}{{{h{G`}}}{{E`{M`}}}}{{{h{G`}}}{{E`{Mb}}}}{{{h{G`}}A@l}{{E`{D`AFf}}}}{{{h{G`}}A@l}{{E`{IlAFf}}}}{{{h{G`}}}{{E`{D`AHl}}}}{{{h{G`}}}{{E`{IlAHl}}}}{{{h{G`}}}{{E`{OlAHn}}}}{{{h{G`}}}{{E`{J`AHn}}}}{{{h{G`}}}{{E`{ABhAHn}}}}{{{h{G`}}}{{E`{ABjAHn}}}}{Cl{{E`{ABlABn}}}}{Ed{{Dj{In}}}}{EdIn}0{{{h{G`}}}{{E`{AAnAHj}}}}1{{AA`c}Jn{{AHb{A@n}}}}2{HjIn}{cAAn{{AHb{ABf}}}}{{{h{A@l}}{h{Ahc}}}BhGf}{{{h{D`}}{h{Ahc}}}BhGf}{{{h{Il}}{h{Ahc}}}BhGf}{{{h{A@b}}{h{Ahc}}}BhGf}{{{h{Jb}}{h{Ahc}}}BhGf}{{{h{In}}{h{Ahc}}}BhGf}{{{h{K`}}{h{Ahc}}}BhGf}{{{h{A@n}}{h{Ahc}}}BhGf}{{{h{{Jn{c}}}}{h{Ahe}}}Bh{GhNl}Gf}{{{h{Kb}}{h{Ahc}}}BhGf}{{{h{Kd}}{h{Ahc}}}BhGf}{{{h{Kf}}{h{Ahc}}}BhGf}{{{h{Ch}}{h{Ahc}}}BhGf}{{{h{Kh}}{h{Ahc}}}BhGf}{{{h{Kj}}{h{Ahc}}}BhGf}{{{h{Kl}}{h{Ahc}}}BhGf}{{{h{Md}}{h{Ahc}}}BhGf}{{{h{Cn}}{h{Ahc}}}BhGf}{{{h{AA`}}{h{Ahc}}}BhGf}{{{h{AAb}}{h{Ahc}}}BhGf}{{{h{Kn}}{h{Ahc}}}BhGf}{{{h{L`}}{h{Ahc}}}BhGf}{{{h{Cj}}{h{Ahc}}}BhGf}{{{h{Lb}}{h{Ahc}}}BhGf}{{{h{AAd}}{h{Ahc}}}BhGf}{{{h{Nn}}{h{Ahc}}}BhGf}{{{h{Ol}}{h{Ahc}}}BhGf}{{{h{AAf}}{h{Ahc}}}BhGf}{{{h{Cl}}{h{Ahc}}}BhGf}{{{h{A@j}}{h{Ahc}}}BhGf}{{{h{AAj}}{h{Ahc}}}BhGf}{{{h{Ld}}{h{Ahc}}}BhGf}{{{h{Lf}}{h{Ahc}}}BhGf}{{{h{AAl}}{h{Ahc}}}BhGf}{{{h{Lh}}{h{Ahc}}}BhGf}{{{h{Lj}}{h{Ahc}}}BhGf}{{{h{Ml}}{h{Ahc}}}BhGf}{{{h{Ll}}{h{Ahc}}}BhGf}{{{h{AB`}}{h{Ahc}}}BhGf}{{{h{ABb}}{h{Ahc}}}BhGf}{{{h{ABf}}{h{Ahc}}}BhGf}{{{h{Db}}{h{Ahc}}}BhGf}{{{h{J`}}{h{Ahc}}}BhGf}{{{h{ABh}}{h{Ahc}}}BhGf}{{{h{ABj}}{h{Ahc}}}BhGf}{{{h{ABl}}{h{Ahc}}}BhGf}{{{h{N`}}{h{Ahc}}}BhGf}{{{h{Ln}}{h{Ahc}}}BhGf}{{{h{Nb}}{h{Ahc}}}BhGf}{{{h{M`}}{h{Ahc}}}BhGf}{{{h{Nd}}{h{Ahc}}}BhGf}{{{h{Mb}}{h{Ahc}}}BhGf}```{{{h{Kb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kd}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kf}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Ch}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kh}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Kl}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Md}}{AI`{Hj}}}h}{{{h{Md}}{AIb{Hj}}}h}{{{h{Md}}AId}h}{{{h{Md}}{AIf{Hj}}}h}{{{h{Md}}{AIh{Hj}}}h}{{{h{Md}}{AIj{Hj}}}h}{{{h{Md}}{Ff{{AIl{Hj}}{AIl{Hj}}}}}h}{{{h{Kn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{L`}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Cj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Lb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{A@j}}Hj}h}{{{h{Ld}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Lf}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AAn}}AId}{{h{{Ad{A`}}}}}}{{{h{Lh}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Lj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Ll}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Ln}}c}h{{Gj{{Ad{A`}}}}}}{{{h{M`}}c}h{{Gj{{Ad{A`}}}}}}{{{h{Mb}}c}h{{Gj{{Ad{A`}}}}}}````{{{h{Md}}}AIn}0{{{h{Md}}}AJ`}0{ce{}{}}0000000000000000000000000000000000000000000000000000000{Cn{{AJb{Md}}}}{Cn{{ADl{A`}}}}{{{h{A@j}}}}{{{AJb{Md}}}Cn}{{{h{Cl}}AJdAJf}Ef}{{{h{Cl}}}Ef}{{{h{Md}}}Ef}{{{h{A@j}}}Ef}2{{{h{Ol}}}Ef}03{{{h{ABf}}}Ef}{{{h{ABh}}Ch}Ef}4{IlEf}{{{h{AAd}}}Ef}66666{{{h{AA`}}}Ef}70702775{{{h{Jn}}{h{AAj}}}Ef}{{{h{Jn}}{h{Jb}}}Ef}7{{{h{Jn}}}Ef}8{{{h{AAj}}}Ef}{{{h{{Jn{Nj}}}}Db}Ef}<{{{h{Jb}}}Ef}{{{h{A@j}}}AJh}{{{h{ABl}}}{{`{{Gn{}{{Ej{{E`{{h{AAf}}ABn}}}}}}}}}}`{{{h{A@j}}}{{Dj{{h{{Ad{A`}}}}}}}}{{{h{Nn}}}In}{{{h{Md}}}Hj}{{{h{A@j}}}Hj}`{J`ADb}{DbAGb}{{{h{Jn}}{h{Md}}}Ef}{{{h{ABh}}}ABh}{{{h{ABh}}c}ABh{{AD`{Nh}}}}1`11{{{h{Md}}}D`}{CnAAf}{{{h{Md}}A@b}D`}{{CnA@b}AAf}{{D`Ed}}{{IlA@`}}{{A@bIn}}{{InA@b}}{{InEd}}{{{h{AhD`}}Ed}Bh}{{{h{AhIl}}A@`}Bh}{{{h{AhIn}}Ed}Bh}{Il}``{{}{{h{Md}}}}{{}Cn}{{AAb{h{{Ad{A`}}}}}{{E`{AA`AJj}}}}{{CjDh}AAd}{{}A@j}{cAAj{{AHb{AEd}}}}{{AJlc}AAn{{AHb{ABf}}}}{cCn{{AD`{Nf}}}}{{{h{AAj}}}Cn}{{{h{Ld}}}Cn}{{{h{Kn}}}Cn}{{{h{{Jd{c}}}}Jb{Dj{M`}}}CnJl}{ACjCn}{{{h{Lf}}}Cn}{{{h{L`}}}Cn}98{{{h{AA`}}}Cn}{{{h{A@j}}Hj}{{Dj{{h{{Ad{A`}}}}}}}}{{{h{Cl}}}Mh}{{}AAd}```{{{h{Md}}}{{Dj{AAj}}}}{{ce}Jn{{AHb{Ld}}}{{AHb{ABf}}}}{{{h{Md}}c}{{E`{JnAJn}}}{{AHb{ABf}}}}{{Knc}Jn{{AHb{ABf}}}}{{{h{AAl}}c}Jn{{AHb{ABf}}}}{{{h{Md}}c}Jn{{AHb{ABf}}}}{{{h{{Jd{c}}}}Jb{Dj{M`}}e}JnJl{{AHb{A@n}}}}{{{h{{Jd{c}}}}Jb{Dj{M`}}}AA`Jl}{{{h{AK`}}}A@j}{{ACjc}Jn{{AHb{A@n}}}}{ACjAA`}{{{h{AAl}}c}Jn{{AHb{A@n}}}}{{{h{AAl}}}AA`}{{{h{AKb}}{h{AEd}}}A@j}{{{h{Md}}}{{Dj{Cn}}}}{LfCn}{{{h{AAj}}}{{E`{CnAGf}}}}{{{h{AAl}}}Cn}{{{h{Md}}c}Jn{{AHb{A@n}}}}{{{h{Md}}}AA`}{Db{{h{Nh}}}}`{{{h{D`}}{h{D`}}}{{Dj{Bj}}}}{{{h{Il}}{h{Il}}}{{Dj{Bj}}}}{{{h{A@b}}{h{A@b}}}{{Dj{Bj}}}}{{{h{Jb}}{h{Jb}}}{{Dj{Bj}}}}{{{h{In}}{h{In}}}{{Dj{Bj}}}}{{{h{K`}}{h{K`}}}{{Dj{Bj}}}}{{{h{A@n}}{h{A@n}}}{{Dj{Bj}}}}{{{h{{Jn{c}}}}{h{{Jn{c}}}}}{{Dj{Bj}}}{HlNl}}{{{h{Kb}}{h{Kb}}}{{Dj{Bj}}}}{{{h{Kd}}{h{Kd}}}{{Dj{Bj}}}}{{{h{Kf}}{h{Kf}}}{{Dj{Bj}}}}{{{h{Ch}}{h{Ch}}}{{Dj{Bj}}}}{{{h{Kh}}{h{Kh}}}{{Dj{Bj}}}}{{{h{Kj}}{h{Kj}}}{{Dj{Bj}}}}{{{h{Kl}}{h{Kl}}}{{Dj{Bj}}}}{{{h{Md}}{h{Md}}}{{Dj{Bj}}}}{{{h{Md}}{h{Cn}}}{{Dj{Bj}}}}{{{h{Cn}}{h{Cn}}}{{Dj{Bj}}}}{{{h{Cn}}{h{Md}}}{{Dj{Bj}}}}{{{h{AA`}}{h{AA`}}}{{Dj{Bj}}}}{{{h{AAb}}{h{AAb}}}{{Dj{Bj}}}}{{{h{Kn}}{h{Kn}}}{{Dj{Bj}}}}{{{h{L`}}{h{L`}}}{{Dj{Bj}}}}{{{h{Cj}}{h{Cj}}}{{Dj{Bj}}}}{{{h{Lb}}{h{Lb}}}{{Dj{Bj}}}}{{{h{AAd}}{h{AAd}}}{{Dj{Bj}}}}{{{h{Nn}}{h{Nn}}}{{Dj{Bj}}}}{{{h{Ol}}{h{Ol}}}{{Dj{Bj}}}}{{{h{AAf}}{h{AAf}}}{{Dj{Bj}}}}{{{h{Cl}}{h{Cl}}}{{Dj{Bj}}}}{{{h{A@j}}{h{A@j}}}{{Dj{Bj}}}}{{{h{AAh}}{h{AAh}}}{{Dj{Bj}}}}{{{h{AAj}}{h{AAj}}}{{Dj{Bj}}}}{{{h{Ld}}{h{Ld}}}{{Dj{Bj}}}}{{{h{Lf}}{h{Lf}}}{{Dj{Bj}}}}{{{h{AAl}}{h{AAl}}}{{Dj{Bj}}}}{{{h{Lh}}{h{Lh}}}{{Dj{Bj}}}}{{{h{Lj}}{h{Lj}}}{{Dj{Bj}}}}{{{h{Ml}}{h{Ml}}}{{Dj{Bj}}}}{{{h{Ll}}{h{Ll}}}{{Dj{Bj}}}}{{{h{AB`}}{h{AB`}}}{{Dj{Bj}}}}{{{h{ABf}}{h{ABf}}}{{Dj{Bj}}}}{{{h{Db}}{h{Db}}}{{Dj{Bj}}}}{{{h{J`}}{h{J`}}}{{Dj{Bj}}}}{{{h{ABh}}{h{ABh}}}{{Dj{Bj}}}}{{{h{ABj}}{h{ABj}}}{{Dj{Bj}}}}{{{h{N`}}{h{N`}}}{{Dj{Bj}}}}{{{h{Ln}}{h{Ln}}}{{Dj{Bj}}}}{{{h{Nb}}{h{Nb}}}{{Dj{Bj}}}}{{{h{M`}}{h{M`}}}{{Dj{Bj}}}}{{{h{Nd}}{h{Nd}}}{{Dj{Bj}}}}{{{h{Mb}}{h{Mb}}}{{Dj{Bj}}}}`{{IlIl}{{Dj{Il}}}}``{{{h{AA`}}}{{h{Nf}}}}`{{{h{c}}{h{e}}}Ef{}{}}{{{h{c}}h}Ef{}}0{{{h{c}}{h{Mj}}}{{Dj{AAj}}}{}}0{{{h{c}}{h{{Ff{MjLn}}}}}{{Dj{{Ff{JbHj}}}}}{}}{{{h{c}}{h{Mj}}}{{Dj{Jb}}}{}}33{{{h{c}}}{{Dj{{h{{AKf{AKd{Ff{CnAGj}}}}}}}}}{}}{{{h{c}}{h{e}}}{{Dj{Hj}}}{}{}}{{{h{c}}{h{e}}{h{Ln}}}{{Dj{Hj}}}{}{}}`{{{h{Jn}}}{{Dj{Ld}}}}{{{h{AAj}}}Ld}{{{h{AAl}}}Ld}{{{h{Jb}}Jh}AEd}{{{h{AAn}}{h{{Jd{c}}}}}AAjAGd}{{{h{AhA@j}}c}Bh{{AD`{{Ad{A`}}}}}}{{{h{AhA@j}}{h{AKb}}}Bh}{{{h{AhCn}}ADh}Bh}0{{{h{AhCn}}A@d}Bh}{{{h{AhCn}}c}Bh{{AD`{Nf}}}}{{{h{Ahc}}}{{E`{AAjACf}}}{AKhACd}}{{{h{Ahc}}}{{E`{AAlACf}}}{AKhACd}}{{D`Ed}D`}{{IlA@`}Il}{{{h{AhD`}}Ed}Bh}{{{h{AhIl}}A@`}Bh}{{{Jn{Nj}}Db}{{E`{JnAHf}}}}{{{h{AhCn}}Hj}Bh}0{In{{Dj{In}}}}{{{h{AhCn}}}Bh}{{{h{Jn}}}{{Dj{Kn}}}}{{{h{Md}}}Kn}{{{h{Jn}}}Cn}`{{{h{Cl}}}{{`{{Gn{}{{Ej{Hj}}}}}}}}`{{{h{A@j}}}{{Dj{{h{{Ad{A`}}}}}}}}{{{h{Nn}}}In}`{{D`cACl}E`Hn}{{IlcACl}E`Hn}101010{{{h{D`}}c}E`Hn}{{{h{A@b}}c}E`Hn}{{{h{Jb}}c}E`Hn}{{{h{Jb}}}{{Ab{A`}}}}{{{h{In}}c}E`Hn}{{{h{{Jn{c}}}}e}E`NlHn}{{{h{Kb}}c}E`Hn}{{{h{Kd}}c}E`Hn}{{{h{Kf}}c}E`Hn}{{{h{Ch}}c}E`Hn}{{{h{Kh}}c}E`Hn}{{{h{Kj}}c}E`Hn}{{{h{Kl}}c}E`Hn}{{{h{O`}}c}E`Hn}{{{h{A@d}}c}E`Hn}{{{h{Md}}c}E`Hn}{{{h{Cn}}c}E`Hn}{{{h{Kn}}c}E`Hn}{{{h{L`}}c}E`Hn}{{{h{Cj}}c}E`Hn}{{{h{Lb}}c}E`Hn}{{{h{AAd}}c}E`Hn}{{{h{Nn}}c}E`Hn}{{{h{Ol}}c}E`Hn}{{{h{AAf}}c}E`Hn}{{{h{Cl}}c}E`Hn}{{{h{A@j}}c}E`Hn}{{{h{AAj}}c}E`Hn}{{{h{Ld}}c}E`Hn}{{{h{Lf}}c}E`Hn}{{{h{AAl}}c}E`Hn}{{{h{AAn}}c}E`Hn}{{{h{Lh}}c}E`Hn}{{{h{Lj}}c}E`Hn}{{{h{Ll}}c}E`Hn}{{{h{AB`}}c}E`Hn}{{{h{ABb}}c}E`Hn}{{{h{Db}}c}E`Hn}{{{h{J`}}c}E`Hn}{{{h{ABh}}c}E`Hn}{{{h{ABj}}c}E`Hn}{{{h{ABl}}c}E`Hn}{{{h{ABl}}}{{ADl{A`}}}}{{{h{Ln}}c}E`Hn}{{{h{M`}}c}E`Hn}{{{h{Mb}}c}E`Hn}{{{h{ABl}}}If}{{{h{ABl}}{h{Ahc}}}{{E`{HjACf}}}ACh}`{{{h{ABl}}Hj{h{Ah{AKj{c}}}}}{{E`{{Ff{AKlABb}}AKn}}}{{Dl{Cl}}}}{{{h{ABl}}Hj{h{Ah{AKj{c}}}}{Dj{Ln}}}{{E`{AL`ALb}}}{{Dl{Cl}}}}{{{h{AhABl}}{h{c}}{h{{Jd{e}}}}}{{E`{{AKf{HjALd}}{Ff{{AKf{HjALd}}{AKf{HjAKn}}}}}}}ALf{AGdJl}}`{IlA@`}{{{h{AAf}}}Hj}{{{h{A@j}}}Hj}{{{h{AAh}}}Hj}{{{h{ABl}}Hj}{{E`{{h{AAf}}AKn}}}}{{D`D`}}{{IlIl}}{{InIn}}{{J`J`}J`}{{{h{AhD`}}D`}Bh}{{{h{AhIl}}Il}Bh}{{{h{AhIn}}In}Bh}{cD`{{Gn{}{{Ej{D`}}}}}}{cIl{{Gn{}{{Ej{Il}}}}}}{cIn{{Gn{}{{Ej{In}}}}}}{cIn{{Gn{}{{Ej{{h{In}}}}}}}}{{Jb{h{{Jd{c}}}}{Dj{M`}}}{{Ff{ACjJh}}}Jl}`{{{h{A@j}}}{{Dj{{h{Md}}}}}}{{{h{Md}}}Ln}{{{h{Jn}}}ALh}{{{h{Md}}}If}{J`{{Ab{A`}}}}{ABh{{Ab{A`}}}}{D`ADb}{IlADb}{Kb}{Kd}{Kf}{Ch}{Kh}{Kj}{Kl}{Kn}{L`}{Cj}{Lb}{Ld}{Lf}{Lh}{Lj}{Ll}{Ln}{M`}{Mb}{{{h{Md}}}{{ADl{A`}}}}{AAj{{ADl{A`}}}}{{{h{AAl}}}{{Ab{A`}}}}{AAn{{ADl{A`}}}}{ABhABj}{ABjDh}{OlDh}{Db{{h{G`}}}}{AAbALj}{{D`A@l}ADb}{{IlA@l}ADb}{{{h{Mj}}}Mj}0{{{h{ALl}}}ALl}0{{{h{Md}}}If}{InEd}{J`{{Ab{A`}}}}{ABh{{Ab{A`}}}}{AAbA`}{{{h{c}}}e{}{}}00000000000000000{{{h{Md}}}}11111111111111111111111111111111111111{{{h{Md}}}Cn}{{{h{Md}}{h{{Jd{c}}}}Jb}CnJl}1{{{h{Jb}}}AAj}{{{h{AAj}}}AAj}{{{h{Jn}}}If}{KbMh}{KdMh}{KfMj}{ChMh}{KhMh}{KjMh}{KlMh}{KnMj}{L`n}{CjMh}{LbMh}{LdMj}{LfMj}{LhMh}{LjMh}{Ll{{Mn{Ml}}}}{Ln{{Mn{N`}}}}{M`{{Mn{Nb}}}}{Mb{{Mn{Nd}}}}{{{h{Ol}}}{{Dj{On}}}}{{{h{ALn}}}ALn}0{D`Ed}{IlA@`}{A@bEd}00{MbJf}{{{h{n}}}n}0{D`{{E`{IlAM`}}}}{AAjAMb}{{{h{c}}}If{}}00000000000000000000000000000000000000000{{D`A@l}If}{{IlA@l}If}10{J`ABh}{ABbDh}{A@dA`}{Il{{E`{D`AM`}}}}{InEd}0{{{h{A@j}}}{{ADl{{ADl{A`}}}}}}{AAnIf}{ABhJ`}3{{{h{Jb}}}Jb}{{{h{Cl}}c}Hj{{Hf{{h{AAd}}}{{Hd{{Dj{AAf}}}}}}}}{{{h{O`}}}Hj}{{{h{Nn}}}Hj}{{{h{Cl}}}Hj}{c{{E`{e}}}{}{}}{Il{{E`{D`}}}}1{D`{{E`{Il}}}}2{If{{E`{A@b}}}}{{{AJb{G`}}}{{E`{A@b}}}}4{{{h{G`}}}{{E`{A@b}}}}5{{{AJb{G`}}}{{E`{In}}}}{{{h{G`}}}{{E`{In}}}}7{If{{E`{In}}}}88888888888888{A`{{E`{AAb}}}}{ALj{{E`{AAb}}}}{ADh{{E`{AAb}}}};{A@d{{E`{AAb}}}}<<<<<<{If{{E`{Ol}}}}{{{AJb{G`}}}{{E`{Ol}}}}>{{{h{G`}}}{{E`{Ol}}}}???????{AAj{{E`{AAl}}}}{c{{E`{e}}}{}{}}0000000000{AGb{{E`{Db}}}}{Oh{{E`{Db}}}}222222222222222222222222222222222222222222222222222222222222222222{{{h{Jb}}{h{{Jd{c}}}}{h{Jb}}JhJf}EfJl}{{{h{Cl}}Hj}{{E`{{h{Nn}}AMd}}}}{{{h{Cl}}Hj}{{E`{{h{AAf}}AMf}}}}`{{{h{Cl}}}Cj}``{{{h{c}}}Ij{}}00000000000000000000000000000000000000000000000000000000{ACl{{h{G`}}}}0{{D`D`}D`}{{IlIl}Il}10`{IlD`}`{{{h{AhABl}}Hj{h{{Cb{AMh}}}}}{{E`{BhAMj}}}}{{{h{AhABl}}Hj{h{{Cb{AMh}}}}}{{E`{BhAMl}}}}`{{{h{Jb}}{h{{Jd{c}}}}{h{AKl}}{h{AMn}}}{{E`{BhJj}}}Jl}{{{h{AAj}}{h{{Jd{c}}}}{h{AKl}}{h{AKb}}}{{E`{BhJj}}}Jl}{{{h{AAl}}{h{{Jd{c}}}}{h{AKl}}{h{AKb}}}{{E`{BhJj}}}Jl}{{{h{AA`}}}AAb}```{{{h{Cl}}}Hj}{ce{}{}}0000000000000000000000000000000000000000000000000000000{{{h{O`}}}In}{{{h{AAf}}}In}{{{h{Cl}}}In}{HjCn}`{{{h{Jn}}}{{Dj{AA`}}}}{{{h{O`}}}{{Dj{Kj}}}}{{{h{Md}}}{{Dj{AAb}}}}{{{h{AAj}}}{{E`{LfAGf}}}}{{{h{AAl}}}Lf}{{{h{AAj}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}{{{h{AAl}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}{{{h{Md}}}L`}{{{h{Cl}}}Lb}``````````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000000000{{{h{AGh}}}AGh}{{{h{AJn}}}AJn}{{{h{AN`}}}AN`}{{{h{AHf}}}AHf}{{{h{ANb}}}ANb}{{{h{ANd}}}ANd}{{{h{ANf}}}ANf}{{{h{ANh}}}ANh}{{{h{ANj}}}ANj}{{{h{ANl}}}ANl}{{{h{Nj}}}Nj}{{{h{ALh}}}ALh}{{{h{c}}{h{Ahe}}}Bh{}{}}00000000000{{{h{ANl}}{h{ANl}}}Bj}{{{h{Nj}}{h{Nj}}}Bj}{{{h{ALh}}{h{ALh}}}Bj}{{{h{AGh}}{h{AGh}}}Ef}{{{h{AJn}}{h{AJn}}}Ef}{{{h{AN`}}{h{AN`}}}Ef}{{{h{AHf}}{h{AHf}}}Ef}{{{h{ANb}}{h{ANb}}}Ef}{{{h{ANd}}{h{ANd}}}Ef}{{{h{ANf}}{h{ANf}}}Ef}{{{h{ANh}}{h{ANh}}}Ef}{{{h{ANj}}{h{ANj}}}Ef}{{{h{ANl}}{h{ANl}}}Ef}{{{h{Nj}}{h{Nj}}}Ef}{{{h{ALh}}{h{ALh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000000000000000`{{{h{AGh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AJn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AN`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ANl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Nj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ALh}}{h{AhEn}}}{{E`{BhF`}}}}{ANnAGh}{AO`AGh}{AJjAGh}{cc{}}{ANnAJn}11{ANhAHf}{ANjAHf}{ANdAHf}{AObAHf}{ANbAHf}{ANfAHf}7{AO`AHf}{AOdAHf}{ANnAHf}{AJjAHf};;;;;;;;{{{h{ANl}}{h{Ahc}}}BhGf}{{{h{Nj}}{h{Ahc}}}BhGf}{{{h{ALh}}{h{Ahc}}}BhGf}{ce{}{}}00000000000{{{h{ANf}}}Hj}{{{h{ANj}}}A`}{{{h{ANh}}}Hj}{{{h{ANl}}{h{ANl}}}{{Dj{Bj}}}}{{{h{Nj}}{h{Nj}}}{{Dj{Bj}}}}{{{h{ALh}}{h{ALh}}}{{Dj{Bj}}}}{{{h{AGh}}}{{Dj{{h{AOf}}}}}}{{{h{AJn}}}{{Dj{{h{AOf}}}}}}{{{h{AN`}}}{{Dj{{h{AOf}}}}}}{{{h{AHf}}}{{Dj{{h{AOf}}}}}}{{{h{ANb}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00000000000{{{h{c}}}If{}}00000000{c{{E`{e}}}{}{}}00000000000000000000000{{{h{c}}}Ij{}}00000000000????????????`````````````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{AOh{{Dj{c}}}{}}{{{h{AFf}}}AFf}{{{h{ADd}}}ADd}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{AFf}}{h{AFf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AFf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ADd}}{h{AhEn}}}{{E`{BhF`}}}}0{AOjAFf}{AOlAFf}{cc{}}{AOnAFf}{AM`AFf}{ANnAFf}{B@`AFf}4{ce{}{}}0`{ADdADd}{{{h{AFf}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}066````{{cACl}{{E`{B@b}}}Eb}0{{B@bcACl}E`Hn}{{B@dcACl}E`Hn}10{ACl{{h{G`}}}}{c{{E`{e}}}EbB@b}`{{{h{c}}e}E`B@bHn}{c{{E`{{Dj{e}}}}}EbB@d}{{{h{{Dj{c}}}}e}E`B@dHn}3`210```````{{If{h{G`}}}If}{{{h{AhIf}}{h{G`}}}Bh}{{{h{{ADl{ce}}}}}{{h{e}}}{}B@f}{{{h{Ah{ADl{ce}}}}{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{If}}}{{h{{Ad{A`}}}}}}{{{h{{ADl{A`}}}}}}{{{h{Ah{ADl{ce}}}}}{{h{Ah{ADl{ce}}}}}{}B@f}{{{h{Ah{ADl{ce}}}}}{{h{Ah{Ad{c}}}}}{}B@f}{{{h{AhIf}}}{{h{AhG`}}}}{{{h{Ah{ADl{ce}}}}}{}{}B@f}21{{{h{AhIf}}}{{h{Ah{ADl{A`}}}}}}{{{h{{ADl{ce}}}}}{}{}B@f}{{{h{{ADl{ce}}}}}{{h{{Ad{c}}}}}{}B@f}{{{h{{ADl{ce}}}}}{{h{{ADl{ce}}}}}{}B@f}9{{{h{If}}}{{h{G`}}}}{{{h{If}}}{{h{B@h}}}}{{{h{If}}}{{h{B@j}}}}42{{{h{c}}}{{h{e}}}{}{}}05030{{{h{Ahc}}}{{h{Ahe}}}{}{}}0;0:0{{{h{{ADl{ce}}}}}Hj{}B@f}{{{h{If}}}Hj}{{{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{AhIf}}}Bh}{{{h{AOb}}}AOb}{{{h{B@l}}}B@l}{{{h{{ADl{ce}}}}}{{ADl{ce}}}Al{B@fAl}}{{{h{If}}}If}{{{h{Ah{ADl{ce}}}}{h{{ADl{ce}}}}}BhAl{B@fAl}}{{{h{AhIf}}{h{If}}}Bh}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{{ADl{ce}}}}{h{{ADl{ce}}}}}BjBlB@f}{{{h{If}}{h{If}}}Bj}{Bn{{E`{{ADl{A`}}B@n}}}}{Bn{{E`{IfB@n}}}}{{{h{Ahc}}}{{E`{IfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{{ADl{A`}}}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Ed}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{AAf}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BA`}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{A`}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BAb}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Ln}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{{Ff{DhBAd}}}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Nn}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Kb}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{AAh}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BAf}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Cl}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Kd}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Kh}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Ch}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{Fl}}AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{{ADl{BAh}}AC`}}}{ACbACd}}{{{h{{ADl{BAb}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Nn}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BAh}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BAf}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Kh}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{AAf}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{BA`}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Kd}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{A`}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{{ADl{A`}}}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{AAh}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Ed}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Fl}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{{Ff{DhBAd}}}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Ln}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Cl}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Kb}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{ADl{Ch}}}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{If}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AhIf}}{h{G`}}}Bh}{{{h{G`}}}{{E`{{ADl{A`}}B@l}}}}{{{h{G`}}}{{E`{{ADl{A`}}AOb}}}}{{{h{Ah{ADl{ce}}}}}BhEhB@f}{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{Hf{{h{Ahc}}{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{Ah{ADl{ce}}}}i}Bh{}B@fEh{{Hf{{h{Ahc}}}{{Hd{g}}}}}}{{}{{ADl{c}}}{}}{{}If}{{{h{{ADl{ce}}}}}{{h{{Ad{c}}}}}{}B@f}{{{h{If}}}{{h{G`}}}}{{{h{Ah{ADl{ce}}}}}{{h{Ah{Ad{c}}}}}{}B@f}{{{h{AhIf}}}{{h{AhG`}}}}{c{{E`{{ADl{e}}}}}EbBAj}{c{{E`{If}}}Eb}{{{h{Ah{ADl{ce}}}}g}{{BAl{ce}}}{}B@f{{Hh{Hj}}}}{{{h{AhIf}}c}BAn{{Hh{Hj}}}}{{{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{{h{{Ad{A`}}}}}If}0{{{h{AhEn}}{h{{Ad{A`}}}}}{{E`{BhF`}}}}{{{h{AOb}}{h{AOb}}}Ef}{{{h{B@l}}{h{B@l}}}Ef}{{{h{{ADl{eg}}}}{h{{Ab{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{Ah{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{ADl{ci}}}}}Ef{}{{Eh{c}}}B@fB@f}{{{h{{ADl{eg}}}}{h{{h{{Ab{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{Ad{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{If}}{h{{AEh{G`}}}}}Ef}{{{h{If}}{h{G`}}}Ef}{{{h{If}}{h{{h{G`}}}}}Ef}{{{h{If}}{h{If}}}Ef}{{{h{If}}{h{BBf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000`{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{El{}{{Ej{c}}}}}}{{{h{Ah{ADl{ce}}}}g}BhBBhB@f{{El{}{{Ej{{h{c}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{If}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{h{BBj}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{h{G`}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{AJb{G`}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{{AEh{G`}}}}}}}}{{{h{AhIf}}c}Bh{{El{}{{Ej{BBj}}}}}}{{{h{Ah{ADl{ce}}}}{h{{Ad{c}}}}}BhAlB@f}{{{h{Ah{ADl{ce}}}}g}BhAlB@f{{Hh{Hj}}}}{{{h{AhIf}}c}Bh{{Hh{Hj}}}}{{{h{Ah{ADl{ce}}}}c}Bh{}B@f}{{{h{Ah{ADl{ce}}}}{h{c}}}BhBBhB@f}{{{h{AhIf}}{AEh{G`}}}Bh}{{{h{AhIf}}{h{BBj}}}Bh}{{{h{AhIf}}BBj}Bh}{{{h{AhIf}}{h{G`}}}Bh}{{{h{AhIf}}If}Bh}{{{h{Ah{ADl{ce}}}}Hj}Bh{}B@f}{{{h{Ah{ADl{ce}}}}Hj}BhBBhB@f}{{{h{AhIf}}Hj}Bh}0{{{h{Ah{ADl{ce}}}}g}{{BBl{cge}}}{}B@f{{Hf{{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{Ah{ADl{A`c}}}}}{{E`{BhBBn}}}B@f}{{{h{Ah{ADl{A`}}}}}{{E`{BhACf}}}}{{{h{AOb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{B@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{ADl{ce}}}}{h{AhEn}}}{{E`{BhF`}}}FbB@f}{{{h{If}}{h{AhEn}}}{{E`{BhF`}}}}0{ANnAOb}{cc{}}{BC`AOb}{B@lAOb}{BCbAOb}3{{{h{Ah{Ab{c}}}}}{{ADl{c}}}Al}{{{h{Ah{Ad{c}}}}}{{ADl{c}}}Al}{{{h{{Ab{c}}}}}{{ADl{c}}}Al}{BCd{{ADl{A`}}}}{{{BCf{ce}}}{{ADl{ce}}}{}B@f}{{{AEh{{Ad{c}}}}}{{ADl{c}}}{}}{{{AJb{{Ad{c}}e}}}{{ADl{ce}}}{}B@f}{{{h{G`}}}{{ADl{A`}}}};{{{h{{Ad{c}}}}}{{ADl{c}}}Al}{BCh{{ADl{BCj}}}}{BCl{{ADl{M`}}}}{{{Ab{c}}}{{ADl{c}}}{}}{{{BCn{ce}}}{{ADl{ce}}}{}B@f}{BD`{{ADl{A`}}}}{If{{ADl{A`}}}}{Cn{{ADl{A`}}}}{{{h{AhG`}}}If}{{{h{If}}}If}{cc{}}{{{h{G`}}}If}{{{AEh{G`}}}If}{BBjIf}{{{AJb{G`}}}If}{{{h{G`}}}{{E`{{ADl{A`}}}}}}{e{{ADl{c}}}{}{{El{}{{Ej{c}}}}}}{cIf{{El{}{{Ej{{h{BBj}}}}}}}}{cIf{{El{}{{Ej{{AEh{G`}}}}}}}}{cIf{{El{}{{Ej{{h{G`}}}}}}}}{cIf{{El{}{{Ej{If}}}}}}{cIf{{El{}{{Ej{{AJb{G`}}}}}}}}{cIf{{El{}{{Ej{BBj}}}}}}{{HjHj}{{ADl{c}}}{}}{{A`HjHj}If}{{HjHjc}{{ADl{ec}}}B@f{}}{{{h{G`}}}{{E`{If}}}}{{{h{{Ad{AEl}}}}}{{E`{IfBDb}}}}{{{h{{Ad{AEl}}}}}If}{{{h{{Ad{A`}}}}}{{E`{IfBDb}}}}{{{h{{Ad{A`}}}}}If}10{{{ADl{A`}}}{{E`{IfBDd}}}}{{{h{{Ad{A`}}}}}{{AEh{G`}}}}{{{ADl{A`}}}If}{{{h{{ADl{ce}}}}{h{Ahg}}}BhGhB@fGf}{{{h{If}}{h{Ahc}}}BhGf}{{{h{{ADl{A`}}}}}Hj}{{{h{{ADl{ce}}}}g}h{}B@f{{Gj{{Ad{c}}}}}}{{{h{If}}c}h{{Gj{G`}}}}{{{h{Ah{ADl{ce}}}}g}{{h{Ah}}}{}B@f{{Gj{{Ad{c}}}}}}{{{h{AhIf}}c}{{h{Ah}}}{{Gj{G`}}}}{{{h{Ah{ADl{ce}}}}Hjc}Bh{}B@f}{{{h{AhIf}}HjBBj}Bh}{{{h{AhIf}}Hj{h{G`}}}Bh}{ce{}{}}000{{{ADl{C`}}}BDf}{{{ADl{ce}}}{{AJb{{Ad{c}}e}}}{}B@f}{If{{AJb{G`}}}}{If{{ADl{A`}}}}{c{{E`{BChBDh}}}{}}{If{{E`{BChBDh}}}}{{{ADl{e}}}{}BDj{{BDl{c}}}}{If{{BDn{c}}}BDj}{{{ADl{{Ab{c}}e}}}{{ADl{ce}}}{}B@f}{{{ADl{ce}}}{}{}B@f}{{{h{{ADl{ce}}}}}{}{}B@f}{{{h{Ah{ADl{ce}}}}}{}{}B@f}{{{ADl{ce}}}{{Ff{HjHj}}}{}B@f}{If{{Ff{A`HjHj}}}}{{{ADl{ce}}}{{Ff{HjHje}}}{}B@f}{{{h{If}}{h{G`}}}}{{{h{B@l}}}A`}{{{h{If}}{h{G`}}}Ef}{{{h{{ADl{ce}}}}}Ef{}B@f}{{{h{{ADl{c}}}}}Ef{}}{{{h{If}}}Ef}33{{{h{{ADl{A`c}}}}}EfB@f}{{{ADl{ce}}}{{h{Ah{Ad{c}}}}}{}B@f}{If{{h{AhG`}}}}{{{h{{ADl{ce}}}}}Hj{}B@f}{{{h{If}}}Hj}{{{h{Ah{ADl{c}}}}{ADl{c}}}Bh{}}{{{h{{ADl{eg}}}}{h{{Ab{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{ADl{ci}}}}}Ef{}{{Eh{c}}}B@fB@f}{{{h{{ADl{eg}}}}{h{{h{Ah{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{{Ab{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{h{{Ad{c}}}}}}}Ef{}{{Eh{c}}}B@f}{{{h{{ADl{eg}}}}{h{{Ad{c}}}}}Ef{}{{Eh{c}}}B@f}{{{h{If}}{h{{h{G`}}}}}Ef}{{{h{If}}{h{G`}}}Ef}{{{h{If}}{h{{AEh{G`}}}}}Ef}{{}{{ADl{c}}}{}}{{}If}{c{{ADl{ec}}}B@f{}}{{{h{{ADl{ce}}}}{h{{ADl{cg}}}}}{{Dj{Bj}}}HlB@fB@f}{{{h{If}}{h{If}}}{{Dj{Bj}}}}{{{h{Ah{ADl{ce}}}}}{{Dj{c}}}{}B@f}{{{h{AhIf}}}{{Dj{BBj}}}}{{{h{Ah{ADl{ce}}}}g}{{Dj{c}}}{}B@f{{BE`{{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{Ah{ADl{ce}}}}c}Bh{}B@f}{{{h{AhIf}}BBj}Bh}{{{h{AhIf}}{h{G`}}}Bh}{{{h{Ah{ADl{ce}}}}c}{{E`{Bhc}}}{}B@f}{{{h{Ah{ADl{ce}}}}Hj}c{}B@f}{{{h{AhIf}}Hj}BBj}{{{h{AhIf}}c}BhBEb}{{{h{AhIf}}c{h{G`}}}Bh{{Hh{Hj}}}}{{{h{Ah{ADl{ce}}}}Hj}Bh{}B@f}{{{h{AhIf}}Hj}Bh}10{{{h{Ah{ADl{ce}}}}Hjc}BhAlB@f}{{{h{Ah{ADl{ce}}}}Hjg}Bh{}B@f{{Hf{}{{Hd{c}}}}}}{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{Hf{{h{c}}}{{Hd{Ef}}}}}}{{{h{AhIf}}c}Bh{{Hf{BBj}{{Hd{Ef}}}}}}{{{h{Ah{ADl{ce}}}}g}Bh{}B@f{{Hf{{h{Ahc}}}{{Hd{Ef}}}}}}{{{h{{ADl{c}}}}e}E`IdHn}{{{h{If}}c}E`Hn}887{{{h{Ah{ADl{ce}}}}}Bh{}B@f}{{{h{AhIf}}}Bh}{{{h{AOb}}}{{Dj{{h{AOf}}}}}}{{{h{Ah{ADl{ce}}}}}{{h{Ah{Ad{{BEd{c}}}}}}}{}B@f}{{{h{Ah{ADl{ce}}}}gi}{{BEf{e}}}{}B@f{{Hh{Hj}}}{{El{}{{Ej{c}}}}}}{{{h{Ah{ADl{ce}}}}}{{Ff{{h{Ah{Ad{c}}}}{h{Ah{Ad{{BEd{c}}}}}}}}}{}B@f}{{{h{Ah{ADl{ce}}}}Hj}{{ADl{ce}}}{}{AlB@f}}{{{h{AhIf}}Hj}If}{{{h{If}}{h{G`}}}{{Dj{{h{G`}}}}}}0{{{h{Ah{ADl{ce}}}}Hj}c{}B@f}{{{h{c}}}e{}{}}000{{{h{If}}}{{E`{{BEj{BEh}}BBn}}}}{{{h{{ADl{A`}}}}}{{E`{I`BEl}}}}{{{h{If}}}{{E`{I`BEl}}}}{{{h{c}}}If{}}00{{{h{Ah{ADl{ce}}}}Hj}Bh{}B@f}{{{h{AhIf}}Hj}Bh}{c{{E`{e}}}{}{}}0000000{{{h{Ah{ADl{ce}}}}Hj}{{E`{BhBEn}}}{}B@f}{{{h{AhIf}}Hj}{{E`{BhBEn}}}}10{Hj{{E`{{ADl{c}}BEn}}}{}}{Hj{{E`{IfBEn}}}}{{Hjc}{{E`{{ADl{ec}}BEn}}}B@f{}}{{{h{c}}}Ij{}}000{ce{}{}}000{Hj{{ADl{c}}}{}}{HjIf}{{Hjc}{{ADl{ec}}}B@f{}}{{{h{Ah{ADl{A`c}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}B@f}{{{h{Ah{ADl{A`}}}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{Ah{ADl{A`c}}}}{h{{Ad{A`}}}}}{{E`{BhBBn}}}B@f}{{{h{AhIf}}BBj}{{E`{BhF`}}}}{{{h{AhIf}}{h{G`}}}{{E`{BhF`}}}}{{{h{Ah{ADl{A`c}}}}{h{{Ad{BF`}}}}}{{E`{HjBBn}}}B@f}```````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{BCb}}}BCb}{{{h{BC`}}}BC`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{BCb}}{h{BCb}}}Ef}{{{h{BC`}}{h{BC`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{BCb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BC`}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{{{h{BCb}}}{{Ff{DhDh}}}}{ce{}{}}0{{{h{BC`}}}Hj}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}055``````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{BFb}}}BFb}{{{h{BFd}}}BFd}{{{h{BFf}}}BFf}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}}{{h{c}}}BFnBG`}{c{{E`{{ADl{A`}}BFd}}}{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}{{E`{{ADl{A`}}BFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{c{h{e}}}{{E`{{ADl{A`}}BFd}}}{{AD`{{Ad{A`}}}}}BFl}{{c{h{Ah{Ad{A`}}}}{h{e}}}{{E`{HjBFf}}}{{AD`{{Ad{A`}}}}}BFl}{{c{h{Ah{ADl{A`}}}}{h{e}}}{{E`{BhBFd}}}{{AD`{{Ad{A`}}}}}BFl}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFf}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{ADl{A`}}}}}{{E`{BhBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{HjHj}`{cIf{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}IfBFnBG`{{AD`{{Ad{A`}}}}}}{{c{h{e}}}If{{AD`{{Ad{A`}}}}}BFl}{{c{h{Ah{Ad{A`}}}}{h{e}}}{{E`{HjBFb}}}{{AD`{{Ad{A`}}}}}BFl}{{c{h{AhIf}}{h{e}}}Bh{{AD`{{Ad{A`}}}}}BFl}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFb}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{AhIf}}}BhBFnBG`{{AD`{{Ad{A`}}}}}}{{HjEf}{{Dj{Hj}}}}`{{{h{BFb}}{h{BFb}}}Ef}{{{h{BFd}}{h{BFd}}}Ef}{{{h{BFf}}{h{BFf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{BFb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BFd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BFf}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00{BFdBFf}{ce{}{}}00``{{{h{BFf}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00555`````````````{{{h{BGb}}}{{h{G`}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{BGb}}}BGb}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{BGb}}{h{BGb}}}Ef}{{{h{BGd}}{h{BGd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{BGb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGd}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ce{}{}}0{{{h{G`}}}{{E`{BGbBGd}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}{{{h{G`}}}{{E`{BGb}}}}111{{{h{c}}}Ij{}}066`{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{BGf{c}}}}{h{AhEn}}}{{E`{BhF`}}}BFl}:9{{{h{{Ad{A`}}}}{h{c}}}{{BGf{c}}}BFl}7664:````````````33332222{{{h{BGh}}}BGh}{{{h{BGj}}}BGj}{{{h{BGl}}}BGl}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}}{{h{c}}}BFnBG`}{{{h{BGh}}}h}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}{{E`{{ADl{A`}}BFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFf}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{ADl{A`}}}}}{{E`{BhBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{BG`}}}Hj}{{}BGj}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}IfBFnBG`{{AD`{{Ad{A`}}}}}}{{{h{BFn}}}Ef}{{{h{BGj}}}Ef}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFb}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{AhIf}}}BhBFnBG`{{AD`{{Ad{A`}}}}}}{{{h{BGl}}{h{BGl}}}Ef}{{{h{BGn}}{h{BGn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{BGh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BGn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000`{ce{}{}}000{{{h{BGb}}BGj}BGh}?{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}0000000{{{h{c}}}Ij{}}0004444{{BGjEf}BGj}{{BGjBGl}BGj}1```````````````{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}}{{h{c}}}BFnBG`}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}{{E`{{ADl{A`}}BFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFf}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{ADl{A`}}}}}{{E`{BhBFd}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g}IfBFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{Ah{Ad{A`}}}}}{{E`{HjBFb}}}BFnBG`{{AD`{{Ad{A`}}}}}}{{{h{{BFl{}{{BFh{c}}{BFj{e}}}}}}g{h{AhIf}}}BhBFnBG`{{AD`{{Ad{A`}}}}}}`{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{BH`{ce}}}}{h{AhEn}}}{{E`{BhF`}}}BFlBHb}{cc{}}{ce{}{}}{{{BH`{ce}}}eBFlBHb}{{c{h{e}}}{{BH`{ec}}}BHbBFl}{{{h{Ah{BH`{ce}}}}{h{Ah{Ad{A`}}}}}{{E`{HjBBn}}}BFlBHb}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}5```9988{{{h{AhBHd}}{h{G`}}}Bh}{{{h{Ah{BHf{ce}}}}}BhBFlBHh}{{{h{Ah{BHf{ce}}}}}{{E`{eBBn}}}BFlBHh}{{{h{Ah{BHf{ce}}}}}{{E`{BhBBn}}}BFlBHh}{{{h{Ah{BHj{ce}}}}}{{E`{BhBBn}}}BFlBHd}{{{h{{BHf{ce}}}}{h{AhEn}}}{{E`{BhF`}}}BFlBHh}<<{{c{h{e}}}{{BHj{ec}}}BHdBFl}<<{{{BHf{ce}}}eBFlBHh}{{{BHj{ce}}}eBFlBHd}{{c{h{e}}}{{BHf{ec}}}BHhBFl}{{{h{c}}}{{BHj{cIf}}}BFl}<<<<;;{ce{}{}}0{{{h{Ah{BHf{ce}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}BFlBHh}{{{h{Ah{BHj{ce}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}BFlBHd}`````````{{{h{BAb}}}{{h{{Ab{A`}}}}}}{{{h{AhBAb}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBAb}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhBAb}}}A`}{{{h{BAb}}}A`}{{{h{BAf}}}{{h{Cl}}}}5{{{h{BAb}}}{{h{{Ad{A`}}}}}}``{{{h{c}}}{{h{e}}}{}{}}00170000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00670000{{{h{Fl}}Ed}{{Ff{EdEd}}}}{{{h{BHl}}}BHl}{{{h{BAf}}}BAf}{{{h{BAb}}}BAb}{{{h{BHn}}}BHn}{{{h{BI`}}}BI`}{{{h{BIb}}}BIb}{{{h{BId}}}BId}{{{h{c}}{h{Ahe}}}Bh{}{}}000000{{{h{BAf}}{h{BAf}}}Bj}{{{h{BAb}}{h{BAb}}}Bj}{{{h{BHn}}{h{BHn}}}Bj}{{{h{BI`}}{h{BI`}}}Bj}{{{h{BId}}{h{BId}}}Bj}{{{h{Ahc}}}{{E`{BAfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BAbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BHnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BI`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BIdAC`}}}{ACbACd}}20{{{h{BAf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BAb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BHn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BI`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BId}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{}BAb}{c{{E`{BAb}}}Eb}{{{h{BHl}}{h{BHl}}}Ef}{{{h{BAf}}{h{BAf}}}Ef}{{{h{BAb}}{h{BAb}}}Ef}{{{h{BHn}}{h{BHn}}}Ef}{{{h{BI`}}{h{BI`}}}Ef}{{{h{BIb}}{h{BIb}}}Ef}{{{h{BId}}{h{BId}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000000000{{{h{BHl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BAf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BAb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{BHn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BI`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BIb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BId}}{h{AhEn}}}{{E`{BhF`}}}}{ANnBHl}{cc{}}00{{{Ab{A`}}}BAb}{{{h{{Ab{A`}}}}}BAb}2222{{{h{O`}}EdDh{h{{Ad{Hj}}}}}{{E`{BHnBHl}}}}{{{h{G`}}}{{E`{BAbBIf}}}}{{{h{BI`}}{h{O`}}}{{E`{BIdBIb}}}}{{{h{G`}}}{{E`{BAb}}}}{{{h{BAf}}{h{Ahc}}}BhGf}{{{h{BAb}}{h{Ahc}}}BhGf}{{{h{BHn}}{h{Ahc}}}BhGf}{{{h{BI`}}{h{Ahc}}}BhGf}{{{h{BId}}{h{Ahc}}}BhGf}``{{{h{BAb}}c}h{}}`{ce{}{}}000000{{{h{BAb}}}Ef}{{{h{BAb}}}Hj}`{{{h{BAf}}{h{BAf}}}{{Dj{Bj}}}}{{{h{BAb}}{h{BAb}}}{{Dj{Bj}}}}{{{h{BHn}}{h{BHn}}}{{Dj{Bj}}}}{{{h{BI`}}{h{BI`}}}{{Dj{Bj}}}}{{{h{BId}}{h{BId}}}{{Dj{Bj}}}}`{{{h{BAb}}c}E`Hn}`{{{h{BHl}}}{{Dj{{h{AOf}}}}}}{{{h{BIb}}}{{Dj{{h{AOf}}}}}}{BAb{{Ab{A`}}}}{{{h{c}}}e{}{}}000000{{{h{c}}}If{}}00`{c{{E`{e}}}{}{}}00{{{h{{Ad{A`}}}}}{{E`{BAb}}}}11111111111`{{{h{c}}}Ij{}}000000{ce{}{}}000000{{{h{c}}{Ff{EdEd}}}BAb{{AD`{{Ad{A`}}}}}}````````````{{{h{Ah{BIh{c}}}}{h{{Ad{A`}}}}}BhACh}{{{h{Ah{BIj{c}}}}{h{{Ad{A`}}}}}BhACh}{{{h{Ah{BIh{c}}}}g}{{E`{BhBIl}}}ACh{{Dl{Md}}}{{AFd{{h{AAd}}}{{Hd{{E`{eBIl}}}}}}}}{{{h{Ah{BIh{c}}}}}BhACh}{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000{{{h{BIn}}}BIn}{{{h{c}}{h{Ahe}}}Bh{}{}}`{{{h{BIn}}{h{BIn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{BIn}}{h{Kd}}}Kd}{{{h{Ah{BIh{c}}}}}{{E`{HjACf}}}ACh}{{{h{Ah{BIj{c}}}}}{{E`{HjACf}}}ACh}{{{h{Ah{BJ`{c}}}}}{{E`{HjACf}}}ACh}{{{h{BIl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BIn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000000{ANnBIl}{ACfBIl}2{ce{}{}}0000000{{{h{BJb}}{h{Ahc}}e}{{E`{EfBIl}}}{ACbACd}Gn}{{{h{BJd}}{h{Ahc}}e}{{E`{EfBIl}}}{ACbACd}Gn}{{{h{BIn}}{h{Ch}}c}{{E`{EfBIl}}}Gn}210{{{h{Ahc}}{h{O`}}}{{BIh{c}}}ACh}{{{h{Ch}}}BJb}{{EdEdEdA`}BJd}{{{h{Ahc}}EdEdEdA`}{{BIj{c}}}ACh}{{{h{Ahc}}}{{BJf{c}}}{ACbACd}}{{{h{Ahc}}}{{BJ`{c}}}ACh}{{{h{{Ad{A`}}}}}BIn}{{{h{O`}}e}{{E`{BInBIl}}}{{Dl{Md}}}{{AFd{{h{AAd}}}{{Hd{{E`{cBIl}}}}}}}}{{{h{Ah{BJf{c}}}}A`}{{E`{EdACf}}}{ACbACd}}{{{h{BIl}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000000000000000{{{h{c}}}Ij{}}0000000{ce{}{}}0000000{{{h{Ah{BJ`{c}}}}EdA`}{{E`{HjACf}}}ACh}`````````````````````````````{{{h{BJh}}}{{h{{Ab{A`}}}}}}{{{h{BJj}}}{{h{{Ab{A`}}}}}}{{{h{AhBJh}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhBJh}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBJj}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhBJj}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhBJh}}}A`}{{{h{AhBJj}}}A`}{{{h{BJh}}}A`}{{{h{BJj}}}A`}9{{{h{BJh}}}{{h{{Ad{A`}}}}}}9{{{h{BJj}}}{{h{{Ad{A`}}}}}}{{{h{BCj}}}{{h{{Ad{BCj}}}}}}{{{h{BCh}}}{{h{{Ad{BCj}}}}}}{{{h{c}}}{{h{e}}}{}{}}04>3=0000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0=<;:0000000{{}Ef}0``````{{{h{BCh}}BCj}BCh}``````{{{h{BCh}}BCj}BJl}{{{h{AEf}}{h{{Jd{c}}}}BCj}{{E`{AEfBDh}}}Jl}{{{h{AEf}}BCj}{{E`{{Ff{AJlBJh}}BDh}}}}{{{h{BJh}}}BJh}{{{h{BJj}}}BJj}{{{h{BJn}}}BJn}{{{h{AEf}}}AEf}{{{h{BCj}}}BCj}{{{h{BCh}}}BCh}{{{h{BDh}}}BDh}{{{h{BK`}}}BK`}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000{{{h{BJh}}{h{BJh}}}Bj}{{{h{BJj}}{h{BJj}}}Bj}{{{h{AEf}}{h{AEf}}}Bj}{{{h{BCj}}{h{BCj}}}Bj}{{{h{BCh}}{h{BCh}}}Bj}{{{h{{Ad{A`}}}}}{{E`{BJnBDh}}}}{{{h{{Ad{A`}}}}}{{E`{AEfBDh}}}}{{}BJj}{{}BCh}``````{{{h{BJn}}{h{{Jd{c}}}}{h{e}}}{{E`{BJnBDh}}}AGd{{AD`{{Ad{BCj}}}}}}{{{h{AEf}}{h{{Jd{c}}}}{h{e}}}{{E`{AEfBDh}}}Jl{{AD`{{Ad{BCj}}}}}}{c{{E`{BJh}}}Eb}{c{{E`{BJj}}}Eb}{c{{E`{BJn}}}Eb}{c{{E`{AEf}}}Eb}{c{{E`{BCj}}}Eb}{c{{E`{BCh}}}Eb}{{{h{BJn}}}{{Ab{A`}}}}{{{h{AEf}}}{{Ab{A`}}}}{{{h{BJh}}{h{BJh}}}Ef}{{{h{BJj}}{h{BJj}}}Ef}{{{h{BJn}}{h{BJn}}}Ef}{{{h{AEf}}{h{AEf}}}Ef}{{{h{BCj}}{h{BCj}}}Ef}{{{h{BCh}}{h{BCh}}}Ef}{{{h{BDh}}{h{BDh}}}Ef}{{{h{BK`}}{h{BK`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000000000{{{h{BCh}}c}BCh{{AD`{{Ad{BCj}}}}}}{{{h{BJn}}{h{{Jd{c}}}}}BJjAGd}{{{h{AEf}}}BJj}{{{h{BJh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{BJj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{BJn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AEf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BCj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BCh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BDh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BK`}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{Ab{A`}}}BJh}{{{h{{Ab{A`}}}}}BJh}2{{{h{{Ab{A`}}}}}BJj}3{{{Ab{A`}}}BJj}44{DhBCj}55{{{ADl{BCj}}}BCh}{{{h{{Ad{BCj}}}}}BCh}7{BK`BDh}{AObBDh}{JjBDh}{ANnBDh};{Dh{{E`{BCjBDh}}}}{{{h{G`}}}{{E`{BJhBIf}}}}{{{h{G`}}}{{E`{BJjBIf}}}}{cBCh{{El{}{{Ej{BCj}}}}}}3{{{h{{Jd{c}}}}{h{BJn}}}AEfAGd}{{{h{G`}}}{{E`{BJh}}}}{{{h{G`}}}{{E`{BJj}}}}{{{h{G`}}}{{E`{BJnBDh}}}}{{{h{G`}}}{{E`{AEfBDh}}}}{{{h{G`}}}{{E`{BCjBDh}}}}{{{h{G`}}}{{E`{BChBDh}}}}{{{h{BJn}}BKb{h{{Jd{c}}}}}{{E`{{Dj{AAn}}}}}AGd}{{{h{BCh}}}BJl}{{{h{BJh}}{h{Ahc}}}BhGf}{{{h{BJj}}{h{Ahc}}}BhGf}{{{h{AEf}}{h{Ahc}}}BhGf}{{{h{BCj}}{h{Ahc}}}BhGf}{{{h{BCh}}{h{Ahc}}}BhGf}{{{h{BJn}}{h{{Jd{c}}}}}KfAGd}{{{h{AEf}}}Kf}{BCj{{E`{BCjBDh}}}}{{{h{BJh}}c}h{}}{{{h{BJj}}c}h{}}{{{h{BCh}}c}h{}}{ce{}{}}00000000{{BChBCj}BCh}{BKd{{E`{BChBDh}}}}{c{{E`{BChBDh}}}{}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}4{{{h{BCh}}}}{{{h{BK`}}}Hj}{{{h{BJh}}}Ef}{{{h{BJj}}}Ef}{{{h{BCh}}}Ef}{{{h{BCj}}}Ef}10{{{h{BJh}}}Hj}{{{h{BJj}}}Hj}{{{h{BCh}}}Hj}{{}BCh}``````{{c{h{{Ad{A`}}}}}{{E`{BJnBDh}}}{{AHb{ABf}}}}{{{h{AhBJl}}}Dj}{{{h{BCh}}}BJl}``````{{{h{BJh}}{h{BJh}}}{{Dj{Bj}}}}{{{h{BJj}}{h{BJj}}}{{Dj{Bj}}}}{{{h{AEf}}{h{AEf}}}{{Dj{Bj}}}}{{{h{BCj}}{h{BCj}}}{{Dj{Bj}}}}{{{h{BCh}}{h{BCh}}}{{Dj{Bj}}}}``````{{{h{BJh}}c}E`Hn}{{{h{BJj}}c}E`Hn}{{{h{BJn}}c}E`Hn}{{{h{AEf}}c}E`Hn}{{{h{BCj}}c}E`Hn}{{{h{BCh}}c}E`Hn}{{{h{BDh}}}{{Dj{{h{AOf}}}}}}{{{h{BCh}}BCj}BJl}{BJh{{Ab{A`}}}}{BJj{{Ab{A`}}}}{{BJn{h{{Jd{c}}}}}AG`AGd}{{{h{c}}}e{}{}}0000000{BJnAAn}{AEfAAl}{{{h{c}}}If{}}0000000{{{h{BCh}}}{{ADl{Dh}}}}{AEfJb}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0{{{h{{Ad{A`}}}}}{{E`{BJh}}}}{{{h{{Ad{A`}}}}}{{E`{BJj}}}}2222222222222222{{{h{c}}}Ij{}}00000000{ce{}{}}00000000{{{h{BJn}}{h{{Jd{c}}}}}BJjAGd}{{{h{AEf}}{h{{Jd{c}}}}}BJjAGd}`````````````````````````````````{{{h{Fl}}}Ch}{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{Fl}}}Fl}{{{h{BKf}}}BKf}{{{h{Ob}}}Ob}{{{h{BKh}}}BKh}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{Fl}}{h{Fl}}}Bj}{{{h{BKf}}{h{BKf}}}Bj}{{{h{Ahc}}}{{E`{FlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BKfAC`}}}{ACbACd}}1{{{h{Fl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BKf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{}BKf}{c{{E`{Fl}}}Eb}{c{{E`{BKf}}}Eb}{{{h{Fl}}c}ACn{{AD`{Nh}}}}{{{h{Fl}}}ADb}{{{h{Fl}}{h{Fl}}}Ef}{{{h{BKf}}{h{BKf}}}Ef}{{{h{Ob}}{h{Ob}}}Ef}{{{h{BKh}}{h{BKh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{Fl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BKf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Ob}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKh}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ANnOb}11{ANnBKh}{BBbBKf}{{{h{Fl}}{h{Ahc}}}BhGf}{{{h{BKf}}{h{Ahc}}}BhGf}`{ce{}{}}000{{{h{BKf}}A`}Ef}``{{{h{Fl}}{h{Fl}}}{{Dj{Bj}}}}{{{h{BKf}}{h{BKf}}}{{Dj{Bj}}}}`{{{h{Fl}}c}E`Hn}{{{h{BKf}}c}E`Hn}{{{h{Ob}}}{{Dj{{h{AOf}}}}}}{{{h{BKh}}}{{Dj{{h{AOf}}}}}}{{{h{Fl}}}ABh}`{BKfBBb}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}0000000`{{{h{c}}}Ij{}}000{{{h{Fl}}ABh}{{E`{ChBKh}}}}`>>>>{{{h{Fl}}}J`}``````````````````{{{h{Oh}}}{{h{{Ab{A`}}}}}}{{{h{AhOh}}}{{h{Ah{Ab{A`}}}}}}{{{h{AhOh}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhOh}}}A`}{{{h{Oh}}}A`}4{{{h{Oh}}}{{h{{Ad{A`}}}}}}05{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}65{{{h{Oh}}}Oh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Oh}}{h{Oh}}}Bj}{c{{E`{Oh}}}Eb}{{{h{Oh}}{h{Oh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{Oh}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{{Ab{A`}}}}}Oh}{{{Ab{A`}}}Oh}{cc{}}{ChOh}{{{h{G`}}}{{E`{OhBIf}}}}{{{h{G`}}}{{E`{Oh}}}}{cO`{{AD`{Nh}}}}{{{h{Oh}}{h{Ahc}}}BhGf}{{{h{Oh}}c}h{}}{ce{}{}}{{{h{Oh}}}Ef}{{{h{Oh}}}Hj}{{{h{Oh}}{h{Oh}}}{{Dj{Bj}}}}{{{h{Oh}}c}E`Hn}{Oh{{Ab{A`}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}{{{h{{Ad{A`}}}}}{{E`{Oh}}}}1{{{h{c}}}Ij{}}{cOh{{AD`{Nh}}}}{DbOh}<```````````````````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{Oj}}Oj}Ef}{{{h{c}}Oj}Ef{}}{{{h{c}}On}Ef{}}{{{h{AJd}}}AJd}{{{h{BKj}}}BKj}{{{h{AJf}}}AJf}{{{h{BKl}}}BKl}{{{h{BKn}}}BKn}{{{h{Oj}}}Oj}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{AJd}}{h{AJd}}}Bj}{{{h{AJf}}{h{AJf}}}Bj}{{{h{Ahc}}}{{E`{OjAC`}}}{ACbACd}}{{{h{Oj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{c{{E`{AJd}}}Eb}{c{{E`{AJf}}}Eb}{c{{E`{Oj}}}Eb}{{{h{AJd}}{h{AJd}}}Ef}{{{h{BKj}}{h{BKj}}}Ef}{{{h{AJf}}{h{AJf}}}Ef}{{{h{BKl}}{h{BKl}}}Ef}{{{h{BKn}}{h{BKn}}}Ef}{{{h{Oj}}{h{Oj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000{{{h{AJd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AJf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BKn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Oj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{BL`BKj}1{BL`BKl}22{AJdOj}{BLbOj}{AJfOj}5{Dh{{E`{AJdBKn}}}}{Dh{{E`{AJfBKn}}}}{DhOj}{Dh{{E`{OjBKn}}}}{{{h{G`}}}{{E`{AJdBKj}}}}{{{h{G`}}}{{E`{AJfBKl}}}}{{{h{G`}}}{{E`{OjAFn}}}}{{{h{G`}}}{{E`{AJd}}}}{{{h{G`}}}{{E`{AJf}}}}{{{h{G`}}}{{E`{Oj}}}}6{{{h{G`}}}{{E`{OjAHn}}}}{{{h{AJd}}{h{Ahc}}}BhGf}{{{h{AJf}}{h{Ahc}}}BhGf}{{{h{Oj}}{h{Ahc}}}BhGf}{ce{}{}}00000{{{h{Oj}}}Ef}0{{{h{Oj}}Oj}Ef}0{{{h{Oj}}AJdAJf}Ef}{{{h{AJd}}{h{AJd}}}{{Dj{Bj}}}}{{{h{AJf}}{h{AJf}}}{{Dj{Bj}}}}{{{h{Oj}}{h{Oj}}}{{Dj{Bj}}}}{{{h{c}}{h{e}}}Ef{}{}}{{{h{c}}h}Ef{}}0{{{h{c}}{h{Mj}}}{{Dj{AAj}}}{}}0{{{h{c}}{h{{Ff{MjLn}}}}}{{Dj{{Ff{JbHj}}}}}{}}{{{h{c}}{h{Mj}}}{{Dj{Jb}}}{}}33{{{h{c}}}{{Dj{{h{{AKf{AKd{Ff{CnAGj}}}}}}}}}{}}{{{h{c}}{h{e}}}{{Dj{Hj}}}{}{}}{{{h{c}}{h{e}}{h{Ln}}}{{Dj{Hj}}}{}{}}{{{h{AJd}}c}E`Hn}{{{h{AJf}}c}E`Hn}{{{h{Oj}}c}E`Hn}{{{h{BKj}}}{{Dj{{h{AOf}}}}}}{{{h{BKl}}}{{Dj{{h{AOf}}}}}}{{{h{BKn}}}{{Dj{{h{AOf}}}}}}{AJdDh}{AJfDh}{OjDh}{{{h{c}}}e{}{}}00000{{{h{c}}}If{}}00000{c{{E`{e}}}{}{}}{If{{E`{AJd}}}}{{{h{G`}}}{{E`{AJd}}}}{{{AJb{G`}}}{{E`{AJd}}}}33{If{{E`{AJf}}}}{{{h{G`}}}{{E`{AJf}}}}{{{AJb{G`}}}{{E`{AJf}}}}66{{{h{G`}}}{{E`{Oj}}}}{{{AJb{G`}}}{{E`{Oj}}}}8{If{{E`{Oj}}}}999999{{{h{c}}}Ij{}}00000{ce{}{}}00000`````````````````{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000{{{h{c}}Oj}Ef{}}{{{h{On}}On}Ef}{{{h{c}}On}Ef{}}{{{h{BLd}}}BLd}{{{h{BLf}}}BLf}{{{h{AGl}}}AGl}{{{h{On}}}On}{{{h{BLh}}}BLh}{{{h{BLj}}}BLj}{{{h{BLl}}}BLl}{{{h{c}}{h{Ahe}}}Bh{}{}}000000{{{h{BLd}}{h{BLd}}}Bj}{{{h{BLf}}{h{BLf}}}Bj}{{}BLd}{{}BLf}{c{{E`{BLd}}}Eb}{c{{E`{BLf}}}Eb}{c{{E`{On}}}Eb}{{{h{BLh}}}Dh}{{{h{BLd}}{h{BLd}}}Ef}{{{h{BLf}}{h{BLf}}}Ef}{{{h{AGl}}{h{AGl}}}Ef}{{{h{On}}{h{On}}}Ef}{{{h{BLh}}{h{BLh}}}Ef}{{{h{BLj}}{h{BLj}}}Ef}{{{h{BLl}}{h{BLl}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000000000{{{h{BLd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AGl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{On}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BLl}}{h{AhEn}}}{{E`{BhF`}}}}0{AElBLd}{cc{}}00{AEjOn}1{BLfOn}{BLdOn}333{AElBLf}{AElOn}{Dh{{E`{OnBLh}}}}71{Dh{{E`{BLfAGl}}}}{Dh{{E`{OnAGl}}}}10{Ol{{E`{OnBLh}}}}{{{h{G`}}}{{E`{BLd}}}}{{{h{G`}}}{{E`{BLf}}}}{{{h{BLd}}{h{Ahc}}}BhGf}{{{h{BLf}}{h{Ahc}}}BhGf}{{{h{On}}{h{Ahc}}}BhGf}``{ce{}{}}000000{{{h{On}}}Ef}0{{{h{On}}On}Ef}{{{h{On}}Ol}Ef}1{{{h{On}}BLdBLf}Ef}{{{h{On}}BLd}{{E`{EfBLj}}}}{{{h{On}}BLf}{{E`{EfBLl}}}}{DhAGl}{{{h{BLd}}{h{BLd}}}{{Dj{Bj}}}}{{{h{BLf}}{h{BLf}}}{{Dj{Bj}}}}{{{h{On}}{h{On}}}{{Dj{Bj}}}}{{{h{c}}{h{e}}}Ef{}{}}{{{h{c}}h}Ef{}}0{{{h{c}}{h{Mj}}}{{Dj{AAj}}}{}}0{{{h{c}}{h{{Ff{MjLn}}}}}{{Dj{{Ff{JbHj}}}}}{}}{{{h{c}}{h{Mj}}}{{Dj{Jb}}}{}}33{{{h{c}}}{{Dj{{h{{AKf{AKd{Ff{CnAGj}}}}}}}}}{}}{{{h{c}}{h{e}}}{{Dj{Hj}}}{}{}}{{{h{c}}{h{e}}{h{Ln}}}{{Dj{Hj}}}{}{}}{{{h{BLd}}c}E`Hn}{{{h{BLf}}c}E`Hn}{{{h{On}}c}E`Hn}``{{{h{BLd}}}Dh}{{{h{BLf}}}Dh}{{{h{On}}}Dh}{{{h{c}}}e{}{}}000000{{{h{On}}}Ol}{{{h{c}}}If{}}000000{If{{E`{BLd}}}}{c{{E`{e}}}{}{}}{{{h{G`}}}{{E`{BLd}}}}{{{AJb{G`}}}{{E`{BLd}}}}2{If{{E`{BLf}}}}{{{h{G`}}}{{E`{BLf}}}}{{{AJb{G`}}}{{E`{BLf}}}}55{Ol{{E`{OnBLh}}}}6666666666{{{h{c}}}Ij{}}000000{BLdAEl}{BLfAEl}{ce{}{}}000000``````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{A@f}}}A@f}{{{h{A@h}}}A@h}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{A@f}}{h{A@f}}}Bj}{{{h{A@f}}{h{A@f}}}Ef}{{{h{A@h}}{h{A@h}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{A@f}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{A@h}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}0{{{h{A@f}}{h{Ahc}}}BhGf}=={{{h{A@f}}{h{A@f}}}{{Dj{Bj}}}}{{{h{c}}}e{}{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0{ce{}{}}0`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````{{{h{Od}}}{{h{{Ad{A`}}}}}}{{{h{Nf}}}{{h{{Ad{A`}}}}}}{{{h{AhNf}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhNf}}}{{h{AhNf}}}}{{{h{AhBD`}}}{{h{AhNf}}}}20{{{h{BD`}}}{{h{Nf}}}}{{{h{Nf}}}{{h{Nf}}}}51{{{h{Od}}}{{h{Md}}}}{{{h{AJ`}}}{{h{Md}}}}{{{h{AIn}}}{{h{Md}}}}{{{h{c}}}{{h{e}}}{}{}}000005000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000700{{{h{BD`}}}Hj}{{{h{AhBD`}}}Bh}{{{h{Od}}}Od}{{{h{ADh}}}ADh}{{{h{AJ`}}}AJ`}{{{h{AIn}}}AIn}{{{h{BD`}}}BD`}{{{h{BLn}}}BLn}{{{h{BM`}}}BM`}{{{h{c}}{h{Ahe}}}Bh{}{}}000000{{{h{Nf}}{h{Nf}}}Bj}{{{h{BD`}}{h{BD`}}}Bj}{{}Od}{{}BD`}{{{h{BD`}}}h}{{{h{AhBD`}}}{{h{Ah}}}}{{}{{h{Nf}}}}{{{h{Od}}{h{Od}}}Ef}{{{h{ADh}}{h{ADh}}}Ef}{{{h{Nf}}{h{Nf}}}Ef}{{{h{BD`}}{h{BD`}}}Ef}{{{h{BLn}}{h{BLn}}}Ef}{{{h{BM`}}{h{BM`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000{{{h{AhBD`}}{h{{Ad{A`}}}}}{{E`{BhBLn}}}}{{{h{Od}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ADh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AJ`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AIn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Nf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BD`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BLn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BM`}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{ADl{A`}}}Od}1111{{{h{{Ab{A`}}}}}{{h{Nf}}}}{{{h{Ah{Ab{A`}}}}}{{h{AhNf}}}}11100001011101001110110011000010110110010101011011010011101001101101011010001000011000001100010010011101100011010111010100011111000001111101000101{{{Ab{A`}}}BD`}0{{{h{{Ab{A`}}}}}BD`}011111010100001110010001111100010010000000101001111010110111000101001{LdBD`}{L`BD`}232223322337223233233322232233222323{KnBD`}443334434334344434334343{LfBD`}5455454554554545599{ANnBM`}{BMbBM`}{{{h{Nf}}{h{Ahc}}}BhGf}{{{h{BD`}}{h{Ahc}}}BhGf}{{{h{Nf}}{AIh{Hj}}}h}{{{h{Nf}}{AIj{Hj}}}h}{{{h{Nf}}{AI`{Hj}}}h}{{{h{Nf}}{Ff{{AIl{Hj}}{AIl{Hj}}}}}h}{{{h{Nf}}{AIf{Hj}}}h}{{{h{Nf}}AId}h}{{{h{Nf}}{AIb{Hj}}}h}{{{h{Nf}}Hj}h}{{{h{BMd}}}Hj}{{{h{BLn}}}Hj}{ce{}{}}0000000{Od{{ADl{A`}}}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}00222{OdCn}{{{h{Od}}}Ef}{{{h{Nf}}}Ef}{{{h{BD`}}}Ef}{{{h{Od}}}Hj}{{{h{Nf}}}Hj}{{{h{BD`}}}Hj}{{}Od}{{}BD`}{{{h{AhOf}}}Dj}{{{h{AhAJ`}}}{{Dj{{E`{ADhBM`}}}}}}{{{h{AhAIn}}}Dj}2{{{h{AhOf}}Hj}Dj}{{{h{AhAIn}}Hj}Dj}1{{{h{ADh}}}{{Dj{A@d}}}}{{{h{Nf}}{h{Nf}}}{{Dj{Bj}}}}{{{h{BD`}}{h{BD`}}}{{Dj{Bj}}}}{{{h{AhBD`}}}{{Dj{A`}}}}{{{h{AhBD`}}A`}{{E`{BhBLn}}}}{{{h{ADh}}}{{Dj{{h{Nf}}}}}}{{OdA@`}Od}{{Od{h{AAj}}}Od}{{OdOj}Od}{{OdA@d}Od}{{OdOl}Od}{{Odc}Od{{AD`{Nf}}}}{OdOd}{{Od{h{Jb}}}Od}{{{h{{Ad{A`}}}}}Ef}{{{h{{Ad{A`}}}}}{{E`{A@`BM`}}}}0{{{h{AhBD`}}Hj}A`}{{{h{AhBD`}}Hj}Bh}{{{h{ADh}}}{{Dj{A@`}}}}{{{h{Of}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{AJ`}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{AIn}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{BLn}}}{{Dj{{h{AOf}}}}}}{{{h{BM`}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}000{{{h{Nf}}}}111{{{h{c}}}If{}}00{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}00:{c{{E`{e}}}{}{}}0000{{{h{{Ad{A`}}}}}{{E`{{h{Nf}}}}}}{{{h{Ah{Ad{A`}}}}}{{E`{{h{AhNf}}}}}}2{{{ADl{A`}}}{{E`{BD`}}}}3333333333{{{h{c}}}Ij{}}00000000{ce{}{}}0000000{HjBD`}``{{{h{Ah{Ab{A`}}}}A@`}Hj}``````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{AJj}}}AJj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{AJj}}{h{AJj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AJj}}{h{AhEn}}}{{E`{BhF`}}}}0{ANnAJj}{cc{}};{{{h{AJj}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}`````````````````````````>>>==={{{h{BMf}}}BMf}{{{h{BMh}}}BMh}{{{h{AO`}}}AO`}>>>{{{h{BMf}}{h{BMf}}}Ef}{{{h{BMh}}{h{BMh}}}Ef}{{{h{AO`}}{h{AO`}}}Ef}??????{{{h{BMf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BMh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AO`}}{h{AhEn}}}{{E`{BhF`}}}}0?{ANnBMf}{BMjBMf}{AO`BMf}{cc{}}{ANnBMh}{AO`BMh}2???{{{h{AO`}}}A`}{{{h{BMf}}}{{Dj{{h{AOf}}}}}}{{{h{BMh}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00{ce{}{}}00`````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{BMl}}}BMl}{{{h{AMd}}}AMd}{{{h{AMf}}}AMf}{{{h{BMn}}}BMn}{{{h{BN`}}}BN`}{{{h{BNb}}}BNb}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{BN`}}{h{BN`}}}Bj}{{{h{Ahc}}}{{E`{BN`AC`}}}{ACbACd}}{{{h{BN`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{c{{E`{BN`}}}Eb}{{A@bInD`}{{Dj{Il}}}}{{{h{BMl}}{h{BMl}}}Ef}{{{h{AMd}}{h{AMd}}}Ef}{{{h{AMf}}{h{AMf}}}Ef}{{{h{BMn}}{h{BMn}}}Ef}{{{h{BN`}}{h{BN`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000{{{h{BMl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AMd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AMf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BMn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BN`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BNb}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{ANnBMl}1{BMnAMd}{BMnAMf}3333{{Hj{h{{Ad{Hj}}}}}BNb}{HjBNb}0{{{h{BN`}}{h{Ahc}}}BhGf}``{ce{}{}}00000{{{h{BN`}}}Ef}``{{Hjc}BNbEl}{BBbBN`}`{{{h{BN`}}{h{BN`}}}{{Dj{Bj}}}}{{ce}In{{El{}{{Ej{BNb}}}}}{{El{}{{Ej{Hj}}}}}}{{{h{{Ad{BNb}}}}{h{{Ad{Hj}}}}}In}````{{{h{BN`}}c}E`Hn}{{{h{BMl}}}{{Dj{{h{AOf}}}}}}{{{h{AMd}}}{{Dj{{h{AOf}}}}}}{{{h{AMf}}}{{Dj{{h{AOf}}}}}}{{{h{BMn}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00000{{{h{c}}}If{}}0000{c{{E`{e}}}{}{}}00000000000`{{{h{c}}}Ij{}}00000```??????{{{h{BNb}}}In}`````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{cc{}}{ce{}{}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}1{{{h{AhAJh}}}Dj}{{{h{AJh}}}{{Ff{Hj{Dj{Hj}}}}}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}::94```````````````{{{h{Nh}}}{{h{Nh}}}}````8877{{{h{Nh}}}Nh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Ahc}}}{{E`{BNdAC`}}}{ACbACd}}0{{{h{BNf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{Ad{A`}}}}}{{E`{cAC`}}}BNd}{{{h{{Ad{A`}}}}}{{E`{{Ff{cHj}}AC`}}}BNd}{{{h{Nh}}}Ed}{{{h{AhBNh}}Ef}{{E`{BhACf}}}}{{{h{AhBNh}}BB`}{{E`{BhACf}}}}{{{h{AhBNh}}BBb}{{E`{BhACf}}}}{{{h{AhBNh}}A@`}{{E`{BhACf}}}}{{{h{AhBNh}}BBd}{{E`{BhACf}}}}{{{h{AhBNh}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhBNh}}AEl}{{E`{BhACf}}}}{{{h{AhBNh}}Dh}{{E`{BhACf}}}}{{{h{AhBNh}}Ed}{{E`{BhACf}}}}{{{h{AhBNh}}A`}{{E`{BhACf}}}}`{{{h{Nh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{BNj{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}0{Db{{h{Nh}}}}{{{h{Db}}}{{h{Nh}}}}{DbNh}{{{h{Db}}}Nh}{cc{}}0{ANn{{BNj{c}}}{}}{ce{}{}}0{{{BNj{c}}}eBNlBDj}```5`````{{{h{AhBNn}}}{{E`{EfAC`}}}}{{{h{AhBNn}}}{{E`{BB`AC`}}}}{{{h{AhBNn}}}{{E`{BBbAC`}}}}{{{h{AhBNn}}}{{E`{A@`AC`}}}}{{{h{AhBNn}}}{{E`{BBdAC`}}}}{{{h{AhBNn}}{h{Ah{Ad{A`}}}}}{{E`{BhAC`}}}}{{{h{AhBNn}}}{{E`{AElAC`}}}}{{{h{AhBNn}}}{{E`{DhAC`}}}}{{{h{AhBNn}}}{{E`{EdAC`}}}}{{{h{AhBNn}}}{{E`{A`AC`}}}}``{{{h{c}}}{{ADl{A`}}}{BNfACd}}{{{h{{BNj{c}}}}}{{Dj{{h{AOf}}}}}Fb}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0{ce{}{}}0`````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{BO`}}}{{Ab{A`}}}}{{{h{BO`}}}BO`}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Ahc}}}{{E`{BNdAC`}}}{ACbACd}}0{{{h{Ahc}}}{{E`{BO`AC`}}}{ACbACd}}{{{h{BNf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BO`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BO`}}}{{h{{Ad{A`}}}}}}{{{h{{Ad{A`}}}}}{{E`{cAC`}}}BNd}{{{h{G`}}}{{E`{cBOb}}}BNd}{{{h{{Ad{A`}}}}}{{E`{{Ff{cHj}}AC`}}}BNd}{{{h{AhBNh}}Ef}{{E`{BhACf}}}}{{{h{AhBNh}}BB`}{{E`{BhACf}}}}{{{h{AhBNh}}BBb}{{E`{BhACf}}}}{{{h{AhBNh}}A@`}{{E`{BhACf}}}}{{{h{AhBNh}}BBd}{{E`{BhACf}}}}{{{h{AhBNh}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhBNh}}AEl}{{E`{BhACf}}}}{{{h{AhBNh}}Dh}{{E`{BhACf}}}}{{{h{AhBNh}}Ed}{{E`{BhACf}}}}{{{h{AhBNh}}A`}{{E`{BhACf}}}}{{{h{BO`}}{h{BO`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AC`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BOb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BO`}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{ANnAC`}{ACfAC`}{BOdBOb}33{ce{}{}}00{BO`{{ADl{A`}}}}{{{ADl{A`}}}BO`}{{{h{AhBNn}}}{{E`{EfAC`}}}}{{{h{AhBNn}}}{{E`{BB`AC`}}}}{{{h{AhBNn}}}{{E`{BBbAC`}}}}{{{h{AhBNn}}}{{E`{A@`AC`}}}}{{{h{AhBNn}}}{{E`{BBdAC`}}}}{{{h{AhBNn}}{h{Ah{Ad{A`}}}}}{{E`{BhAC`}}}}{{{h{AhBNn}}}{{E`{AElAC`}}}}{{{h{AhBNn}}}{{E`{DhAC`}}}}{{{h{AhBNn}}}{{E`{EdAC`}}}}{{{h{AhBNn}}}{{E`{A`AC`}}}}{{{h{c}}}{{ADl{A`}}}{BNfACd}}{{{h{c}}}If{BNfACd}}{{{h{AC`}}}{{Dj{{h{AOf}}}}}}{{{h{BOb}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00{ce{}{}}00````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{}{{BOf{c}}}BOh}{c{{E`{e}}}EbBNd}{{{h{AhBOj}}{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhF`}}}AEb}{{{h{AhBOj}}{h{Ahc}}}{{E`{BhF`}}}AEb}{cc{}}0{{{h{G`}}}{{E`{ce}}}{}{}}{{{h{G`}}}E`}`99{BNlcBDj}{{{h{c}}e}E`BNfHn}====<<;;```````::::::999999{{{h{BOl}}}BOl}{{{h{BOn}}}BOn}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{Ah{C@`{c}}}}{h{Ahe}}{h{{Ad{A`}}}}}{{E`{BhF`}}}BOhAEb}{{{h{BOl}}{h{BOl}}}Ef}{{{h{BOn}}{h{BOn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{Ah{C@`{c}}}}{h{Ahe}}}{{E`{BhF`}}}BOhAEb}{{{h{BOl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BOn}}{h{AhEn}}}{{E`{BhF`}}}}>>{{{BOf{c}}}{{C@`{c}}}BOh}????{ce{}{}}00000{BOlcBDj}{BOncBDj}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}3{{{h{AhC@b}}}Dj}{{{h{c}}}e{}{}}0{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}00000000000{{{h{c}}}Ij{}}00000888888```````{{{h{AhC@d}}}{{h{Ah{Ad{A`}}}}}}{{{h{C@d}}}{{h{Nf}}}}{{{h{C@d}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}100{{{h{Ahc}}}{{h{Ahe}}}{}{}}400{{{h{AKb}}}AKb}{{{h{C@d}}}C@d}{{{h{C@f}}}C@f}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{C@d}}}h}{{{h{AhC@d}}}{{h{Ah}}}}{c{{E`{AKb}}}Eb}{{{h{AKb}}{h{AKb}}}Ef}{{{h{C@d}}{h{C@d}}}Ef}{{{h{C@f}}{h{C@f}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{AKb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@d}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{C@f}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{AFlC@f}{AHdC@f}{ANnC@f}{JjC@f}4{{{h{{Ad{A`}}}}}{{E`{AKbC@f}}}}{{{h{G`}}}{{E`{AKb}}}}{{{h{AKb}}{h{Ahc}}}BhGf}{{{h{C@d}}{h{Ahc}}}BhGf}{ce{}{}}00{{{h{C@d}}}}{{{h{C@d}}}{{C@h{A`}}}}{{{h{AKb}}c}E`Hn}{{{h{AKb}}}C@d}{{{h{AKb}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}{C@jAKb}``{{{h{C@f}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}00{AKb{{ADl{A`}}}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00<<<{{{h{C@d}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}`````````{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{AFn}}}AFn}{{{h{AHn}}}AHn}{{{h{C@l}}}C@l}{{{h{C@n}}}C@n}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{AFn}}{h{AFn}}}Ef}{{{h{AHn}}{h{AHn}}}Ef}{{{h{C@l}}{h{C@l}}}Ef}{{{h{C@n}}{h{C@n}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{AFn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@n}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{BMjAFn}{C@lAFn}{BMjAHn}{C@nAHn}444{ce{}{}}000{{{h{AFn}}}{{Dj{{h{AOf}}}}}}{{{h{AHn}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}000{c{{E`{e}}}{}{}}0000000{{{h{c}}}Ij{}}0006666```````````````````{{}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{h{{CAd{}{{CA`{c}}{CAb{e}}}}}}}{{h{e}}}CAf{CAhBBh}}``{{}c{}}{c{{CAd{}{{CA`{e}}{CAb{c}}}}}{CAhBBh}CAf}{c{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{h{{Ad{A`}}}}}{{E`{{CAd{}{{CA`{c}}{CAb{e}}}}Fn}}}CAf{CAhBBh}}{{{h{{Ad{A`}}}}}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}`{e{{CAd{}{{CA`{g}}{CAb{i}}}}}{{AD`{{Ad{A`}}}}}{{El{}{{Ej{c}}}}}CAf{CAhBBh}}```{{{h{Ah{CAf{}{{CAj{c}}}}}}{h{{Ad{A`}}}}}Bh{}}{{{h{{CAf{}{{CAj{c}}}}}}}c{}}{{{h{{CAf{}{{CAj{c}}}}}}}Hj{}}````````````{{{CAd{}{{CA`{c}}{CAb{e}}}}}eCAf{CAhBBh}}{{{h{{Ad{A`}}}}{h{{Ad{A`}}}}}Ef}`{{}Mj}{{{h{Mj}}}h}{{{h{Mj}}}{{h{{Ad{A`}}}}}}{{{h{Mj}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}2{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{Mj}}}Mj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Mj}}{h{Mj}}}Bj}{c{{E`{Mj}}}Eb}{{}}{{{h{Mj}}{h{Mj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{Mj}}{h{AhEn}}}{{E`{BhF`}}}}000{LfMj}{LdMj}{cc{}}{KfMj}{KnMj}{{}Mj}{{{h{Ah{Ab{A`}}}}}{{h{AhMj}}}}{{{h{{Ab{A`}}}}}{{h{Mj}}}}{ADfMj}{{{h{{Ad{A`}}}}}{{E`{MjFn}}}}0{{{h{G`}}}{{E`{Mj}}}}{{{h{Mj}}{h{Ahc}}}BhGf}{{{h{Mj}}c}h{{Gj{{Ad{A`}}}}}}{ce{}{}}{MjBDf}{{{h{Mj}}{h{Mj}}}{{Dj{Bj}}}}{{{h{Mj}}c}E`Hn}{Mj}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}8``````````````````{{{CAn{}{{CAl{c}}}}CB`{h{AhIf}}}Bh{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}c{CBbFbCBdCBf}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000`{{{h{AFl}}}AFl}{{{h{CBh}}}CBh}{{{h{BOd}}}BOd}{{{h{BIf}}}BIf}{{{h{CB`}}}CB`}{{{h{c}}{h{Ahe}}}Bh{}{}}0000{{}CB`}`{{{h{AFl}}{h{AFl}}}Ef}{{{h{CBh}}{h{CBh}}}Ef}{{{h{BOd}}{h{BOd}}}Ef}{{{h{BIf}}{h{BIf}}}Ef}{{{h{CB`}}{h{CB`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000`{{{h{AFl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CBh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BOd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BIf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CB`}}{h{AhEn}}}{{E`{BhF`}}}}`{cc{}}0{CBhAFl}1{BOdAFl}22{CBhBIf}{CBjBIf}44{{{h{G`}}}{{E`{{CAh{}{{Gb{c}}}}c}}}{FbCBb}}{c{{CBl{c}}}{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{CB`}}{h{Ahc}}}BhGf}{{{CAn{}{{CAl{c}}}}}Hj{CBbFbCBdCBf}}`{ce{}{}}000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}011{{{h{CBh}}}A`}{{{h{{CBn{c}}}}}Hj{{CC`{}{{Ej{A`}}}}Gn}}{{{h{BOd}}}Hj}{{{h{G`}}}{{E`{{CBl{CCb}}BOd}}}}{c{{CBn{c}}}{{Gn{}{{Ej{A`}}}}}}{{{h{Ah{CBl{c}}}}}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{Ah{CBn{c}}}}}{{Dj{BBj}}}{{Gn{}{{Ej{A`}}}}}}{{{h{Ah{CBl{c}}}}}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}CCd}}{{{h{Ah{CBn{c}}}}}{{Dj{BBj}}}{{CCd{}{{Ej{A`}}}}Gn}}{{{h{Ah{CBl{c}}}}Hj}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{Ah{CBl{c}}}}Hj}Dj{{Gn{}{{Ej{{Ab{A`}}}}}}CCd}}``{{{h{Ah{CBl{c}}}}{h{Ah{Ad{A`}}}}}{{E`{HjBBn}}}{{Gn{}{{Ej{{Ab{A`}}}}}}CCf}}{{{h{{CBl{c}}}}}{{Ff{Hj{Dj{Hj}}}}}{{Gn{}{{Ej{{Ab{A`}}}}}}}}{{{h{{CBn{c}}}}}{{Ff{Hj{Dj{Hj}}}}}{{Gn{}{{Ej{A`}}}}}}{{{h{AFl}}}{{Dj{{h{AOf}}}}}}{{{h{CBh}}}{{Dj{{h{AOf}}}}}}{{{h{BOd}}}{{Dj{{h{AOf}}}}}}{{{h{BIf}}}{{Dj{{h{AOf}}}}}}`{{{CAn{}{{CAl{c}}}}CB`}If{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}If{CBbFbCBdCBf}}{{{h{c}}}e{}{}}0000{{{h{c}}}If{}}0002{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{c{{E`{e}}}{}{}}0000000000000{{{h{c}}}Ij{}}000000{ce{}{}}000000``{{{h{CCh}}}{{h{G`}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{AhCCh}}}Bh}{{}CCh}{cc{}}6{{{h{CCh}}}Ef}2{{{h{AhCCh}}A`CB`}Bh}{{{h{AhCCh}}cCB`}BhEl}{{{h{AhCCh}}{h{{Ad{A`}}}}CB`}{{h{{Ad{A`}}}}}}{{{h{CCh}}}Hj}==<;````{{{CAn{}{{CAl{c}}}}CB`{h{AhIf}}}Bh{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}c{CBbFbCBdCBf}};;::{{{h{CCj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{CCl}}{h{AhEn}}}{{E`{BhF`}}}}000`99{{{CAn{}{{CAl{c}}}}}Hj{CBbFbCBdCBf}}`{ce{}{}}0{{{CAn{}{{CAl{c}}}}CB`}If{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}If{CBbFbCBdCBf}}{{{h{c}}}If{}}01{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}055`````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{CBj}}}CBj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{CBj}}{h{CBj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0`{{{h{CBj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}=`{{{h{CBj}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}<;;:?````````{{{h{G`}}}{{E`{{CAh{}{{Gb{c}}}}c}}}{FbCBb}}````{{{CAn{}{{CAl{c}}}}CB`{h{AhIf}}}Bh{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}c{CBbFbCBdCBf}}2{{{CAn{}{{CAl{c}}}}}Hj{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}CB`}If{CBbFbCBdCBf}}{{{CAn{}{{CAl{c}}}}}If{CBbFbCBdCBf}}0```?>8`{ce{}{}}`{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}2``{{}ALn}{{{h{ALn}}}h}{{{h{ALn}}}{{h{{Ab{A`}}}}}}{{{h{ALn}}}{{h{{Ad{A`}}}}}}0{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{ALn}}}ALn}{{{h{CCn}}}CCn}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{ALn}}{h{ALn}}}Bj}{{}CCn}{c{{E`{ALn}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{ALn}}{h{ALn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCCn}}}{{E`{BhBBn}}}}{{{h{AhCCn}}}{{E`{BhACf}}}}{{{h{ALn}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}ALn}{{{h{Ah{Ab{A`}}}}}{{h{AhALn}}}}{{{h{{Ab{A`}}}}}{{h{ALn}}}}{CCnALn}{{{h{{Ad{A`}}}}}{{E`{ALnFn}}}}0{{{h{G`}}}{{E`{ALn}}}}{{{h{ALn}}{h{Ahc}}}BhGf}{{{h{ALn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCCn}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{ALnBDf}{{{h{CCn}}}{{Ab{A`}}}}{{{h{CCn}}}Hj}{{{h{ALn}}{h{ALn}}}{{Dj{Bj}}}}{{{h{ALn}}c}E`Hn}{ALn}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0::{{{h{AhCCn}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCCn}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}````````````````{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ai}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}IdId{{El{}{{Ej{{Ff{AeAg}}}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ae}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}El}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{CBbACd}}`{c{{E`{BAj}}}Eb}{{{Eb{}{{Gb{c}}}}e}{{E`{c}}}BDjCF`}0000{{{Eb{}{{Gb{c}}}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}{{E`{c}}}BDjCF`}1111111111{{{Eb{}{{Gb{c}}}}{h{G`}}e}{{E`{c}}}BDjCF`}22221{{{Eb{}{{Gb{c}}}}Hje}{{E`{c}}}BDjCF`}{{{Eb{}{{Gb{c}}}}{h{G`}}Hje}{{E`{c}}}BDjCF`}4444442`{{{h{{Eb{}{{Gb{c}}}}}}}EfBDj}{{{h{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}}}Ef{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}`{{{h{Id}}c}E`Hn}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ef}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{{Ad{A`}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBj}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ADb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BB`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A@`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{oe}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{ge}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{Aae}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{Ace}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Hj}{{E`{ie}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{ke}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{me}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ACn}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}AEl}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Dh}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ed}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}=:{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}``````````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{h{CFf}}}CFf}{{{h{CFh}}}CFh}{{{h{c}}{h{Ahe}}}Bh{}{}}0{cBDjCBb}{{}CFf}{{{h{AOf}}}{{h{G`}}}}{{{CFl{}{{CFj{c}}}}e}{{E`{c}}}{}Eb}{c{{E`{BAj}}}Eb}{c{{E`{CFf}}}Eb}{{{Eb{}{{Gb{c}}}}e}{{E`{c}}}BDjCF`}0000{{{Eb{}{{Gb{c}}}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}{{E`{c}}}BDjCF`}1111111111{{{Eb{}{{Gb{c}}}}{h{G`}}e}{{E`{c}}}BDjCF`}22221{{{Eb{}{{Gb{c}}}}Hje}{{E`{c}}}BDjCF`}{{{Eb{}{{Gb{c}}}}{h{G`}}Hje}{{E`{c}}}BDjCF`}4444442{{{h{G`}}}BDj}{{{h{CFf}}{h{CFf}}}Ef}{{{h{CFh}}{h{CFh}}}Ef}{{{h{{CF`{}{{CFj{c}}}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{CFf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{CFn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{c}}{h{AhEn}}}{{E`{BhF`}}}{}}2{{{h{CFh}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ce{}{}}0{{{BDl{}{{CG`{c}}}}}c{{Eb{}{{Gb{e}}}}}BDj}{{Hj{h{CFn}}}BDj}{{CFh{h{CFn}}}BDj}0{{{h{{Eb{}{{Gb{c}}}}}}}EfBDj}={{{CGb{}{{Gb{c}}}}}{{E`{ec}}}BDjBAj}{{{CGb{}{{Gb{c}}}}e}{{E`{c}}}BDjCFl}{{{h{Ah{CGd{}{{Gb{c}}}}}}}{{E`{{Dj{e}}c}}}BDjBAj}{{{h{Ah{CGd{}{{Gb{c}}}}}}e}{{E`{Djc}}}BDjCFl}{{{h{Ah{CGf{}{{Gb{c}}}}}}}{{E`{{Dj{{Ff{eg}}}}c}}}BDjBAjBAj}{{{h{Ah{CGf{}{{Gb{c}}}}}}eg}{{E`{{Dj{Ff}}c}}}BDjCFlCFl}{{{h{Ah{CGf{}{{Gb{c}}}}}}}{{E`{{Dj{e}}c}}}BDjBAj}{{{h{Ah{CGf{}{{Gb{c}}}}}}e}{{E`{Djc}}}BDjCFl}{{{h{Ah{CGf{}{{Gb{c}}}}}}}{{E`{ec}}}BDjBAj}{{{h{Ah{CGf{}{{Gb{c}}}}}}e}{{E`{c}}}BDjCFl}{{{h{AOf}}{h{AhCGh}}}Bh}{{{h{{CGd{}{{Gb{c}}}}}}}{{Dj{Hj}}}BDj}{{{h{{CGf{}{{Gb{c}}}}}}}{{Dj{Hj}}}BDj}{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{CGb{}{{Gb{c}}}}{h{{Ad{{h{G`}}}}}}e}{{E`{c}}}BDjCF`}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{CGb{}{{Gb{c}}}}Hje}{{E`{c}}}BDjCF`}{{{h{c}}}Ij{}}0{{{CGb{}{{Gb{c}}}}}{{E`{Bhc}}}BDj}{{{h{G`}}{h{{Ad{{h{G`}}}}}}}BDj}0`{{{CGl{}{{Gb{c}}{CGj{e}}}}}{{E`{{Ff{ge}}c}}}BDj{{CGb{}{{Gb{c}}}}}BAj}{{{CGl{}{{Gb{c}}{CGj{e}}}}g}{{E`{{Ff{e}}c}}}BDj{{CGb{}{{Gb{c}}}}}CFl}{{{CF`{}{{CFj{c}}}}Ef}{{E`{ce}}}{}BDj}{{CFfEf}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}{h{{Ad{A`}}}}}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}{h{G`}}}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}{ADl{A`}}}{{E`{ce}}}{}BDj}2{{CFf{h{{Ad{A`}}}}}{{E`{c}}}BDj}{{{CF`{}{{CFj{c}}}}BBj}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}CGl}{{CFfc}E`CGl}{{{CF`{}{{CFj{c}}}}CFb}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}ADb}{{E`{ce}}}{}BDj}{{CFfADb}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}CFd}{{E`{ce}}}{}BDj}{{CFfCFd}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}BB`}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}BBb}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}A@`}{{E`{ce}}}{}BDj}{{CFfA@`}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}BBd}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}CGf}{{CFfc}E`CGf}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}Eb}{{CFfc}E`Eb}{{{CF`{}{{CFj{c}}}}}{{E`{ce}}}{}BDj}{CFf{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}e}{{E`{c}}}{}CGd}{{CFfc}E`CGd}54{{{CF`{}{{CFj{c}}}}{h{G`}}}{{E`{ce}}}{}BDj}{{CFf{h{G`}}}{{E`{c}}}BDj}{{{CF`{}{{CFj{c}}}}If}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}ACn}{{E`{ce}}}{}BDj}{{CFfACn}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}AEl}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}Dh}{{E`{ce}}}{}BDj}{{{CF`{}{{CFj{c}}}}Ed}{{E`{ce}}}{}BDj}{{CFfEd}{{E`{c}}}{}}{{{CF`{}{{CFj{c}}}}A`}{{E`{ce}}}{}BDj}=<{ce{}{}}0`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0000000000000000000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000000000000000000000000{{{h{{CGn{c}}}}}{{CGn{c}}}{}}{{{h{{CH`{c}}}}}{{CH`{c}}}{}}{{{h{{CHb{c}}}}}{{CHb{c}}}{}}{{{h{{CHd{c}}}}}{{CHd{c}}}{}}{{{h{{BDn{c}}}}}{{BDn{c}}}{}}{{{h{{CHf{c}}}}}{{CHf{c}}}{}}{{{h{{CHh{c}}}}}{{CHh{c}}}{}}{{{h{{CHj{c}}}}}{{CHj{c}}}{}}{{{h{{CHl{ce}}}}}{{CHl{ce}}}{GnAl}{}}{{{h{CHn}}}CHn}{{{h{{CI`{c}}}}}{{CI`{c}}}{}}{{{h{{CIb{c}}}}}{{CIb{c}}}{}}{{{h{{CId{c}}}}}{{CId{c}}}{}}{{{h{{CIf{c}}}}}{{CIf{c}}}{}}{{{h{{CIh{c}}}}}{{CIh{c}}}{}}{{{h{{CIj{c}}}}}{{CIj{c}}}{}}{{{h{{CIl{c}}}}}{{CIl{c}}}{}}{{{h{{CIn{c}}}}}{{CIn{c}}}{}}{{{h{{CJ`{c}}}}}{{CJ`{c}}}{}}{{{h{{CJb{c}}}}}{{CJb{c}}}{}}{{{h{{CJd{c}}}}}{{CJd{c}}}{}}{{{h{{CJf{c}}}}}{{CJf{c}}}{}}{{{h{{CJh{c}}}}}{{CJh{c}}}{}}{{{h{{CJj{c}}}}}{{CJj{c}}}{}}{{{h{{CJl{c}}}}}{{CJl{c}}}{}}{{{h{{CJn{ce}}}}}{{CJn{ce}}}AlAl}{{{h{{CK`{c}}}}}{{CK`{c}}}Al}{{{h{{CKb{c}}}}}{{CKb{c}}}Al}{{{h{{CKd{c}}}}}{{CKd{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000000000000000000000{cCHnCBb}0{{{h{CHn}}}{{h{G`}}}}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}{h{{Ad{{h{G`}}}}}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CId{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}{h{{Ad{{h{G`}}}}}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}e}E`BDjCF`}{{{CId{c}}{h{G`}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}{h{{Ad{{h{G`}}}}}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CId{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}{h{{Ad{{h{G`}}}}}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}{h{{Ad{{h{G`}}}}}}e}E`CGlCF`}{{{CGn{c}}Hje}E`BDjCF`}{{{CH`{c}}Hje}E`BDjCF`}{{{CHb{c}}Hje}E`BDjCF`}{{{CHd{c}}Hje}E`BDjCF`}{{{BDn{c}}Hje}E`BDjCF`}{{{CHf{c}}Hje}E`BDjCF`}{{{CHh{c}}Hje}E`BDjCF`}{{{CHj{c}}Hje}E`BDjCF`}{{{CHl{ce}}Hjg}E`GnBDjCF`}{{{CI`{c}}Hje}E`BDjCF`}{{{CIb{c}}Hje}E`BDjCF`}{{{CId{c}}Hje}E`BDjCF`}{{{CIf{c}}Hje}E`BDjCF`}{{{CIh{c}}Hje}E`BDjCF`}{{{CIj{c}}Hje}E`BDjCF`}{{{CIl{c}}Hje}E`BDjCF`}{{{CIn{c}}Hje}E`BDjCF`}{{{CJ`{c}}Hje}E`BDjCF`}{{{CJb{c}}Hje}E`BDjCF`}{{{CJd{c}}Hje}E`BDjCF`}{{{CJf{c}}Hje}E`BDjCF`}{{{CJh{c}}Hje}E`BDjCF`}{{{CJj{c}}Hje}E`BDjCF`}{{{CJl{c}}Hje}E`BDjCF`}{{{CJn{gc}}Hji}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}Hje}E`CGdCF`}{{{CKb{c}}Hje}E`CGfCF`}{{{CKd{c}}Hje}E`CGlCF`}{{{CGn{c}}{h{G`}}Hje}E`BDjCF`}{{{CH`{c}}{h{G`}}Hje}E`BDjCF`}{{{CHb{c}}{h{G`}}Hje}E`BDjCF`}{{{CHd{c}}{h{G`}}Hje}E`BDjCF`}{{{BDn{c}}{h{G`}}Hje}E`BDjCF`}{{{CHf{c}}{h{G`}}Hje}E`BDjCF`}{{{CHh{c}}{h{G`}}Hje}E`BDjCF`}{{{CHj{c}}{h{G`}}Hje}E`BDjCF`}{{{CHl{ce}}{h{G`}}Hjg}E`GnBDjCF`}{{{CI`{c}}{h{G`}}Hje}E`BDjCF`}{{{CIb{c}}{h{G`}}Hje}E`BDjCF`}{{{CId{c}}{h{G`}}Hje}E`BDjCF`}{{{CIf{c}}{h{G`}}Hje}E`BDjCF`}{{{CIh{c}}{h{G`}}Hje}E`BDjCF`}{{{CIj{c}}{h{G`}}Hje}E`BDjCF`}{{{CIl{c}}{h{G`}}Hje}E`BDjCF`}{{{CIn{c}}{h{G`}}Hje}E`BDjCF`}{{{CJ`{c}}{h{G`}}Hje}E`BDjCF`}{{{CJb{c}}{h{G`}}Hje}E`BDjCF`}{{{CJd{c}}{h{G`}}Hje}E`BDjCF`}{{{CJf{c}}{h{G`}}Hje}E`BDjCF`}{{{CJh{c}}{h{G`}}Hje}E`BDjCF`}{{{CJj{c}}{h{G`}}Hje}E`BDjCF`}{{{CJl{c}}{h{G`}}Hje}E`BDjCF`}{{{CJn{gc}}{h{G`}}Hji}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}Hje}E`CGdCF`}{{{CKb{c}}{h{G`}}Hje}E`CGfCF`}{{{CKd{c}}{h{G`}}Hje}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}e}E`BDjCF`}{{{CH`{c}}e}E`BDjCF`}{{{CHb{c}}e}E`BDjCF`}{{{CHd{c}}e}E`BDjCF`}{{{BDn{c}}e}E`BDjCF`}{{{CHf{c}}e}E`BDjCF`}{{{CHh{c}}e}E`BDjCF`}{{{CHj{c}}e}E`BDjCF`}{{{CHl{ce}}g}E`GnBDjCF`}{{{CI`{c}}e}E`BDjCF`}{{{CIb{c}}e}E`BDjCF`}{{{CId{c}}e}E`BDjCF`}{{{CIf{c}}e}E`BDjCF`}{{{CIh{c}}e}E`BDjCF`}{{{CIj{c}}e}E`BDjCF`}{{{CIl{c}}e}E`BDjCF`}{{{CIn{c}}e}E`BDjCF`}{{{CJ`{c}}e}E`BDjCF`}{{{CJb{c}}e}E`BDjCF`}{{{CJd{c}}e}E`BDjCF`}{{{CJf{c}}e}E`BDjCF`}{{{CJh{c}}e}E`BDjCF`}{{{CJj{c}}e}E`BDjCF`}{{{CJl{c}}e}E`BDjCF`}{{{CJn{gc}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}e}E`CGdCF`}{{{CKb{c}}e}E`CGfCF`}{{{CKd{c}}e}E`CGlCF`}{{{CGn{c}}{h{G`}}e}E`BDjCF`}{{{CH`{c}}{h{G`}}e}E`BDjCF`}{{{CHb{c}}{h{G`}}e}E`BDjCF`}{{{CHd{c}}{h{G`}}e}E`BDjCF`}{{{BDn{c}}{h{G`}}e}E`BDjCF`}{{{CHf{c}}{h{G`}}e}E`BDjCF`}{{{CHh{c}}{h{G`}}e}E`BDjCF`}{{{CHj{c}}{h{G`}}e}E`BDjCF`}{{{CHl{ce}}{h{G`}}g}E`GnBDjCF`}{{{CI`{c}}{h{G`}}e}E`BDjCF`}{{{CIb{c}}{h{G`}}e}E`BDjCF`}{{{CId{c}}{h{G`}}e}E`BDjCF`}{{{CIf{c}}{h{G`}}e}E`BDjCF`}{{{CIh{c}}{h{G`}}e}E`BDjCF`}{{{CIj{c}}{h{G`}}e}E`BDjCF`}{{{CIl{c}}{h{G`}}e}E`BDjCF`}{{{CIn{c}}{h{G`}}e}E`BDjCF`}{{{CJ`{c}}{h{G`}}e}E`BDjCF`}{{{CJb{c}}{h{G`}}e}E`BDjCF`}{{{CJd{c}}{h{G`}}e}E`BDjCF`}{{{CJf{c}}{h{G`}}e}E`BDjCF`}{{{CJh{c}}{h{G`}}e}E`BDjCF`}{{{CJj{c}}{h{G`}}e}E`BDjCF`}{{{CJl{c}}{h{G`}}e}E`BDjCF`}{{{CJn{gc}}{h{G`}}i}E`BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CF`}{{{CK`{c}}{h{G`}}e}E`CGdCF`}{{{CKb{c}}{h{G`}}e}E`CGfCF`}{{{CKd{c}}{h{G`}}e}E`CGlCF`}{{{CHl{ce}}}{{E`{Bhe}}}GnBDj}{{{CJn{ce}}}{{E`{Bhe}}}GnBDj}{{{h{CHn}}{h{CHn}}}Ef}{{{h{{CGn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CH`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHd{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{BDn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHf{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHh{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CHl{ce}}}}{h{AhEn}}}{{E`{BhF`}}}{GnFb}{}}{{{h{CHn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{CI`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CId{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIf{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIh{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIl{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CIn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJ`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJd{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJf{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJh{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJl{c}}}}{h{AhEn}}}{{E`{BhF`}}}{}}{{{h{{CJn{ce}}}}{h{AhEn}}}{{E`{BhF`}}}Fb{}}{{{h{{CK`{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{CKb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{CKd{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{cc{}}0000000000000000000000000000{ce{}{}}0000000000000000000000000000{{}{{CGn{c}}}{}}{Dh{{CH`{c}}}{}}{{{h{G`}}}{{CHb{c}}}{}}{{{h{G`}}}{{CHd{c}}}{}}{If{{BDn{c}}}{}}{{{AEh{G`}}}{{CHf{c}}}{}}{{{h{{Ad{A`}}}}}{{CHh{c}}}{}}{{{h{{Ad{A`}}}}}{{CHj{c}}}{}}{c{{CHl{ce}}}Gn{}}{Ef{{CI`{c}}}{}}{BBd{{CIb{c}}}{}}{BB`{{CId{c}}}{}}{BBb{{CIf{c}}}{}}{A@`{{CIh{c}}}{}}{CFd{{CIj{c}}}{}}{CKf{{CIl{c}}}{}}{A`{{CIn{c}}}{}}{AEl{{CJ`{c}}}{}}{Ed{{CJb{c}}}{}}{ACn{{CJd{c}}}{}}{Hj{{CJf{c}}}{}}{CFb{{CJh{c}}}{}}{ADb{{CJj{c}}}{}}{BBj{{CJl{c}}}{}}{c{{CJn{ce}}}Gn{}}{c{{CK`{c}}}{}}{c{{CKb{c}}}{}}{c{{CKd{c}}}{}}{{{h{Ah{CHl{ce}}}}g}{{E`{Dj}}}GnBDjCFl}{{{h{Ah{CJn{gc}}}}i}{{E`{Dj}}}BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}CFl}{{{h{Ah{CHl{ce}}}}gi}{{E`{{Dj{Ff}}}}}GnBDjCFlCFl}2{{{h{Ah{CHl{ce}}}}g}E`GnBDjCFl}{{{h{{CHl{ce}}}}}{{Dj{Hj}}}GnBDj}0{{{h{{CJn{gc}}}}}{{Dj{Hj}}}BDj{{BDl{c}}}{{Gn{}{{Ej{e}}}}}}{{{h{c}}}e{}{}}0000000000000000000000000000{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000000000000000000000000000000000000000000000000000000000{{{h{c}}}Ij{}}0000000000000000000000000000{{{CH`{c}}e}{{E`{Ff}}}BDjCFl}{{{CHb{c}}e}{{E`{Ff}}}BDjCFl}{{{CHd{c}}e}{{E`{Ff}}}BDjCFl}{{{BDn{c}}e}{{E`{Ff}}}BDjCFl}{{{CHf{c}}e}{{E`{Ff}}}BDjCFl}{{{CKb{c}}e}{{E`{Ff}}}CGfCFl}{ce{}{}}0000000000000000000000000000```````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ai}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}IdId{{El{}{{Ej{{Ff{AeAg}}}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ae}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}El}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{CBbACd}}{cCE`CBb}{{{h{AOf}}}{{h{G`}}}}{{{AJb{AOf}}}{{E`{{AJb{c}}{AJb{AOf}}}}}AOf}00{{{h{AhAOf}}}{{Dj{{h{Ahc}}}}}AOf}00{{{h{AOf}}}{{Dj{{h{c}}}}}AOf}00{{{CEb{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEd{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEf{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEh{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEj{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEl{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CEn{}{{CD`{c}}{Gb{e}}}}}{{E`{ce}}}{}CE`}{{{CKh{ce}}}{{E`{ce}}}{}CE`}000000{cc{}}{ce{}{}}{{{h{AOf}}}Ef}00{{{h{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}}}Ef{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{AOf}}{h{AhCGh}}}Bh}{{{h{Id}}c}E`Hn}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ef}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{{Ad{A`}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBj}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEb{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEd{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CKh{ce}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}0{{{h{Ah{CEj{}{{CD`{c}}{Gb{e}}}}}}{h{g}}{h{i}}}{{E`{Bhe}}}{}CE`{IdACd}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ADb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEf{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEh{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEl{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEn{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CKh{ce}}}}{h{G`}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}808{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}CFd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BB`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBb}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A@`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}BBd}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEj{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}>{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{oe}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{Dj{Hj}}}{{E`{ge}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{Ae}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}{IdACd}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{Aae}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{Ace}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Hj}{{E`{ie}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Hj}{{E`{ke}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}Hj}{{E`{me}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}ACn}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}AEl}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Dh}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}Ed}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}A`}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}=:{{{Hn{}{{CD`{c}}{Gb{e}}{CDb{g}}{CDd{i}}{CDf{k}}{CDh{m}}{CDj{o}}{CDl{Aa}}{CDn{Ac}}}}{h{G`}}Dh{h{G`}}}{{E`{ce}}}{}CE`{{CEb{}{{CD`{c}}{Gb{e}}}}}{{CEd{}{{CD`{c}}{Gb{e}}}}}{{CEf{}{{CD`{c}}{Gb{e}}}}}{{CEh{}{{CD`{c}}{Gb{e}}}}}{{CEj{}{{CD`{c}}{Gb{e}}}}}{{CEl{}{{CD`{c}}{Gb{e}}}}}{{CEn{}{{CD`{c}}{Gb{e}}}}}}{{{h{Ah{CEj{}{{CD`{c}}{Gb{e}}}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CKh{ce}}}}{h{g}}}{{E`{Bhe}}}{}CE`{IdACd}}{{{h{Ah{CEl{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}}{{E`{Bhe}}}{}CE`}{{{h{Ah{CEn{}{{CD`{c}}{Gb{e}}}}}}{h{G`}}}{{E`{Bhe}}}{}CE`}{{{h{AOf}}}{{Dj{{h{AOf}}}}}}{{{h{AOf}}}CKj}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}```{c{{E`{CKl}}}Eb}{{{h{{Ad{A`}}}}}{{E`{CKlFn}}}}{{{h{CKl}}c}E`Hn}``{{}CKn}{{{h{CKn}}}h}{{{h{CKn}}}{{h{{Ad{A`}}}}}}{{{h{CKn}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}20{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CKn}}}CKn}{{{h{CL`}}}CL`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CKn}}{h{CKn}}}Bj}{{}CL`}{c{{E`{CKn}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{CKn}}{h{CKn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCL`}}}{{E`{BhACf}}}}{{{h{AhCL`}}}{{E`{BhBBn}}}}{{{h{CKn}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CKn}{{{h{Ah{Ab{A`}}}}}{{h{AhCKn}}}}{{{h{{Ab{A`}}}}}{{h{CKn}}}}{CL`CKn}{{{h{{Ad{A`}}}}}{{E`{CKnFn}}}}0{{{h{G`}}}{{E`{CKn}}}}{{{h{CKn}}{h{Ahc}}}BhGf}{{{h{CKn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCL`}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CL`}}}{{Ab{A`}}}}{{{h{CL`}}}Hj}{{{h{CKn}}{h{CKn}}}{{Dj{Bj}}}}{{{h{CKn}}c}E`Hn}{CKn}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099{{{h{AhCL`}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCL`}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}```{{}n}{{{h{n}}}h}{{{h{n}}}{{h{{Ab{A`}}}}}}{{{h{n}}}{{h{{Ad{A`}}}}}}{{{h{CLb}}}{{h{{Ad{A`}}}}}}1{{{h{c}}}{{h{e}}}{}{}}001{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{n}}}n}{{{h{ADf}}}ADf}{{{h{CLb}}}CLb}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{n}}{h{n}}}Bj}{{{h{CLb}}{h{CLb}}}Bj}{{{h{Ahc}}}{{E`{nAC`}}}{ACbACd}}{{{h{n}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{Ad{A`}}}}}n}{{}ADf}{{}CLb}{c{{E`{n}}}Eb}{c{{E`{CLb}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{n}}{h{n}}}Ef}{{{h{CLb}}{h{CLb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{AhADf}}}{{E`{BhBBn}}}}{{{h{AhADf}}}{{E`{BhACf}}}}{{{h{n}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{CLb}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}{L`n}{dn}22{{}n}{{{Ab{A`}}}CLb}{{{h{Ah{Ab{A`}}}}}{{h{Ahn}}}}{{{h{{Ab{A`}}}}}{{h{n}}}}{ADfn}{{{h{G`}}}{{E`{CLb}}}}{{CLbHj}ADf}{{{h{{Ad{A`}}}}}{{E`{nFn}}}}{{{h{{Ad{A`}}}}}{{E`{CLbFn}}}}10{{{h{G`}}}{{E`{n}}}}4{{{h{n}}{h{Ahc}}}BhGf}{{{h{CLb}}{h{Ahc}}}BhGf}{{{h{n}}}Mh}{{{h{{Ad{A`}}}}}CLb}{{{h{n}}c}h{{Gj{{Ad{A`}}}}}}{{{h{CLb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhADf}}{h{{Ad{A`}}}}}Bh}{ce{}{}}00{nBDf}{{{h{ADf}}}CLb}{{{h{ADf}}}Hj}{{{h{n}}{h{n}}}{{Dj{Bj}}}}{{{h{CLb}}{h{CLb}}}{{Dj{Bj}}}}{{{h{n}}c}E`Hn}{{{h{CLb}}c}E`Hn}{n}{CLb{{Ab{A`}}}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00==={{{h{AhADf}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhADf}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}`{{}Mh}{{{h{Mh}}}h}{{{h{Mh}}}{{h{{Ab{A`}}}}}}{{{h{Mh}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}1{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{Mh}}}Mh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Mh}}{h{Mh}}}Bj}{{{h{Ahc}}}{{E`{MhAC`}}}{ACbACd}}{{{h{Mh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{c{{E`{Mh}}}Eb}{{}}{{{h{Mh}}{h{Mh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{Mh}}{h{AhEn}}}{{E`{BhF`}}}}000{ChMh}{ALlMh}{cc{}}{LbMh}{LjMh}{KbMh}{LhMh}{CjMh}{KlMh}{KhMh}{KjMh}{KdMh}{{}Mh}{{{h{Ah{Ab{A`}}}}}{{h{AhMh}}}}{{{h{{Ab{A`}}}}}{{h{Mh}}}}{ADfMh}{{{h{{Ad{A`}}}}}{{E`{MhFn}}}}0{{{h{G`}}}{{E`{Mh}}}}{{{h{Mh}}{h{Ahc}}}BhGf}{{{h{Mh}}c}h{{Gj{{Ad{A`}}}}}}{ce{}{}}{{{h{Mh}}{h{Mh}}}{{Dj{Bj}}}}{{{h{Mh}}c}E`Hn}{Mh}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7``{{}{{Mn{c}}}CLd}{{{h{{Mn{c}}}}}hCLd}{{{h{{Mn{c}}}}}{{h{{Ab{A`}}}}}CLd}{{{h{{Mn{c}}}}}{{h{{Ad{A`}}}}}CLd}{{{h{c}}}{{h{e}}}{}{}}1{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{Mn{c}}}}}{{Mn{c}}}CLd}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{{Mn{c}}}}{h{{Mn{c}}}}}BjCLd}8{c{{E`{{Mn{e}}}}}EbCLd}{{}ADf}{{}}{{{h{{Mn{c}}}}{h{{Mn{c}}}}}EfCLd}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{{Mn{c}}}}{h{AhEn}}}{{E`{BhF`}}}CLd}000{M`{{Mn{Nb}}}}{cc{}}{Ln{{Mn{N`}}}}{Mb{{Mn{Nd}}}}{Ll{{Mn{Ml}}}}{{}{{Mn{c}}}CLd}{{{h{Ah{Ab{A`}}}}}{{h{Ah{Mn{c}}}}}CLd}{{{h{{Ab{A`}}}}}{{h{{Mn{c}}}}}CLd}{ADf{{Mn{c}}}CLd}{{{h{{Ad{A`}}}}}{{E`{{Mn{c}}Fn}}}CLd}0{{{h{G`}}}{{E`{{Mn{c}}}}}CLd}{{{h{{Mn{c}}}}{h{Ahe}}}BhCLdGf}{{{h{{Mn{c}}}}e}hCLd{{Gj{{Ad{A`}}}}}}{ce{}{}}{{{h{{Mn{c}}}}{h{{Mn{c}}}}}{{Dj{Bj}}}CLd}{{{h{{Mn{c}}}}e}E`CLdHn}{{{Mn{c}}}{}CLd}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7``{{}CLf}{{{h{CLf}}}h}{{{h{CLf}}}{{h{{Ad{A`}}}}}}{{{h{CLf}}}{{h{{Ab{A`}}}}}}1{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CLf}}}CLf}{{{h{CLh}}}CLh}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CLf}}{h{CLf}}}Bj}{{}CLh}{c{{E`{CLf}}}Eb}{{}}{{{h{CLf}}{h{CLf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{CLf}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CLf}{{{h{Ah{Ab{A`}}}}}{{h{AhCLf}}}}{{{h{{Ab{A`}}}}}{{h{CLf}}}}{CLhCLf}{{{h{{Ad{A`}}}}}{{E`{CLfFn}}}}0{{{h{G`}}}{{E`{CLf}}}}{{{h{CLf}}{h{Ahc}}}BhGf}{{{h{CLf}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCLh}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CLh}}}{{Ab{A`}}}}{{{h{CLh}}}Hj}{{{h{CLf}}{h{CLf}}}{{Dj{Bj}}}}{{{h{CLf}}c}E`Hn}{CLf}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099``{{}CLj}{{{h{CLj}}}h}{{{h{CLj}}}{{h{{Ab{A`}}}}}}{{{h{CLj}}}{{h{{Ad{A`}}}}}}0{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CLj}}}CLj}{{{h{CLl}}}CLl}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CLj}}{h{CLj}}}Bj}{{}CLl}{c{{E`{CLj}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{CLj}}{h{CLj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCLl}}}{{E`{BhACf}}}}{{{h{AhCLl}}}{{E`{BhBBn}}}}{{{h{CLj}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CLj}{{{h{Ah{Ab{A`}}}}}{{h{AhCLj}}}}{{{h{{Ab{A`}}}}}{{h{CLj}}}}{CLlCLj}{{{h{{Ad{A`}}}}}{{E`{CLjFn}}}}0{{{h{G`}}}{{E`{CLj}}}}{{{h{CLj}}{h{Ahc}}}BhGf}{{{h{CLj}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCLl}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CLl}}}{{Ab{A`}}}}{{{h{CLl}}}Hj}{{{h{CLj}}{h{CLj}}}{{Dj{Bj}}}}{{{h{CLj}}c}E`Hn}{CLj}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099{{{h{AhCLl}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCLl}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}``{{}CLn}{{{h{CLn}}}h}{{{h{CLn}}}{{h{{Ad{A`}}}}}}{{{h{CLn}}}{{h{{Ab{A`}}}}}}1{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{CLn}}}CLn}{{{h{CM`}}}CM`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{CLn}}{h{CLn}}}Bj}{{}CM`}{c{{E`{CLn}}}Eb}{{}}{{{h{CLn}}{h{CLn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{CLn}}{h{AhEn}}}{{E`{BhF`}}}}000{cc{}}0{{}CLn}{{{h{Ah{Ab{A`}}}}}{{h{AhCLn}}}}{{{h{{Ab{A`}}}}}{{h{CLn}}}}{CM`CLn}{{{h{{Ad{A`}}}}}{{E`{CLnFn}}}}0{{{h{G`}}}{{E`{CLn}}}}{{{h{CLn}}{h{Ahc}}}BhGf}{{{h{CLn}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCM`}}{h{{Ad{A`}}}}}Bh}{ce{}{}}0{{{h{CM`}}}{{Ab{A`}}}}{{{h{CM`}}}Hj}{{{h{CLn}}{h{CLn}}}{{Dj{Bj}}}}{{{h{CLn}}c}E`Hn}{CLn}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}099```{{}CMb}{{{h{CMb}}}h}{{{h{CMb}}}{{h{{Ab{A`}}}}}}{{{h{CMb}}}{{h{{Ad{A`}}}}}}{{{h{CMb}}}Ed}{{{h{c}}}{{h{e}}}{}{}}200{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{CMb}}}CMb}{{{h{CMd}}}CMd}{{{h{CMf}}}CMf}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{CMb}}{h{CMb}}}Bj}{{}CMf}{c{{E`{CMb}}}Eb}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}}{{{h{CMb}}{h{CMb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhCMf}}}{{E`{BhBBn}}}}{{{h{AhCMf}}}{{E`{BhACf}}}}{{{h{CMb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{CMd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{CMf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{{}CMb}{{{h{Ah{Ab{A`}}}}}{{h{AhCMb}}}}{{{h{{Ab{A`}}}}}{{h{CMb}}}}{CMfCMb}{CMfEd}{{{h{{Ad{A`}}}}}{{E`{CMbFn}}}}0{{{h{G`}}}{{E`{CMb}}}}{EdCMb}{{{h{CMb}}{h{Ahc}}}BhGf}{{EdEd{h{{Ad{A`}}}}}Ed}{{EdEd{h{{Ad{A`}}}}}CMb}{{{h{CMb}}c}h{{Gj{{Ad{A`}}}}}}{{{h{AhCMf}}{h{{Ad{A`}}}}}Bh}{ce{}{}}00{{{h{CMf}}}{{Ff{EdEd}}}}{{{h{CMf}}}CMd}{{{h{CMf}}}Hj}{{}CMf}{{{h{CMb}}{h{CMb}}}{{Dj{Bj}}}}{{{h{CMb}}c}E`Hn}{CMb}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00;;;{{EdEd}CMf}{{{h{AhCMf}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhCMf}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}0000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000{{{h{ACf}}}{{Dj{{h{AOf}}}}}}{{{h{CMh}}}CMh}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{AhACb}}Hj}Bh}{{{h{Ah{CMj{c}}}}Hj}Bh{ACbACd}}{{{h{Ah{CMl{c}}}}Hj}Bh{{AD`{{Ad{A`}}}}}}{{{h{ACf}}}{{h{G`}}}}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{{h{CMh}}{h{CMh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhACb}}}{{E`{{h{{Ad{A`}}}}ACf}}}}{{{h{Ah{CMj{c}}}}}{{E`{{h{{Ad{A`}}}}ACf}}}{ACbACd}}{{{h{Ah{CMl{c}}}}}{{E`{{h{{Ad{A`}}}}ACf}}}{{AD`{{Ad{A`}}}}}}{{{h{AhACh}}}{{E`{BhACf}}}}{{{h{AhCMn}}}{{E`{BhACf}}}}{{{h{AhCMn}}}{{E`{BhBBn}}}}{{{h{ACf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CMh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{CMhACf}{BBnACf}2{ANnCMh}3{{{h{ACf}}}{{Dj{{h{AOf}}}}}}{{{h{CMh}}{h{Ahc}}}BhGf}`{ce{}{}}0000{{{CMl{c}}}c{{AD`{{Ad{A`}}}}}}{{{h{ACf}}}CMh}{c{{CMl{c}}}{{AD`{{Ad{A`}}}}}}{{CMhc}ACf{{AHb{{AJb{AOf}}}}}}{{{h{{CMl{c}}}}}Ed{{AD`{{Ad{A`}}}}}}{{{h{AhAKh}}{h{Ah{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{Ah{CMj{c}}}}{h{Ah{Ad{A`}}}}}{{E`{HjACf}}}{AKhACd}}{{{h{Ah{CMl{c}}}}{h{Ah{Ad{A`}}}}}{{E`{HjACf}}}{{AD`{{Ad{A`}}}}}}{{{h{Ahc}}}{{E`{EfAC`}}}{}}0{{{h{AhAKh}}{h{Ah{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{Ahc}}}{{E`{BB`AC`}}}{}}0{{{h{Ahc}}}{{E`{BBbAC`}}}{}}0{{{h{Ahc}}}{{E`{A@`AC`}}}{}}0{{{h{Ahc}}}{{E`{BBdAC`}}}{}}0{{{h{Ahc}}{h{Ah{Ad{A`}}}}}{{E`{BhAC`}}}{}}0{{{h{Ah{CMj{c}}}}{h{Ah{ADl{A`}}}}}{{E`{HjACf}}}{AKhACd}}{{{h{AhAKh}}{h{Ah{ADl{A`}}}}Ed}{{E`{HjACf}}}}{{{h{Ahc}}}{{E`{AElAC`}}}{}}0{{{h{Ahc}}}{{E`{DhAC`}}}{}}0{{{h{Ahc}}}{{E`{EdAC`}}}{}}0{{{h{Ahc}}}{{E`{A`AC`}}}{}}0{{}CMn}{{{h{ACf}}}{{Dj{{h{AOf}}}}}}{{{h{AhAKh}}Ed}{{CMj{AKh}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000000000{{{h{c}}}Ij{}}0000{ce{}{}}0000{{{h{AhACh}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{HjACf}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}}{{{h{AhACh}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{BhACf}}}}{{{h{AhCMn}}{h{{Ad{A`}}}}}{{E`{BhBBn}}}}```````````````````````````````````````{{AG`{h{{Jd{c}}}}{h{Jf}}}{{E`{AG`Jj}}}Jl}{{{h{AG`}}}}{{{h{AhAG`}}}}{{{h{AhAG`}}}CN`}{{{h{AG`}}}CN`}{{JhJh}}{{{h{c}}}{{h{e}}}{}{}}000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000000000{{{h{{Jd{c}}}}}{{Jd{c}}}CNb}{{{h{AG`}}}AG`}{{{h{Jh}}}Jh}{{{h{AMb}}}AMb}{{{h{ACj}}}ACj}{{{h{CNd}}}CNd}{{{h{AH`}}}AH`}{{{h{AHj}}}AHj}{{{h{AHh}}}AHh}{{{h{CNf}}}CNf}{{{h{AGf}}}AGf}{{{h{CNh}}}CNh}{{{h{CNj}}}CNj}{{{h{c}}{h{Ahe}}}Bh{}{}}000000000000{{{h{AG`}}{h{AG`}}}Bj}{{{h{Jh}}{h{Jh}}}Bj}{{{h{AMb}}{h{AMb}}}Bj}{{{h{ACj}}{h{ACj}}}Bj}{{{h{CNd}}{h{CNd}}}Bj}4``{{{h{{Jd{c}}}}}{{CNn{CNl}}}CNb}{{{COd{}{{CO`{c}}{COb{e}}}}}e{}{}}{AG`CNd}{JbACj}1{{}{{Jd{COf}}}}{c{{E`{AG`}}}Eb}{c{{E`{Jh}}}Eb}{c{{E`{ACj}}}Eb}{c{{E`{CNd}}}Eb}{{{h{AG`}}}COh}{{{h{Ah{Jd{c}}}}}BhCNb}{{{h{{Jd{c}}}}{h{{Jd{c}}}}}EfCNb}{{{h{AG`}}{h{AG`}}}Ef}{{{h{Jh}}{h{Jh}}}Ef}{{{h{AMb}}{h{AMb}}}Ef}{{{h{ACj}}{h{ACj}}}Ef}{{{h{CNd}}{h{CNd}}}Ef}{{{h{AH`}}{h{AH`}}}Ef}{{{h{AHj}}{h{AHj}}}Ef}{{{h{AHh}}{h{AHh}}}Ef}{{{h{CNf}}{h{CNf}}}Ef}{{{h{AGf}}{h{AGf}}}Ef}{{{h{CNh}}{h{CNh}}}Ef}{{{h{CNj}}{h{CNj}}}Ef};{{{h{c}}{h{e}}}Ef{}{}}0000000000000000000000000{{{h{{Jd{c}}}}{h{AhEn}}}{{E`{BhF`}}}CNb}{{{h{AG`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Jh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AMb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ACj}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{CNd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AH`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CNf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AGf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CNh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{CNj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{CNdAG`}111{CNdACj}22{JjAH`}3{ANnAH`}{CNjAHj}{CNhAHj}{AObAHj}{JjAHj}{ANnAHj}9{AH`AHh}{ANnAHh};{ANnCNf}{BIfCNf}{JjCNf}>>>>{BBb{{E`{JhCOj}}}}={{{CNn{CNl}}}{{COn{{Jd{COl}}}}}}{{{CNn{CNl}}}{{COn{{Jd{D@`}}}}}}{{{CNn{CNl}}}{{COn{{Jd{D@b}}}}}}{{{h{{Jd{c}}}}{h{{Ad{A`}}}}}{{E`{AG`Jj}}}AGd}{{{h{{Jd{c}}}}{h{G`}}}{{E`{AG`Jj}}}AGd}{{{h{{Jd{c}}}}{h{AJl}}}AG`AGd}{{{h{G`}}}{{E`{AG`}}}}{A`{{E`{JhCOj}}}}{{}{{Jd{c}}}CNb}{{{h{{Jd{c}}}}{h{Ahe}}}{{Ff{AJlAEd}}}AGd{D@dACd}}{{{h{AG`}}{h{Ahc}}}BhGf}{{{h{Jh}}{h{Ahc}}}BhGf}{{{h{AMb}}{h{Ahc}}}BhGf}{{{h{ACj}}{h{Ahc}}}BhGf}{{{h{CNd}}{h{Ahc}}}BhGf}``{ce{}{}}000000000000{{{h{CNj}}}A`}{{{h{CNh}}}Hj}`{{}{{Jd{COf}}}}{{{h{{Jd{c}}}}{h{Ahe}}}AG`AGd{D@dACd}}{{{h{AhAG`}}}Bh}{{{h{AG`}}{h{AG`}}}{{Dj{Bj}}}}{{{h{Jh}}{h{Jh}}}{{Dj{Bj}}}}{{{h{AMb}}{h{AMb}}}{{Dj{Bj}}}}{{{h{ACj}}{h{ACj}}}{{Dj{Bj}}}}{{{h{CNd}}{h{CNd}}}{{Dj{Bj}}}}{{}Hj}000{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{c}}Jj}}}{CNbD@h}}{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{COl}}Jj}}}}{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{D@`}}Jj}}}}{{{h{Ah{Ad{D@f}}}}}{{E`{{Jd{D@b}}Jj}}}}{{{h{AG`}}}AEd}{{{h{CNd}}}{{Ff{ACjJh}}}}{{{h{Ah{Jd{c}}}}{h{Ahe}}}BhCNb{D@dACd}}{{{h{{Jd{c}}}}{h{AKl}}{h{D@j}}}{{E`{AEdJj}}}Jl}{{{h{AG`}}}{{Ab{A`}}}}{{{h{AG`}}}AJl}{{{h{Ah{Jd{c}}}}{h{{Ab{A`}}}}}BhCNb}{{{h{AG`}}c}E`Hn}{{{h{Jh}}c}E`Hn}{{{h{ACj}}c}E`Hn}{{{h{ACj}}}{{Ab{A`}}}}{{{h{CNd}}c}E`Hn}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}}C@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}Hj}C@jAGd}1{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}}D@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}{h{{Ab{A`}}}}}D@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AJl}}{h{{Ab{A`}}}}}C@jAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AG`}}}AMnAGd}0{{{h{{Jd{c}}}}{h{AKl}}{h{AG`}}{h{{Ab{A`}}}}}AMnAGd}{{{h{{Jd{c}}}}{h{AKl}}{h{AG`}}{h{Ahe}}}AMnAGd{D@dD@l}}{{}{{Jd{D@n}}}}{{{h{AH`}}}{{Dj{{h{AOf}}}}}}{{{h{AHj}}}{{Dj{{h{AOf}}}}}}{{{h{AHh}}}{{Dj{{h{AOf}}}}}}{{{h{CNf}}}{{Dj{{h{AOf}}}}}}{{{h{AGf}}}{{Dj{{h{AOf}}}}}}{{{COd{}{{CO`{c}}{COb{e}}}}{h{{Jd{g}}}}{Dj{M`}}}c{}{}Jl}{{AG`{h{{Jd{c}}}}{Dj{M`}}}CNdJl}{JhBBb}{ACjJb}{CNdAG`}{{{h{c}}}e{}{}}000000000000{{{h{c}}}If{}}0000000{JhA`}{c{{E`{e}}}{}{}}00{BBb{{E`{Jh}}}}{A`{{E`{Jh}}}}22222222222222222222222{{{h{c}}}Ij{}}000000000000{{}{{Jd{DA`}}}}{{{h{{Jd{c}}}}{h{AKl}}{h{C@j}}{h{AEd}}}{{E`{BhJj}}}Jl}{{{h{{Jd{c}}}}{h{AMn}}{h{AKl}}{h{Jb}}}{{E`{BhJj}}}Jl}{ce{}{}}000000000000{{{h{AG`}}}{{Ff{JbJh}}}}`````````````{{{h{DAb}}}{{h{{ADl{Ef}}}}}}{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{e{{Dj{c}}}{CAdBNf}{{Gn{}{{Ej{c}}}}}}{{{h{Ah{Ad{c}}}}}{{Dj{c}}}{CAdBNf}}{{{h{DAb}}}DAb}{{{h{ADn}}}ADn}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{Ahc}}}{{E`{DAbAC`}}}{ACbACd}}{{{h{DAb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAb}}{h{DAb}}}Ef}{{{h{ADn}}{h{ADn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{DAb}}{h{Ah{ADl{Cj}}}}{h{Ah{ADl{Dh}}}}}{{E`{KhADn}}}}{{{h{DAb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ADn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ANnADn}{{{h{{Ad{Cj}}}}{h{{Ad{Ef}}}}}DAb}{{{h{DAb}}}{{h{{ADl{Kh}}}}}}`{ce{}{}}0{{{h{DAb}}}Dh}{{{h{ADn}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}000`{{{h{c}}}Ij{}}066```````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{AFj}}}AFj}{{{h{DAd}}}DAd}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{AFj}}{h{AFj}}}Ef}{{{h{DAd}}{h{DAd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{AFj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DAd}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{ce{}{}}0{{{h{AFj}}}{{Dj{{h{AOf}}}}}}{{{h{DAd}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}066{c{{E`{Db}}}Eb}{{{h{Db}}c}E`Hn}``````````````````{{{h{AhDAf}}DAf}DAf}``{{{h{AhAGb}}}{{h{Ah{Ad{A`}}}}}}{{{h{AhAGb}}}{{h{Ah{Ab{A`}}}}}}{{{h{AGb}}}{{h{{Ad{A`}}}}}}{{{h{AGb}}}{{h{{Ab{A`}}}}}}{{DAfDAf}DAf}{{{h{AhDAf}}DAf}Bh}10{{{h{c}}}{{h{e}}}{}{}}004300{{{h{Ahc}}}{{h{Ahe}}}{}{}}006700{{{h{BAd}}}BAd}{{{h{DAf}}}DAf}{{{h{AGb}}}AGb}{{{h{DAh}}}DAh}{{{h{DAj}}}DAj}{{{h{c}}{h{Ahe}}}Bh{}{}}0000{{{h{DAf}}{h{DAf}}}Bj}{{{h{AGb}}{h{AGb}}}Bj}{{{h{Ahc}}}{{E`{BAdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DAfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{AGbAC`}}}{ACbACd}}{{{h{BAd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AGb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{}DAf}{{{h{BAd}}{h{BAd}}}Ef}{{{h{DAf}}{h{DAf}}}Ef}{{{h{AGb}}{h{AGb}}}Ef}{{{h{DAh}}{h{DAh}}}Ef}{{{h{DAj}}{h{DAj}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000{{{h{BAd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DAf}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AGb}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{DAh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DAj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{EdDAf}{DbAGb}222{{{Ab{A`}}}AGb}{cAGb{{AD`{Nh}}}}{{{h{G`}}}{{E`{AGb}}}}{{DAfDAf}Ef}{{{h{BAd}}{h{Ahc}}}BhGf}{{{h{DAf}}{h{Ahc}}}BhGf}{{{h{AGb}}{h{Ahc}}}BhGf}{ce{}{}}0000``````{{{h{BEh}}DAf}BAd}{{{h{DAf}}{h{DAf}}}{{Dj{Bj}}}}{{{h{AGb}}{h{AGb}}}{{Dj{Bj}}}}`{{{h{AhDAf}}DAf}DAf}`{{{h{BAd}}}{{E`{BEhACf}}}}{{{h{DAh}}}{{Dj{{h{AOf}}}}}}{{{h{DAj}}}{{Dj{{h{AOf}}}}}}{AGb{{Ab{A`}}}}{{{h{c}}}e{}{}}0000{{{h{BAd}}}{{E`{BBn}}}}{{{h{c}}}If{}}000{DAfEd}{c{{E`{e}}}{}{}}000000000{{{h{c}}}Ij{}}0000>>>>>````````````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{DAl}}}DAl}{{{h{BA`}}}BA`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{Ahc}}}{{E`{DAlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{BA`AC`}}}{ACbACd}}{{{h{DAl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BA`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAl}}{h{DAl}}}Ef}{{{h{BA`}}{h{BA`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{DAl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BA`}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}0{{{h{DAl}}{h{Ahc}}}BhGf}{{{h{BA`}}{h{Ahc}}}BhGf}{ce{}{}}0````{{{h{BA`}}}{{E`{BEhACf}}}}`{{{h{c}}}e{}{}}0{{{h{BA`}}}{{E`{BBn}}}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}055```````````````````````````````````````````{{{h{DAn}}}{{h{G`}}}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{DAn}}}DAn}{{{h{DB`}}}DB`}{{{h{DBb}}}DBb}{{{h{DBd}}}DBd}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{DBb}}}{{h{G`}}}}{{{h{DBd}}}{{h{G`}}}}{{{h{DBb}}}DAn}{{{h{DBd}}}DAn}{{{h{Ahc}}}{{E`{DAnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBbAC`}}}{ACbACd}}0{{{h{DAn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DAn}}{h{DAn}}}Ef}{{{h{DB`}}{h{DB`}}}Ef}{{{h{DBb}}{h{DBb}}}Ef}{{{h{DBd}}{h{DBd}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{DAn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DB`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DBb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000{{{h{G`}}}{{E`{DAn}}}}{ce{}{}}000{{{h{DBb}}}{{h{AGb}}}}{{AGbDBd}DBb}{{{h{DBb}}}{{h{DBd}}}}{{{h{DB`}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}{{{AJb{G`}}}{{E`{DAn}}}}{If{{E`{DAn}}}}:222{{{h{G`}}}{{E`{DAnDB`}}}}3333{{{h{c}}}Ij{}}000;;;;`````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{BAh}}}BAh}{{{h{DBf}}}DBf}{{{h{DBh}}}DBh}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{BAh}}{h{BAh}}}Bj}{{{h{Ahc}}}{{E`{BAhAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBhAC`}}}{ACbACd}}10{{{h{BAh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{BAh}}{h{BAh}}}Ef}{{{h{DBf}}{h{DBf}}}Ef}{{{h{DBh}}{h{DBh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{BAh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{{{h{BAh}}{h{Ahc}}}BhGf}{ce{}{}}00``{{{h{BAh}}}{{Dj{{Ab{A`}}}}}}{{{ADl{Ch}}Ch}DBf}{{{ADl{Ch}}Ch}DBh}{{{h{BAh}}{h{BAh}}}{{Dj{Bj}}}}``{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00``777````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{DBj}}}DBj}{{{h{DBl}}}DBl}{{{h{DBn}}}DBn}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{Ahc}}}{{E`{DBjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBlAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DBnAC`}}}{ACbACd}}20{{{h{DBj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DBn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}`{{{h{DBj}}{h{DBj}}}Ef}{{{h{DBl}}{h{DBl}}}Ef}{{{h{DBn}}{h{DBn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000``{{{h{DBj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DBn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00`{ce{}{}}00{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}00000`{{{h{c}}}Ij{}}00333````{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{DC`}}}DC`}{{{h{DCb}}}DCb}{{{h{DCd}}}DCd}{{{h{DCf}}}DCf}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{DC`}}{h{DC`}}}Bj}{{{h{DCb}}{h{DCb}}}Bj}{{{h{DCd}}{h{DCd}}}Bj}{{{h{DCf}}{h{DCf}}}Bj}`{{{h{Ahc}}}{{E`{DC`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCbAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCfAC`}}}{ACbACd}}3210{{{h{DC`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DC`}}{h{DC`}}}Ef}{{{h{DCb}}{h{DCb}}}Ef}{{{h{DCd}}{h{DCd}}}Ef}{{{h{DCf}}{h{DCf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{DC`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000{{{h{DC`}}{h{Ahc}}}BhGf}{{{h{DCb}}{h{Ahc}}}BhGf}{{{h{DCd}}{h{Ahc}}}BhGf}{{{h{DCf}}{h{Ahc}}}BhGf}{ce{}{}}000{{{h{DC`}}{h{DC`}}}{{Dj{Bj}}}}{{{h{DCb}}{h{DCb}}}{{Dj{Bj}}}}{{{h{DCd}}{h{DCd}}}{{Dj{Bj}}}}{{{h{DCf}}{h{DCf}}}{{Dj{Bj}}}}`{{{h{c}}}e{}{}}000`{c{{E`{e}}}{}{}}0000000`{{{h{c}}}Ij{}}000`7777```````{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{DCh}}}DCh}{{{h{DCj}}}DCj}{{{h{DCl}}}DCl}{{{h{DCn}}}DCn}{{{h{DD`}}}DD`}{{{h{DDb}}}DDb}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{Ahc}}}{{E`{DChAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCjAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DClAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DCnAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DD`AC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DDbAC`}}}{ACbACd}}543210{{{h{DCh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCj}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCn}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DD`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDb}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DCh}}{h{DCh}}}Ef}{{{h{DCj}}{h{DCj}}}Ef}{{{h{DCl}}{h{DCl}}}Ef}{{{h{DCn}}{h{DCn}}}Ef}{{{h{DD`}}{h{DD`}}}Ef}{{{h{DDb}}{h{DDb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000000000`````````{{{h{DCh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DCn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DD`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDb}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00000{ce{}{}}00000````````{{{h{c}}}e{}{}}00000{c{{E`{e}}}{}{}}00000000000{{{h{c}}}Ij{}}00000333333```````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00`{{{h{DDd}}}DDd}{{{h{DDf}}}DDf}{{{h{DDh}}}DDh}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{{h{Ahc}}}{{E`{DDdAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DDfAC`}}}{ACbACd}}{{{h{Ahc}}}{{E`{DDhAC`}}}{ACbACd}}20{{{h{DDd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDf}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDh}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{DDd}}{h{DDd}}}Ef}{{{h{DDf}}{h{DDf}}}Ef}{{{h{DDh}}{h{DDh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{DDd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00`{ce{}{}}00`{{DAfA@`BAdBAdEdIfBBb}DDd}````````{{{h{c}}}e{}{}}00{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00``444`{{{h{BMj}}}{{h{DDj}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{BMj}}}BMj}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{BMj}}{h{BMj}}}Ef}??{{{h{BMj}}{h{AhEn}}}{{E`{BhF`}}}}0<{{{h{BMj}}}{{h{G`}}}}<{{{h{BMj}}}{{Dj{{h{AOf}}}}}};{{{h{c}}}If{}};;:>````````{{A@`A@`}A@`}`````````````````````````````````````````````````````````````````````````````````````````````99999999999998888888888888{{{h{DDl}}}DDl}{{{h{BKb}}}BKb}{{{h{ALd}}}ALd}{{{h{DDn}}}DDn}{{{h{DE`}}}DE`}{{{h{DEb}}}DEb}{{{h{AKn}}}AKn}{{{h{AE`}}}AE`}{{{h{DEd}}}DEd}{{{h{DEf}}}DEf}{{{h{DEh}}}DEh}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000{{{h{ALd}}{h{ALd}}}Bj}{{{h{DE`}}{h{DE`}}}Bj}{{{h{DEb}}{h{DEb}}}Bj}{{{h{DEf}}{h{DEf}}}Bj}{{{h{AhDDl}}DDl}Bh}{{{h{AhDEh}}DEh}Bh}{{}DDl}{{}DEh}{c{{E`{DDl}}}Eb}{c{{E`{DEf}}}Eb}{c{{E`{DEh}}}Eb}{DEf{{E`{ABbAHd}}}}{{{h{DEh}}}{{E`{ABbAHd}}}}{{{h{DDl}}{h{DDl}}}Ef}{{{h{BKb}}{h{BKb}}}Ef}{{{h{ALd}}{h{ALd}}}Ef}{{{h{DDn}}{h{DDn}}}Ef}{{{h{DE`}}{h{DE`}}}Ef}{{{h{DEb}}{h{DEb}}}Ef}{{{h{AKn}}{h{AKn}}}Ef}{{{h{AE`}}{h{AE`}}}Ef}{{{h{DEd}}{h{DEd}}}Ef}{{{h{DEf}}{h{DEf}}}Ef}{{{h{DEh}}{h{DEh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000000000000000``{{{h{ABn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DDl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{BKb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{ALd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DDn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DE`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DEb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AKn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AE`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEh}}{h{AhEn}}}{{E`{BhF`}}}}{ANnABn}{cc{}}{FnABn}{ACfABn}{AC`ABn}333{BDhDDn}4{ANnDDn}55{ANnAKn}{DEdAKn}7{DElAKn}{DEnAKn}9{ANnAE`}{ANnDEd};{ANnDEj}<{ABbDEf}={AB`DEf}>{{{h{G`}}}{{E`{DEf}}}}{DhDEf}{{{h{{ALf{}{{Gb{c}}}}}}BKb{h{{Jd{e}}}}}{{E`{{Dj{AAn}}c}}}FbAGd}{{{h{DDl}}{h{Ahc}}}BhGf}{{{h{DE`}}{h{Ahc}}}BhGf}{{{h{DEb}}{h{Ahc}}}BhGf}{{{h{DEf}}{h{Ahc}}}BhGf}{{{h{DEh}}{h{Ahc}}}BhGf}```{ce{}{}}000000000000``{{{h{ALd}}{h{ALd}}}{{Dj{Bj}}}}{{{h{DE`}}{h{DE`}}}{{Dj{Bj}}}}{{{h{DEb}}{h{DEb}}}{{Dj{Bj}}}}{{{h{DEf}}{h{DEf}}}{{Dj{Bj}}}}`````````{{{h{DDl}}c}E`Hn}{{{h{DEf}}c}E`Hn}{{{h{DEh}}c}E`Hn}``{{{h{DE`}}}DEb}{{{h{ABn}}}{{Dj{{h{AOf}}}}}}{{{h{DDn}}}{{Dj{{h{AOf}}}}}}{{{h{AKn}}}{{Dj{{h{AOf}}}}}}{{{h{AE`}}}{{Dj{{h{AOf}}}}}}{{{h{DEd}}}{{Dj{{h{AOf}}}}}}{{{h{DEj}}}{{Dj{{h{AOf}}}}}}`````````{DEf{{E`{AB`AFh}}}}{{{h{DEh}}}{{E`{AB`AFh}}}}{{{h{c}}}e{}{}}0000000000{{{h{c}}}If{}}000000{DEfDh}{c{{E`{e}}}{}{}}0000000000000000000000000{{{h{c}}}Ij{}}000000000000````{{{h{AhDDl}}{h{{Cb{AMh}}}}}{{E`{{Cb{AAj}}DF`}}}}{{{h{AhDEh}}{h{{Cb{AMh}}}}}{{E`{{Cb{AAj}}DF`}}}}`{ce{}{}}000000000000`````````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{{DFb{c}}}}}{{DFb{c}}}{AlBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFf}}}DFf}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{{DFb{c}}}}{h{{DFb{c}}}}}Bj{BlBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFf}}{h{DFf}}}Bj}{{{h{Ahc}}}{{E`{{DFb{e}}AC`}}}{ACbACd}{BBh{DFd{A`}}{AHb{A`}}}}{{{h{{DFb{c}}}}{h{Ahe}}}{{E`{HjACf}}}{BBh{DFd{A`}}{AHb{A`}}}{AChACd}}{c{{E`{{DFb{e}}}}}Eb{BBh{DFd{A`}}{AHb{A`}}BAj}}{c{{E`{DFh}}}Eb}{c{{E`{DFf}}}Eb}{{{h{{DFb{c}}}}{h{{DFb{c}}}}}Ef{EhBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFh}}{h{DFh}}}Ef}{{{h{DFf}}{h{DFf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{{DFb{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DFf}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00{{{h{{DFb{c}}}}{h{Ahe}}}Bh{GhBBh{DFd{A`}}{AHb{A`}}}Gf}{{{h{DFf}}{h{Ahc}}}BhGf}{ce{}{}}00```{{{h{{DFb{c}}}}{h{{DFb{c}}}}}{{Dj{Bj}}}{HlBBh{DFd{A`}}{AHb{A`}}}}{{{h{DFf}}{h{DFf}}}{{Dj{Bj}}}}`{{{h{{DFb{c}}}}e}E`{BBh{DFd{A`}}{AHb{A`}}Id}Hn}{{{h{DFh}}c}E`Hn}{{{h{DFf}}c}E`Hn}`{{{h{{DFb{c}}}}}DFf{BBh{DFd{A`}}{AHb{A`}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}{c{{E`{e}}}{}{}}{DFf{{E`{{DFb{c}}}}}{BBh{DFd{A`}}{AHb{A`}}}}11111{{{h{c}}}Ij{}}00``;;;````````````````````````````````````````{{AEd{h{{Jd{c}}}}{h{Jf}}}{{E`{AEdJj}}}Jl}{{AJl{h{Jf}}}{{E`{AJlJj}}}}{{{h{AJl}}}}{{{h{AEd}}}}{{{h{AKl}}}}{{{h{AhAJl}}}}{{{h{AhAEd}}}}{{{h{AhAKl}}}}{{{h{AhAEd}}}DFj}{{{h{AEd}}}DFj}{{{h{AJl}}}{{h{{Ab{A`}}}}}}{{{h{AKl}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000000000{{{h{D@`}}}D@`}{{{h{D@b}}}D@b}{{{h{COl}}}COl}{{{h{D@n}}}D@n}{{{h{DA`}}}DA`}{{{h{COf}}}COf}{{{h{AJl}}}AJl}{{{h{AEd}}}AEd}{{{h{COj}}}COj}{{{h{Jf}}}Jf}{{{h{AKl}}}AKl}{{{h{Jj}}}Jj}{{{h{c}}{h{Ahe}}}Bh{}{}}00000000000{{{h{D@`}}{h{D@`}}}Bj}{{{h{D@b}}{h{D@b}}}Bj}{{{h{COl}}{h{COl}}}Bj}{{{h{D@n}}{h{D@n}}}Bj}{{{h{DA`}}{h{DA`}}}Bj}{{{h{COf}}{h{COf}}}Bj}{{{h{AEd}}{h{AEd}}}Bj}{{{h{COj}}{h{COj}}}Bj}{{{h{Jf}}{h{Jf}}}Bj}{{{h{AKl}}{h{AKl}}}Bj}{{{h{Jj}}{h{Jj}}}Bj}4{{{h{AEd}}{h{AEd}}}{{E`{AEdJj}}}}{{{h{{Ad{{h{AEd}}}}}}}{{E`{AEdJj}}}}`{{A`Hj}Bh}000000{c{{E`{AJl}}}Eb}{c{{E`{AEd}}}Eb}{{{h{AJl}}}COh}```{{{h{D@`}}{h{D@`}}}Ef}{{{h{D@b}}{h{D@b}}}Ef}{{{h{COl}}{h{COl}}}Ef}{{{h{D@n}}{h{D@n}}}Ef}{{{h{DA`}}{h{DA`}}}Ef}{{{h{COf}}{h{COf}}}Ef}{{{h{AJl}}{h{AJl}}}Ef}{{{h{AEd}}{h{AEd}}}Ef}{{{h{COj}}{h{COj}}}Ef}{{{h{Jf}}{h{Jf}}}Ef}{{{h{AKl}}{h{AKl}}}Ef}{{{h{Jj}}{h{Jj}}}Ef}4{{{h{c}}{h{e}}}Ef{}{}}00000000000000000000000{{{h{D@`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{D@b}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{COl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{D@n}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DA`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{COf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AJl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AEd}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{COj}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{Jf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AKl}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{Jj}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00000{{{h{AG`}}}AJl}1{cAJlDFl}{AG`AJl}3{AG`AEd}{{{h{AG`}}}AEd}{DFjAEd}66{AJlJf}7{LhAKl}{LjAKl}{cAKlDFl}{LlAKl};{COjJj}{{{Ab{A`}}}{{E`{JfDFn}}}}{{{Ab{A`}}}AKl}{{{h{{Ad{A`}}}}}{{E`{AKlJj}}}}{DG`AEd}?;3{{{h{{Jd{c}}}}{h{AJl}}}AEdAGd}{{{h{{Ad{A`}}}}}{{E`{AJlJj}}}}{{{h{{Ad{A`}}}}}{{E`{AEdJj}}}}4{{{h{G`}}}{{E`{AJlJj}}}}{{{h{G`}}}{{E`{AEdJj}}}}{{JbJh}AEd}{{{h{D@`}}{h{Ahc}}}BhGf}{{{h{D@b}}{h{Ahc}}}BhGf}{{{h{COl}}{h{Ahc}}}BhGf}{{{h{D@n}}{h{Ahc}}}BhGf}{{{h{DA`}}{h{Ahc}}}BhGf}{{{h{COf}}{h{Ahc}}}BhGf}{{{h{AEd}}{h{Ahc}}}BhGf}{{{h{COj}}{h{Ahc}}}BhGf}{{{h{Jf}}{h{Ahc}}}BhGf}{{{h{AKl}}{h{Ahc}}}BhGf}{{{h{Jj}}{h{Ahc}}}BhGf}``{{{h{AJl}}c}h{}}{{{h{Jf}}c}h{}}{{{h{AKl}}c}h{}}{ce{}{}}00000000000{DFl{{Ab{A`}}}}{{{h{AJl}}{h{{Jd{c}}}}}AG`AGd}{{AJl{h{Jf}}}{{E`{AJlJj}}}}{{AEd{h{{Jd{c}}}}{h{Jf}}}{{E`{AEdJj}}}Jl}{AJlAJl}{{AEd{h{{Jd{c}}}}}AEdJl}{{{h{Ahc}}}AJl{D@dACd}}{{{h{AhAJl}}}Bh}{{{h{AhJf}}}Bh}{{{h{D@`}}{h{D@`}}}{{Dj{Bj}}}}{{{h{D@b}}{h{D@b}}}{{Dj{Bj}}}}{{{h{COl}}{h{COl}}}{{Dj{Bj}}}}{{{h{D@n}}{h{D@n}}}{{Dj{Bj}}}}{{{h{DA`}}{h{DA`}}}{{Dj{Bj}}}}{{{h{COf}}{h{COf}}}{{Dj{Bj}}}}{{{h{AEd}}{h{AEd}}}{{Dj{Bj}}}}{{{h{COj}}{h{COj}}}{{Dj{Bj}}}}{{{h{Jf}}{h{Jf}}}{{Dj{Bj}}}}{{{h{AKl}}{h{AKl}}}{{Dj{Bj}}}}{{{h{Jj}}{h{Jj}}}{{Dj{Bj}}}}{{{h{AJl}}{h{{Jd{c}}}}}AEdAGd}{{}Jf}{cJfD@d}``{{{h{AJl}}}{{Ab{A`}}}}{{{h{AJl}}c}E`Hn}{{{h{AEd}}}{{Ab{A`}}}}{{{h{AEd}}c}E`Hn}1{{{h{Jj}}}{{Dj{{h{AOf}}}}}}{Jf{{Ab{A`}}}}{{{h{Mj}}}Mj}{{{h{ALl}}}ALl}2{{{h{c}}}e{}{}}00000000000{{{h{AEd}}}AAj}{{{h{ALn}}}ALn}{{{h{n}}}n}{{{h{c}}}If{}}000{c{{E`{e}}}{}{}}00000000000000000000000{{{h{c}}}Ij{}}00000000000{{{h{AEd}}{h{{Jd{c}}}}{h{AKl}}{h{C@j}}}{{E`{BhJj}}}Jl}{ce{}{}}00000000000{{{h{AJl}}{h{{Jd{c}}}}}{{Ff{JbJh}}}AGd}{{{h{AEd}}}{{Ff{JbJh}}}}`````````````````{{{h{DGb}}}{{h{{Ad{A`}}}}}}0{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DGb}}}DGb}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DGb}}{h{DGb}}}Bj}{c{{E`{DGb}}}Eb}{{{h{DGb}}}COh}{{{h{DGb}}{h{DGb}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{DGb}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{{{Ab{A`}}}DGb}{{{h{{Ad{A`}}}}}{{E`{DGbJj}}}}{{{h{G`}}}{{E`{DGbJj}}}}{{{h{DGb}}{h{Ahc}}}BhGf}{ce{}{}}{{{h{AEd}}{h{AJl}}}DGb}{{{h{AhDGb}}}Bh}{{{h{DGb}}{h{DGb}}}{{Dj{Bj}}}}{{{h{DGb}}}{{Ab{A`}}}}{{{h{DGb}}c}E`Hn}{{{h{AEd}}{h{AJl}}}{{Ab{A`}}}}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}9````{{{h{D@j}}}}{{{h{C@j}}}}{{{h{AhD@j}}}}{{{h{AhC@j}}}}{{{h{AhD@j}}}DGd}{{{h{AhC@j}}}DGf}{{{h{D@j}}}DGd}{{{h{C@j}}}DGf}{{{h{DGh}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}0010{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{DGh}}}Hj}{{{h{DGj}}}DGj}{{{h{D@j}}}D@j}{{{h{DGh}}}DGh}{{{h{C@j}}}C@j}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{DGj}}{h{DGj}}}Bj}{{{h{D@j}}{h{D@j}}}Bj}{{{h{DGh}}{h{DGh}}}Bj}{{{h{C@j}}{h{C@j}}}Bj}0<{c{{E`{C@j}}}Eb}{{{h{DGj}}{h{DGj}}}Ef}{{{h{D@j}}{h{D@j}}}Ef}{{{h{DGh}}{h{{Ad{A`}}}}}Ef}{{{h{DGh}}{h{DGh}}}Ef}{{{h{C@j}}{h{C@j}}}Ef}0{{{h{c}}{h{e}}}Ef{}{}}0000000{{{h{DGj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{D@j}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DGh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{C@j}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}0{DGdD@j}1{{{h{C@j}}}DGh}{C@jDGh}3{DGfC@j}{{{h{{Ad{A`}}}}DGj}{{E`{D@jJj}}}}{{{h{{Ad{A`}}}}}{{E`{C@jJj}}}}00{BBb{{E`{DGjJj}}}}5{{{h{G`}}}{{E`{C@jJj}}}}{{{h{D@j}}{h{Ahc}}}BhGf}{{{h{DGh}}{h{Ahc}}}BhGf}{{{h{C@j}}{h{Ahc}}}BhGf}{ce{}{}}000{{{h{DGh}}}}{DGh}{{{h{DGh}}}Ef}{{{h{DGh}}}Hj}{{{h{AhC@j}}}Bh}{{{h{DGj}}{h{DGj}}}{{Dj{Bj}}}}{{{h{D@j}}{h{D@j}}}{{Dj{Bj}}}}{{{h{DGh}}{h{{Ad{A`}}}}}{{Dj{Bj}}}}{{{h{DGh}}{h{DGh}}}{{Dj{Bj}}}}{{{h{C@j}}{h{C@j}}}{{Dj{Bj}}}}{{{h{C@j}}c}E`Hn}{{{h{D@j}}}{{Ff{DGj{Ab{A`}}}}}}{{{h{C@j}}}{{Ab{A`}}}}{{{h{C@j}}}DGh}`{DGjBBb}{{{h{c}}}e{}{}}000{{{h{DGh}}}{{E`{C@jJj}}}}{{{h{D@j}}}C@j}{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00{DGh{{E`{C@j}}}}{{{h{DGh}}}{{E`{C@j}}}}22222{{{h{c}}}Ij{}}000{ce{}{}}000``{{{h{DGl}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DGl}}}DGl}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DGl}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}7{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}8{{{h{AhDGl}}}Dj}0{{{h{AhDGl}}Hj}Dj}{{{h{DGl}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0?>`````{{{h{DG`}}}}{{{h{AhDG`}}}}{{{h{DGn}}}{{h{{Ab{A`}}}}}}???>>>{{{h{DG`}}}DG`}{{{h{DGn}}}DGn}{{{h{DH`}}}DH`}???{{{h{DG`}}{h{DG`}}}Bj}{{{h{DGn}}{h{DGn}}}Bj}{{{h{DH`}}{h{DH`}}}Bj}{{{h{DG`}}{h{DG`}}}Ef}{{{h{DGn}}{h{DGn}}}Ef}{{{h{DH`}}{h{DH`}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{DG`}}{h{AhEn}}}{{E`{BhF`}}}}00{{{h{DGn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DH`}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{{{Ab{A`}}}DG`}{AEdDG`}{{{h{{Jd{c}}}}AJl{Dj{{Ab{A`}}}}}DG`Jl}{{{Ab{A`}}}DGn}{{{h{G`}}}{{E`{DG`}}}}{{{h{DG`}}{h{Ahc}}}BhGf}{{{h{DGn}}{h{Ahc}}}BhGf}{{{h{DH`}}{h{Ahc}}}BhGf}{ce{}{}}00{{AJl{Ab{A`}}}DG`}{{{h{DG`}}{h{DG`}}}{{Dj{Bj}}}}{{{h{DGn}}{h{DGn}}}{{Dj{Bj}}}}{{{h{DH`}}{h{DH`}}}{{Dj{Bj}}}}{{DG`DG`AJlDH`{Dj{{h{{Ad{A`}}}}}}}DGn}{{DG`DG`AJlDH`c}DGn{{Hf{{Ab{A`}}{Ab{A`}}{Ab{A`}}}{{Hd{DGn}}}}}}{{{h{DG`}}}{{Ab{A`}}}}{{{h{c}}}e{}{}}00{DGn{{Ab{A`}}}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00<<<``````````````````````````{{{h{{DHd{}{{DHb{c}}}}}}}c{}}{{{h{DFj}}}}{{{h{DGf}}}}{{{h{Mf}}}}{{{h{CN`}}}}{{{h{DHf}}}}{{{h{Ah{DHd{}{{DHb{c}}}}}}}c{}}{{{h{AhDFj}}}}{{{h{AhDGf}}}}{{{h{AhMf}}}}{{{h{AhCN`}}}}{{{h{AhDHf}}}}{{{h{DFj}}}{{h{{Ab{A`}}}}}}{{{h{DGf}}}{{h{{Ab{A`}}}}}}{{{h{Mf}}}{{h{{Ab{A`}}}}}}{{{h{CN`}}}{{h{{Ab{A`}}}}}}{{{h{DHf}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000{{{h{CNl}}}CNl}{{{h{DFj}}}DFj}{{{h{DGf}}}DGf}{{{h{Mf}}}Mf}{{{h{CN`}}}CN`}{{{h{DHf}}}DHf}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{{h{DFj}}{h{DFj}}}Bj}{{{h{DGf}}{h{DGf}}}Bj}{{{h{Mf}}{h{Mf}}}Bj}{{{h{CN`}}{h{CN`}}}Bj}{{{h{DHf}}{h{DHf}}}Bj}43210{{CNlDGfA`Hj}BBb}{{{h{DFj}}{h{DFj}}}Ef}{{{h{DGf}}{h{DGf}}}Ef}{{{h{Mf}}{h{Mf}}}Ef}{{{h{CN`}}{h{CN`}}}Ef}{{{h{DHf}}{h{DHf}}}Ef}43210{{{h{c}}{h{e}}}Ef{}{}}000000000{{{h{CNl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DFj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DGf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{Mf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{CN`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DHf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000000{{{Ab{A`}}}DHf}{{{Ab{A`}}}DFj}{{{Ab{A`}}}DGf}{{{Ab{A`}}}Mf}{{{Ab{A`}}}CN`}{{{h{DFj}}{h{Ahc}}}BhGf}{{{h{DGf}}{h{Ahc}}}BhGf}{{{h{Mf}}{h{Ahc}}}BhGf}{{{h{CN`}}{h{Ahc}}}BhGf}{{{h{DHf}}{h{Ahc}}}BhGf}``{{{h{DFj}}c}h{}}{{{h{DGf}}c}h{}}{{{h{Mf}}c}h{}}{{{h{CN`}}c}h{}}{{{h{DHf}}c}h{}}{ce{}{}}000000{{{Dj{{DHj{A`A`HjA`A`A`HjDHh}{{Hd{BBb}}}}}}DHh}DHl}{{}DFj}{{}DGf}{{}Mf}{{}CN`}{{{h{AhCN`}}}Bh}{{{h{Ahc}}c}Bh{}}{{{h{DFj}}{h{DFj}}}{{Dj{Bj}}}}{{{h{DGf}}{h{DGf}}}{{Dj{Bj}}}}{{{h{Mf}}{h{Mf}}}{{Dj{Bj}}}}{{{h{CN`}}{h{CN`}}}{{Dj{Bj}}}}{{{h{DHf}}{h{DHf}}}{{Dj{Bj}}}}`{Dh{{CNn{CNl}}}}{{{CNn{CNl}}}Bh}{{BBdDHh}Bh}021`{{CNl{CNn{DHh}}}{{CNn{CNl}}}}{CNlHj}{{{CNn{DHh}}Dh}{{CNn{CNl}}}}4{DhHj}{{{CNn{CNl}}A`}BBb}{{CNlDFjDFj}BBb}{{CNlDFjDFjHj}BBb}{{CNlDFjA`}BBb}{{CNlDFj}BBb}{{CNlDFjA`Hj}BBb}{{CNlA`HjDFjDh}BBb}33{{CNlA`}BBb}{{CNlA`A`}BBb}01{{CNlA`DFjA`{Dj{{DHj{A`A`A`DHh}{{Hd{BBb}}}}}}DHh}BBb}`{{CNlDGfA`A`{Dj{{DHj{A`A`A`A`DHhDh}{{Hd{BBb}}}}}}DHh}BBb}{{CNlDGfDGf}BBb}{{CNlDGfA`}BBb}{{CNlDGfA`Hj}BBb}{{CNlA`DGf}BBb}{{CNlA`HjDGf}BBb}{{CNlDGfA`DFj}BBb}{{CNlA`A`A`}BBb}9{{CNlA`DFjA`}BBb}{{CNlA`A`A`A`BBb{Dj{{DHj{A`A`A`A`DHh}{{Hd{BBb}}}}}}DHh}BBb}`{{CNlCN`A`}BBb}{{CNlDFjCN`}BBb}{{CNlA`CN`}BBb}{{CNlMfBBbCN`}BBb}3```{{CNlA`A`CN`A`}BBb}{{CNlA`A`HjCN`DHl}BBb}{{CNlA`A`HjMf}BBb}{{CNlMfMf}BBb}{{CNlMfBBbDFj}BBb}{{CNlMfA`}BBb}{{CNlA`Mf}BBb}{{CNlDFjMfA`}BBb}{{CNlA`BBbMfA`}BBb}{DHf{{Ab{A`}}}}{{{h{c}}}e{}{}}00000{c{{E`{e}}}{}{}}0000000000000{{{h{c}}}Ij{}}000000`{DFj{{Ab{A`}}}}{DGf{{Ab{A`}}}}{Mf{{Ab{A`}}}}{CN`{{Ab{A`}}}}{ce{}{}}000000`{{{h{DGd}}}}{{{h{AhDGd}}}}{{{h{DGd}}}{{h{{Ab{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DGd}}}DGd}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DGd}}{h{DGd}}}Bj}0{{}DGd}{{{h{DGd}}{h{DGd}}}Ef}0{{{h{c}}{h{e}}}Ef{}{}}0{{{h{DGd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{{{h{DGd}}{h{Ahc}}}BhGf}{{{h{DGd}}c}h{}}?6{{{h{DGd}}{h{DGd}}}{{Dj{Bj}}}}{{CNlDFjDGdA`}BBb}{{CNlDGfDGd}BBb}{{CNlDGdA`BBb}BBb}{{CNlA`BBbDGd}BBb}{{CNlDGdA`A`{Dj{{DHj{A`A`A`A`DHhDh}{{Hd{BBb}}}}}}DHh}BBb}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}``{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0`````{{{h{D@f}}}D@f}{{{h{c}}{h{Ahe}}}Bh{}{}}{{}D@f}{{{h{DHh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}077`:999988772```````````{{}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{}{{DHn{c}}}CAd}{{{h{{CAd{}{{CA`{c}}{CAb{e}}}}}}}{{h{e}}}CAf{CAhBBh}}{{{h{{DHn{c}}}}}hCAd}::{{{h{{DHn{c}}}}}{{h{{Ad{A`}}}}}CAd};:::`{{{h{{DI`{c}}}}}{{DI`{c}}}{AlCAd}}{{{h{Fn}}}Fn}{{{h{{DHn{c}}}}}{{DHn{c}}}{AlCAd}};;;{{{h{{DHn{c}}}}{h{{DHn{c}}}}}Bj{BlCAd}}{{}{{DI`{c}}}CAd}{c{{E`{{DHn{e}}}}}Eb{CAdBAj}}{{{h{Ahc}}Ef}{{E`{BhACf}}}{}}{{{h{Ahc}}BB`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBb}{{E`{BhACf}}}{}}{{{h{Ahc}}A@`}{{E`{BhACf}}}{}}{{{h{Ahc}}BBd}{{E`{BhACf}}}{}}{{{h{Ahc}}{h{{Ad{A`}}}}}{{E`{BhACf}}}{}}{{{h{Ahc}}AEl}{{E`{BhACf}}}{}}{{{h{Ahc}}Dh}{{E`{BhACf}}}{}}{{{h{Ahc}}Ed}{{E`{BhACf}}}{}}{{{h{Ahc}}A`}{{E`{BhACf}}}{}}{{}c{}}{{{h{Fn}}{h{Fn}}}Ef}{{{h{{DHn{c}}}}{h{{DHn{c}}}}}Ef{EhCAd}}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{Fn}}}Hj}{{{h{Ah{DI`{c}}}}}{{E`{BhBBn}}}CAd}{{{h{Ah{DI`{c}}}}}{{E`{BhACf}}}CAd}{{{h{Fn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DHn{c}}}}{h{AhEn}}}{{E`{BhF`}}}CAd}00{cc{}}00{c{{CAd{}{{CA`{e}}{CAb{c}}}}}{CAhBBh}CAf}{{}{{DHn{c}}}CAd}{c{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{DI`{c}}}{{DHn{c}}}CAd}{{}{{DI`{c}}}CAd}{{{h{{Ad{A`}}}}}{{E`{{CAd{}{{CA`{c}}{CAb{e}}}}Fn}}}CAf{CAhBBh}}{{{h{{Ad{A`}}}}}{{E`{{DHn{c}}Fn}}}CAd}{{{h{G`}}}{{E`{{DHn{c}}}}}{CAdDIb}}{{{h{{Ad{A`}}}}}{{CAd{}{{CA`{c}}{CAb{e}}}}}CAf{CAhBBh}}{{{h{{DHn{c}}}}{h{Ahe}}}Bh{GhCAd}Gf}{e{{CAd{}{{CA`{g}}{CAb{i}}}}}{{AD`{{Ad{A`}}}}}{{El{}{{Ej{c}}}}}CAf{CAhBBh}}``{{{h{{DHn{c}}}}Hj}{{h{A`}}}CAd}{{{h{{DHn{c}}}}{AI`{Hj}}}{{h{{Ad{A`}}}}}CAd}{{{h{{DHn{c}}}}AId}{{h{{Ad{A`}}}}}CAd}{{{h{{DHn{c}}}}{AIh{Hj}}}{{h{{Ad{A`}}}}}CAd}{{{h{{DHn{c}}}}{AIf{Hj}}}{{h{{Ad{A`}}}}}CAd}{{{h{Ah{CAf{}{{CAj{c}}}}}}{h{{Ad{A`}}}}}Bh{}}{{{h{Ah{DI`{c}}}}{h{{Ad{A`}}}}}BhCAd}{ce{}{}}00{{{h{Fn}}}Hj}{{{h{{CAf{}{{CAj{c}}}}}}}c{}}{{{h{{DI`{c}}}}}{}CAd}{{{h{{CAf{}{{CAj{c}}}}}}}Hj{}}{{{h{{DI`{c}}}}}HjCAd}{{{h{{Ad{A`}}}}}{{DI`{c}}}CAd}{{{h{{DHn{c}}}}{h{{DHn{c}}}}}{{Dj{Bj}}}{HlCAd}}`{{{h{{DHn{c}}}}e}E`{CAdId}Hn}`{{{CAd{}{{CA`{c}}{CAb{e}}}}}eCAf{CAhBBh}}{{{DHn{c}}}{}CAd}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00>>>{{{h{Ah{DI`{c}}}}{h{{Ad{A`}}}}}{{E`{HjBBn}}}CAd}{{{h{Ah{DI`{c}}}}{h{{Ad{A`}}}}}{{E`{HjACf}}}CAd}`````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DId}}}{{Dj{{DIf{Dh}}}}}}`{{{h{AhD@d}}{h{Ahc}}}Bh{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}Bh}{{{h{DId}}{h{AhEn}}}{{E`{BhF`}}}}0{DIlDId}{{{DIf{Dh}}}DId}{cc{}}{{}{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{c{{E`{{DJ`{}{{DIn{e}}}}DId}}}DIj{DJb{DJd{{Ad{A`}}}}}}{c{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{{{h{AhD@d}}}c{}}{{{h{AhD@d}}ADb}Ef}{{{h{AhD@d}}e}cDJf{{DJh{c}}}}{{{h{AhD@d}}DhDh}Ef}{{{h{DId}}}{{h{AOf}}}}{ce{}{}}{cDId{{AHb{{AJb{AOf}}}}}}{{{h{AhDIj}}}Dh}{{{h{AhDIj}}}Ed}`{{}c{}}{{{h{DId}}}{{Dj{BBb}}}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}{{E`{HjBBn}}}}`{{{h{AhD@d}}e}c{}{{DJj{c}}}}{{D@de}{{DJl{eD@dc}}}{}{{DJj{c}}}}{Ed{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}`{{{h{DId}}}{{Dj{{h{AOf}}}}}}{DId{{AJb{AOf}}}}{{}DJn}{{{h{c}}}If{}}{{{h{AhDIh}}{h{Ahc}}}{{E`{BhDId}}}{D@dACd}}{{{h{AhD@d}}{h{Ahc}}}{{E`{BhDId}}}{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}```````````````````{{{h{DK`}}{h{Ahc}}{h{AhIf}}Hj}Bh{D@dACd}}{{{h{DKb}}{h{Ahc}}{h{AhIf}}Hj}Bh{D@dACd}}{{{h{DKd}}{h{Ahc}}{h{AhIf}}Hj}Bh{D@dACd}}{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000000000{c{{Dj{D`}}}{}}{c{{Dj{Il}}}{}}{{{h{DKf}}}DKf}{{{h{DKh}}}DKh}{{{h{DKj}}}DKj}{{{h{DKl}}}DKl}{{{h{DKb}}}DKb}{{{h{{DKn{c}}}}}{{DKn{c}}}Al}{{{h{{DL`{c}}}}}{{DL`{c}}}{AlDJfHl}}{{{h{DLb}}}DLb}{{{h{{DLd{c}}}}}{{DLd{c}}}{AlDJf}}{{{h{DKd}}}DKd}{{{h{c}}{h{Ahe}}}Bh{}{}}000000000{{{h{DKf}}{h{DKf}}}Ef}{{{h{DKh}}{h{DKh}}}Ef}{{{h{{DL`{c}}}}{h{{DL`{c}}}}}Ef{EhDJfHl}}{{{h{DLb}}{h{DLb}}}Ef}{{{h{{DLd{c}}}}{h{{DLd{c}}}}}Ef{EhDJf}}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{DKf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DKh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DJl{ceg}}}}{h{AhEn}}}{{E`{BhF`}}}FbFbFb}{{{h{{DLf{cegi}}}}{h{AhEn}}}{{E`{BhF`}}}FbFbFbFb}{{{h{DKj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DKl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DKb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{DKn{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{DL`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDJfHl}}{{{h{DLb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DLd{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDJf}}{{{h{DKd}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}0000000000{{{AIj{c}}}{{DLd{c}}}DJf}{{{AI`{c}}}{{DLd{c}}}DJf}2{{DhDh}{{E`{DKfDKh}}}}{ce{}{}}00000000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}1{{DJjg}{{DLf{DJjgce}}}{}{}{{AFd{c}{{Hd{e}}}}}}{ADb{{E`{DKfDKh}}}}{{{h{{Ad{c}}}}}{{E`{{DKn{c}}DLh}}}{}}{c{{E`{{DL`{e}}DLb}}}El{DLjAlDJbDJfHl}}{{eg}{{DLd{c}}}DJf{{DLl{c}}}{{DLl{c}}}}0{{{h{Ah{DJl{egc}}}}}{{Dj{c}}}{}{{DJj{c}}}D@d}{{{h{DJj}}{h{Ahc}}}e{D@dACd}{}}{{{h{DKf}}{h{Ahc}}}Ef{D@dACd}}{{{h{{DLf{eicg}}}}{h{Ahk}}}g{}{{DJj{c}}}{}{{AFd{c}{{Hd{g}}}}}{D@dACd}}{{{h{DKj}}{h{Ahc}}}CFb{D@dACd}}{{{h{DKj}}{h{Ahc}}}ADb{D@dACd}}{{{h{DKl}}{h{Ahc}}}CFb{D@dACd}}{{{h{DKl}}{h{Ahc}}}ADb{D@dACd}}{{{h{DKb}}{h{Ahc}}}A`{D@dACd}}{{{h{{DKn{c}}}}{h{Ahe}}}{{h{c}}}{}{D@dACd}}{{{h{{DL`{c}}}}{h{Ahe}}}Hj{DJfHl}{D@dACd}}{{{h{{DLd{c}}}}{h{Ahe}}}cDJf{D@dACd}}{{{h{DKd}}{h{Ahc}}}AEl{D@dACd}}{{{h{DKd}}{h{Ahc}}}ADb{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{eg}}}{D@dACd}{}{}}{{{h{DKd}}{h{Ahc}}}Ef{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egik}}}{D@dACd}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{Ab{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}CKf{D@dACd}}111{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAe}}}{D@dACd}{}{}{}{}{}{}{}{}{}}2{{{h{DKd}}{h{Ahc}}}{{Ff{egi}}}{D@dACd}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{DIf{Dh}}}{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{DIf{Ed}}}{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}Bh{D@dACd}}{{{h{DKd}}{h{Ahc}}}Ed{D@dACd}}88{{{h{DKd}}{h{Ahc}}}CFb{D@dACd}}9{{{h{DKd}}{h{Ahc}}}{{DIf{ACn}}}{D@dACd}}:::{{{h{DKd}}{h{Ahc}}}ACn{D@dACd}}{{{h{DKd}}{h{Ahc}}}BBd{D@dACd}}{{{h{DKd}}{h{Ahc}}}Hj{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAeAgAi}}}{D@dACd}{}{}{}{}{}{}{}{}{}{}{}}>{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAeAg}}}{D@dACd}{}{}{}{}{}{}{}{}{}{}}???{{{h{DKd}}{h{Ahc}}}CFd{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAa}}}{D@dACd}{}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{Ab{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmo}}}{D@dACd}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}Dh{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{DIf{Hj}}}{D@dACd}}33{{{h{DKd}}{h{Ahc}}}BBb{D@dACd}}4{{{h{DKd}}{h{Ahc}}}BBj{D@dACd}}5{{{h{DKd}}{h{Ahc}}}{{DIf{AEl}}}{D@dACd}}66{{{h{DKd}}{h{Ahc}}}A`{D@dACd}}77777{{{h{DKd}}{h{Ahc}}}{{DLn{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAc}}}{D@dACd}{}{}{}{}{}{}{}{}}{{{h{DKd}}{h{Ahc}}}{{DIf{A`}}}{D@dACd}}::{{{h{DKd}}{h{Ahc}}}{{Ff{egikm}}}{D@dACd}{}{}{}{}{}};;{{{h{DKd}}{h{Ahc}}}{{Dj{e}}}{D@dACd}{}}{{{h{DKd}}{h{Ahc}}}A@`{D@dACd}}{{{h{DKd}}{h{Ahc}}}{{Ff{egikmoAaAcAeAgAiAk}}}{D@dACd}{}{}{}{}{}{}{}{}{}{}{}{}}>>{{{h{DKd}}{h{Ahc}}}BB`{D@dACd}}{{DJjc}{{DJl{DJjce}}}D@d{}}{{{h{DK`}}{h{Ahc}}Hj}If{D@dACd}}{{{h{{DJl{egc}}}}}{{Ff{Hj{Dj{Hj}}}}}{}{{DJj{c}}}D@d}{{{h{c}}}e{}{}}000000000{{{h{c}}}If{}}0{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}00000000000000000000000{{{h{c}}}Ij{}}00000000000`{{{h{Ah{DL`{c}}}}{h{{Ad{{Ff{Hj{h{c}}}}}}}}}{{E`{BhDLb}}}{DLjDM`AlDJbDJfHl}}{ce{}{}}00000000000````````````{{{h{DLl}}}{{h{c}}}{}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000{{{h{{DMb{c}}}}}{{DMb{c}}}Al}{{{h{DMd}}}DMd}{{{h{{DMf{c}}}}}{{DMf{c}}}Al}{{{h{DMh}}}DMh}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{{DMb{c}}}}{h{{DMb{c}}}}}EfEh}{{{h{{DMf{c}}}}{h{{DMf{c}}}}}EfEh}{{{h{{DMb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{DMd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{DMf{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{DMh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}000????{{{h{DJh}}}Ef}{{eg}{{DMl{}{{DMj{c}}}}}{}{{DLl{c}}}{{DLl{c}}}}{{ce}{{DMb{CKf}}}DLlDLl}{{ce}{{DMb{BB`}}}DLlDLl}{{ce}{{DMb{BBb}}}DLlDLl}{{ce}{{DMb{A`}}}DLlDLl}{{ce}{{DMb{Dh}}}DLlDLl}{{ce}{{DMb{Ed}}}DLlDLl}{{ce}{{DMb{Hj}}}DLlDLl}{{ce}{{DMb{CFd}}}DLlDLl}{{ce}{{DMb{BBd}}}DLlDLl}{{ce}{{DMb{A@`}}}DLlDLl}{{ce}{{DMb{AEl}}}DLlDLl}{{ce}{{DMb{ACn}}}DLlDLl}{{ce}DMdDLlDLl}{{ce}{{DMf{CFb}}}DLlDLl}{{ce}{{DMf{ADb}}}DLlDLl}{{ce}DMhDLlDLl}{{eg}{{DMl{}{{DMj{c}}}}}{}{{DLl{c}}}{{DLl{c}}}}>{{ce}{{DMb{CKf}}}DLlDLl}869<:{{ce}{{DMb{BB`}}}DLlDLl}?8><6453{{{h{{DMl{}{{DMj{c}}}}}}{h{Ahe}}}c{}{D@dACd}}{{{h{{DMb{AEl}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{Dh}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{A@`}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{A`}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{Hj}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{BBb}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{Ed}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{BBd}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{CKf}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{CFd}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{ACn}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMb{BB`}}}}{h{Ahc}}}{}{D@dACd}}{{{h{DMd}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMf{ADb}}}}{h{Ahc}}}{}{D@dACd}}{{{h{{DMf{CFb}}}}{h{Ahc}}}{}{D@dACd}}{{{h{DMh}}{h{Ahc}}}DMn{D@dACd}}{{DJh{h{Ahc}}}e{DIjACd}{}}{{eg{h{Ahi}}}c{}{{DLl{c}}}{{DLl{c}}}{D@dACd}}{{ce{h{Ahg}}}{}DLlDLl{D@dACd}}00000000000001000000000000{{{h{c}}}e{}{}}000{c{{E`{e}}}{}{}}0000000{{{h{c}}}Ij{}}000{ce{}{}}000`````````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{DN`{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDNb}}{cc{}}4{{{ADl{c}}}{{E`{{DN`{c}}DLb}}}DNb}7765```````````{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{c}}}}}{}{D@dACd}}{{DNf{h{Ahc}}}{{Dj{e}}}{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{DNh{{DNd{}{{Ej{c}}}}c}}}{}{D@dACd}}{{DNf{h{Ahc}}Hj}{{ADl{e}}}{D@dACd}{}}{{DNf{h{Ahc}}{h{Ah{Ad{e}}}}}Hj{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hji}{{E`{{DNh{{DNd{}{{Ej{c}}}}c}}DLb}}}{}{D@dACd}{{AHb{ADb}}}{{AFd{{h{c}}}{{Hd{g}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{Ahc}}}}}{}{D@dACd}}5{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{c}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{Ahc}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{AhD@d}}{h{Ahc}}}Bh{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}Bh}{{}{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{c{{E`{{DJ`{}{{DIn{e}}}}DId}}}DIj{DJb{DJd{{Ad{A`}}}}}}{c{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{{{h{AhD@d}}}c{}}{{{h{AhD@d}}ADb}Ef}{{{h{AhD@d}}e}cDJf{{DJh{c}}}}{{{h{AhD@d}}DhDh}Ef}{{DJjg}{{DLf{DJjgce}}}{}{}{{AFd{c}{{Hd{e}}}}}}{{{h{AhDIj}}}Dh}{{{h{AhDIj}}}Ed}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{Ff{{h{Ah{Ad{c}}}}{h{Ah{Ad{c}}}}}}}{}{D@dACd}}{{}c{}}{{{h{DJj}}{h{Ahc}}}e{D@dACd}{}}{{{h{AhD@d}}e}c{}{{DJj{c}}}}{{DJjc}{{DJl{DJjce}}}D@d{}}{{D@de}{{DJl{eD@dc}}}{}{{DJj{c}}}}{Ed{{DJ`{}{{DIn{c}}}}}{DJb{DJd{{Ad{A`}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}Bh{}{D@dACd}}{{}DJn}{{{h{AhD@d}}{h{Ahc}}}{{E`{BhDId}}}{DIhACd}}{{{h{AhDIj}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}````{{{h{Ahc}}}{{h{AhDIj}}}{}}00{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{DNj}}}DNj}{{{h{DNl}}}DNl}{{{h{DJn}}}DJn}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{}DNj}:{{{h{DNl}}{h{DNl}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhDNj}}{h{Ah{Ad{A`}}}}}Bh}{{{h{AhDNl}}{h{Ah{Ad{A`}}}}}Bh}{{{h{AhDJn}}{h{Ah{Ad{A`}}}}}Bh}{{{h{DNj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DNl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DJn}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}00{c{{E`{DNlDId}}}DIj}{{}DNl}{ce{}{}}00`{{{h{AhDNj}}}Dh}{{{h{AhDNl}}}Dh}{{{h{AhDJn}}}Dh}{{{h{AhDNj}}}Ed}{{{h{AhDNl}}}Ed}{{{h{AhDJn}}}Ed}{{{h{c}}}e{}{}}00{{{h{AhDNj}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{{{h{AhDNl}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{{{h{AhDJn}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00<<<```{{{h{Ahc}}}{{h{AhDIj}}}{}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{{DNn{ce}}}}}{{DNn{ce}}}{DO`DJ`Al}{DIjAl}}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{Ah{DOb{c}}}}{h{Ah{Ad{A`}}}}}BhBHb}{{{h{Ah{DNn{ce}}}}{h{Ah{Ad{A`}}}}}Bh{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{{{h{{DOb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{DOd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{DNn{ce}}}}{h{AhEn}}}{{E`{BhF`}}}{FbDO`DJ`}{FbDIj}}{cc{}}00{ce{}{}}00{c{{DOb{c}}}BHb}{{cEde}{{DNn{ce}}}{DO`DJ`}DIj}{{{h{Ah{DOb{c}}}}}DhBHb}{{{h{Ah{DNn{ce}}}}}Dh{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{{{h{Ah{DOb{c}}}}}EdBHb}{{{h{Ah{DNn{ce}}}}}Ed{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{{{h{Ah{DNn{ce}}}}}{{E`{BhDId}}}{DO`DJ`}DIj}{{{h{DOd}}}{{Dj{{h{AOf}}}}}}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{{{h{Ah{DOb{c}}}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}BHb}{{{h{Ah{DNn{ce}}}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}{{DO`{}{{Ej{Dh}}}}DJ`}DIj}{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00>>>`{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DOf}}}DOf}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DOf}}{h{DOf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{AhDOf}}{h{Ah{Ad{A`}}}}}Bh}{{{h{DOf}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}{ce{}{}}{{EdEd}DOf}{{{h{AhDOf}}}Dh}{{{h{AhDOf}}}Ed}{{{h{c}}}e{}{}}{{{h{AhDOf}}{h{Ah{Ad{A`}}}}}{{E`{BhDId}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7````{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{c}}}}}{}{D@dACd}}{{DNf{h{Ahc}}}{{Dj{e}}}{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{DNh{{DNd{}{{Ej{c}}}}c}}}{}{D@dACd}}{{DNf{h{Ahc}}Hj}{{ADl{e}}}{D@dACd}{}}{{DNf{h{Ahc}}{h{Ah{Ad{e}}}}}Hj{D@dACd}{}}{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hji}{{E`{{DNh{{DNd{}{{Ej{c}}}}c}}DLb}}}{}{D@dACd}{{AHb{ADb}}}{{AFd{{h{c}}}{{Hd{g}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}{{Dj{{h{Ahc}}}}}{}{D@dACd}}5{{{h{{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{c}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}k}{{E`{{h{Ahc}}DLb}}}{}{D@dACd}{DJfDLjHlAlDJb}{{DLl{g}}}{{AFd{{h{c}}}{{Hd{i}}}}}}{{{h{{DNh{ce}}}}{h{AhEn}}}{{E`{BhF`}}}{FbACd}Fb}{cc{}}`{ce{}{}}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}1{{{h{{DNh{ec}}}}}Hj{}{{DOh{Hj}{{Hd{c}}}}ACd}}{{{h{Ah{DNh{ec}}}}}Dj{}{{DOh{Hj}{{Hd{c}}}}ACd}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}Hj}{{Ff{{h{Ah{Ad{c}}}}{h{Ah{Ad{c}}}}}}}{}{D@dACd}}{{{h{Ah{DNd{}{{Ej{c}}}}}}{h{Ahe}}}Bh{}{D@dACd}}{{{h{{DNh{ec}}}}}{{Ff{Hj{Dj{Hj}}}}}{}{{DOh{Hj}{{Hd{c}}}}ACd}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}9```{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{DOj}}}DOj}{{{h{DOl}}}DOl}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{DOj}}{h{DOj}}}Ef}{{{h{DOj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DOn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DOl}}{h{AhEn}}}{{E`{BhF`}}}}{{{ADl{Dh}}}DOj}{cc{}}{{{ADl{Hj}}}DOj}11{{{h{DOj}}Hj}Hj}{ce{}{}}00{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}0{DOjDOl}22{DOj{{ADl{Hj}}}}{{{h{DOj}}}Ef}{{{h{DOj}}}DOn}{{{h{DOj}}}Hj}{{{h{AhDOn}}}{{Dj{Hj}}}}{{{h{AhDOl}}}Dj}{{{h{Ahc}}HjHj}DOj{D@dACd}}{{{h{Ahc}}HjgHj}{{E`{DOjDLb}}}{D@dACd}{{AHb{ADb}}}{{AFd{Hj}{{Hd{e}}}}}}{{{h{DOn}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{DOl}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}0{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{c{{E`{e}}}{}{}}00000{{{h{c}}}Ij{}}00{ce{}{}}00``{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{DFn}}}DFn}{{{h{c}}{h{Ahe}}}Bh{}{}}{{{h{DFn}}{h{DFn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{DFn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{{{h{DFn}}{h{Ahc}}}BhGf}9={{{h{c}}}If{}}<<;:`{{{h{AMn}}}}{{{h{AhAMn}}}}{{{h{AMn}}}{{h{{Ab{A`}}}}}}<;{{{h{AMn}}}AMn}:{{{h{AMn}}{h{AMn}}}Bj}{c{{E`{AMn}}}Eb}{{{h{AMn}}{h{AMn}}}Ef};;{{{h{AMn}}{h{AhEn}}}{{E`{BhF`}}}}00:{{{h{{Ad{A`}}}}}{{E`{AMnJj}}}}{{{h{G`}}}{{E`{AMnJj}}}}{{{h{AMn}}{h{Ahc}}}BhGf}{{{h{AMn}}c}h{}}{ce{}{}}{{{h{AMn}}{h{AMn}}}{{Dj{Bj}}}}{{{h{AMn}}}{{Ab{A`}}}}{{{h{AMn}}c}E`Hn}{{{h{c}}}e{}{}}{{{h{c}}}If{}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}7`````````````````````````````````````````````````````{{{h{E@`}}}{{h{{Ad{A`}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000000000000{{{h{{E@b{c}}}}}{{E@b{c}}}{Al{Dl{AAf}}}}{{{h{AEn}}}AEn}{{{h{E@d}}}E@d}{{{h{E@f}}}E@f}{{{h{E@h}}}E@h}{{{h{AFh}}}AFh}{{{h{AHd}}}AHd}{{{h{E@j}}}E@j}{{{h{E@`}}}E@`}{{{h{DEn}}}DEn}{{{h{DEl}}}DEl}{{{h{E@l}}}E@l}{{{h{E@n}}}E@n}{{{h{c}}{h{Ahe}}}Bh{}{}}000000000000{{{h{{E@b{c}}}}{h{{E@b{c}}}}}Bj{Bl{Dl{AAf}}}}{{{h{AEn}}{h{AEn}}}Bj}{{{h{E@`}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{{E@b{c}}}}{h{{E@b{c}}}}}Ef{Eh{Dl{AAf}}}}{{{h{AEn}}{h{AEn}}}Ef}{{{h{E@d}}{h{E@d}}}Ef}{{{h{E@f}}{h{E@f}}}Ef}{{{h{E@h}}{h{E@h}}}Ef}{{{h{AFh}}{h{AFh}}}Ef}{{{h{AHd}}{h{AHd}}}Ef}{{{h{E@j}}{h{E@j}}}Ef}{{{h{E@`}}{h{E@`}}}Ef}{{{h{DEn}}{h{DEn}}}Ef}{{{h{DEl}}{h{DEl}}}Ef}{{{h{E@l}}{h{E@l}}}Ef}{{{h{E@n}}{h{E@n}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0000000000000000000000000{{{h{{AKj{c}}}}{h{AhEn}}}{{E`{BhF`}}}{Fb{Dl{Cl}}}}{{{h{{E@b{c}}}}{h{AhEn}}}{{E`{BhF`}}}{Fb{Dl{AAf}}}}{{{h{AEn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{E@d}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@f}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@h}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AFh}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{AHd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@j}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{DEn}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{DEl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@l}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{E@n}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{{EA`{c}}}}{h{AhEn}}}{{E`{BhF`}}}CBb}{{{h{{EA`{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{cc{}}000000{ANnE@h}1111{ANnDEn}{E@fDEn}{E@hDEn}{AMdDEn}5{E@dDEn}{AMdDEl}{ANnDEl}88{ANnE@n}9{ANn{{EA`{c}}}{}}{ACf{{EA`{c}}}{}};{{{h{{E@b{c}}}}{h{Ahe}}}Bh{Gh{Dl{AAf}}}Gf}{{{h{AEn}}{h{Ahc}}}BhGf}{{{h{E@`}}{h{Ahc}}}BhGf}`{ce{}{}}000000000000000{{{AKj{c}}}c{{Dl{Cl}}}}{{{EAb{c}}}{{E`{Efc}}}{}}{{{h{AEn}}}Ln}{{{h{{AKj{c}}}}{h{Ahe}}Hj{h{Md}}g}{{EAb{{EA`{AMd}}}}}{{Dl{Cl}}}{AChACd}{{AHb{Dh}}}}{{{h{{AKj{c}}}}Hj{h{Md}}Dh}{{E`{LhAMd}}}{{Dl{Cl}}}}{{{EAb{c}}g}{{EAb{e}}}{}{}{{BE`{c}{{Hd{e}}}}}}{c{{AKj{c}}}{{Dl{Cl}}}}{{{h{Md}}AGj}AEn}{{{h{{Ad{A`}}}}}{{E`{E@`E@n}}}}`{{{h{Ah{AKj{c}}}}Hj{h{Md}}D`ABb}{{E`{LjDEl}}}{{Dl{Cl}}}}{{{h{Ah{AKj{c}}}}Hj{h{Md}}D`ABb}{{E`{LjAMd}}}{{Dl{Cl}}}}{{{h{{E@b{c}}}}{h{{E@b{c}}}}}{{Dj{Bj}}}{Hl{Dl{AAf}}}}{{{h{AEn}}{h{AEn}}}{{Dj{Bj}}}}{{{h{Ah{AKj{c}}}}{h{Ahe}}Hj{h{Md}}D`ABb}{{E`{Bh{EA`{AMd}}}}}{{Dl{Cl}}}{AChACd}}{{{h{E@d}}}{{Dj{{h{AOf}}}}}}{{{h{E@f}}}{{Dj{{h{AOf}}}}}}{{{h{E@h}}}{{Dj{{h{AOf}}}}}}{{{h{AFh}}}{{Dj{{h{AOf}}}}}}{{{h{AHd}}}{{Dj{{h{AOf}}}}}}{{{h{E@j}}}{{Dj{{h{AOf}}}}}}{{{h{DEn}}}{{Dj{{h{AOf}}}}}}{{{h{DEl}}}{{Dj{{h{AOf}}}}}}{{{h{E@l}}}{{Dj{{h{AOf}}}}}}{{{h{E@n}}}{{Dj{{h{AOf}}}}}}{{{h{{EA`{c}}}}}{{Dj{{h{AOf}}}}}AOf}{{{h{Ah{AKj{c}}}}{h{Ahe}}Hj{h{{E@b{g}}}}{Dj{E@`}}{Dj{{Ff{LnDh}}}}AB`}{{E`{Bh{EA`{DEn}}}}}{{Dl{Cl}}}{AChACd}{{Dl{AAf}}}}{{{h{Ah{AKj{c}}}}Hj{h{{E@b{e}}}}AB`}{{E`{LlDEn}}}{{Dl{Cl}}}{{Dl{AAf}}}}{{{h{Ah{AKj{c}}}}Hj{h{{E@b{e}}}}gAB`}{{E`{LlDEn}}}{{Dl{Cl}}}{{Dl{AAf}}}{{AHb{Ln}}}}{{{h{Ah{AKj{c}}}}Hj{h{{E@b{e}}}}{Dj{E@`}}{Dj{{Ff{LnDh}}}}AB`}{{E`{LlDEn}}}{{Dl{Cl}}}{{Dl{AAf}}}}{{{h{c}}}e{}{}}000000000000{{{h{c}}}If{}}0000000000{{{h{{AKj{c}}}}}{{h{Cl}}}{{Dl{Cl}}}}{c{{E`{e}}}{}{}}0000000000000000000000000000000{{{h{c}}}Ij{}}000000000000000`{ce{}{}}000000000000000{{{h{Md}}}AEn}{{{h{Ah{AKj{c}}}}Hj}{{Dj{{h{AhA@j}}}}}{{EAd{Cl}}}}```````{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{EAf}}}EAf}{{{h{EAh}}}EAh}{{{h{c}}{h{Ahe}}}Bh{}{}}0`{{{h{EAf}}{h{EAf}}}Ef}{{{h{EAh}}{h{EAh}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000{{{h{EAf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EAh}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}{JjEAf}{ANnEAf}2{{{h{G`}}}{{E`{EAhEAf}}}}{{{h{{Ad{A`}}}}}{{E`{EAhEAf}}}}1{ce{}{}}0{{{h{EAh}}{h{{Jd{c}}}}{h{Jn}}Mh}{{E`{EfEAf}}}Jl}{{D@jEf}EAh}{{{h{EAh}}{h{{Jd{c}}}}Mh}{{E`{AAjEAf}}}Jl}{{{h{EAh}}}{{Ab{A`}}}}`{{{h{G`}}}Mh}{{{h{EAf}}}{{Dj{{h{AOf}}}}}}{EAhIf}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}0{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0;;`````````````````````````````````````````````````````{{EAjA`M`}{{E`{EAjEAl}}}}{{EAjA`Cn}{{E`{EAjEAl}}}}{{EAjA`CnAGj}{{E`{EAjEAl}}}}{{{h{EAn}}}{{Dj{{h{M`}}}}}}{{{h{BCl}}}{{h{{Ad{M`}}}}}}{{{h{AhBCl}}}{{h{Ah{Ad{M`}}}}}}1{{{h{EAn}}}{{Dj{{Ff{{h{Md}}AGj}}}}}}2{{{h{c}}}{{h{e}}}{}{}}0000300000000000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0003000000000000000{{{h{AK`}}}AK`}{{{h{EB`}}}EB`}{{{h{BCl}}}BCl}{{{h{AFb}}}AFb}{{{h{EAj}}}EAj}{{{h{EBb}}}EBb}{{{h{EBd}}}EBd}{{{h{EBf}}}EBf}{{{h{EBh}}}EBh}{{{h{EAn}}}EAn}{{{h{AF`}}}AF`}{{{h{EBj}}}EBj}{{{h{AKd}}}AKd}{{{h{EBl}}}EBl}{{{h{AGj}}}AGj}{{{h{EAl}}}EAl}{{{h{EBn}}}EBn}{{{h{c}}{h{Ahe}}}Bh{}{}}0000000000000000{{{h{AK`}}{h{AK`}}}Bj}{{{h{BCl}}{h{BCl}}}Bj}{{{h{AFb}}{h{AFb}}}Bj}{{{h{EAj}}{h{EAj}}}Bj}{{{h{EBh}}{h{EBh}}}Bj}{{{h{EAn}}{h{EAn}}}Bj}{{{h{AF`}}{h{AF`}}}Bj}{{{h{EBj}}{h{EBj}}}Bj}{{{h{AKd}}{h{AKd}}}Bj}{{{h{EBl}}{h{EBl}}}Bj}{{{h{AGj}}{h{AGj}}}Bj}{{EBhEBh}{{E`{EBhEAl}}}}{{{h{AFb}}{h{{Ff{CnAGj}}}}}{{Dj{AKd}}}}{{{h{{Ad{A`}}}}}{{E`{BClEBn}}}}{{{h{{Ad{A`}}}}}{{E`{AKdEBn}}}}{{}BCl}{{}EAj}{{{h{AF`}}}A`}{{{h{BCl}}}h}{{{h{AhBCl}}}{{h{Ah}}}}{c{{E`{AK`}}}Eb}{c{{E`{BCl}}}Eb}{c{{E`{EBf}}}Eb}{c{{E`{EBh}}}Eb}{c{{E`{EAn}}}Eb}{c{{E`{AKd}}}Eb}{c{{E`{AGj}}}Eb}{{{h{BCl}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AKd}}{h{Ahc}}}{{E`{HjACf}}}{AChACd}}{{{h{AK`}}{h{AK`}}}Ef}{{{h{EB`}}{h{EB`}}}Ef}{{{h{BCl}}{h{BCl}}}Ef}{{{h{AFb}}{h{AFb}}}Ef}{{{h{EAj}}{h{EAj}}}Ef}{{{h{EBb}}{h{EBb}}}Ef}{{{h{EBd}}{h{EBd}}}Ef}{{{h{EBf}}{h{EBf}}}Ef}{{{h{EBh}}{h{EBh}}}Ef}{{{h{EAn}}{h{EAn}}}Ef}{{{h{AF`}}{h{AF`}}}Ef}{{{h{EBj}}{h{EBj}}}Ef}{{{h{AKd}}{h{AKd}}}Ef}{{{h{EBl}}{h{EBl}}}Ef}{{{h{AGj}}{h{AGj}}}Ef}{{{h{EAl}}{h{EAl}}}Ef}{{{h{EBn}}{h{EBn}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}000000000000000000000000000000000{{EAj{h{{Jd{c}}}}Jb}{{E`{AFbEAj}}}Jl}{{{h{AK`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EB`}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{BCl}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AFb}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EAj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBb}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EBd}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EBf}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBh}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EAn}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AF`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AKd}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{EBl}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{AGj}}{h{AhEn}}}{{E`{BhF`}}}}000{{{h{EAl}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{EBn}}{h{AhEn}}}{{E`{BhF`}}}}0{cc{}}00{AFhEB`}{ANnEB`}{JjEB`}3{{{Ab{M`}}}BCl}00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000044{ANnEBb}55{ANnEBd}66{EBfEBh}7777777{ANnEAl}8{ANnEBn}{A`{{E`{AGjEBn}}}}{{{h{AF`}}}{{Dj{EBj}}}}{{{h{{Jd{c}}}}JbEBh}AFbJl}{{{h{{Ad{A`}}}}}{{E`{AK`EB`}}}}{{{h{EAj}}}Ef}{{{h{AK`}}{h{Ahc}}}BhGf}{{{h{BCl}}{h{Ahc}}}BhGf}{{{h{AFb}}{h{Ahc}}}BhGf}{{{h{EAj}}{h{Ahc}}}BhGf}{{{h{EBf}}{h{Ahc}}}BhGf}{{{h{EBh}}{h{Ahc}}}BhGf}{{{h{EAn}}{h{Ahc}}}BhGf}{{{h{AF`}}{h{Ahc}}}BhGf}{{{h{EBj}}{h{Ahc}}}BhGf}{{{h{AKd}}{h{Ahc}}}BhGf}{{{h{EBl}}{h{Ahc}}}BhGf}{{{h{AGj}}{h{Ahc}}}BhGf}{{{h{AFb}}}Jb}`{ce{}{}}000000000000000000{EBbEAj}{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}0{BCl{{ADl{M`}}}}33{BCl}{{{h{BCl}}}}{{{h{AhBCl}}}}{EBdEBh}{EBfEBh}5{{{h{BCl}}}Ef}{{{h{EAj}}}Ef}{{{h{AF`}}}{{h{EAn}}}}{{{h{AF`}}}{{Dj{Ln}}}}{{{h{EBh}}}EC`}{{{h{AF`}}}{{Dj{AGj}}}}`{{{h{BCl}}}Hj}`{{{h{AF`}}}{{h{BCl}}}}{{{h{EBj}}}{{h{BCl}}}}`{{{h{AFb}}}{{Dj{M`}}}}{{}EAj}{M`AF`}{M`EBh}{{{h{{Jd{c}}}}Jb{Dj{M`}}}AFbJl}{{CnAGj}EBh}{{CnAGj}AF`}{{{h{AhECb}}}Dj}{{{h{AhEC`}}}Dj}10{{{h{EBh}}}M`}{{{h{AF`}}}M`}{{{h{EBf}}}{{h{EBh}}}}{{{h{AFb}}}ACj}{{{h{AFb}}}Jh}`{{{h{AK`}}{h{AK`}}}{{Dj{Bj}}}}{{{h{BCl}}{h{BCl}}}{{Dj{Bj}}}}{{{h{AFb}}{h{AFb}}}{{Dj{Bj}}}}{{{h{EAj}}{h{EAj}}}{{Dj{Bj}}}}{{{h{EBh}}{h{EBh}}}{{Dj{Bj}}}}{{{h{EAn}}{h{EAn}}}{{Dj{Bj}}}}{{{h{AF`}}{h{AF`}}}{{Dj{Bj}}}}{{{h{EBj}}{h{EBj}}}{{Dj{Bj}}}}{{{h{AKd}}{h{AKd}}}{{Dj{Bj}}}}{{{h{EBl}}{h{EBl}}}{{Dj{Bj}}}}{{{h{AGj}}{h{AGj}}}{{Dj{Bj}}}}{{{h{EBf}}}M`}{{{h{AF`}}}{{Dj{{h{Md}}}}}}{{{h{EBj}}}{{h{Md}}}}{{{h{EBf}}}ECb}{{{h{AFb}}}{{h{{AKf{{Ff{CnAGj}}{ECd{BCl}}}}}}}}{AK`ECf}{{{h{AK`}}c}E`Hn}{{{h{BCl}}c}E`Hn}{{{h{BCl}}}{{ADl{A`}}}}{{{h{EBf}}c}E`Hn}{{{h{EBh}}c}E`Hn}{{{h{EAn}}c}E`Hn}{{{h{AKd}}}{{ADl{A`}}}}{{{h{AKd}}c}E`Hn}{{{h{AGj}}c}E`Hn}{{{h{AK`}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}```{{{h{AKd}}}Hj}{{{h{ECb}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{EC`}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{EB`}}}{{Dj{{h{AOf}}}}}}{{{h{EBb}}}{{Dj{{h{AOf}}}}}}{{{h{EBd}}}{{Dj{{h{AOf}}}}}}{{{h{EAl}}}{{Dj{{h{AOf}}}}}}{{{h{EBn}}}{{Dj{{h{AOf}}}}}}{{{h{AFb}}}Mb}{EBlA`}{AGjA`}{{{h{c}}}e{}{}}0000000000000000{{{h{c}}}If{}}000000{AK`{{ADl{A`}}}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{c{{E`{e}}}{}{}}0{ECf{{E`{AK`}}}}1{{{h{ECf}}}{{E`{AK`}}}}2{{{ADl{M`}}}{{E`{BCl}}}}{{{AJb{{Ad{M`}}}}}{{E`{BCl}}}}{{{h{{Ad{M`}}}}}{{E`{BCl}}}}555555{EBh{{E`{EBf}}}}{EAj{{E`{EBf}}}}{EAj{{E`{EBh}}}}8888888888888888888888888888{EAj{{E`{EBhEBb}}}}{EAj{{E`{EBfEBb}}}}{{{h{c}}}Ij{}}000000000000000000{{{h{AKd}}{h{{Jd{c}}}}Jb{h{Md}}}EfJl}{{{h{EBj}}}AGj}{ce{}{}}000000000000000000{HjEAj}{{{h{{Jd{c}}}}Jbe}{{E`{AFbEAl}}}Jl{{El{}{{Ej{{Ff{DhCn}}}}}}}}{c{{E`{EAjEAl}}}{{El{}{{Ej{{Ff{DhCn}}}}}}}}``{{{h{AhECh}}}{{h{Ah{Ad{M`}}}}}}{{{h{ECh}}}{{h{{Ad{M`}}}}}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{ECh}}}ECh}{{{h{c}}{h{Ahe}}}Bh{}{}}{EChHj}{{{h{ECh}}{h{AhEn}}}{{E`{BhF`}}}}{cc{}}<{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}={EChDj}{{{h{AhECh}}}Dj}0{{{h{AhECh}}Hj}Dj}0{{{h{ECh}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}0{{{h{c}}}Ij{}}{ce{}{}}``{{{h{ECf}}}{{h{{Ad{A`}}}}}}{{{h{ECj}}}{{h{{Ad{A`}}}}}}1{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{ECf}}}ECf}{{{h{ECj}}}ECj}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{ECf}}{h{ECf}}}Bj}7{{{h{ECf}}{h{{Ad{A`}}}}}Ef}{{{h{ECf}}{h{ECf}}}Ef}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{ECf}}{h{AhEn}}}{{E`{BhF`}}}}0{{{h{ECj}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{AK`}}}ECf}{AK`ECf}{cc{}}02{{{h{ECf}}{h{Ahc}}}BhGf}{ce{}{}}0{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}{ECf}{{{h{ECf}}}}3{{{h{ECf}}}Hj}{{{h{AhECj}}}Dj}0{{{h{AhECj}}Hj}Dj}{{{h{ECf}}{h{ECf}}}{{Dj{Bj}}}}{{{h{ECf}}{h{{Ad{A`}}}}}{{Dj{Bj}}}}{{{h{ECj}}}{{Ff{Hj{Dj{Hj}}}}}}{{{h{c}}}e{}{}}0{{{h{ECf}}}{{E`{AK`EB`}}}}{{{h{c}}}If{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}{c{{E`{e}}}{}{}}000{{{h{c}}}Ij{}}0??{{{h{ECf}}{h{Ahc}}}{{E`{BhACf}}}{AChACd}}``{{{h{Ah{ECl{ce}}}}O`Dh}{{ECn{c}}}{f{DFd{Bd}}}ED`}{{{h{Ah{ECl{ce}}}}{h{O`}}Dh}{{ECn{c}}}{f{DFd{Bd}}}ED`}{{{h{Ah{ECl{ce}}}}{ECn{c}}}BhfED`}{{{h{Ah{ECl{ce}}}}{Aj{c}}}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}{Aj{c}}{Dj{Ed}}}{{ECn{c}}}fED`}{{{h{{ECl{ce}}}}}{{h{{Fh{c}}}}}{}{}}{{{h{Ah{ECl{ce}}}}k}{{ECn{c}}}fED`{{AHb{{EDb{Cl}}}}}{{El{}{{Ej{c}}}}}{{El{}{{Ej{{Ff{gi}}}}}}}}{{{h{Ah{ECl{ce}}}}i}{{ECn{c}}}fED`{{AHb{{EDb{Cl}}}}}{{El{}{{Ej{{Ff{gEd}}}}}}}}0{{{h{c}}}{{h{e}}}{}{}}0{{{h{Ahc}}}{{h{Ahe}}}{}{}}0{{{h{{ECn{ce}}}}}{{ECn{ce}}}AlAl}{{{h{c}}{h{Ahe}}}Bh{}{}}{{}{{ECl{ce}}}{}DJb}{{}{{ECn{ce}}}{}DJb}{c{{E`{{ECn{eg}}}}}Eb{BlBAj}BAj}{{{h{{ECn{ce}}}}{h{{ECn{ce}}}}}EfEhEh}{{{h{{ECl{ce}}}}{h{AhEn}}}FdFbFb}{{{h{{ECn{ce}}}}{h{AhEn}}}FdFbFb}{cc{}}0{{{EDd{c}}}{{ECn{ce}}}{}DJb}{EDf{{ECn{cEDf}}}{}}?``{{{h{{ECl{ce}}}}}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}Cjc}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}CjEd}{{ECn{c}}}fED`}{{{h{Ah{ECl{ce}}}}g}{{ECn{c}}}fED`{{AHb{{EDb{Cl}}}}}}{{{h{Ah{ECl{ce}}}}AAdAAf}{{ECn{c}}}fED`}{ce{}{}}0{{{h{{ECn{ce}}}}}EffH`}{{{h{Ah{ECn{ce}}}}{ECn{ce}}}BhfH`}{c{{ECl{ec}}}{}{}}{{{h{{ECn{ce}}}}g}E`{BlId}IdHn}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}000`{{{h{c}}}Ij{}}077``{{{h{Ah{ED`{}{{EDh{c}}}}}}c}Bh{}}{{{h{Ah{ED`{}{{EDh{c}}}}}}{h{Cl}}}c{}}{{{h{Ah{ED`{}{{EDh{c}}}}}}AAd{h{AAf}}}c{}}{{{h{{ED`{}{{EDh{c}}}}}}}c{}}{{{h{{ED`{}{{EDh{c}}}}}}{h{Cl}}}Ef{}}````````````{{{h{{EDj{c}}}}}{{AKf{c{Bf{{Cb{C`}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}e}Bh{AlBlFb}{}}{{{h{Ah{EDj{c}}}}EDf}Bh{AlBlFb}}{{{h{c}}}{{h{e}}}{}{}}00{{{h{Ahc}}}{{h{Ahe}}}{}{}}00{{{h{{EDj{c}}}}}{{EDj{c}}}Al}{{{h{{EDl{c}}}}}{{EDl{c}}}Al}{{{h{EDf}}}EDf}{{{h{c}}{h{Ahe}}}Bh{}{}}00{{}{{EDj{c}}}{}}{{}EDf}{c{{E`{EDf}}}Eb}{{{h{{EDl{c}}}}{h{{EDl{c}}}}}EfEh}{{{h{EDf}}{h{EDf}}}Ef}{{{h{{EDj{c}}}}{h{AhEn}}}FdFb}{{{h{{EDl{c}}}}{h{AhEn}}}FdFb}0{{{h{EDf}}{h{AhEn}}}Fd}{cc{}}00{{{h{EDn}}}{{Ib{EDf}}}}{{{h{{EDj{c}}}}c}{{Dj{{h{{Cb{C`}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}Cn}{{Dj{{h{{Ff{cDh}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}{h{Cl}}}e{AlBlFb}{}}{{{h{Ah{EDj{c}}}}AAd{h{AAf}}}e{AlBlFb}{}}{{{h{EDn}}}{{Ib{Bh}}}}{{{h{{EDj{c}}}}}e{AlBlFb}{}}{{{h{{EDj{c}}}}}{{h{{EE`{{Ff{cDh}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}c{Cb{C`}}}{{E`{Ef{EDl{c}}}}}{AlBlFb}}{ce{}{}}00{{{h{EDf}}}Ef}{{{h{{EDj{c}}}}{h{Cl}}}Ef{AlBlFb}}{{{h{{EDj{c}}}}cDh}Ef{AlBlFb}}{{{h{{EDj{c}}}}c}{{`{{CCd{}{{Ej{{EEb{AAd}}}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}e}{{`{{CCd{}{{Ej{{EEd{cAAd}}}}}}}}}{AlBlFb}{{Hh{c}}}}{{{h{{EDj{c}}}}}{{`{{CCd{}{{Ej{{Ff{c{h{{Cb{C`}}}}}}}}}}CC`}}}{AlBlFb}}`{{{h{{EDj{c}}}}c}{{Dj{Dh}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{AKf{cDh}}}{AlBlFb}}10{{{h{{EDj{c}}}}}Dh{AlBlFb}}{{{h{Ah{EDj{c}}}}cDh}Bh{AlBlFb}}{{{h{Ah{EDj{c}}}}cDh}Ef{AlBlFb}}{{{h{AhEDf}}EDf}Bh}{{{h{{EDj{c}}}}{h{Cl}}e}Il{AlBlFb}{{Hh{c}}}}{Dh{{EDj{c}}}{}}{{{h{{EDj{c}}}}c}{{Dj{{Ff{DhEf}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}c}{{Dj{{Ff{{EEb{Cn}}EDf}}}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{h{{ECd{{EEd{cAAd}}}}}}}{AlBlFb}}{{{h{EDf}}{h{EDn}}}{{Ib{Bh}}}}2{{{h{Ah{EDj{c}}}}cDh}{{Dj{{Ff{{ADl{{EEb{Cn}}}}EDf}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}{h{{AKf{cDh}}}}}EDf{AlBlFb}}{{{h{{EDj{c}}}}c}{{`{{CCd{}{{Ej{{EEb{Cn}}}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}e}{{`{{Gn{}{{Ej{{EEd{cCn}}}}}}}}}{AlBlFb}{{Hh{c}}}}{{EEf{h{{EDj{c}}}}e}EEf{}{{Hh{c}}}}{{{h{{EDj{c}}}}{h{Cl}}e}{{Ff{D`D`}}}{AlBlFb}{{Hh{c}}}}{{{h{EDf}}c}E`Hn}{{{h{{EDj{c}}}}cDh}{{Dj{Cn}}}{AlBlFb}}{{EEh{h{{EDj{c}}}}}EEh{}}{{{h{c}}}e{}{}}00{{{h{c}}}If{}}{c{{E`{e}}}{}{}}00000{{{h{{EDj{c}}}}AAd}{{Dj{{EEd{c{h{AAf}}}}}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{`{{CCd{}{{Ej{{EEd{c{Ff{AAd{h{AAf}}}}}}}}}}CC`}}}{AlBlFb}}{{{h{{EDj{c}}}}Cj}{{`{{CCd{}{{Ej{{EEd{c{Ff{AAd{h{AAf}}}}}}}}}}}}}{AlBlFb}}{{{h{c}}}Ij{}}00{{{h{{EDj{c}}}}c}{{Dj{{Bf{{Cb{C`}}}}}}}{AlBlFb}}{{{h{Ah{EDj{c}}}}cDh}Ef{AlBlFb}}{{{h{{EDj{c}}}}c}{{`{{CCd{}{{Ej{{EEb{Cn}}}}}}Al}}}{AlBlFb}}{{{h{{EDj{c}}}}}{{`{{CCd{}{{Ej{{EEd{cCn}}}}}}Al}}}{AlBlFb}}{{EEf{h{{EDj{c}}}}}EEf{}}{ce{}{}}00`````{{{h{{EE`{c}}}}}{{h{{AKf{cCn}}}}}{AlBlFb}}{{{h{Ah{EE`{c}}}}e}Bh{AlBlFb}{}}{{{h{c}}}{{h{e}}}{}{}}{{{h{Ahc}}}{{h{Ahe}}}{}{}}{{{h{{EE`{c}}}}}{{EE`{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}{{}{{EE`{c}}}{}}{{{h{{EE`{c}}}}{h{AhEn}}}FdFb}{cc{}}{{{h{{EE`{c}}}}Cn}{{Dj{{h{c}}}}}{AlBlFb}}{{{h{Ah{EE`{c}}}}{h{Cl}}}e{AlBlFb}{}}{{{h{Ah{EE`{c}}}}AAd{h{AAf}}}e{AlBlFb}{}}{{{h{{EE`{c}}}}}e{AlBlFb}{}}{{{h{Ah{EE`{c}}}}cCn}Ef{AlBlFb}}>{{{h{{EE`{c}}}}{h{Cl}}}Ef{AlBlFb}}0{{{h{{EE`{c}}}}{h{c}}}Ef{AlBlFb}}{{{h{Ah{EE`{c}}}}{h{c}}}Ef{AlBlFb}}{{{h{{EE`{c}}}}{h{Cl}}e}Il{AlBlFb}{{Hh{c}}}}{{{h{{EE`{c}}}}}{{h{{ECd{{Ff{cAAd}}}}}}}{AlBlFb}}{{{h{{EE`{c}}}}e}{{`{{CCd{}{{Ej{{Ff{{h{c}}AAd}}}}}}}}}{AlBlFb}{{Hh{c}}}}{{{h{Ah{EE`{c}}}}{h{Cl}}}{{ECd{c}}}{AlBlFb}}{{{h{Ah{EE`{c}}}}AAd{h{AAf}}}{{Dj{{h{c}}}}}{AlBlFb}}{{{h{{EE`{c}}}}{h{Cl}}e}{{Ff{D`D`}}}{AlBlFb}{{Hh{c}}}}{{{h{{EE`{c}}}}{h{c}}}{{Dj{Cn}}}{AlBlFb}}{{{h{c}}}e{}{}}{c{{E`{e}}}{}{}}0{{{h{{EE`{c}}}}AAd}{{Dj{{Ff{{h{c}}{h{AAf}}}}}}}{AlBlFb}}{{{h{{EE`{c}}}}}{{`{{CCd{}{{Ej{{Ff{{h{c}}AAd{h{AAf}}}}}}}}CC`}}}{AlBlFb}}{{{h{{EE`{c}}}}Cj}{{`{{CCd{}{{Ej{{Ff{{h{c}}AAd{h{AAf}}}}}}}}}}}{AlBlFb}}{{{h{c}}}Ij{}}={{{h{{EE`{c}}}}e}{{`{{CCd{}{{Ej{{Ff{{h{c}}Cn}}}}}}Al}}}{AlBlFb}{{Hh{c}}}}{ce{}{}}````````````{{{h{AhEEj}}{h{EEl}}}{{E`{BhEEn}}}}{{{h{AhEEj}}{h{Fl}}Dh}{{E`{EElEF`}}}}{{{h{AhEEj}}{h{Fl}}Dhj}{{E`{EElEFb}}}}{{{h{AhEEj}}Af}{{E`{EElEF`}}}}`{{{h{c}}}{{h{e}}}{}{}}00000{{{h{Ahc}}}{{h{Ahe}}}{}{}}00000{{{h{EEj}}}EEj}{{{h{EEl}}}EEl}{{{h{EEn}}}EEn}{{{h{EFd}}}EFd}{{{h{EF`}}}EF`}{{{h{EFb}}}EFb}{{{h{c}}{h{Ahe}}}Bh{}{}}00000{{}EEl}{c{{E`{EEl}}}Eb}{{{h{AhEEj}}j}{{E`{EElEEn}}}}{{{h{EEj}}{h{EEj}}}Ef}{{{h{EEl}}{h{EEl}}}Ef}{{{h{EEn}}{h{EEn}}}Ef}{{{h{EFd}}{h{EFd}}}Ef}{{{h{EF`}}{h{EF`}}}Ef}{{{h{EFb}}{h{EFb}}}Ef}{{{h{EEj}}{h{AhEn}}}Fd}{{{h{EEl}}{h{AhEn}}}Fd}{{{h{EEn}}{h{AhEn}}}Fd}0{{{h{EFd}}{h{AhEn}}}Fd}0{{{h{EF`}}{h{AhEn}}}Fd}0{{{h{EFb}}{h{AhEn}}}Fd}0{cc{}}0{cEEl{{El{}{{Ej{{Ff{Dh{Dj{Ch}}}}}}}}}}1111{{{AKf{DhCh}}}{{E`{EEjEEn}}}}{EEl{{E`{EEjEEn}}}}{Ch{{Ff{EEjEEl}}}}3{cEEl{{El{}{{Ej{{Ff{DhCh}}}}}}}}{{{h{EDn}}}{{Ib{EEl}}}}{Af{{E`{EEjEEn}}}}{{{h{EEj}}}Ch}{{{h{EEj}}Dh}{{Dj{Af}}}}{{{h{EEj}}}{{E`{jc}}}{}}`{{{h{EDn}}}{{Ib{Bh}}}}{{{h{EEj}}}EEl}{{{h{AhEEj}}j}{{E`{EElEFd}}}}{ce{}{}}00000{{{h{EEj}}jj}{{E`{{Dj{Ef}}c}}}{}}{{{h{EEl}}}Ef}{{{h{EEj}}}Hb}{{{h{AhEEl}}EEl}Bh}`{{{h{EEl}}{h{EDn}}}{{Ib{Bh}}}}{{{h{EEj}}c}{{`{{Gn{}{{Ej{Af}}}}}}}{{Hh{Dh}}}}{{{h{EEl}}c}E`Hn}{{{h{EEj}}}Af}{{{h{c}}}e{}{}}00000{{{h{c}}}If{}}000{c{{E`{e}}}{}{}}00000`000000{{{h{c}}}Ij{}}00000`<<<<<<`{{{h{EDn}}{h{G`}}{h{{Ad{{h{{Ad{{h{G`}}}}}}}}}}}{{Ib{Bh}}}}```````````{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}0000000{{{EFf{c}}}{{EFh{c}}}{}}{{{EFj{c}}}{{EFl{c}}}Bl}{{}{{EFf{c}}}{}}{{}{{EFj{c}}}{BlAl}}{{{EFf{c}}Af}{{EFf{c}}}{}}{{{h{{EFh{c}}}}}{{Dj{Af}}}{}}{{{EFj{c}}Af}{{EFj{c}}}Bl}{{{h{{EFl{c}}}}}{{Dj{Af}}}{BlAl}}``{{{h{{EFn{c}}}}}{{EFn{c}}}Al}{{{h{EG`}}}EG`}{{{h{c}}{h{Ahe}}}Bh{}{}}0{{{h{{EFn{c}}}}{h{{EFn{c}}}}}BjBl}{{{h{EG`}}}Hj}:{{}{{EFh{c}}}{}}{{}{{EFj{c}}}{}}{{}{{EFl{c}}}{}}{{}{{EGb{c}}}{}}{{}{{EGd{ce}}}{}{}}{{{h{{EFn{c}}}}{h{{EFn{c}}}}}EfEh}{{{h{c}}{h{e}}}Ef{}{}}0{{{h{{EFn{c}}}}{h{AhEn}}}{{E`{BhF`}}}{FbEGf}}{{{h{{EFn{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{EG`}}{h{AhEn}}}{{E`{BhF`}}}}{{{h{{EGb{c}}}}{h{AhEn}}}{{E`{BhF`}}}Fb}{{{h{{EGd{ce}}}}{h{AhEn}}}{{E`{BhF`}}}FbFb}{cc{}}{{{EFf{c}}}{{EFh{c}}}{}}111{{{EFj{c}}}{{EFl{c}}}{}}2222{{{h{{EFn{c}}}}{h{Ahe}}}BhGhGf}{{{EFf{c}}e}{{EFf{c}}}{}{{Hf{{EFn{c}}EG`}}EGh}}{{{EFj{c}}e}{{EFj{c}}}Bl{{Hf{cDh{h{Md}}}}EGh}}{ce{}{}}0000000{{{h{Ah{EFh{c}}}}}{{`{CC`}}}{}}0{{{h{Ah{EFl{c}}}}c}{{`{{Gn{}{{Ej{{Ff{DhCn}}}}}}}}}{BlAl}}1{{{h{{EFl{c}}}}}{{ADl{c}}}{BlAl}}`{{{h{Ah{EFh{c}}}}}{{Dj{AAd}}}{}}{{{h{Ah{EFh{c}}}}}{{Dj{Cn}}}{}}{{{h{Ah{EFl{c}}}}c}{{Dj{{Ff{DhCn}}}}}{BlAl}}{{{h{Ah{EFh{c}}}}}{{Dj{Cj}}}{}}{{{EFf{c}}e}{{EFf{c}}}{}{{El{}{{Ej{AAd}}}}}}``{{{h{{EFn{c}}}}{h{{EFn{c}}}}}{{Dj{Bj}}}Hl}{{{h{{EFh{c}}}}}EG`{}}{{{h{EG`}}}Hj}{{{EFf{{Ff{cDh}}}}{h{{EDj{c}}}}e}{{EFf{{Ff{cDh}}}}}{AlBlFb}{{Hh{c}}}}{{EFfc}EFf{{El{}{{Ej{Cn}}}}}}`{{{EFj{c}}cg}{{EFj{c}}}Bl{{Gn{}{{Ej{{Ff{DhCn}}}}}}EGh}{{El{}{{EGj{e}}}}}}{{{EFj{c}}{h{{EDj{c}}}}}{{EFj{c}}}{AlBlFb}}`{{{EFf{c}}e}{{EFf{c}}}{}{{El{}{{Ej{{Ff{cCn}}}}}}}}{{{h{c}}}e{}{}}0{{{h{c}}}If{}}7777{c{{E`{e}}}{}{}}000000000000000``{{{EFf{c}}e}{{EFf{c}}}{}{{El{}{{Ej{Cj}}}}}}``{{{h{c}}}Ij{}}0000000{{{EFf{{Ff{cDh}}}}{h{{EDj{c}}}}}{{EFf{{Ff{cDh}}}}}{AlBlFb}}{ce{}{}}0000000``````````````{{{h{{Fh{c}}}}}{{h{{ECd{{Ff{cCj}}}}}}}{}}{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{Ff{AAd{h{AAf}}}}}}}}}}}{}}{{{h{{EDd{c}}}}}{{`{{Gn{}{{Ej{Dh}}}}}}}f}```{{{h{Ah{Fh{c}}}}{EDd{c}}}Bh{AlBl}}{{{h{Ah{Fh{c}}}}{Aj{c}}}{{EDd{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}{Aj{c}}{Dj{Ed}}}{{EDd{c}}}{AlBl}}{{{h{{Fh{c}}}}}{{h{{Fh{c}}}}}{}}{{{h{{Fh{c}}}}{h{e}}jik}bf{{Gd{}{{Gb{ANn}}}}}Al{{El{}{{Ej{{Ff{gAAd}}}}}}}{{Hf{{h{g}}Cn}{{Hd{Ef}}}}}}{{{h{Ah{Fh{c}}}}g}{{EDd{c}}}{AlBl}{{AHb{{EDb{Cl}}}}}{{El{}{{Ej{{Ff{eEd}}}}}}}}{{{h{c}}}{{h{e}}}{}{}}000000{{{h{Ahc}}}{{h{Ahe}}}{}{}}000000{{{h{{Fh{c}}}}{h{Cl}}}{{E`{D`EGl}}}{}}`{c{{Dj{Il}}}{}}{c{{Dj{D`}}}{}}10{{{h{{Fh{c}}}}}{{Fh{c}}}Al}{{{h{{EGn{ce}}}}}{{EGn{ce}}}AlAl}{{{h{{EH`{ce}}}}}{{EH`{ce}}}AlAl}{{{h{{EDd{c}}}}}{{EDd{c}}}Al}{{{h{c}}{h{Ahe}}}Bh{}{}}000{{{h{{EGn{ce}}}}{h{{EGn{ce}}}}}BjBlBl}{{{h{{EH`{ce}}}}{h{{EH`{ce}}}}}BjBlBl}{{}{{Fh{c}}}{}}{{}{{EDd{c}}}{}}{{{h{{EGn{ce}}}}}{{h{g}}}{}{}{}}{c{{E`{{EDd{e}}}}}Eb{BlBAj}}{{{h{{Fh{c}}}}{h{Cl}}}{{`{{Gn{}{{Ej{{Ff{HjCj}}}}}}}}}{}}{{{h{{Fh{c}}}}{h{{Fh{c}}}}}EfEh}{{{h{{EGn{ce}}}}{h{{EGn{ce}}}}}EfEhEh}{{{h{{EH`{ce}}}}{h{{EH`{ce}}}}}EfEhEh}{{{h{EGl}}{h{EGl}}}Ef}{{{h{{EDd{c}}}}{h{{EDd{c}}}}}EfEh}{{{h{c}}{h{e}}}Ef{}{}}00000{{{h{{Fh{c}}}}{h{e}}ji}{{`{{Gn{}{{Ej{{Ff{g{Bb{c}}}}}}}}}}}f{{Gd{}{{Gb{ANn}}}}}Al{{El{}{{Ej{{Ff{gAAd}}}}}}}}0{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{Ff{AAd{h{AAf}}}}}}}}}}}{}}{{{h{{Fh{c}}}}{h{AhEn}}}FdFb}{{{h{{EGn{ce}}}}{h{AhEn}}}FdFbFb}{{{h{{EH`{ce}}}}{h{AhEn}}}FdFbFb}{{{h{EGl}}{h{AhEn}}}Fd}0{{{h{{EDd{c}}}}{h{AhEn}}}FdFb}{cc{}}0{{{Aj{c}}}{{Fh{c}}}{BlAl}}11111{{{h{EDn}}}{{Ib{{EDd{c}}}}}{fAlBlIdDf}}{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{EGn{{EDb{Cl}}c}}}}}}}}}{}}{{{h{{Fh{c}}}}{h{e}}jCj}{{Dj{{An{{h{c}}}}}}}f{{Gd{}{{Gb{ANn}}}}}}{{{h{{Fh{c}}}}{h{e}}jAAd}{{Dj{{Ff{{An{{h{c}}}}Cj}}}}}f{{Gd{}{{Gb{ANn}}}}}}{{{h{{Fh{c}}}}Cj}{{Dj{{EDb{Cl}}}}}{}}{{{h{{Fh{c}}}}Cj}{{Dj{{EGn{{EDb{Cl}}c}}}}}{}}{{{h{{Fh{c}}}}AAd}{{Dj{{h{AAf}}}}}{}}{{{h{EDn}}}{{Ib{Bh}}}}{{{h{{Fh{c}}}}}{{EDd{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}Cjc}{{EDd{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}CjEd}{{EDd{c}}}{AlBl}}{{{h{Ah{Fh{c}}}}e}{{EDd{c}}}{AlBl}{{AHb{{EDb{Cl}}}}}}{{{h{Ah{Fh{c}}}}AAdAAf}{{EDd{c}}}{AlBl}}{ce{}{}}000000{c{{Gl{g}}}{}{}{{Gn{}{{Ej{e}}}}}}011{{{h{{Fh{c}}}}}Ef{}}{{{h{{EDd{c}}}}}EfBl}``{{{h{{Fh{c}}}}{h{e}}j}{{`{{Gn{}{{Ej{{EH`{{EDb{Cl}}c}}}}}}}}}fGd}{{{Fh{c}}g}{{Fh{e}}}{AlBl}{AlBl}{{Hf{c}{{Hd{e}}}}}}{{{EDd{c}}g}{{EDd{e}}}BlBl{{Hf{c}{{Hd{e}}}}}}{{{h{Ah{EDd{c}}}}{EDd{c}}}BhBl}{c{{Fh{e}}}{{El{}{{Ej{Cl}}}}}{AlBl}}{{{h{Ah{EHb{cg}}}}}{{Dj{i}}}{}{}{{Hf{Hj{EDb{Cl}}}{{Hd{{Dj{e}}}}}}}{}}{{{h{Ah{EHd{cg}}}}}{{Dj{i}}}{}{}{{Hf{HjCj}{{Hd{{Dj{e}}}}}}}{}}{{{h{{Fh{c}}}}AAd}{{h{{EHf{Cj}}}}}{}}{{{h{{EGn{ce}}}}{h{{EGn{ce}}}}}{{Dj{Bj}}}HlHl}{{{h{{EH`{ce}}}}{h{{EH`{ce}}}}}{{Dj{Bj}}}HlHl}{{{h{{EDd{c}}}}{h{EDn}}}{{Ib{Bh}}}{fAlBlIdDf}}`{{{h{{EDd{c}}}}e}E`{BlId}Hn}{{{h{c}}}e{}{}}000{{{h{c}}}If{}}{c{{Ih{i}}}{}{}{}{{Gn{}{{Ej{{E`{eg}}}}}}}}0{{{h{{Fh{c}}}}{h{e}}jik}{{E`{b}}}fGdAl{{El{}{{Ej{{Ff{gAAd}}}}}}}{{Hf{{h{g}}Cn}{{Hd{Ef}}}}}}{{{h{{Fh{c}}}}{h{e}}ji}{{`{{Gn{}{{Ej{{E`{{Ff{g{Bb{c}}}}}}}}}}}}}fGdAl{{El{}{{Ej{{Ff{gAAd}}}}}}}}0{c{{E`{e}}}{}{}}000000{{{h{{Fh{c}}}}{h{e}}jCj}{{E`{{Dj{{An{{h{c}}}}}}}}}fGd}{{{h{{Fh{c}}}}{h{e}}jAAd}{{E`{{Dj{{Ff{{An{{h{c}}}}Cj}}}}}}}fGd}2222222{{{h{{Fh{c}}}}{h{e}}j}{{`{{Gn{}{{Ej{{E`{{EH`{{EDb{Cl}}c}}}}}}}}}}}fGd}``{{{h{{Fh{c}}}}Cj}{{Dj{{AKf{Dh{h{AAf}}}}}}}{}}{{{h{{Fh{c}}}}Cj}{{`{{CCd{}{{Ej{{Ff{Dh{h{{EHf{Cj}}}}}}}}}}}}}{}}`{{{h{{EDd{c}}}}}{{`{{Gn{}{{Ej{{Ff{AAd{h{AAf}}}}}}}}}}}{}}````{{{h{{Fh{c}}}}}{{`{{Gn{}{{Ej{{EGn{{EDb{Cl}}c}}}}}}}}}{}}{{{h{c}}}Ij{}}000000{ce{}{}}000000{{{h{{Fh{c}}}}ei}{{EHb{ci}}}{AlBl}{{AHb{{EDb{Cl}}}}}{}{{Hf{Hj{EDb{Cl}}}{{Hd{{Dj{g}}}}}}}}{{{h{{Fh{c}}}}{h{Cl}}g}{{EHd{cg}}}{}{}{{Hf{HjCj}{{Hd{{Dj{e}}}}}}}}{{{h{{Fh{c}}}}Cjg}{{EHd{cg}}}{AlBl}{}{{Hf{HjCj}{{Hd{{Dj{e}}}}}}}}","D":"AEIlABAf","p":[[5,"Balance",0,14984],[5,"DescriptorId",0,14985],[10,"Anchor",0,14986],[1,"reference"],[5,"BlockId",0,14987],[5,"ConfirmationBlockTime",0,14987],[5,"Hash",8952,14988],[1,"u8"],[1,"array"],[1,"slice"],[5,"CheckPoint",0,14989],[0,"mut"],[5,"TxUpdate",0,14990],[10,"Clone",14991],[6,"ChainPosition",0,14992],[6,"ConfirmationTime",0,14992],[5,"FullTxOut",0,14992],[5,"TxPosInBlock",0,14986],[5,"SpkIterator",0,14993],[1,"unit"],[6,"Ordering",14994],[10,"Ord",14994],[6,"ValueRef",14995],[6,"DescriptorPublicKey",14996],[6,"Descriptor",14997],[5,"Impl",0],[8,"FromSqlResult",14998],[5,"BlockHash",384,14999],[5,"Txid",384,15000],[5,"Transaction",384,15000],[5,"ScriptBuf",384,15001],[5,"Amount",384,15002],[6,"Network",384,15003],[5,"AnchorImpl",0],[10,"DeserializeOwned",7268,15004],[1,"u32"],[6,"Option",15005],[10,"Borrow",15006],[10,"DescriptorExt",0,14985],[6,"Result",15007],[10,"Deserializer",7181,15004],[1,"u64"],[1,"bool"],[10,"PartialEq",14994],[17,"Item"],[10,"IntoIterator",15008],[5,"Formatter",15009],[5,"Error",15009],[10,"Debug",15009],[8,"Result",15009],[1,"tuple"],[5,"TxGraph",14799],[1,"never"],[5,"Header",4526,14999],[5,"FromSliceError",12271,15010],[1,"str"],[17,"Error"],[10,"ChainOracle",0,15011],[10,"Hasher",15012],[10,"Hash",15012],[10,"SliceIndex",15013],[5,"IntoFallible",15014],[10,"Iterator",15015],[10,"Merge",0,15016],[5,"CheckPointIter",0,14989],[17,"Output"],[10,"FnMut",15017],[10,"RangeBounds",15018],[1,"usize"],[10,"PartialOrd",14994],[10,"Serializer",7181,15019],[6,"ToSqlOutput",15020],[8,"Result",15021],[10,"Serialize",7181,15019],[5,"String",3155,15022],[5,"Convert",15014],[5,"TypeId",15023],[5,"SignedAmount",384,15002],[5,"Weight",384,15024],[5,"Work",384,15025],[5,"XOnlyPublicKey",384,15026],[5,"Secp256k1",9586,15027],[5,"Scalar",11343,15028],[6,"Parity",9586,15026],[6,"Error",11343,15027],[10,"Verification",9586,15029],[5,"Address",384,15030],[6,"AddressType",384,15030],[5,"FilterHash",384,15031],[5,"FilterHeader",384,15031],[5,"XKeyIdentifier",384,15032],[5,"TxMerkleNode",384,14999],[5,"WitnessMerkleNode",384,14999],[5,"WitnessCommitment",384,14999],[5,"ScriptHash",384,15033],[5,"WScriptHash",384,15033],[5,"Wtxid",384,15000],[5,"PubkeyHash",384,15034],[5,"WPubkeyHash",384,15034],[5,"LegacySighash",384,15035],[5,"SegwitV0Sighash",384,15035],[5,"TapSighash",384,15035],[5,"TapLeafHash",384,15036],[5,"TapNodeHash",384,15036],[5,"TapTweakHash",384,15036],[5,"Script",384,15037],[5,"XOnlyPublicKey",11963,15038],[5,"Hash",9066,15039],[5,"Hash",6783,15040],[5,"TapSighashTag",384,15035],[5,"Hash",9119,15041],[5,"TapLeafTag",384,15036],[5,"TapBranchTag",384,15036],[5,"TapTweakTag",384,15036],[5,"PushBytes",5418,15042],[5,"Params",6246,15043],[6,"NetworkUnchecked",2777,15030],[10,"NetworkValidation",2777,15030],[5,"TxIn",384,15000],[5,"Block",384,14999],[6,"Bip34Error",4526,14999],[5,"Builder",5418,15044],[5,"Bytes",5418,15037],[5,"ChainHash",4646,15045],[6,"LockTime",4715,15046],[5,"Sequence",384,15000],[6,"LockTime",4901,15047],[1,"i64"],[5,"FeeRate",384,15048],[5,"Opcode",384,15049],[6,"ClassifyContext",5111,15049],[6,"Class",5111,15049],[5,"Witness",384,15050],[6,"Denomination",384,15002],[6,"KnownHrp",384,15030],[5,"WitnessProgram",384,15051],[6,"WitnessVersion",384,15052],[5,"OutPoint",384,15000],[5,"TxOut",384,15000],[5,"VarInt",384,15053],[5,"PublicKey",384,15034],[5,"CompressedPublicKey",384,15034],[5,"PrivateKey",384,15034],[6,"TapSighashType",384,15035],[6,"EcdsaSighashType",384,15035],[5,"MerkleBlock",384,15054],[6,"NetworkKind",384,15003],[5,"Target",384,15025],[5,"CompactTarget",384,15025],[5,"Psbt",384,15055],[6,"Error",10881,15056],[6,"Error",6335,15053],[10,"BufRead",9440,15057],[10,"Sized",15058],[5,"Error",9440,15059],[10,"Write",9440,15057],[5,"TweakedPublicKey",9586,15034],[5,"Token",15060],[1,"u128"],[10,"AsRef",15061],[1,"f64"],[5,"Display",3073,15002],[5,"HashEngine",8952,14988],[6,"Instruction",5418,15062],[6,"Error",15063],[5,"Vec",3155,15064],[6,"MerkleBlockError",9956,15054],[6,"ExtractTxError",10881,15055],[10,"Write",15009],[5,"PublicKey",11343,15026],[5,"Xpub",4167,15032],[6,"Cow",15065],[5,"RelLockTime",15066],[1,"u16"],[5,"ScriptPath",13190,15035],[5,"LeafNode",13594,15036],[5,"TaprootSpendInfo",13594,15036],[10,"Fn",15017],[6,"ParseAmountError",3073,15002],[5,"InvalidSighashTypeError",13190,15035],[5,"ParseNetworkError",10014,15003],[6,"HexToBytesError",6828,15067],[6,"PrefixedHexError",6650,15068],[5,"Keypair",9586,15026],[5,"Magic",10063,15069],[10,"Signing",11343,15029],[5,"UncompressedPublicKeyError",9586,15034],[6,"FromScriptError",2777,15070],[6,"LeafVersion",13594,15036],[5,"TimeOverflowError",4901,15071],[6,"KeyParseError",15072],[6,"FromSliceError",9586,15034],[10,"Into",15061],[5,"NonStandardSighashTypeError",13190,15035],[6,"ParseError",2777,15070],[6,"ParsePublicKeyError",9586,15034],[6,"FromWifError",9586,15034],[6,"ParseError",15002],[6,"UnprefixedHexError",6650,15068],[5,"Range",15018],[5,"RangeToInclusive",15018],[5,"RangeFull",15018],[5,"RangeTo",15018],[5,"RangeFrom",15018],[5,"RangeInclusive",15018],[6,"Bound",15018],[5,"InstructionIndices",5418,15062],[5,"Instructions",5418,15062],[5,"Box",15073],[5,"Height",4715,15074],[5,"Time",4715,15074],[5,"Iter",6231,15050],[6,"Error",5960,15051],[5,"SecretKey",11343,15026],[6,"P2shError",2777,15070],[5,"Signature",13594,15075],[5,"Signature",6563,15076],[5,"ControlBlock",13594,15036],[5,"BTreeMap",15077],[10,"Read",9440,15057],[5,"SighashCache",13190,15035],[5,"Message",11343,15027],[6,"SignError",10881,15055],[6,"PsbtSighashMsg",15063],[6,"SighashError",15063],[6,"SigningKeys",10881,15055],[10,"GetKey",10881,15055],[6,"AddressData",2777,15030],[5,"Fe32",15078],[5,"Hash",15079],[5,"Hash",7110,15080],[5,"OutOfRangeError",15002],[5,"SortKey",9586,15034],[5,"InputsIndexError",6069,15000],[5,"OutputsIndexError",6069,15000],[5,"DefiniteDescriptorKey",14996],[6,"UtxoUpdateError",15063],[6,"OutputUpdateError",15063],[5,"Signature",13159,15081],[5,"UnknownAddressTypeError",2777,15070],[5,"UnknownHrpError",2777,15070],[5,"NetworkValidationError",2777,15070],[5,"InvalidBase58PayloadLengthError",2777,15070],[5,"LegacyAddressTooLongError",2777,15070],[5,"InvalidLegacyPrefixError",2777,15070],[6,"NetworkChecked",2777,15030],[6,"Infallible",15061],[5,"TryFromError",5985,15052],[6,"Error",3155,15082],[5,"DecodeError",15083],[10,"StdError",8747],[10,"CheckedSum",3073,15002],[5,"MissingDigitsError",15002],[5,"TooPreciseError",15002],[5,"InvalidCharacterError",15002],[5,"InputTooLargeError",15002],[10,"SerdeAmount",3134,15084],[10,"SerdeAmountForOpt",3134,15084],[10,"Allocator",15085],[5,"OsStr",15086],[5,"Path",15087],[5,"InvalidCharacterError",3155,15082],[6,"FromSqlError",14998],[5,"AddrV2Message",10219,15088],[5,"ShortId",3863,15089],[5,"Address",10063,15088],[5,"PrefilledTransaction",3863,15089],[6,"Inventory",10403,15090],[10,"Deserialize",7181,15004],[5,"Drain",15091],[5,"Drain",15022],[1,"i16"],[1,"i32"],[1,"i8"],[6,"Value",15092],[10,"Copy",15058],[1,"char"],[5,"ExtractIf",15093],[5,"Error",15094],[5,"TooShortError",3524,15082],[5,"IncorrectChecksumError",3524,15082],[5,"CString",15095],[5,"VecDeque",15096],[5,"DerivationPath",4167,15032],[6,"ChildNumber",4167,15032],[5,"TaprootMerkleBranch",13594,15097],[5,"BinaryHeap",15098],[5,"PushBytesBuf",5418,15042],[5,"FromUtf16Error",15022],[5,"FromUtf8Error",15022],[5,"Assets",15099],[6,"Error",4167,15032],[10,"Error",7268,15004],[10,"IntoDeserializer",7268,15004],[5,"StringDeserializer",7452,15100],[10,"FnOnce",15017],[10,"Pattern",15101],[20,"MaybeUninit",15102],[5,"Splice",15103],[6,"SocketAddr",15104],[5,"IntoIter",15105],[6,"Error",15106],[5,"TryReserveError",15107],[5,"IoSlice",15108],[6,"EncodeSliceError",3567,15109],[6,"DecodeError",3567,15110],[6,"DecodeSliceError",3567,15110],[17,"Config"],[17,"DecodeEstimate"],[10,"Engine",3567,15111],[10,"Config",3713,15111],[10,"DecodeEstimate",3713,15111],[5,"Alphabet",3657,15112],[6,"ParseAlphabetError",3657,15112],[5,"Base64Display",3701,15113],[5,"GeneralPurpose",3713,15114],[5,"GeneralPurposeConfig",3713,15114],[6,"DecodePaddingMode",3713,15111],[5,"DecodeMetadata",3713,15111],[5,"DecoderReader",3818,15115],[10,"Read",15108],[10,"StrConsumer",3831,15116],[5,"EncoderWriter",3831,15117],[10,"Write",15108],[5,"EncoderStringWriter",3831,15116],[6,"Error",3863,15089],[5,"HeaderAndShortIds",3863,15089],[5,"BlockTransactionsRequest",3863,15089],[5,"TxIndexOutOfRangeError",3863,15089],[5,"BlockTransactions",3863,15089],[6,"HexToArrayError",6828,15067],[5,"BlockFilterWriter",4053,15031],[5,"GcsFilterWriter",4053,15031],[6,"Error",4053,15031],[5,"BlockFilter",4053,15031],[5,"BitStreamWriter",4053,15031],[5,"BlockFilterReader",4053,15031],[5,"GcsFilterReader",4053,15031],[5,"BitStreamReader",4053,15031],[5,"ChainCode",4167,15032],[5,"Fingerprint",4167,15032],[5,"DerivationPathIterator",4167,15032],[5,"Xpriv",4167,15032],[5,"InvalidBase58PayloadLengthError",4167,15032],[6,"KeyRequest",10881,15055],[10,"IntoDerivationPath",4167,15032],[5,"Version",4526,14999],[6,"ValidationError",4526,14999],[5,"ParseHeightError",4715,15074],[5,"ParseTimeError",4715,15074],[5,"ConversionError",4715,15074],[6,"ParseError",15074],[5,"AbsLockTime",15118],[5,"Height",4901,15071],[5,"Time",4901,15071],[5,"DisabledLockTimeError",4901,15047],[5,"IncompatibleHeightError",4901,15047],[5,"IncompatibleTimeError",4901,15047],[5,"PushBytesError",5418,15119],[6,"Error",5418,15033],[6,"UintError",15033],[10,"PushBytesErrorReport",5418,15120],[6,"FromStrError",5985,15052],[6,"TryFromInstructionError",5985,15052],[5,"ParseIntError",10848,15121],[6,"ParseOutPointError",6069,15000],[5,"IndexOutOfBoundsError",6069,15000],[5,"Version",6069,15000],[5,"InputWeightPrediction",6069,15000],[10,"Decodable",6246,15053],[10,"Encodable",6246,15053],[10,"WriteExt",6246,15053],[6,"DecodeError",6246,15122],[10,"IntoDeError",6450,15123],[10,"ReadExt",6246,15053],[5,"CheckedData",6335,15053],[6,"FromHexError",6335,15053],[5,"OddLengthStringError",6828,15067],[5,"Hex",6450,15123],[10,"Case",6485,15124],[10,"EncodeBytes",6450,15123],[5,"DecodeInitError",6485,15124],[5,"DecodeError",6485,15124],[5,"Encoder",6485,15124],[5,"Decoder",6485,15124],[5,"SerializedSignature",6563,15076],[6,"Error",6563,15076],[5,"Iter",15125],[5,"Signature",11744,15126],[5,"MissingPrefixError",6650,15068],[5,"ContainsPrefixError",6650,15068],[17,"Engine"],[17,"Bytes"],[10,"Hash",12271,15010],[10,"HashEngine",12271,15010],[10,"FromHex",6828,15127],[17,"MidState"],[17,"Display"],[10,"DisplayHex",6828,15128],[6,"Case",6828,15129],[10,"Display",15009],[10,"LowerHex",15009],[10,"UpperHex",15009],[5,"InvalidCharError",6828,15067],[5,"InvalidLengthError",7048,15067],[5,"HexToBytesIter",6828,15130],[5,"BytesToHexIter",6828,15130],[10,"ExactSizeIterator",15131],[5,"HexDigitsIter",15130],[10,"DoubleEndedIterator",15132],[10,"FusedIterator",15133],[5,"BufEncoder",6992,15134],[5,"DisplayByteSlice",7010,15128],[5,"DisplayArray",7010,15128],[5,"HashEngine",7110,15080],[17,"Ok"],[17,"SerializeSeq"],[17,"SerializeTuple"],[17,"SerializeTupleStruct"],[17,"SerializeTupleVariant"],[17,"SerializeMap"],[17,"SerializeStruct"],[17,"SerializeStructVariant"],[10,"Error",8747,15019],[10,"SerializeSeq",8747,15019],[10,"SerializeTuple",8747,15019],[10,"SerializeTupleStruct",8747,15019],[10,"SerializeTupleVariant",8747,15019],[10,"SerializeMap",8747,15019],[10,"SerializeStruct",8747,15019],[10,"SerializeStructVariant",8747,15019],[10,"Visitor",7268,15004],[1,"f32"],[1,"i128"],[5,"IgnoredAny",7268,15135],[6,"Unexpected",7268,15004],[17,"Value"],[10,"DeserializeSeed",7268,15004],[10,"Expected",7268,15004],[17,"Deserializer"],[10,"VariantAccess",7268,15004],[10,"SeqAccess",7268,15004],[10,"MapAccess",7268,15004],[5,"Request",15136],[17,"Variant"],[10,"EnumAccess",7268,15004],[5,"UnitDeserializer",7452,15100],[5,"U32Deserializer",7452,15100],[5,"StrDeserializer",7452,15100],[5,"BorrowedStrDeserializer",7452,15100],[5,"CowStrDeserializer",7452,15100],[5,"BytesDeserializer",7452,15100],[5,"BorrowedBytesDeserializer",7452,15100],[5,"MapDeserializer",7452,15100],[5,"Error",7452,15100],[5,"BoolDeserializer",7452,15100],[5,"I8Deserializer",7452,15100],[5,"I16Deserializer",7452,15100],[5,"I32Deserializer",7452,15100],[5,"I64Deserializer",7452,15100],[5,"I128Deserializer",7452,15100],[5,"IsizeDeserializer",7452,15100],[5,"U8Deserializer",7452,15100],[5,"U16Deserializer",7452,15100],[5,"U64Deserializer",7452,15100],[5,"U128Deserializer",7452,15100],[5,"UsizeDeserializer",7452,15100],[5,"F32Deserializer",7452,15100],[5,"F64Deserializer",7452,15100],[5,"CharDeserializer",7452,15100],[5,"SeqDeserializer",7452,15100],[5,"SeqAccessDeserializer",7452,15100],[5,"MapAccessDeserializer",7452,15100],[5,"EnumAccessDeserializer",7452,15100],[1,"isize"],[5,"Impossible",8747,15137],[5,"Source",15136],[10,"SerdeHash",8877,15138],[5,"Hash",8882,15139],[5,"HashEngine",8882,15139],[5,"Midstate",8952,14988],[10,"Tag",9119,15041],[5,"Hash",9166,15140],[5,"HashEngine",9166,15140],[5,"Hash",9222,15141],[5,"HashEngine",9222,15141],[5,"Hash",9292,15142],[5,"HashEngine",9292,15142],[5,"Hash",9348,15143],[5,"State",9348,15143],[5,"HashEngine",9348,15143],[6,"ErrorKind",9440,15059],[5,"Take",9440,15057],[5,"Cursor",9440,15057],[5,"Sink",9440,15057],[5,"Keypair",11963,15038],[10,"Context",11343,15029],[5,"TweakedKeypair",9586,15034],[6,"ParseCompressedPublicKeyError",9586,15034],[5,"InvalidBase58PayloadLengthError",9586,15034],[5,"InvalidAddressVersionError",9586,15034],[5,"Context",11963,15038],[5,"NonNull",15144],[17,"TweakedAux"],[17,"TweakedKey"],[10,"TapTweak",9586,15034],[6,"All",11343,15145],[5,"DisplaySecret",15146],[5,"InvalidParityValue",11343,15026],[5,"AllPreallocated",11343,15029],[5,"ManuallyDrop",15147],[5,"SignOnlyPreallocated",11343,15029],[5,"VerifyOnlyPreallocated",11343,15029],[10,"Rng",12385,15148],[5,"AlignedType",12241,15149],[10,"PreallocatedContext",11343,15029],[5,"RecoverableSignature",11744,15150],[10,"CryptoRng",12385,15151],[6,"SignOnly",11343,15145],[6,"VerifyOnly",11343,15145],[5,"PartialMerkleTree",9956,15054],[5,"UnknownChainHashError",10014,15003],[5,"ServiceFlags",10063,15069],[5,"ParseMagicError",10063,15069],[5,"UnknownMagicError",10063,15069],[6,"AddrV2",10219,15088],[5,"CommandString",10274,15152],[5,"CommandStringError",10274,15152],[5,"RawNetworkMessage",10274,15152],[6,"NetworkMessage",10274,15152],[5,"GetBlocksMessage",10403,15090],[5,"GetHeadersMessage",10403,15090],[5,"FilterLoad",10481,15153],[6,"BloomFlags",10481,15153],[5,"FilterAdd",10481,15153],[5,"SendCmpct",10545,15154],[5,"CmpctBlock",10545,15154],[5,"GetBlockTxn",10545,15154],[5,"BlockTxn",10545,15154],[5,"GetCFilters",10638,15155],[5,"CFilter",10638,15155],[5,"GetCFHeaders",10638,15155],[5,"CFHeaders",10638,15155],[5,"GetCFCheckpt",10638,15155],[5,"CFCheckpt",10638,15155],[5,"VersionMessage",10770,15156],[6,"RejectReason",10770,15156],[5,"Reject",10770,15156],[5,"ParseIntError",15157],[5,"Output",10881,15158],[6,"GetKeyError",10881,15055],[6,"OutputType",10881,15055],[6,"SigningAlgorithm",10881,15055],[6,"IndexOutOfBoundsError",10881,15055],[5,"PsbtSighashType",10881,15159],[5,"Input",10881,15159],[6,"PsbtParseError",10881,15160],[6,"P2wpkhError",13190,15035],[6,"TaprootError",13190,15035],[6,"ConversionError",14996],[5,"ProprietaryKey",11272,15161],[10,"From",15061],[5,"Key",11272,15161],[5,"Pair",11272,15161],[5,"PublicKey",11963,15038],[10,"ThirtyTwoByteHash",11343,15027],[5,"OutOfRangeError",13139,15028],[5,"ElligatorSwift",11888,15162],[5,"SharedSecret",11713,15163],[5,"RecoverableSignature",12209,15164],[5,"Signature",11963,15038],[5,"SerializedSignature",11744,15165],[5,"RecoveryId",11744,15150],[5,"IntoIter",11866,15166],[5,"ElligatorSwiftSharedSecret",11888,15162],[6,"ElligatorSwiftParty",11888,15162],[17,"Target"],[10,"CPtr",11963,15038],[5,"ElligatorSwift",11963,15038],[6,"c_void",12241,15167],[1,"fn"],[5,"SchnorrSigExtraParams",11963,15038],[5,"Hmac",12271,15168],[5,"HmacEngine",12271,15168],[10,"FromStr",15169],[5,"Error",12385,15170],[5,"NonZero",15171],[10,"Fill",12385,15148],[10,"RngCore",12385,15151],[5,"Error",15172],[17,"Seed"],[10,"SeedableRng",12385,15151],[10,"Default",15173],[10,"AsMut",15061],[10,"SampleUniform",12712,15174],[10,"SampleRange",12712,15174],[10,"Distribution",12874,15175],[5,"DistIter",12437,15175],[5,"ThreadRng",12918,15176],[10,"DistString",12437,15175],[5,"Alphanumeric",12437,15177],[5,"Standard",12437,15178],[5,"Bernoulli",12437,15179],[6,"BernoulliError",12437,15179],[5,"OpenClosed01",12437,15180],[5,"Open01",12437,15180],[5,"Slice",12437,15181],[5,"WeightedIndex",12437,15182],[6,"WeightedError",12437,15182],[5,"Uniform",12437,15174],[5,"DistMap",12437,15175],[5,"EmptySlice",15181],[10,"AddAssign",15183],[10,"SampleBorrow",12712,15174],[5,"Wrapping",15184],[10,"SubAssign",15183],[5,"UniformInt",12712,15174],[5,"UniformChar",12712,15174],[5,"UniformFloat",12712,15174],[5,"UniformDuration",12712,15174],[17,"X"],[10,"UniformSampler",12712,15174],[5,"Duration",15185],[5,"WeightedIndex",12862,15186],[10,"Weight",12862,15186],[10,"SliceRandom",13050,15187],[10,"IteratorRandom",13050,15187],[5,"SliceChooseIter",13050,15187],[5,"OsRng",12918,15188],[5,"StdRng",12918,15189],[5,"ReseedingRng",12981,15190],[10,"BlockRngCore",15191],[5,"ReadRng",12981,15192],[5,"ReadError",12981,15192],[5,"StepRng",13029,15193],[10,"Index",15194],[6,"IndexVec",13082,15195],[6,"IndexVecIntoIter",13082,15195],[6,"IndexVecIter",13082,15195],[5,"Annex",13190,15035],[6,"Prevouts",13190,15035],[5,"PrevoutsSizeError",13190,15035],[5,"PrevoutsKindError",13190,15035],[6,"PrevoutsIndexError",13190,15035],[5,"SighashTypeParseError",13190,15035],[5,"SingleMissingOutputError",13190,15035],[6,"AnnexError",13190,15035],[6,"SigningDataError",13190,15035],[6,"EncodeSigningDataResult",13190,15035],[10,"BorrowMut",15006],[6,"MessageSignatureError",13539,15196],[5,"MessageSignature",13539,15196],[5,"TaprootBuilder",13594,15036],[6,"TaprootBuilderError",13594,15036],[6,"TapLeaf",13594,15036],[6,"SigFromSliceError",13594,15075],[6,"IncompleteBuilderError",13594,15036],[6,"HiddenNodesError",13594,15036],[5,"TapTree",13594,15036],[5,"NodeInfo",13594,15036],[5,"ScriptLeaf",13594,15036],[5,"FutureLeafVersion",13594,15036],[6,"TaprootError",13594,15036],[5,"LeafNodes",13594,15036],[5,"ScriptLeaves",13594,15036],[5,"BTreeSet",15197],[5,"SerializedSignature",14259,15198],[5,"IntoIter",14233,15097],[5,"IntoIter",14259,15199],[5,"IndexedTxGraph",14314],[5,"ChangeSet",14314],[10,"Indexer",14365],[5,"Arc",15200],[5,"ChangeSet",14799],[5,"ChangeSet",14374],[17,"ChangeSet"],[5,"KeychainTxOutIndex",14374],[6,"InsertDescriptorError",14374],[5,"Transaction",15201],[5,"SpkTxOutIndex",14482],[8,"Indexed",0,15202],[8,"KeychainIndexed",0,15202],[10,"SyncRequestBuilderExt",14374],[10,"FullScanRequestBuilderExt",14374],[5,"LocalChain",14519],[5,"ChangeSet",14519],[5,"MissingGenesisError",14519],[5,"CannotConnectError",14519],[6,"ApplyHeaderError",14519],[5,"AlterCheckPointError",14519],[5,"SyncRequestBuilder",14653,15203],[5,"SyncRequest",14653,15203],[5,"FullScanRequestBuilder",14653,15203],[5,"FullScanRequest",14653,15203],[6,"SyncItem",14653,15203],[5,"SyncProgress",14653,15203],[5,"SyncResult",14653,15203],[5,"FullScanResult",14653,15203],[10,"Any",15023],[10,"Send",15058],[17,"IntoIter"],[6,"CalculateFeeError",14799],[5,"TxNode",14799],[5,"CanonicalTx",14799],[5,"TxAncestors",14799],[5,"TxDescendants",14799],[5,"HashSet",15204],[15,"Confirmed",381],[15,"Unconfirmed",381],[15,"P2pkh",3048],[15,"P2sh",3048],[15,"Segwit",3048],[8,"ExtendedPubKey",4167],[8,"ExtendendPubKey",4167],[8,"ExtendedPrivKey",4167],[8,"ExtendendPrivKey",4167],[15,"Normal",4513],[15,"Hardened",4513],[15,"InvalidChecksum",6428],[15,"OversizedVectorAllocation",6428],[10,"ByteDecoder",6450],[10,"ByteEncoder",6450],[5,"With",6450],[6,"Lower",6485],[6,"Upper",6485],[5,"HmacMidState",7097],[8,"Result",9440],[15,"Unknown",10401],[15,"Unknown",10479],[15,"UnexpectedUnsignedTx",11259],[15,"InvalidPreimageHashPair",11259],[15,"AbsurdFeeRate",11264],[15,"SendingTooMuch",11264],[15,"MissingInputValue",11264],[15,"Inputs",11268],[15,"TxInput",11268],[8,"NonceFn",11963],[8,"EcdhHashFn",11963],[8,"SchnorrNonceFn",11963],[8,"EllswiftEcdhHashFn",11963],[15,"DescriptorAlreadyAssigned",14478],[15,"KeychainAlreadyAssigned",14478]],"r":[[0,14986],[2,14993],[3,14984],[4,14987],[6,15011],[7,14992],[8,14989],[9,14989],[10,14987],[11,14992],[14,14985],[15,14985],[17,14992],[19,15202],[20,14314],[21,14365],[22,15202],[23,15016],[24,14993],[25,14799],[26,14986],[27,14990],[255,14365],[286,15202],[287,14365],[384,15030],[385,15030],[390,15002],[396,14999],[397,14999],[399,15025],[400,15034],[404,15002],[407,15035],[408,15048],[409,15031],[410,15031],[411,15030],[412,15035],[434,15054],[440,15003],[441,15003],[450,15049],[451,15000],[458,15034],[459,15055],[460,15034],[461,15034],[467,15037],[468,15001],[469,15033],[470,15035],[471,15000],[472,15002],[478,15036],[479,15036],[480,15036],[481,15036],[482,15035],[483,15035],[484,15035],[485,15036],[486,15036],[487,15025],[491,15000],[492,15000],[493,14999],[494,15000],[495,15000],[513,15053],[515,15034],[516,15033],[517,15024],[518,15050],[519,14999],[520,14999],[521,15051],[522,15052],[523,15025],[524,15000],[525,15032],[526,15026],[542,15205],[563,15205],[667,15205],[668,15205],[669,15205],[672,15205],[1009,15205],[1134,15206],[1334,15205],[1895,15205],[2032,15206],[2044,15205],[2060,15205],[2085,15205],[2107,15205],[2160,15205],[2162,15205],[2178,15205],[2266,15206],[2270,15205],[2288,15205],[2777,15030],[2778,15030],[2779,15030],[2783,15070],[2786,15070],[2788,15070],[2789,15030],[2791,15070],[2793,15030],[2794,15030],[2795,15030],[2797,15070],[2802,15070],[2806,15070],[2810,15070],[2812,15070],[2905,15030],[3054,15070],[3056,15070],[3058,15070],[3060,15070],[3062,15070],[3063,15070],[3064,15070],[3065,15070],[3067,15070],[3073,15002],[3077,15002],[3078,15002],[3079,15002],[3088,15002],[3091,15002],[3119,15002],[3134,15084],[3135,15084],[3136,15084],[3137,15084],[3145,15207],[3146,15207],[3147,15207],[3148,15208],[3149,15208],[3150,15209],[3151,15209],[3152,15209],[3153,15210],[3154,15210],[3156,15082],[3158,15082],[3159,15022],[3161,15064],[3253,15211],[3254,15211],[3279,15211],[3280,15211],[3281,15211],[3303,15211],[3525,15082],[3527,15082],[3528,15082],[3530,15082],[3568,15110],[3571,15110],[3572,15109],[3573,15111],[3580,15212],[3594,15110],[3596,15110],[3597,15110],[3598,15110],[3602,15110],[3603,15212],[3604,15109],[3606,15109],[3607,15109],[3608,15109],[3611,15109],[3612,15212],[3635,15212],[3636,15212],[3656,15212],[3657,15112],[3658,15112],[3659,15112],[3660,15112],[3662,15112],[3664,15112],[3666,15112],[3667,15112],[3701,15113],[3713,15111],[3715,15111],[3717,15111],[3718,15111],[3719,15111],[3720,15114],[3721,15114],[3766,15111],[3795,15114],[3796,15114],[3797,15114],[3798,15114],[3799,15114],[3800,15114],[3801,15114],[3802,15114],[3809,15111],[3818,15115],[3831,15116],[3832,15117],[3833,15116],[3863,15089],[3864,15089],[3865,15089],[3866,15089],[3868,15089],[3869,15089],[3870,15089],[4053,15031],[4054,15031],[4055,15031],[4056,15031],[4057,15031],[4058,15031],[4059,15031],[4060,15031],[4061,15031],[4062,15031],[4169,15032],[4170,15032],[4171,15032],[4172,15032],[4173,15032],[4174,15032],[4175,15032],[4176,15032],[4177,15032],[4178,15032],[4181,15032],[4183,15032],[4188,15032],[4193,15032],[4194,15032],[4195,15032],[4515,15048],[4516,15024],[4517,15213],[4518,15213],[4519,15213],[4520,15213],[4521,15213],[4522,15213],[4523,15213],[4524,15213],[4525,15213],[4528,14999],[4529,14999],[4530,14999],[4531,14999],[4538,14999],[4541,14999],[4542,14999],[4543,14999],[4544,14999],[4647,15045],[4648,15045],[4649,15045],[4650,15045],[4651,15045],[4652,15045],[4653,15045],[4654,15045],[4655,15045],[4657,15045],[4658,15045],[4660,15045],[4661,15045],[4663,15045],[4694,15045],[4712,15048],[4713,15214],[4714,15214],[4716,15074],[4717,15074],[4718,15074],[4719,15046],[4724,15074],[4725,15074],[4728,15074],[4902,15047],[4903,15071],[4904,15047],[4905,15047],[4906,15047],[4912,15071],[4914,15071],[5111,15049],[5112,15049],[5116,15049],[5117,15049],[5118,15049],[5119,15049],[5120,15049],[5121,15049],[5128,15049],[5162,15215],[5163,15215],[5164,15215],[5165,15215],[5166,15215],[5167,15215],[5168,15215],[5169,15215],[5170,15215],[5171,15215],[5172,15215],[5173,15215],[5174,15215],[5175,15215],[5176,15215],[5177,15215],[5178,15215],[5179,15215],[5180,15215],[5181,15215],[5182,15215],[5183,15215],[5184,15215],[5185,15215],[5186,15215],[5187,15215],[5188,15215],[5189,15215],[5190,15215],[5191,15215],[5192,15215],[5193,15215],[5194,15215],[5195,15215],[5196,15215],[5197,15215],[5198,15215],[5199,15215],[5200,15215],[5201,15215],[5202,15215],[5203,15215],[5204,15215],[5205,15215],[5206,15215],[5207,15215],[5208,15215],[5209,15215],[5210,15215],[5211,15215],[5212,15215],[5213,15215],[5214,15215],[5215,15215],[5216,15215],[5217,15215],[5218,15215],[5219,15215],[5220,15215],[5221,15215],[5222,15215],[5223,15215],[5224,15215],[5225,15215],[5226,15215],[5227,15215],[5228,15215],[5229,15215],[5230,15215],[5231,15215],[5232,15215],[5233,15215],[5234,15215],[5235,15215],[5236,15215],[5237,15215],[5238,15215],[5239,15215],[5240,15215],[5241,15215],[5242,15215],[5243,15215],[5244,15215],[5245,15215],[5246,15215],[5247,15215],[5248,15215],[5249,15215],[5250,15215],[5251,15215],[5252,15215],[5253,15215],[5254,15215],[5255,15215],[5256,15215],[5257,15215],[5258,15215],[5259,15215],[5260,15215],[5261,15215],[5262,15215],[5263,15215],[5264,15215],[5265,15215],[5266,15215],[5267,15215],[5268,15215],[5269,15215],[5270,15215],[5271,15215],[5272,15215],[5273,15215],[5274,15215],[5275,15215],[5276,15215],[5277,15215],[5278,15215],[5279,15215],[5280,15215],[5281,15215],[5282,15215],[5283,15215],[5284,15215],[5285,15215],[5286,15215],[5287,15215],[5288,15215],[5289,15215],[5290,15215],[5291,15215],[5292,15215],[5293,15215],[5294,15215],[5295,15215],[5296,15215],[5297,15215],[5298,15215],[5299,15215],[5300,15215],[5301,15215],[5302,15215],[5303,15215],[5304,15215],[5305,15215],[5306,15215],[5307,15215],[5308,15215],[5309,15215],[5310,15215],[5311,15215],[5312,15215],[5313,15215],[5314,15215],[5315,15215],[5316,15215],[5317,15215],[5318,15215],[5319,15215],[5320,15215],[5321,15215],[5322,15215],[5323,15215],[5324,15215],[5325,15215],[5326,15215],[5327,15215],[5328,15215],[5329,15215],[5330,15215],[5331,15215],[5332,15215],[5333,15215],[5334,15215],[5335,15215],[5336,15215],[5337,15215],[5338,15215],[5339,15215],[5340,15215],[5341,15215],[5342,15215],[5343,15215],[5344,15215],[5345,15215],[5346,15215],[5347,15215],[5348,15215],[5349,15215],[5350,15215],[5351,15215],[5352,15215],[5353,15215],[5354,15215],[5355,15215],[5356,15215],[5357,15215],[5358,15215],[5359,15215],[5360,15215],[5361,15215],[5362,15215],[5363,15215],[5364,15215],[5365,15215],[5366,15215],[5367,15215],[5368,15215],[5369,15215],[5370,15215],[5371,15215],[5372,15215],[5373,15215],[5374,15215],[5375,15215],[5376,15215],[5377,15215],[5378,15215],[5379,15215],[5380,15215],[5381,15215],[5382,15215],[5383,15215],[5384,15215],[5385,15215],[5386,15215],[5387,15215],[5388,15215],[5389,15215],[5390,15215],[5391,15215],[5392,15215],[5393,15215],[5394,15215],[5395,15215],[5396,15215],[5397,15215],[5398,15215],[5399,15215],[5400,15215],[5401,15215],[5402,15215],[5403,15215],[5404,15215],[5405,15215],[5406,15215],[5407,15215],[5408,15215],[5409,15215],[5410,15215],[5411,15215],[5412,15215],[5413,15215],[5414,15215],[5415,15215],[5416,15215],[5417,15215],[5418,15044],[5419,15037],[5421,15033],[5422,15062],[5423,15062],[5424,15062],[5428,15042],[5430,15042],[5431,15119],[5432,15120],[5433,15037],[5434,15001],[5435,15033],[5438,15033],[5894,15033],[5895,15033],[5896,15033],[5957,15033],[5958,15033],[5959,15033],[5960,15051],[5963,15051],[5964,15051],[5965,15051],[5986,15052],[5989,15052],[5990,15052],[6009,15052],[6070,15000],[6071,15000],[6072,15000],[6074,15000],[6075,15000],[6081,15000],[6082,15000],[6085,15000],[6086,15000],[6087,15000],[6088,15000],[6090,15000],[6093,15000],[6122,15000],[6177,15000],[6178,15000],[6229,15024],[6230,15024],[6231,15050],[6232,15050],[6248,15053],[6249,15122],[6250,15053],[6253,15043],[6255,15053],[6259,15053],[6275,15053],[6276,15053],[6288,15122],[6307,15122],[6322,15122],[6323,15053],[6335,15053],[6336,15053],[6338,15053],[6339,15053],[6340,15053],[6343,15053],[6348,15053],[6350,15053],[6351,15053],[6367,15053],[6368,15053],[6369,15053],[6409,15053],[6410,15053],[6432,15043],[6433,15043],[6434,15043],[6435,15043],[6436,15043],[6450,15123],[6451,15123],[6454,15123],[6456,15123],[6458,15123],[6459,15123],[6472,15123],[6485,15124],[6486,15124],[6487,15124],[6488,15124],[6489,15124],[6490,15124],[6491,15124],[6564,15076],[6567,15076],[6569,15076],[6651,15068],[6653,15068],[6656,15121],[6657,15068],[6658,15068],[6733,14999],[6734,15031],[6735,15031],[6736,14999],[6737,15000],[6738,14999],[6739,14999],[6740,15000],[6745,15010],[6746,15010],[6747,15010],[6748,15168],[6749,15168],[6754,15010],[6755,15010],[6761,15010],[6763,15010],[6764,15010],[6765,15010],[6769,15010],[6770,15010],[6771,15010],[6772,15010],[6773,15010],[6774,15010],[6775,15010],[6776,15010],[6777,15010],[6778,15010],[6779,15010],[6780,15010],[6782,15216],[6783,15040],[6828,15130],[6829,15129],[6831,15128],[6833,15127],[6834,15130],[6835,15067],[6836,15067],[6837,15130],[6840,15067],[6844,15067],[6862,15129],[6874,15129],[6890,15129],[6900,15129],[6916,15129],[6939,15129],[6940,15129],[6948,15129],[6991,15129],[6992,15134],[7011,15128],[7012,15128],[7013,15128],[7028,15129],[7032,15129],[7048,15067],[7049,15067],[7052,15067],[7054,15067],[7056,15067],[7078,15127],[7079,15067],[7080,15067],[7087,15128],[7089,15127],[7097,15168],[7098,15168],[7099,15168],[7110,15080],[7111,15080],[7181,15004],[7182,15217],[7183,15004],[7187,15019],[7188,15217],[7196,15019],[7200,15218],[7233,15218],[7236,15218],[7271,15004],[7272,15004],[7273,15004],[7274,15004],[7277,15004],[7278,15004],[7284,15004],[7286,15135],[7287,15004],[7289,15004],[7295,15004],[7301,15004],[7308,15004],[7309,15004],[7405,15004],[7452,15100],[7453,15100],[7454,15100],[7455,15100],[7456,15100],[7457,15100],[7458,15100],[7459,15100],[7460,15100],[7461,15100],[7462,15100],[7463,15100],[7464,15100],[7465,15100],[7466,15100],[7467,15100],[7468,15100],[7469,15100],[7470,15100],[7471,15100],[7472,15100],[7473,15100],[7474,15100],[7475,15100],[7476,15100],[7477,15100],[7478,15100],[7479,15100],[7480,15100],[8747,15019],[8756,15137],[8765,15019],[8766,15019],[8768,15019],[8770,15019],[8772,15019],[8774,15019],[8776,15019],[8778,15019],[8780,15019],[8876,15219],[8878,15138],[8882,15139],[8883,15139],[8952,14988],[8953,14988],[8954,14988],[9066,15039],[9119,15041],[9120,15041],[9166,15140],[9167,15140],[9222,15141],[9223,15141],[9292,15142],[9293,15142],[9348,15143],[9349,15143],[9350,15143],[9444,15057],[9448,15057],[9450,15059],[9451,15059],[9460,15057],[9461,15057],[9462,15057],[9463,15057],[9467,15057],[9518,15057],[9555,15057],[9587,15034],[9590,15034],[9591,15034],[9594,15034],[9596,15034],[9601,15026],[9603,15026],[9604,15034],[9605,15034],[9606,15034],[9607,15034],[9608,15034],[9609,15027],[9613,15034],[9614,15034],[9617,15034],[9618,15034],[9619,15034],[9620,15034],[9621,15034],[9622,15029],[9623,15034],[9624,15026],[9959,15054],[9960,15054],[9966,15054],[9974,15220],[9975,15220],[10016,15003],[10017,15003],[10018,15003],[10023,15003],[10024,15003],[10061,15221],[10062,15221],[10063,15088],[10068,15069],[10073,15069],[10074,15069],[10077,15069],[10079,15069],[10082,15069],[10172,15069],[10173,15069],[10174,15069],[10175,15069],[10176,15069],[10177,15069],[10219,15088],[10220,15088],[10221,15088],[10283,15152],[10284,15152],[10299,15152],[10300,15152],[10303,15152],[10307,15152],[10406,15090],[10407,15090],[10408,15090],[10482,15153],[10483,15153],[10484,15153],[10545,15154],[10546,15154],[10547,15154],[10548,15154],[10638,15155],[10639,15155],[10640,15155],[10641,15155],[10642,15155],[10643,15155],[10778,15156],[10779,15156],[10780,15156],[10848,15121],[10869,15222],[10870,15222],[10871,15222],[10872,15222],[10873,15222],[10874,15222],[10875,15222],[10876,15222],[10877,15222],[10878,15025],[10879,15025],[10880,15025],[10891,15056],[10893,15055],[10895,15055],[10896,15055],[10898,15055],[10899,15159],[10917,15055],[10932,15158],[10933,15055],[10936,15055],[10938,15160],[10939,15159],[10949,15055],[10950,15055],[10951,15055],[10952,15055],[10953,15055],[11149,15055],[11153,15055],[11272,15161],[11273,15161],[11274,15161],[11275,15161],[11343,15145],[11344,15029],[11345,15029],[11347,15027],[11353,15026],[11362,15026],[11364,15027],[11368,15026],[11369,15029],[11370,15026],[11371,15028],[11372,15027],[11373,15026],[11374,15145],[11375,15029],[11376,15029],[11377,15027],[11378,15029],[11379,15145],[11380,15029],[11381,15026],[11457,15027],[11468,15027],[11469,15027],[11470,15027],[11575,15027],[11576,15027],[11615,15027],[11616,15027],[11697,15223],[11698,15223],[11699,15223],[11700,15223],[11701,15223],[11702,15223],[11703,15223],[11704,15223],[11705,15223],[11706,15223],[11707,15223],[11708,15223],[11709,15223],[11710,15223],[11711,15223],[11712,15223],[11713,15163],[11738,15163],[11744,15150],[11745,15150],[11746,15165],[11747,15126],[11838,15126],[11866,15166],[11867,15165],[11890,15162],[11891,15162],[11892,15162],[11963,15038],[11964,15038],[11965,15038],[11966,15038],[11967,15038],[11968,15038],[11969,15038],[11974,15038],[11975,15038],[11976,15038],[11977,15038],[11978,15038],[11979,15038],[11980,15038],[11981,15038],[11982,15038],[11988,15038],[12042,15038],[12086,15038],[12087,15038],[12106,15038],[12112,15038],[12113,15038],[12114,15038],[12115,15038],[12116,15038],[12117,15038],[12118,15038],[12119,15038],[12120,15038],[12121,15038],[12122,15038],[12123,15038],[12124,15038],[12125,15038],[12126,15038],[12127,15038],[12128,15038],[12129,15038],[12130,15038],[12131,15038],[12132,15038],[12133,15038],[12134,15038],[12135,15038],[12136,15038],[12137,15038],[12138,15038],[12139,15038],[12140,15038],[12141,15038],[12142,15038],[12143,15038],[12144,15038],[12145,15038],[12146,15038],[12147,15038],[12148,15038],[12149,15038],[12150,15038],[12151,15038],[12152,15038],[12153,15038],[12154,15038],[12155,15038],[12156,15038],[12157,15038],[12158,15038],[12159,15038],[12160,15038],[12161,15038],[12162,15038],[12163,15038],[12164,15038],[12165,15038],[12166,15038],[12167,15038],[12168,15038],[12197,15038],[12209,15164],[12231,15164],[12232,15164],[12233,15164],[12234,15164],[12235,15164],[12241,15149],[12247,15149],[12248,15149],[12249,15149],[12250,15149],[12251,15167],[12260,15149],[12275,15010],[12276,15010],[12277,15010],[12278,15168],[12279,15168],[12293,15010],[12342,15010],[12343,15010],[12361,15010],[12363,15010],[12386,15151],[12387,15170],[12388,15148],[12390,15148],[12391,15151],[12393,15151],[12397,15224],[12417,15224],[12418,15224],[12421,15224],[12425,15224],[12428,15176],[12438,15177],[12439,15179],[12440,15179],[12441,15175],[12442,15175],[12443,15175],[12444,15175],[12448,15180],[12449,15180],[12450,15181],[12451,15178],[12453,15174],[12454,15182],[12455,15182],[12697,15178],[12711,15178],[12712,15174],[12713,15174],[12714,15174],[12716,15174],[12717,15174],[12718,15174],[12719,15174],[12720,15174],[12721,15174],[12859,15182],[12860,15182],[12861,15225],[12862,15186],[12863,15186],[12874,15151],[12875,15175],[12877,15187],[12878,15148],[12879,15151],[12881,15151],[12882,15187],[12883,15189],[12884,15176],[12908,15224],[12915,15176],[12918,15188],[12919,15189],[12920,15176],[12921,15226],[12956,15226],[12981,15192],[12982,15192],[12983,15190],[13029,15193],[13051,15187],[13052,15187],[13053,15187],[13068,15187],[13082,15195],[13083,15195],[13084,15195],[13119,15195],[13120,15195],[13139,15028],[13140,15028],[13159,15081],[13195,15035],[13196,15035],[13198,15035],[13200,15035],[13206,15035],[13208,15035],[13209,15035],[13216,15035],[13217,15035],[13219,15035],[13221,15035],[13223,15035],[13224,15035],[13225,15035],[13228,15035],[13230,15035],[13231,15035],[13235,15035],[13238,15035],[13239,15035],[13240,15035],[13241,15035],[13539,15227],[13543,15196],[13544,15196],[13579,15227],[13594,15036],[13598,15036],[13600,15036],[13603,15036],[13612,15036],[13613,15036],[13614,15036],[13615,15036],[13620,15036],[13621,15036],[13623,15075],[13625,15075],[13626,15036],[13627,15036],[13628,15036],[13629,15036],[13630,15036],[13631,15036],[13632,15036],[13633,15036],[13634,15036],[13635,15036],[13636,15036],[13637,15036],[13639,15036],[13640,15036],[13641,15036],[13642,15036],[13643,15036],[13644,15036],[13645,15097],[13646,15036],[14053,15036],[14101,15036],[14233,15097],[14234,15097],[14259,15199],[14260,15198],[14525,14989],[14526,14989],[14653,15203],[14654,15203],[14655,15203],[14658,15203],[14659,15203],[14660,15203],[14661,15203],[14662,15203],[14812,14990]],"b":[[38,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[39,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[105,"impl-FromSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[106,"impl-FromSql-for-Impl%3CBlockHash%3E"],[107,"impl-FromSql-for-Impl%3CTxid%3E"],[108,"impl-FromSql-for-Impl%3CTransaction%3E"],[109,"impl-FromSql-for-Impl%3CScriptBuf%3E"],[110,"impl-FromSql-for-Impl%3CDescriptorId%3E"],[111,"impl-FromSql-for-Impl%3CAmount%3E"],[112,"impl-FromSql-for-Impl%3CNetwork%3E"],[167,"impl-Debug-for-Balance"],[168,"impl-Display-for-Balance"],[173,"impl-Debug-for-DescriptorId"],[174,"impl-LowerHex-for-DescriptorId"],[175,"impl-UpperHex-for-DescriptorId"],[176,"impl-Display-for-DescriptorId"],[179,"impl-From%3CTxPosInBlock%3C\'b%3E%3E-for-BlockId"],[180,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[181,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[302,"impl-ToSql-for-Impl%3CTransaction%3E"],[303,"impl-ToSql-for-Impl%3CNetwork%3E"],[304,"impl-ToSql-for-Impl%3CTxid%3E"],[305,"impl-ToSql-for-Impl%3CBlockHash%3E"],[306,"impl-ToSql-for-Impl%3CDescriptorId%3E"],[307,"impl-ToSql-for-Impl%3CAmount%3E"],[308,"impl-ToSql-for-Impl%3CScriptBuf%3E"],[309,"impl-ToSql-for-Impl%3CDescriptor%3CDescriptorPublicKey%3E%3E"],[585,"impl-AsMut%3CScript%3E-for-Script"],[586,"impl-AsMut%3C%5Bu8%5D%3E-for-Script"],[587,"impl-AsMut%3CScript%3E-for-ScriptBuf"],[588,"impl-AsMut%3C%5Bu8%5D%3E-for-ScriptBuf"],[613,"impl-AsRef%3C%5Bu8%5D%3E-for-FilterHash"],[614,"impl-AsRef%3C%5Bu8;+bitcoin::::bip158::%7Bimpl%2317%7D::%7Bconstant%230%7D%5D%3E-for-FilterHash"],[615,"impl-AsRef%3C%5Bu8%5D%3E-for-FilterHeader"],[616,"impl-AsRef%3C%5Bu8;+bitcoin::::bip158::%7Bimpl%2324%7D::%7Bconstant%230%7D%5D%3E-for-FilterHeader"],[617,"impl-AsRef%3C%5Bu8%5D%3E-for-XKeyIdentifier"],[618,"impl-AsRef%3C%5Bu8;+bitcoin::::bip32::%7Bimpl%23106%7D::%7Bconstant%230%7D%5D%3E-for-XKeyIdentifier"],[619,"impl-AsRef%3C%5Bu8%5D%3E-for-BlockHash"],[620,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2322%7D::%7Bconstant%230%7D%5D%3E-for-BlockHash"],[621,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2329%7D::%7Bconstant%230%7D%5D%3E-for-TxMerkleNode"],[622,"impl-AsRef%3C%5Bu8%5D%3E-for-TxMerkleNode"],[623,"impl-AsRef%3C%5Bu8%5D%3E-for-WitnessMerkleNode"],[624,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2336%7D::%7Bconstant%230%7D%5D%3E-for-WitnessMerkleNode"],[625,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::block::%7Bimpl%2343%7D::%7Bconstant%230%7D%5D%3E-for-WitnessCommitment"],[626,"impl-AsRef%3C%5Bu8%5D%3E-for-WitnessCommitment"],[627,"impl-AsRef%3C%5Bu8%5D%3E-for-Script"],[628,"impl-AsRef%3CScript%3E-for-Script"],[629,"impl-AsRef%3CScript%3E-for-ScriptBuf"],[630,"impl-AsRef%3C%5Bu8%5D%3E-for-ScriptBuf"],[631,"impl-AsRef%3C%5Bu8%5D%3E-for-ScriptHash"],[632,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::script::%7Bimpl%2356%7D::%7Bconstant%230%7D%5D%3E-for-ScriptHash"],[633,"impl-AsRef%3CPushBytes%3E-for-ScriptHash"],[634,"impl-AsRef%3CPushBytes%3E-for-WScriptHash"],[635,"impl-AsRef%3C%5Bu8%5D%3E-for-WScriptHash"],[636,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::script::%7Bimpl%2363%7D::%7Bconstant%230%7D%5D%3E-for-WScriptHash"],[637,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::transaction::%7Bimpl%2349%7D::%7Bconstant%230%7D%5D%3E-for-Txid"],[638,"impl-AsRef%3C%5Bu8%5D%3E-for-Txid"],[639,"impl-AsRef%3C%5Bu8;+bitcoin::::blockdata::transaction::%7Bimpl%2356%7D::%7Bconstant%230%7D%5D%3E-for-Wtxid"],[640,"impl-AsRef%3C%5Bu8%5D%3E-for-Wtxid"],[641,"impl-AsRef%3CPushBytes%3E-for-PubkeyHash"],[642,"impl-AsRef%3C%5Bu8%5D%3E-for-PubkeyHash"],[643,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::key::%7Bimpl%2383%7D::%7Bconstant%230%7D%5D%3E-for-PubkeyHash"],[644,"impl-AsRef%3CPushBytes%3E-for-WPubkeyHash"],[645,"impl-AsRef%3C%5Bu8%5D%3E-for-WPubkeyHash"],[646,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::key::%7Bimpl%2390%7D::%7Bconstant%230%7D%5D%3E-for-WPubkeyHash"],[647,"impl-AsRef%3C%5Bu8%5D%3E-for-LegacySighash"],[648,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::sighash::%7Bimpl%2349%7D::%7Bconstant%230%7D%5D%3E-for-LegacySighash"],[649,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::sighash::%7Bimpl%2356%7D::%7Bconstant%230%7D%5D%3E-for-SegwitV0Sighash"],[650,"impl-AsRef%3C%5Bu8%5D%3E-for-SegwitV0Sighash"],[651,"impl-AsRef%3C%5Bu8;+bitcoin::::crypto::sighash::%7Bimpl%23109%7D::%7Bconstant%230%7D%5D%3E-for-TapSighash"],[652,"impl-AsRef%3C%5Bu8%5D%3E-for-TapSighash"],[654,"impl-AsRef%3C%5Bu8;+bitcoin::::taproot::%7Bimpl%2371%7D::%7Bconstant%230%7D%5D%3E-for-TapLeafHash"],[655,"impl-AsRef%3C%5Bu8%5D%3E-for-TapLeafHash"],[656,"impl-AsRef%3C%5Bu8;+bitcoin::::taproot::%7Bimpl%23104%7D::%7Bconstant%230%7D%5D%3E-for-TapNodeHash"],[657,"impl-AsRef%3C%5Bu8%5D%3E-for-TapNodeHash"],[658,"impl-AsRef%3C%5Bu8%5D%3E-for-TapTweakHash"],[659,"impl-AsRef%3C%5Bu8;+bitcoin::::taproot::%7Bimpl%23137%7D::%7Bconstant%230%7D%5D%3E-for-TapTweakHash"],[1113,"impl-Deserialize%3C\'de%3E-for-Psbt"],[1114,"impl-Psbt"],[1125,"impl-Div%3CWeight%3E-for-Amount"],[1126,"impl-Div%3Cu64%3E-for-Amount"],[1128,"impl-Div%3Cu64%3E-for-Weight"],[1129,"impl-Div-for-Weight"],[1178,"impl-PartialEq%3CScriptBuf%3E-for-Script"],[1179,"impl-PartialEq-for-Script"],[1180,"impl-PartialEq-for-ScriptBuf"],[1181,"impl-PartialEq%3CScript%3E-for-ScriptBuf"],[1355,"impl-Debug-for-Denomination"],[1356,"impl-Display-for-Denomination"],[1357,"impl-Debug-for-Amount"],[1358,"impl-Display-for-Amount"],[1359,"impl-Display-for-SignedAmount"],[1360,"impl-Debug-for-SignedAmount"],[1361,"impl-Debug-for-FeeRate"],[1362,"impl-Display-for-FeeRate"],[1363,"impl-Debug-for-XOnlyPublicKey"],[1364,"impl-LowerHex-for-XOnlyPublicKey"],[1365,"impl-Display-for-XOnlyPublicKey"],[1366,"impl-Display-for-Weight"],[1367,"impl-Debug-for-Weight"],[1368,"impl-Debug-for-AddressType"],[1369,"impl-Display-for-AddressType"],[1371,"impl-Debug-for-Address%3CV%3E"],[1372,"impl-Display-for-Address"],[1373,"impl-Display-for-FilterHash"],[1374,"impl-LowerHex-for-FilterHash"],[1375,"impl-Debug-for-FilterHash"],[1376,"impl-UpperHex-for-FilterHash"],[1377,"impl-UpperHex-for-FilterHeader"],[1378,"impl-LowerHex-for-FilterHeader"],[1379,"impl-Display-for-FilterHeader"],[1380,"impl-Debug-for-FilterHeader"],[1381,"impl-Display-for-XKeyIdentifier"],[1382,"impl-Debug-for-XKeyIdentifier"],[1383,"impl-UpperHex-for-XKeyIdentifier"],[1384,"impl-LowerHex-for-XKeyIdentifier"],[1385,"impl-LowerHex-for-BlockHash"],[1386,"impl-Debug-for-BlockHash"],[1387,"impl-UpperHex-for-BlockHash"],[1388,"impl-Display-for-BlockHash"],[1389,"impl-Display-for-TxMerkleNode"],[1390,"impl-Debug-for-TxMerkleNode"],[1391,"impl-UpperHex-for-TxMerkleNode"],[1392,"impl-LowerHex-for-TxMerkleNode"],[1393,"impl-Display-for-WitnessMerkleNode"],[1394,"impl-LowerHex-for-WitnessMerkleNode"],[1395,"impl-UpperHex-for-WitnessMerkleNode"],[1396,"impl-Debug-for-WitnessMerkleNode"],[1397,"impl-Display-for-WitnessCommitment"],[1398,"impl-Debug-for-WitnessCommitment"],[1399,"impl-UpperHex-for-WitnessCommitment"],[1400,"impl-LowerHex-for-WitnessCommitment"],[1402,"impl-Debug-for-Opcode"],[1403,"impl-Display-for-Opcode"],[1404,"impl-Display-for-Script"],[1405,"impl-LowerHex-for-Script"],[1406,"impl-Debug-for-Script"],[1407,"impl-UpperHex-for-Script"],[1408,"impl-LowerHex-for-ScriptBuf"],[1409,"impl-UpperHex-for-ScriptBuf"],[1410,"impl-Debug-for-ScriptBuf"],[1411,"impl-Display-for-ScriptBuf"],[1413,"impl-Debug-for-WitnessVersion"],[1414,"impl-Display-for-WitnessVersion"],[1415,"impl-Display-for-ScriptHash"],[1416,"impl-Debug-for-ScriptHash"],[1417,"impl-UpperHex-for-ScriptHash"],[1418,"impl-LowerHex-for-ScriptHash"],[1419,"impl-Debug-for-WScriptHash"],[1420,"impl-LowerHex-for-WScriptHash"],[1421,"impl-Display-for-WScriptHash"],[1422,"impl-UpperHex-for-WScriptHash"],[1423,"impl-LowerHex-for-Txid"],[1424,"impl-UpperHex-for-Txid"],[1425,"impl-Display-for-Txid"],[1426,"impl-Debug-for-Txid"],[1427,"impl-UpperHex-for-Wtxid"],[1428,"impl-LowerHex-for-Wtxid"],[1429,"impl-Display-for-Wtxid"],[1430,"impl-Debug-for-Wtxid"],[1431,"impl-Debug-for-OutPoint"],[1432,"impl-Display-for-OutPoint"],[1434,"impl-Display-for-Sequence"],[1435,"impl-UpperHex-for-Sequence"],[1436,"impl-Debug-for-Sequence"],[1437,"impl-LowerHex-for-Sequence"],[1442,"impl-Display-for-PublicKey"],[1443,"impl-Debug-for-PublicKey"],[1444,"impl-Display-for-PubkeyHash"],[1445,"impl-Debug-for-PubkeyHash"],[1446,"impl-UpperHex-for-PubkeyHash"],[1447,"impl-LowerHex-for-PubkeyHash"],[1448,"impl-UpperHex-for-WPubkeyHash"],[1449,"impl-Display-for-WPubkeyHash"],[1450,"impl-Debug-for-WPubkeyHash"],[1451,"impl-LowerHex-for-WPubkeyHash"],[1452,"impl-Debug-for-CompressedPublicKey"],[1453,"impl-Display-for-CompressedPublicKey"],[1454,"impl-Debug-for-PrivateKey"],[1455,"impl-Display-for-PrivateKey"],[1456,"impl-LowerHex-for-LegacySighash"],[1457,"impl-Display-for-LegacySighash"],[1458,"impl-Debug-for-LegacySighash"],[1459,"impl-UpperHex-for-LegacySighash"],[1460,"impl-Debug-for-SegwitV0Sighash"],[1461,"impl-Display-for-SegwitV0Sighash"],[1462,"impl-UpperHex-for-SegwitV0Sighash"],[1463,"impl-LowerHex-for-SegwitV0Sighash"],[1464,"impl-Display-for-TapSighash"],[1465,"impl-LowerHex-for-TapSighash"],[1466,"impl-UpperHex-for-TapSighash"],[1467,"impl-Debug-for-TapSighash"],[1468,"impl-Display-for-TapSighashType"],[1469,"impl-Debug-for-TapSighashType"],[1470,"impl-Debug-for-EcdsaSighashType"],[1471,"impl-Display-for-EcdsaSighashType"],[1474,"impl-Display-for-Network"],[1475,"impl-Debug-for-Network"],[1476,"impl-LowerHex-for-Work"],[1477,"impl-Display-for-Work"],[1478,"impl-UpperHex-for-Work"],[1479,"impl-Debug-for-Work"],[1480,"impl-UpperHex-for-Target"],[1481,"impl-Debug-for-Target"],[1482,"impl-LowerHex-for-Target"],[1483,"impl-Display-for-Target"],[1484,"impl-UpperHex-for-CompactTarget"],[1485,"impl-LowerHex-for-CompactTarget"],[1486,"impl-Debug-for-CompactTarget"],[1487,"impl-Display-for-Psbt"],[1488,"impl-Debug-for-Psbt"],[1489,"impl-Display-for-TapLeafHash"],[1490,"impl-UpperHex-for-TapLeafHash"],[1491,"impl-LowerHex-for-TapLeafHash"],[1492,"impl-Debug-for-TapLeafHash"],[1493,"impl-UpperHex-for-TapNodeHash"],[1494,"impl-LowerHex-for-TapNodeHash"],[1495,"impl-Debug-for-TapNodeHash"],[1496,"impl-Display-for-TapNodeHash"],[1497,"impl-LowerHex-for-TapTweakHash"],[1498,"impl-Display-for-TapTweakHash"],[1499,"impl-Debug-for-TapTweakHash"],[1500,"impl-UpperHex-for-TapTweakHash"],[1509,"impl-From%3CPublicKey%3E-for-XOnlyPublicKey"],[1510,"impl-From%3CTweakedPublicKey%3E-for-XOnlyPublicKey"],[1512,"impl-From%3CCompressedPublicKey%3E-for-XOnlyPublicKey"],[1513,"impl-From%3CPublicKey%3E-for-XOnlyPublicKey"],[1514,"impl-From%3CXOnlyPublicKey%3E-for-XOnlyPublicKey"],[1524,"impl-From%3C%26Xpub%3E-for-XKeyIdentifier"],[1525,"impl-From%3CXpub%3E-for-XKeyIdentifier"],[1526,"impl-From%3CHash%3E-for-XKeyIdentifier"],[1529,"impl-From%3CHash%3E-for-BlockHash"],[1530,"impl-From%3C%26Block%3E-for-BlockHash"],[1531,"impl-From%3C%26Header%3E-for-BlockHash"],[1532,"impl-From%3CBlock%3E-for-BlockHash"],[1533,"impl-From%3CHeader%3E-for-BlockHash"],[1535,"impl-From%3CHash%3E-for-TxMerkleNode"],[1536,"impl-From%3CTxid%3E-for-TxMerkleNode"],[1537,"impl-From%3CHash%3E-for-WitnessMerkleNode"],[1539,"impl-From%3CWtxid%3E-for-WitnessMerkleNode"],[1543,"impl-From%3CWitnessVersion%3E-for-Opcode"],[1544,"impl-From%3Cu8%3E-for-Opcode"],[1546,"impl-From%3CAddress%3E-for-ScriptBuf"],[1547,"impl-From%3CCow%3C\'a,+Script%3E%3E-for-ScriptBuf"],[1548,"impl-From%3C%26Script%3E-for-ScriptBuf"],[1550,"impl-From%3CVec%3Cu8%3E%3E-for-ScriptBuf"],[1554,"impl-From%3C%26Script%3E-for-ScriptHash"],[1555,"impl-From%3C%26ScriptBuf%3E-for-ScriptHash"],[1556,"impl-From%3CHash%3E-for-ScriptHash"],[1557,"impl-From%3CScriptBuf%3E-for-ScriptHash"],[1558,"impl-From%3CHash%3E-for-WScriptHash"],[1559,"impl-From%3CScriptBuf%3E-for-WScriptHash"],[1560,"impl-From%3C%26Script%3E-for-WScriptHash"],[1561,"impl-From%3C%26ScriptBuf%3E-for-WScriptHash"],[1564,"impl-From%3C%26Transaction%3E-for-Txid"],[1565,"impl-From%3CTransaction%3E-for-Txid"],[1566,"impl-From%3CHash%3E-for-Txid"],[1567,"impl-From%3C%26Transaction%3E-for-Wtxid"],[1569,"impl-From%3CTransaction%3E-for-Wtxid"],[1570,"impl-From%3CHash%3E-for-Wtxid"],[1573,"impl-From%3CRelLockTime%3E-for-Sequence"],[1575,"impl-From%3CLockTime%3E-for-Sequence"],[1578,"impl-From%3CVec%3C%26%5Bu8%5D%3E%3E-for-Witness"],[1579,"impl-From%3C%26%5B%26%5Bu8%5D%5D%3E-for-Witness"],[1580,"impl-From%3C%26%5BVec%3Cu8%3E%5D%3E-for-Witness"],[1582,"impl-From%3CVec%3CVec%3Cu8%3E%3E%3E-for-Witness"],[1583,"impl-From%3Cu32%3E-for-VarInt"],[1584,"impl-From%3Cusize%3E-for-VarInt"],[1585,"impl-From%3Cu16%3E-for-VarInt"],[1587,"impl-From%3Cu64%3E-for-VarInt"],[1588,"impl-From%3Cu8%3E-for-VarInt"],[1589,"impl-From%3CPublicKey%3E-for-PublicKey"],[1591,"impl-From%3CCompressedPublicKey%3E-for-PublicKey"],[1592,"impl-From%3CPublicKey%3E-for-PubkeyHash"],[1593,"impl-From%3C%26PublicKey%3E-for-PubkeyHash"],[1594,"impl-From%3CHash%3E-for-PubkeyHash"],[1595,"impl-From%3CCompressedPublicKey%3E-for-PubkeyHash"],[1597,"impl-From%3C%26CompressedPublicKey%3E-for-PubkeyHash"],[1598,"impl-From%3C%26CompressedPublicKey%3E-for-WPubkeyHash"],[1599,"impl-From%3CHash%3E-for-WPubkeyHash"],[1601,"impl-From%3CCompressedPublicKey%3E-for-WPubkeyHash"],[1624,"impl-From%3CScriptPath%3C\'s%3E%3E-for-TapLeafHash"],[1626,"impl-From%3CHash%3CTapLeafTag%3E%3E-for-TapLeafHash"],[1628,"impl-From%3C%26LeafNode%3E-for-TapNodeHash"],[1629,"impl-From%3CHash%3CTapBranchTag%3E%3E-for-TapNodeHash"],[1630,"impl-From%3CLeafNode%3E-for-TapNodeHash"],[1631,"impl-From%3CTapLeafHash%3E-for-TapNodeHash"],[1634,"impl-From%3C%26TaprootSpendInfo%3E-for-TapTweakHash"],[1635,"impl-From%3CHash%3CTapTweakTag%3E%3E-for-TapTweakHash"],[1637,"impl-From%3CTaprootSpendInfo%3E-for-TapTweakHash"],[1742,"impl-XOnlyPublicKey"],[1743,"impl-ParseableKey-for-XOnlyPublicKey"],[1756,"impl-PublicKey"],[1757,"impl-ParseableKey-for-PublicKey"],[1905,"impl-Index%3CRange%3Cusize%3E%3E-for-Script"],[1906,"impl-Index%3CRangeToInclusive%3Cusize%3E%3E-for-Script"],[1907,"impl-Index%3CRangeFull%3E-for-Script"],[1908,"impl-Index%3CRangeTo%3Cusize%3E%3E-for-Script"],[1909,"impl-Index%3CRangeFrom%3Cusize%3E%3E-for-Script"],[1910,"impl-Index%3CRangeInclusive%3Cusize%3E%3E-for-Script"],[1911,"impl-Index%3C(Bound%3Cusize%3E,+Bound%3Cusize%3E)%3E-for-Script"],[2054,"impl-Mul%3CFeeRate%3E-for-Weight"],[2055,"impl-Mul%3Cu64%3E-for-Weight"],[2123,"impl-PartialOrd-for-Script"],[2124,"impl-PartialOrd%3CScriptBuf%3E-for-Script"],[2125,"impl-PartialOrd-for-ScriptBuf"],[2126,"impl-PartialOrd%3CScript%3E-for-ScriptBuf"],[2220,"impl-Serialize-for-XOnlyPublicKey"],[2221,"impl-XOnlyPublicKey"],[2259,"impl-Serialize-for-Psbt"],[2260,"impl-Psbt"],[2285,"impl-Sum-for-Weight"],[2286,"impl-Sum%3C%26Weight%3E-for-Weight"],[2497,"impl-TryFrom%3CString%3E-for-FeeRate"],[2498,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-FeeRate"],[2500,"impl-TryFrom%3C%26str%3E-for-FeeRate"],[2502,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Weight"],[2503,"impl-TryFrom%3C%26str%3E-for-Weight"],[2505,"impl-TryFrom%3CString%3E-for-Weight"],[2520,"impl-TryFrom%3Cu8%3E-for-WitnessVersion"],[2521,"impl-TryFrom%3CFe32%3E-for-WitnessVersion"],[2522,"impl-TryFrom%3CInstruction%3C\'a%3E%3E-for-WitnessVersion"],[2524,"impl-TryFrom%3COpcode%3E-for-WitnessVersion"],[2531,"impl-TryFrom%3CString%3E-for-Sequence"],[2532,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Sequence"],[2534,"impl-TryFrom%3C%26str%3E-for-Sequence"],[2554,"impl-TryFrom%3CMagic%3E-for-Network"],[2555,"impl-TryFrom%3CChainHash%3E-for-Network"],[2906,"impl-Display-for-FromScriptError"],[2907,"impl-Debug-for-FromScriptError"],[2908,"impl-Display-for-P2shError"],[2909,"impl-Debug-for-P2shError"],[2910,"impl-Debug-for-UnknownAddressTypeError"],[2911,"impl-Display-for-UnknownAddressTypeError"],[2912,"impl-Debug-for-ParseError"],[2913,"impl-Display-for-ParseError"],[2914,"impl-Debug-for-UnknownHrpError"],[2915,"impl-Display-for-UnknownHrpError"],[2916,"impl-Display-for-NetworkValidationError"],[2917,"impl-Debug-for-NetworkValidationError"],[2918,"impl-Display-for-InvalidBase58PayloadLengthError"],[2919,"impl-Debug-for-InvalidBase58PayloadLengthError"],[2920,"impl-Debug-for-LegacyAddressTooLongError"],[2921,"impl-Display-for-LegacyAddressTooLongError"],[2922,"impl-Debug-for-InvalidLegacyPrefixError"],[2923,"impl-Display-for-InvalidLegacyPrefixError"],[2927,"impl-From%3CInfallible%3E-for-FromScriptError"],[2928,"impl-From%3CTryFromError%3E-for-FromScriptError"],[2929,"impl-From%3CError%3E-for-FromScriptError"],[2934,"impl-From%3CLegacyAddressTooLongError%3E-for-ParseError"],[2935,"impl-From%3CInvalidLegacyPrefixError%3E-for-ParseError"],[2936,"impl-From%3CNetworkValidationError%3E-for-ParseError"],[2937,"impl-From%3CError%3E-for-ParseError"],[2938,"impl-From%3CUnknownHrpError%3E-for-ParseError"],[2939,"impl-From%3CInvalidBase58PayloadLengthError%3E-for-ParseError"],[2941,"impl-From%3CTryFromError%3E-for-ParseError"],[2942,"impl-From%3CDecodeError%3E-for-ParseError"],[2943,"impl-From%3CInfallible%3E-for-ParseError"],[2944,"impl-From%3CError%3E-for-ParseError"],[3105,"impl-Display-for-ParseAmountError"],[3106,"impl-Debug-for-ParseAmountError"],[3107,"impl-Debug-for-Display"],[3108,"impl-Display-for-Display"],[3109,"impl-From%3CMissingDigitsError%3E-for-ParseAmountError"],[3110,"impl-From%3CTooPreciseError%3E-for-ParseAmountError"],[3112,"impl-From%3CInvalidCharacterError%3E-for-ParseAmountError"],[3113,"impl-From%3COutOfRangeError%3E-for-ParseAmountError"],[3114,"impl-From%3CInfallible%3E-for-ParseAmountError"],[3115,"impl-From%3CInputTooLargeError%3E-for-ParseAmountError"],[3168,"impl-AsMut%3CVec%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3169,"impl-AsMut%3C%5BT%5D%3E-for-Vec%3CT,+A%3E"],[3176,"impl-AsRef%3C%5BT%5D%3E-for-Vec%3CT,+A%3E"],[3177,"impl-AsRef%3CVec%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3178,"impl-AsRef%3C%5Bu8%5D%3E-for-String"],[3179,"impl-AsRef%3Cstr%3E-for-String"],[3180,"impl-AsRef%3COsStr%3E-for-String"],[3181,"impl-AsRef%3CPath%3E-for-String"],[3215,"impl-Decodable-for-Vec%3CVec%3Cu8%3E%3E"],[3216,"impl-Decodable-for-Vec%3Cu64%3E"],[3217,"impl-Decodable-for-Vec%3CTxOut%3E"],[3218,"impl-Decodable-for-Vec%3CAddrV2Message%3E"],[3219,"impl-Decodable-for-Vec%3Cu8%3E"],[3220,"impl-Decodable-for-Vec%3CShortId%3E"],[3221,"impl-Decodable-for-Vec%3CTapLeafHash%3E"],[3222,"impl-Decodable-for-Vec%3C(u32,+Address)%3E"],[3223,"impl-Decodable-for-Vec%3CTxIn%3E"],[3224,"impl-Decodable-for-Vec%3CFilterHash%3E"],[3225,"impl-Decodable-for-Vec%3CVarInt%3E"],[3226,"impl-Decodable-for-Vec%3CPrefilledTransaction%3E"],[3227,"impl-Decodable-for-Vec%3CTransaction%3E"],[3228,"impl-Decodable-for-Vec%3CFilterHeader%3E"],[3229,"impl-Decodable-for-Vec%3CTxMerkleNode%3E"],[3230,"impl-Decodable-for-Vec%3CBlockHash%3E"],[3231,"impl-Decodable-for-Vec%3CHeader%3E"],[3232,"impl-Decodable-for-Vec%3CInventory%3E"],[3233,"impl-Encodable-for-Vec%3CShortId%3E"],[3234,"impl-Encodable-for-Vec%3CTxIn%3E"],[3235,"impl-Encodable-for-Vec%3CInventory%3E"],[3236,"impl-Encodable-for-Vec%3CPrefilledTransaction%3E"],[3237,"impl-Encodable-for-Vec%3CTxMerkleNode%3E"],[3238,"impl-Encodable-for-Vec%3CTxOut%3E"],[3239,"impl-Encodable-for-Vec%3CAddrV2Message%3E"],[3240,"impl-Encodable-for-Vec%3CFilterHeader%3E"],[3241,"impl-Encodable-for-Vec%3Cu8%3E"],[3242,"impl-Encodable-for-Vec%3CVec%3Cu8%3E%3E"],[3243,"impl-Encodable-for-Vec%3CVarInt%3E"],[3244,"impl-Encodable-for-Vec%3Cu64%3E"],[3245,"impl-Encodable-for-Vec%3CHeader%3E"],[3246,"impl-Encodable-for-Vec%3C(u32,+Address)%3E"],[3247,"impl-Encodable-for-Vec%3CTapLeafHash%3E"],[3248,"impl-Encodable-for-Vec%3CTransaction%3E"],[3249,"impl-Encodable-for-Vec%3CFilterHash%3E"],[3250,"impl-Encodable-for-Vec%3CBlockHash%3E"],[3284,"impl-PartialEq%3C%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3285,"impl-PartialEq%3C%26mut+%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3286,"impl-PartialEq%3CVec%3CU,+A2%3E%3E-for-Vec%3CT,+A1%3E"],[3287,"impl-PartialEq%3C%26%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3288,"impl-PartialEq%3C%26%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3289,"impl-PartialEq%3C%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3290,"impl-PartialEq%3CCow%3C\'a,+str%3E%3E-for-String"],[3291,"impl-PartialEq%3Cstr%3E-for-String"],[3292,"impl-PartialEq%3C%26str%3E-for-String"],[3293,"impl-PartialEq-for-String"],[3294,"impl-PartialEq%3CValue%3E-for-String"],[3304,"impl-Extend%3CT%3E-for-Vec%3CT,+A%3E"],[3305,"impl-Extend%3C%26T%3E-for-Vec%3CT,+A%3E"],[3306,"impl-Extend%3CString%3E-for-String"],[3307,"impl-Extend%3C%26char%3E-for-String"],[3308,"impl-Extend%3C%26str%3E-for-String"],[3309,"impl-Extend%3CBox%3Cstr%3E%3E-for-String"],[3310,"impl-Extend%3CCow%3C\'a,+str%3E%3E-for-String"],[3311,"impl-Extend%3Cchar%3E-for-String"],[3315,"impl-Extend%3CT%3E-for-Vec%3CT,+A%3E"],[3316,"impl-Extend%3C%26T%3E-for-Vec%3CT,+A%3E"],[3317,"impl-Extend%3CCow%3C\'a,+str%3E%3E-for-String"],[3318,"impl-Extend%3C%26char%3E-for-String"],[3319,"impl-Extend%3Cchar%3E-for-String"],[3320,"impl-Extend%3C%26str%3E-for-String"],[3321,"impl-Extend%3CString%3E-for-String"],[3322,"impl-Extend%3CT%3E-for-Vec%3CT,+A%3E"],[3323,"impl-Extend%3C%26T%3E-for-Vec%3CT,+A%3E"],[3324,"impl-Extend%3Cchar%3E-for-String"],[3325,"impl-Extend%3C%26char%3E-for-String"],[3327,"impl-Write-for-Vec%3Cu8,+A%3E"],[3328,"impl-Write-for-Vec%3Cu8%3E"],[3329,"impl-Display-for-Error"],[3330,"impl-Debug-for-Error"],[3331,"impl-Display-for-InvalidCharacterError"],[3332,"impl-Debug-for-InvalidCharacterError"],[3334,"impl-Display-for-String"],[3335,"impl-Debug-for-String"],[3336,"impl-From%3CInfallible%3E-for-Error"],[3338,"impl-From%3CTooShortError%3E-for-Error"],[3339,"impl-From%3CInvalidCharacterError%3E-for-Error"],[3340,"impl-From%3CIncorrectChecksumError%3E-for-Error"],[3342,"impl-From%3C%26mut+%5BT;+N%5D%3E-for-Vec%3CT%3E"],[3343,"impl-From%3C%26mut+%5BT%5D%3E-for-Vec%3CT%3E"],[3344,"impl-From%3C%26%5BT;+N%5D%3E-for-Vec%3CT%3E"],[3345,"impl-From%3CCString%3E-for-Vec%3Cu8%3E"],[3346,"impl-From%3CVecDeque%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3347,"impl-From%3CCow%3C\'a,+%5BT%5D%3E%3E-for-Vec%3CT%3E"],[3348,"impl-From%3CBox%3C%5BT%5D,+A%3E%3E-for-Vec%3CT,+A%3E"],[3349,"impl-From%3C%26str%3E-for-Vec%3Cu8%3E"],[3351,"impl-From%3C%26%5BT%5D%3E-for-Vec%3CT%3E"],[3352,"impl-From%3CDerivationPath%3E-for-Vec%3CChildNumber%3E"],[3353,"impl-From%3CTaprootMerkleBranch%3E-for-Vec%3CTapNodeHash%3E"],[3354,"impl-From%3C%5BT;+N%5D%3E-for-Vec%3CT%3E"],[3355,"impl-From%3CBinaryHeap%3CT,+A%3E%3E-for-Vec%3CT,+A%3E"],[3356,"impl-From%3CPushBytesBuf%3E-for-Vec%3Cu8%3E"],[3357,"impl-From%3CString%3E-for-Vec%3Cu8%3E"],[3358,"impl-From%3CScriptBuf%3E-for-Vec%3Cu8%3E"],[3359,"impl-From%3C%26mut+str%3E-for-String"],[3360,"impl-From%3C%26String%3E-for-String"],[3362,"impl-From%3C%26str%3E-for-String"],[3363,"impl-From%3CCow%3C\'a,+str%3E%3E-for-String"],[3364,"impl-From%3Cchar%3E-for-String"],[3365,"impl-From%3CBox%3Cstr%3E%3E-for-String"],[3368,"impl-FromIterator%3C%26char%3E-for-String"],[3369,"impl-FromIterator%3CCow%3C\'a,+str%3E%3E-for-String"],[3370,"impl-FromIterator%3C%26str%3E-for-String"],[3371,"impl-FromIterator%3CString%3E-for-String"],[3372,"impl-FromIterator%3CBox%3Cstr%3E%3E-for-String"],[3373,"impl-FromIterator%3Cchar%3E-for-String"],[3410,"impl-IntoIterator-for-Vec%3CT,+A%3E"],[3411,"impl-IntoIterator-for-%26Vec%3CT,+A%3E"],[3412,"impl-IntoIterator-for-%26mut+Vec%3CT,+A%3E"],[3419,"impl-Vec%3CT,+A%3E"],[3420,"impl-Merge-for-Vec%3CT%3E"],[3430,"impl-PartialEq%3C%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3431,"impl-PartialEq%3CVec%3CU,+A2%3E%3E-for-Vec%3CT,+A1%3E"],[3432,"impl-PartialEq%3C%26mut+%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3433,"impl-PartialEq%3C%26%5BU;+N%5D%3E-for-Vec%3CT,+A%3E"],[3434,"impl-PartialEq%3C%26%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3435,"impl-PartialEq%3C%5BU%5D%3E-for-Vec%3CT,+A%3E"],[3436,"impl-PartialEq%3C%26str%3E-for-String"],[3437,"impl-PartialEq%3Cstr%3E-for-String"],[3438,"impl-PartialEq%3CCow%3C\'a,+str%3E%3E-for-String"],[3518,"impl-Write-for-Vec%3Cu8,+A%3E"],[3519,"impl-Write-for-Vec%3Cu8%3E"],[3545,"impl-Display-for-IncorrectChecksumError"],[3546,"impl-Debug-for-IncorrectChecksumError"],[3547,"impl-Display-for-TooShortError"],[3548,"impl-Debug-for-TooShortError"],[3622,"impl-Debug-for-EncodeSliceError"],[3623,"impl-Display-for-EncodeSliceError"],[3624,"impl-Debug-for-DecodeError"],[3625,"impl-Display-for-DecodeError"],[3626,"impl-Debug-for-DecodeSliceError"],[3627,"impl-Display-for-DecodeSliceError"],[3683,"impl-Display-for-ParseAlphabetError"],[3684,"impl-Debug-for-ParseAlphabetError"],[3873,"impl-AsMut%3C%5Bu8%5D%3E-for-ShortId"],[3874,"impl-AsMut%3C%5Bu8;+6%5D%3E-for-ShortId"],[3878,"impl-AsRef%3C%5Bu8;+6%5D%3E-for-ShortId"],[3879,"impl-AsRef%3C%5Bu8%5D%3E-for-ShortId"],[3885,"impl-Borrow%3C%5Bu8%5D%3E-for-ShortId"],[3886,"impl-Borrow%3C%5Bu8;+6%5D%3E-for-ShortId"],[3894,"impl-BorrowMut%3C%5Bu8;+6%5D%3E-for-ShortId"],[3895,"impl-BorrowMut%3C%5Bu8%5D%3E-for-ShortId"],[3955,"impl-Display-for-Error"],[3956,"impl-Debug-for-Error"],[3958,"impl-Display-for-ShortId"],[3959,"impl-LowerHex-for-ShortId"],[3960,"impl-UpperHex-for-ShortId"],[3961,"impl-Debug-for-ShortId"],[3964,"impl-Debug-for-TxIndexOutOfRangeError"],[3965,"impl-Display-for-TxIndexOutOfRangeError"],[3971,"impl-From%3C%5Bu8;+6%5D%3E-for-ShortId"],[3972,"impl-From%3C%26%5Bu8;+6%5D%3E-for-ShortId"],[4095,"impl-Display-for-Error"],[4096,"impl-Debug-for-Error"],[4105,"impl-From%3CInfallible%3E-for-Error"],[4106,"impl-From%3CError%3E-for-Error"],[4198,"impl-AsMut%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4199,"impl-AsMut%3C%5Bu8%5D%3E-for-ChainCode"],[4200,"impl-AsMut%3C%5Bu8%5D%3E-for-Fingerprint"],[4201,"impl-AsMut%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4206,"impl-AsRef%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4207,"impl-AsRef%3C%5Bu8%5D%3E-for-ChainCode"],[4208,"impl-AsRef%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4209,"impl-AsRef%3C%5Bu8%5D%3E-for-Fingerprint"],[4214,"impl-Borrow%3C%5Bu8%5D%3E-for-ChainCode"],[4215,"impl-Borrow%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4216,"impl-Borrow%3C%5Bu8%5D%3E-for-Fingerprint"],[4217,"impl-Borrow%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4227,"impl-BorrowMut%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4228,"impl-BorrowMut%3C%5Bu8%5D%3E-for-ChainCode"],[4229,"impl-BorrowMut%3C%5Bu8%5D%3E-for-Fingerprint"],[4230,"impl-BorrowMut%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4324,"impl-Debug-for-ChainCode"],[4325,"impl-UpperHex-for-ChainCode"],[4326,"impl-Display-for-ChainCode"],[4327,"impl-LowerHex-for-ChainCode"],[4328,"impl-UpperHex-for-Fingerprint"],[4329,"impl-Display-for-Fingerprint"],[4330,"impl-Debug-for-Fingerprint"],[4331,"impl-LowerHex-for-Fingerprint"],[4332,"impl-Display-for-Xpriv"],[4333,"impl-Debug-for-Xpriv"],[4334,"impl-Display-for-Xpub"],[4335,"impl-Debug-for-Xpub"],[4336,"impl-Display-for-ChildNumber"],[4337,"impl-Debug-for-ChildNumber"],[4338,"impl-Display-for-DerivationPath"],[4339,"impl-Debug-for-DerivationPath"],[4340,"impl-Display-for-Error"],[4341,"impl-Debug-for-Error"],[4342,"impl-Display-for-InvalidBase58PayloadLengthError"],[4343,"impl-Debug-for-InvalidBase58PayloadLengthError"],[4345,"impl-From%3C%5Bu8;+32%5D%3E-for-ChainCode"],[4346,"impl-From%3C%26%5Bu8;+32%5D%3E-for-ChainCode"],[4348,"impl-From%3C%26%5Bu8;+4%5D%3E-for-Fingerprint"],[4350,"impl-From%3C%5Bu8;+4%5D%3E-for-Fingerprint"],[4356,"impl-From%3CVec%3CChildNumber%3E%3E-for-DerivationPath"],[4357,"impl-From%3C%26%5BChildNumber%5D%3E-for-DerivationPath"],[4359,"impl-From%3CInvalidBase58PayloadLengthError%3E-for-Error"],[4360,"impl-From%3CError%3E-for-Error"],[4361,"impl-From%3CError%3E-for-Error"],[4362,"impl-From%3CInfallible%3E-for-Error"],[4589,"impl-Debug-for-Bip34Error"],[4590,"impl-Display-for-Bip34Error"],[4591,"impl-Debug-for-ValidationError"],[4592,"impl-Display-for-ValidationError"],[4665,"impl-AsMut%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4666,"impl-AsMut%3C%5Bu8%5D%3E-for-ChainHash"],[4669,"impl-AsRef%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4670,"impl-AsRef%3C%5Bu8%5D%3E-for-ChainHash"],[4671,"impl-Borrow%3C%5Bu8%5D%3E-for-ChainHash"],[4672,"impl-Borrow%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4675,"impl-BorrowMut%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4676,"impl-BorrowMut%3C%5Bu8%5D%3E-for-ChainHash"],[4684,"impl-LowerHex-for-ChainHash"],[4685,"impl-Display-for-ChainHash"],[4686,"impl-Debug-for-ChainHash"],[4687,"impl-UpperHex-for-ChainHash"],[4688,"impl-From%3C%26%5Bu8;+32%5D%3E-for-ChainHash"],[4689,"impl-From%3C%5Bu8;+32%5D%3E-for-ChainHash"],[4783,"impl-Debug-for-Height"],[4784,"impl-Display-for-Height"],[4785,"impl-Display-for-ParseHeightError"],[4786,"impl-Debug-for-ParseHeightError"],[4787,"impl-Debug-for-Time"],[4788,"impl-Display-for-Time"],[4789,"impl-Debug-for-ParseTimeError"],[4790,"impl-Display-for-ParseTimeError"],[4791,"impl-Display-for-ConversionError"],[4792,"impl-Debug-for-ConversionError"],[4793,"impl-Debug-for-LockTime"],[4794,"impl-Display-for-LockTime"],[4802,"impl-From%3CHeight%3E-for-LockTime"],[4803,"impl-From%3CAbsLockTime%3E-for-LockTime"],[4804,"impl-From%3CTime%3E-for-LockTime"],[4869,"impl-TryFrom%3CString%3E-for-Height"],[4870,"impl-TryFrom%3C%26str%3E-for-Height"],[4871,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Height"],[4874,"impl-TryFrom%3CString%3E-for-Time"],[4875,"impl-TryFrom%3C%26str%3E-for-Time"],[4876,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Time"],[4879,"impl-TryFrom%3C%26str%3E-for-LockTime"],[4880,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-LockTime"],[4882,"impl-TryFrom%3CString%3E-for-LockTime"],[4978,"impl-Display-for-Height"],[4979,"impl-Debug-for-Height"],[4980,"impl-Display-for-Time"],[4981,"impl-Debug-for-Time"],[4982,"impl-Debug-for-TimeOverflowError"],[4983,"impl-Display-for-TimeOverflowError"],[4984,"impl-Display-for-LockTime"],[4985,"impl-Debug-for-LockTime"],[4986,"impl-Display-for-DisabledLockTimeError"],[4987,"impl-Debug-for-DisabledLockTimeError"],[4988,"impl-Debug-for-IncompatibleHeightError"],[4989,"impl-Display-for-IncompatibleHeightError"],[4990,"impl-Display-for-IncompatibleTimeError"],[4991,"impl-Debug-for-IncompatibleTimeError"],[4996,"impl-From%3CRelLockTime%3E-for-LockTime"],[4998,"impl-From%3CTime%3E-for-LockTime"],[4999,"impl-From%3CHeight%3E-for-LockTime"],[5074,"impl-TryFrom%3CString%3E-for-Height"],[5076,"impl-TryFrom%3C%26str%3E-for-Height"],[5077,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Height"],[5079,"impl-TryFrom%3CString%3E-for-Time"],[5080,"impl-TryFrom%3C%26str%3E-for-Time"],[5081,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-Time"],[5441,"impl-AsMut%3C%5Bu8%5D%3E-for-PushBytes"],[5442,"impl-AsMut%3CPushBytes%3E-for-PushBytes"],[5447,"impl-AsRef%3CPushBytes%3E-for-PushBytes"],[5448,"impl-AsRef%3C%5Bu8%5D%3E-for-PushBytes"],[5515,"impl-Display-for-Builder"],[5516,"impl-Debug-for-Builder"],[5522,"impl-Debug-for-PushBytesError"],[5523,"impl-Display-for-PushBytesError"],[5524,"impl-Display-for-Error"],[5525,"impl-Debug-for-Error"],[5532,"impl-From%3C%26%5Bu8;+6%5D%3E-for-%26PushBytes"],[5533,"impl-From%3C%26mut+%5Bu8;+68%5D%3E-for-%26mut+PushBytes"],[5534,"impl-From%3C%26%5Bu8;+71%5D%3E-for-%26PushBytes"],[5535,"impl-From%3C%26%5Bu8;+38%5D%3E-for-%26PushBytes"],[5536,"impl-From%3C%26%5Bu8;+26%5D%3E-for-%26PushBytes"],[5537,"impl-From%3C%26mut+%5Bu8;+44%5D%3E-for-%26mut+PushBytes"],[5538,"impl-From%3C%26mut+%5Bu8;+22%5D%3E-for-%26mut+PushBytes"],[5539,"impl-From%3C%26mut+%5Bu8;+27%5D%3E-for-%26mut+PushBytes"],[5540,"impl-From%3C%26mut+%5Bu8;+52%5D%3E-for-%26mut+PushBytes"],[5541,"impl-From%3C%26%5Bu8;+24%5D%3E-for-%26PushBytes"],[5542,"impl-From%3C%26mut+%5Bu8;+18%5D%3E-for-%26mut+PushBytes"],[5543,"impl-From%3C%26%5Bu8;+15%5D%3E-for-%26PushBytes"],[5544,"impl-From%3C%26%5Bu8;+54%5D%3E-for-%26PushBytes"],[5545,"impl-From%3C%26%5Bu8;+44%5D%3E-for-%26PushBytes"],[5546,"impl-From%3C%26mut+%5Bu8;+38%5D%3E-for-%26mut+PushBytes"],[5547,"impl-From%3C%26%5Bu8;+72%5D%3E-for-%26PushBytes"],[5548,"impl-From%3C%26mut+%5Bu8;+3%5D%3E-for-%26mut+PushBytes"],[5549,"impl-From%3C%26mut+%5Bu8;+54%5D%3E-for-%26mut+PushBytes"],[5550,"impl-From%3C%26%5Bu8;+4%5D%3E-for-%26PushBytes"],[5551,"impl-From%3C%26%5Bu8;+32%5D%3E-for-%26PushBytes"],[5552,"impl-From%3C%26%5Bu8;+57%5D%3E-for-%26PushBytes"],[5553,"impl-From%3C%26mut+%5Bu8;+4%5D%3E-for-%26mut+PushBytes"],[5554,"impl-From%3C%26%5Bu8;+3%5D%3E-for-%26PushBytes"],[5555,"impl-From%3C%26%5Bu8;+47%5D%3E-for-%26PushBytes"],[5556,"impl-From%3C%26mut+%5Bu8;+28%5D%3E-for-%26mut+PushBytes"],[5557,"impl-From%3C%26mut+%5Bu8;+63%5D%3E-for-%26mut+PushBytes"],[5558,"impl-From%3C%26%5Bu8;+28%5D%3E-for-%26PushBytes"],[5559,"impl-From%3C%26%5Bu8;+33%5D%3E-for-%26PushBytes"],[5560,"impl-From%3C%26mut+%5Bu8;+25%5D%3E-for-%26mut+PushBytes"],[5561,"impl-From%3C%26mut+%5Bu8;+70%5D%3E-for-%26mut+PushBytes"],[5562,"impl-From%3C%26mut+%5Bu8;+55%5D%3E-for-%26mut+PushBytes"],[5563,"impl-From%3C%26mut+%5Bu8;+35%5D%3E-for-%26mut+PushBytes"],[5564,"impl-From%3C%26%5Bu8;+16%5D%3E-for-%26PushBytes"],[5565,"impl-From%3C%26mut+%5Bu8;+36%5D%3E-for-%26mut+PushBytes"],[5566,"impl-From%3C%26%5Bu8;+29%5D%3E-for-%26PushBytes"],[5567,"impl-From%3C%26%5Bu8;+31%5D%3E-for-%26PushBytes"],[5568,"impl-From%3C%26mut+%5Bu8;+49%5D%3E-for-%26mut+PushBytes"],[5569,"impl-From%3C%26%5Bu8;+61%5D%3E-for-%26PushBytes"],[5570,"impl-From%3C%26%5Bu8;+17%5D%3E-for-%26PushBytes"],[5571,"impl-From%3C%26mut+%5Bu8;+48%5D%3E-for-%26mut+PushBytes"],[5572,"impl-From%3C%26mut+%5Bu8;+11%5D%3E-for-%26mut+PushBytes"],[5573,"impl-From%3C%26%5Bu8;+27%5D%3E-for-%26PushBytes"],[5574,"impl-From%3C%26mut+%5Bu8;+50%5D%3E-for-%26mut+PushBytes"],[5575,"impl-From%3C%26%5Bu8;+39%5D%3E-for-%26PushBytes"],[5576,"impl-From%3C%26mut+%5Bu8;+45%5D%3E-for-%26mut+PushBytes"],[5577,"impl-From%3C%26%5Bu8;+68%5D%3E-for-%26PushBytes"],[5578,"impl-From%3C%26mut+%5Bu8;+40%5D%3E-for-%26mut+PushBytes"],[5579,"impl-From%3C%26%5Bu8;+5%5D%3E-for-%26PushBytes"],[5580,"impl-From%3C%26%5Bu8;+64%5D%3E-for-%26PushBytes"],[5581,"impl-From%3C%26mut+%5Bu8;+53%5D%3E-for-%26mut+PushBytes"],[5582,"impl-From%3C%26%5Bu8;+51%5D%3E-for-%26PushBytes"],[5583,"impl-From%3C%26%5Bu8;+34%5D%3E-for-%26PushBytes"],[5584,"impl-From%3C%26mut+%5Bu8;+6%5D%3E-for-%26mut+PushBytes"],[5585,"impl-From%3C%26%5Bu8;+40%5D%3E-for-%26PushBytes"],[5586,"impl-From%3C%26mut+%5Bu8;+56%5D%3E-for-%26mut+PushBytes"],[5587,"impl-From%3C%26mut+%5Bu8;+64%5D%3E-for-%26mut+PushBytes"],[5588,"impl-From%3C%26%5Bu8;+69%5D%3E-for-%26PushBytes"],[5589,"impl-From%3C%26%5Bu8;+12%5D%3E-for-%26PushBytes"],[5590,"impl-From%3C%26%5Bu8;+22%5D%3E-for-%26PushBytes"],[5591,"impl-From%3C%26mut+%5Bu8;+31%5D%3E-for-%26mut+PushBytes"],[5592,"impl-From%3C%26%5Bu8;+52%5D%3E-for-%26PushBytes"],[5593,"impl-From%3C%26mut+%5Bu8;+26%5D%3E-for-%26mut+PushBytes"],[5594,"impl-From%3C%26mut+%5Bu8;+34%5D%3E-for-%26mut+PushBytes"],[5595,"impl-From%3C%26%5Bu8;+1%5D%3E-for-%26PushBytes"],[5596,"impl-From%3C%26%5Bu8;+9%5D%3E-for-%26PushBytes"],[5597,"impl-From%3C%26mut+%5Bu8;+9%5D%3E-for-%26mut+PushBytes"],[5598,"impl-From%3C%26%5Bu8;+20%5D%3E-for-%26PushBytes"],[5599,"impl-From%3C%26%5Bu8;+42%5D%3E-for-%26PushBytes"],[5600,"impl-From%3C%26mut+%5Bu8;+65%5D%3E-for-%26mut+PushBytes"],[5601,"impl-From%3C%26%5Bu8;+43%5D%3E-for-%26PushBytes"],[5602,"impl-From%3C%26mut+%5Bu8;+20%5D%3E-for-%26mut+PushBytes"],[5603,"impl-From%3C%26%5Bu8;+50%5D%3E-for-%26PushBytes"],[5604,"impl-From%3C%26%5Bu8;+49%5D%3E-for-%26PushBytes"],[5605,"impl-From%3C%26mut+%5Bu8;+58%5D%3E-for-%26mut+PushBytes"],[5606,"impl-From%3C%26%5Bu8;+11%5D%3E-for-%26PushBytes"],[5607,"impl-From%3C%26mut+%5Bu8;+71%5D%3E-for-%26mut+PushBytes"],[5608,"impl-From%3C%26mut+%5Bu8;+29%5D%3E-for-%26mut+PushBytes"],[5609,"impl-From%3C%26mut+%5Bu8;+39%5D%3E-for-%26mut+PushBytes"],[5610,"impl-From%3C%26%5Bu8;+25%5D%3E-for-%26PushBytes"],[5611,"impl-From%3C%26mut+%5Bu8;+69%5D%3E-for-%26mut+PushBytes"],[5612,"impl-From%3C%26mut+%5Bu8;+15%5D%3E-for-%26mut+PushBytes"],[5613,"impl-From%3C%26mut+%5Bu8;+37%5D%3E-for-%26mut+PushBytes"],[5614,"impl-From%3C%26mut+%5Bu8;+2%5D%3E-for-%26mut+PushBytes"],[5615,"impl-From%3C%26%5Bu8;+7%5D%3E-for-%26PushBytes"],[5616,"impl-From%3C%26%5Bu8;+19%5D%3E-for-%26PushBytes"],[5617,"impl-From%3C%26mut+%5Bu8;+59%5D%3E-for-%26mut+PushBytes"],[5618,"impl-From%3C%26mut+%5Bu8;+0%5D%3E-for-%26mut+PushBytes"],[5619,"impl-From%3C%26mut+%5Bu8;+72%5D%3E-for-%26mut+PushBytes"],[5620,"impl-From%3C%26mut+%5Bu8;+46%5D%3E-for-%26mut+PushBytes"],[5621,"impl-From%3C%26mut+%5Bu8;+41%5D%3E-for-%26mut+PushBytes"],[5622,"impl-From%3C%26%5Bu8;+23%5D%3E-for-%26PushBytes"],[5623,"impl-From%3C%26%5Bu8;+53%5D%3E-for-%26PushBytes"],[5624,"impl-From%3C%26mut+%5Bu8;+7%5D%3E-for-%26mut+PushBytes"],[5625,"impl-From%3C%26mut+%5Bu8;+57%5D%3E-for-%26mut+PushBytes"],[5626,"impl-From%3C%26mut+%5Bu8;+43%5D%3E-for-%26mut+PushBytes"],[5627,"impl-From%3C%26%5Bu8;+67%5D%3E-for-%26PushBytes"],[5628,"impl-From%3C%26mut+%5Bu8;+42%5D%3E-for-%26mut+PushBytes"],[5629,"impl-From%3C%26mut+%5Bu8;+1%5D%3E-for-%26mut+PushBytes"],[5630,"impl-From%3C%26%5Bu8;+58%5D%3E-for-%26PushBytes"],[5631,"impl-From%3C%26mut+%5Bu8;+5%5D%3E-for-%26mut+PushBytes"],[5632,"impl-From%3C%26mut+%5Bu8;+24%5D%3E-for-%26mut+PushBytes"],[5633,"impl-From%3C%26%5Bu8;+62%5D%3E-for-%26PushBytes"],[5634,"impl-From%3C%26%5Bu8;+55%5D%3E-for-%26PushBytes"],[5635,"impl-From%3C%26%5Bu8;+63%5D%3E-for-%26PushBytes"],[5636,"impl-From%3C%26mut+%5Bu8;+61%5D%3E-for-%26mut+PushBytes"],[5637,"impl-From%3C%26%5Bu8;+48%5D%3E-for-%26PushBytes"],[5638,"impl-From%3C%26%5Bu8;+36%5D%3E-for-%26PushBytes"],[5639,"impl-From%3C%26mut+%5Bu8;+12%5D%3E-for-%26mut+PushBytes"],[5640,"impl-From%3C%26mut+%5Bu8;+14%5D%3E-for-%26mut+PushBytes"],[5641,"impl-From%3C%26mut+%5Bu8;+30%5D%3E-for-%26mut+PushBytes"],[5642,"impl-From%3C%26%5Bu8;+37%5D%3E-for-%26PushBytes"],[5643,"impl-From%3C%26%5Bu8;+65%5D%3E-for-%26PushBytes"],[5644,"impl-From%3C%26mut+%5Bu8;+73%5D%3E-for-%26mut+PushBytes"],[5645,"impl-From%3C%26%5Bu8;+45%5D%3E-for-%26PushBytes"],[5646,"impl-From%3C%26mut+%5Bu8;+33%5D%3E-for-%26mut+PushBytes"],[5647,"impl-From%3C%26%5Bu8;+0%5D%3E-for-%26PushBytes"],[5648,"impl-From%3C%26%5Bu8;+66%5D%3E-for-%26PushBytes"],[5649,"impl-From%3C%26%5Bu8;+70%5D%3E-for-%26PushBytes"],[5650,"impl-From%3C%26mut+%5Bu8;+60%5D%3E-for-%26mut+PushBytes"],[5651,"impl-From%3C%26%5Bu8;+13%5D%3E-for-%26PushBytes"],[5652,"impl-From%3C%26mut+%5Bu8;+13%5D%3E-for-%26mut+PushBytes"],[5653,"impl-From%3C%26%5Bu8;+60%5D%3E-for-%26PushBytes"],[5654,"impl-From%3C%26mut+%5Bu8;+47%5D%3E-for-%26mut+PushBytes"],[5655,"impl-From%3C%26mut+%5Bu8;+66%5D%3E-for-%26mut+PushBytes"],[5656,"impl-From%3C%26mut+%5Bu8;+67%5D%3E-for-%26mut+PushBytes"],[5657,"impl-From%3C%26%5Bu8;+18%5D%3E-for-%26PushBytes"],[5658,"impl-From%3C%26%5Bu8;+30%5D%3E-for-%26PushBytes"],[5659,"impl-From%3C%26%5Bu8;+35%5D%3E-for-%26PushBytes"],[5660,"impl-From%3C%26%5Bu8;+8%5D%3E-for-%26PushBytes"],[5661,"impl-From%3C%26%5Bu8;+56%5D%3E-for-%26PushBytes"],[5662,"impl-From%3C%26mut+%5Bu8;+16%5D%3E-for-%26mut+PushBytes"],[5663,"impl-From%3C%26mut+%5Bu8;+10%5D%3E-for-%26mut+PushBytes"],[5664,"impl-From%3C%26mut+%5Bu8;+8%5D%3E-for-%26mut+PushBytes"],[5665,"impl-From%3C%26mut+%5Bu8;+51%5D%3E-for-%26mut+PushBytes"],[5666,"impl-From%3C%26mut+%5Bu8;+19%5D%3E-for-%26mut+PushBytes"],[5667,"impl-From%3C%26%5Bu8;+2%5D%3E-for-%26PushBytes"],[5668,"impl-From%3C%26%5Bu8;+46%5D%3E-for-%26PushBytes"],[5669,"impl-From%3C%26%5Bu8;+21%5D%3E-for-%26PushBytes"],[5670,"impl-From%3C%26%5Bu8;+41%5D%3E-for-%26PushBytes"],[5671,"impl-From%3C%26%5Bu8;+10%5D%3E-for-%26PushBytes"],[5672,"impl-From%3C%26mut+%5Bu8;+23%5D%3E-for-%26mut+PushBytes"],[5673,"impl-From%3C%26%5Bu8;+14%5D%3E-for-%26PushBytes"],[5674,"impl-From%3C%26mut+%5Bu8;+17%5D%3E-for-%26mut+PushBytes"],[5675,"impl-From%3C%26mut+%5Bu8;+32%5D%3E-for-%26mut+PushBytes"],[5676,"impl-From%3C%26mut+%5Bu8;+21%5D%3E-for-%26mut+PushBytes"],[5677,"impl-From%3C%26%5Bu8;+59%5D%3E-for-%26PushBytes"],[5678,"impl-From%3C%26mut+%5Bu8;+62%5D%3E-for-%26mut+PushBytes"],[5679,"impl-From%3C%26%5Bu8;+73%5D%3E-for-%26PushBytes"],[5680,"impl-From%3C%5Bu8;+46%5D%3E-for-PushBytesBuf"],[5681,"impl-From%3C%5Bu8;+73%5D%3E-for-PushBytesBuf"],[5682,"impl-From%3C%26%5Bu8;+3%5D%3E-for-PushBytesBuf"],[5683,"impl-From%3C%26%5Bu8;+19%5D%3E-for-PushBytesBuf"],[5684,"impl-From%3C%5Bu8;+53%5D%3E-for-PushBytesBuf"],[5685,"impl-From%3C%5Bu8;+72%5D%3E-for-PushBytesBuf"],[5686,"impl-From%3C%5Bu8;+48%5D%3E-for-PushBytesBuf"],[5687,"impl-From%3C%5Bu8;+29%5D%3E-for-PushBytesBuf"],[5688,"impl-From%3C%5Bu8;+65%5D%3E-for-PushBytesBuf"],[5689,"impl-From%3C%26%5Bu8;+17%5D%3E-for-PushBytesBuf"],[5690,"impl-From%3C%5Bu8;+57%5D%3E-for-PushBytesBuf"],[5691,"impl-From%3C%26%5Bu8;+27%5D%3E-for-PushBytesBuf"],[5692,"impl-From%3C%5Bu8;+27%5D%3E-for-PushBytesBuf"],[5693,"impl-From%3C%26%5Bu8;+2%5D%3E-for-PushBytesBuf"],[5694,"impl-From%3C%26%5Bu8;+21%5D%3E-for-PushBytesBuf"],[5695,"impl-From%3C%26%5Bu8;+66%5D%3E-for-PushBytesBuf"],[5696,"impl-From%3C%26%5Bu8;+40%5D%3E-for-PushBytesBuf"],[5697,"impl-From%3C%5Bu8;+16%5D%3E-for-PushBytesBuf"],[5698,"impl-From%3C%5Bu8;+32%5D%3E-for-PushBytesBuf"],[5699,"impl-From%3C%5Bu8;+26%5D%3E-for-PushBytesBuf"],[5700,"impl-From%3C%26%5Bu8;+52%5D%3E-for-PushBytesBuf"],[5701,"impl-From%3C%26%5Bu8;+68%5D%3E-for-PushBytesBuf"],[5702,"impl-From%3C%5Bu8;+10%5D%3E-for-PushBytesBuf"],[5703,"impl-From%3C%26%5Bu8;+59%5D%3E-for-PushBytesBuf"],[5704,"impl-From%3C%26%5Bu8;+50%5D%3E-for-PushBytesBuf"],[5705,"impl-From%3C%26%5Bu8;+18%5D%3E-for-PushBytesBuf"],[5706,"impl-From%3C%5Bu8;+38%5D%3E-for-PushBytesBuf"],[5707,"impl-From%3C%5Bu8;+67%5D%3E-for-PushBytesBuf"],[5708,"impl-From%3C%5Bu8;+52%5D%3E-for-PushBytesBuf"],[5709,"impl-From%3C%5Bu8;+61%5D%3E-for-PushBytesBuf"],[5710,"impl-From%3C%5Bu8;+0%5D%3E-for-PushBytesBuf"],[5711,"impl-From%3C%26%5Bu8;+63%5D%3E-for-PushBytesBuf"],[5712,"impl-From%3C%26%5Bu8;+57%5D%3E-for-PushBytesBuf"],[5713,"impl-From%3C%26%5Bu8;+71%5D%3E-for-PushBytesBuf"],[5714,"impl-From%3C%5Bu8;+19%5D%3E-for-PushBytesBuf"],[5715,"impl-From%3C%26%5Bu8;+32%5D%3E-for-PushBytesBuf"],[5716,"impl-From%3C%26%5Bu8;+58%5D%3E-for-PushBytesBuf"],[5717,"impl-From%3C%5Bu8;+56%5D%3E-for-PushBytesBuf"],[5718,"impl-From%3C%26%5Bu8;+56%5D%3E-for-PushBytesBuf"],[5719,"impl-From%3C%26%5Bu8;+28%5D%3E-for-PushBytesBuf"],[5720,"impl-From%3C%26%5Bu8;+39%5D%3E-for-PushBytesBuf"],[5721,"impl-From%3C%26%5Bu8;+65%5D%3E-for-PushBytesBuf"],[5722,"impl-From%3C%26%5Bu8;+43%5D%3E-for-PushBytesBuf"],[5723,"impl-From%3C%26%5Bu8;+38%5D%3E-for-PushBytesBuf"],[5724,"impl-From%3C%26%5Bu8;+22%5D%3E-for-PushBytesBuf"],[5725,"impl-From%3C%5Bu8;+3%5D%3E-for-PushBytesBuf"],[5726,"impl-From%3C%26%5Bu8;+46%5D%3E-for-PushBytesBuf"],[5727,"impl-From%3C%5Bu8;+69%5D%3E-for-PushBytesBuf"],[5728,"impl-From%3C%26%5Bu8;+31%5D%3E-for-PushBytesBuf"],[5729,"impl-From%3C%26%5Bu8;+51%5D%3E-for-PushBytesBuf"],[5730,"impl-From%3C%5Bu8;+68%5D%3E-for-PushBytesBuf"],[5731,"impl-From%3C%5Bu8;+11%5D%3E-for-PushBytesBuf"],[5732,"impl-From%3C%5Bu8;+20%5D%3E-for-PushBytesBuf"],[5733,"impl-From%3C%5Bu8;+41%5D%3E-for-PushBytesBuf"],[5734,"impl-From%3C%26%5Bu8;+54%5D%3E-for-PushBytesBuf"],[5735,"impl-From%3C%5Bu8;+64%5D%3E-for-PushBytesBuf"],[5736,"impl-From%3C%26%5Bu8;+29%5D%3E-for-PushBytesBuf"],[5737,"impl-From%3C%5Bu8;+54%5D%3E-for-PushBytesBuf"],[5738,"impl-From%3C%5Bu8;+1%5D%3E-for-PushBytesBuf"],[5739,"impl-From%3C%26%5Bu8;+55%5D%3E-for-PushBytesBuf"],[5740,"impl-From%3C%5Bu8;+47%5D%3E-for-PushBytesBuf"],[5741,"impl-From%3C%5Bu8;+59%5D%3E-for-PushBytesBuf"],[5742,"impl-From%3C%5Bu8;+36%5D%3E-for-PushBytesBuf"],[5743,"impl-From%3C%26%5Bu8;+53%5D%3E-for-PushBytesBuf"],[5744,"impl-From%3C%26%5Bu8;+60%5D%3E-for-PushBytesBuf"],[5745,"impl-From%3C%26%5Bu8;+34%5D%3E-for-PushBytesBuf"],[5746,"impl-From%3C%5Bu8;+9%5D%3E-for-PushBytesBuf"],[5747,"impl-From%3C%26%5Bu8;+41%5D%3E-for-PushBytesBuf"],[5748,"impl-From%3C%5Bu8;+39%5D%3E-for-PushBytesBuf"],[5749,"impl-From%3C%26%5Bu8;+49%5D%3E-for-PushBytesBuf"],[5750,"impl-From%3C%26%5Bu8;+69%5D%3E-for-PushBytesBuf"],[5751,"impl-From%3C%5Bu8;+50%5D%3E-for-PushBytesBuf"],[5752,"impl-From%3CPubkeyHash%3E-for-PushBytesBuf"],[5753,"impl-From%3CWScriptHash%3E-for-PushBytesBuf"],[5754,"impl-From%3C%26%5Bu8;+45%5D%3E-for-PushBytesBuf"],[5755,"impl-From%3C%5Bu8;+5%5D%3E-for-PushBytesBuf"],[5756,"impl-From%3C%26%5Bu8;+33%5D%3E-for-PushBytesBuf"],[5757,"impl-From%3C%26%5Bu8;+24%5D%3E-for-PushBytesBuf"],[5758,"impl-From%3C%26%5Bu8;+26%5D%3E-for-PushBytesBuf"],[5759,"impl-From%3C%5Bu8;+71%5D%3E-for-PushBytesBuf"],[5760,"impl-From%3C%5Bu8;+66%5D%3E-for-PushBytesBuf"],[5761,"impl-From%3C%26%5Bu8;+73%5D%3E-for-PushBytesBuf"],[5762,"impl-From%3C%26%5Bu8;+48%5D%3E-for-PushBytesBuf"],[5763,"impl-From%3C%5Bu8;+35%5D%3E-for-PushBytesBuf"],[5764,"impl-From%3C%5Bu8;+33%5D%3E-for-PushBytesBuf"],[5766,"impl-From%3C%26%5Bu8;+61%5D%3E-for-PushBytesBuf"],[5767,"impl-From%3C%26%5Bu8;+0%5D%3E-for-PushBytesBuf"],[5768,"impl-From%3C%5Bu8;+18%5D%3E-for-PushBytesBuf"],[5769,"impl-From%3C%26%5Bu8;+35%5D%3E-for-PushBytesBuf"],[5770,"impl-From%3C%5Bu8;+62%5D%3E-for-PushBytesBuf"],[5771,"impl-From%3C%5Bu8;+31%5D%3E-for-PushBytesBuf"],[5772,"impl-From%3C%26%5Bu8;+72%5D%3E-for-PushBytesBuf"],[5773,"impl-From%3C%5Bu8;+2%5D%3E-for-PushBytesBuf"],[5774,"impl-From%3C%5Bu8;+8%5D%3E-for-PushBytesBuf"],[5775,"impl-From%3C%5Bu8;+12%5D%3E-for-PushBytesBuf"],[5776,"impl-From%3C%26%5Bu8;+15%5D%3E-for-PushBytesBuf"],[5777,"impl-From%3C%26%5Bu8;+1%5D%3E-for-PushBytesBuf"],[5778,"impl-From%3C%26%5Bu8;+8%5D%3E-for-PushBytesBuf"],[5779,"impl-From%3C%5Bu8;+70%5D%3E-for-PushBytesBuf"],[5780,"impl-From%3C%26%5Bu8;+44%5D%3E-for-PushBytesBuf"],[5781,"impl-From%3C%26%5Bu8;+16%5D%3E-for-PushBytesBuf"],[5782,"impl-From%3C%5Bu8;+6%5D%3E-for-PushBytesBuf"],[5783,"impl-From%3C%5Bu8;+58%5D%3E-for-PushBytesBuf"],[5784,"impl-From%3C%26%5Bu8;+36%5D%3E-for-PushBytesBuf"],[5785,"impl-From%3C%26%5Bu8;+67%5D%3E-for-PushBytesBuf"],[5786,"impl-From%3C%26%5Bu8;+70%5D%3E-for-PushBytesBuf"],[5787,"impl-From%3C%5Bu8;+4%5D%3E-for-PushBytesBuf"],[5788,"impl-From%3C%26%5Bu8;+30%5D%3E-for-PushBytesBuf"],[5789,"impl-From%3C%5Bu8;+63%5D%3E-for-PushBytesBuf"],[5790,"impl-From%3CScriptHash%3E-for-PushBytesBuf"],[5791,"impl-From%3C%5Bu8;+21%5D%3E-for-PushBytesBuf"],[5792,"impl-From%3C%5Bu8;+55%5D%3E-for-PushBytesBuf"],[5793,"impl-From%3C%26%5Bu8;+11%5D%3E-for-PushBytesBuf"],[5794,"impl-From%3C%26%5Bu8;+10%5D%3E-for-PushBytesBuf"],[5795,"impl-From%3C%26%5Bu8;+6%5D%3E-for-PushBytesBuf"],[5796,"impl-From%3C%5Bu8;+60%5D%3E-for-PushBytesBuf"],[5797,"impl-From%3C%5Bu8;+14%5D%3E-for-PushBytesBuf"],[5798,"impl-From%3C%26%5Bu8;+23%5D%3E-for-PushBytesBuf"],[5799,"impl-From%3C%5Bu8;+7%5D%3E-for-PushBytesBuf"],[5800,"impl-From%3C%26%5Bu8;+5%5D%3E-for-PushBytesBuf"],[5801,"impl-From%3C%26%5Bu8;+7%5D%3E-for-PushBytesBuf"],[5802,"impl-From%3C%5Bu8;+24%5D%3E-for-PushBytesBuf"],[5803,"impl-From%3C%26%5Bu8;+25%5D%3E-for-PushBytesBuf"],[5804,"impl-From%3C%5Bu8;+37%5D%3E-for-PushBytesBuf"],[5805,"impl-From%3C%5Bu8;+15%5D%3E-for-PushBytesBuf"],[5806,"impl-From%3C%5Bu8;+40%5D%3E-for-PushBytesBuf"],[5807,"impl-From%3C%26%5Bu8;+9%5D%3E-for-PushBytesBuf"],[5808,"impl-From%3C%5Bu8;+34%5D%3E-for-PushBytesBuf"],[5809,"impl-From%3C%26%5Bu8;+37%5D%3E-for-PushBytesBuf"],[5810,"impl-From%3C%26%5Bu8;+64%5D%3E-for-PushBytesBuf"],[5811,"impl-From%3C%5Bu8;+23%5D%3E-for-PushBytesBuf"],[5812,"impl-From%3C%26%5Bu8;+13%5D%3E-for-PushBytesBuf"],[5813,"impl-From%3C%5Bu8;+17%5D%3E-for-PushBytesBuf"],[5814,"impl-From%3C%26%5Bu8;+20%5D%3E-for-PushBytesBuf"],[5815,"impl-From%3CWPubkeyHash%3E-for-PushBytesBuf"],[5816,"impl-From%3C%5Bu8;+25%5D%3E-for-PushBytesBuf"],[5817,"impl-From%3C%26%5Bu8;+47%5D%3E-for-PushBytesBuf"],[5818,"impl-From%3C%5Bu8;+49%5D%3E-for-PushBytesBuf"],[5819,"impl-From%3C%5Bu8;+28%5D%3E-for-PushBytesBuf"],[5820,"impl-From%3C%26%5Bu8;+14%5D%3E-for-PushBytesBuf"],[5821,"impl-From%3C%5Bu8;+42%5D%3E-for-PushBytesBuf"],[5822,"impl-From%3C%26%5Bu8;+4%5D%3E-for-PushBytesBuf"],[5823,"impl-From%3C%5Bu8;+22%5D%3E-for-PushBytesBuf"],[5824,"impl-From%3C%5Bu8;+45%5D%3E-for-PushBytesBuf"],[5825,"impl-From%3C%26%5Bu8;+62%5D%3E-for-PushBytesBuf"],[5826,"impl-From%3C%5Bu8;+44%5D%3E-for-PushBytesBuf"],[5827,"impl-From%3C%5Bu8;+51%5D%3E-for-PushBytesBuf"],[5828,"impl-From%3C%26%5Bu8;+42%5D%3E-for-PushBytesBuf"],[5829,"impl-From%3C%5Bu8;+43%5D%3E-for-PushBytesBuf"],[5830,"impl-From%3C%26%5Bu8;+12%5D%3E-for-PushBytesBuf"],[5831,"impl-From%3C%5Bu8;+13%5D%3E-for-PushBytesBuf"],[5832,"impl-From%3C%5Bu8;+30%5D%3E-for-PushBytesBuf"],[5835,"impl-From%3CInfallible%3E-for-Error"],[5836,"impl-From%3CUintError%3E-for-Error"],[5839,"impl-Index%3CRangeFrom%3Cusize%3E%3E-for-PushBytes"],[5840,"impl-Index%3CRangeInclusive%3Cusize%3E%3E-for-PushBytes"],[5841,"impl-Index%3CRange%3Cusize%3E%3E-for-PushBytes"],[5842,"impl-Index%3C(Bound%3Cusize%3E,+Bound%3Cusize%3E)%3E-for-PushBytes"],[5843,"impl-Index%3CRangeTo%3Cusize%3E%3E-for-PushBytes"],[5844,"impl-Index%3CRangeFull%3E-for-PushBytes"],[5845,"impl-Index%3CRangeToInclusive%3Cusize%3E%3E-for-PushBytes"],[5846,"impl-Index%3Cusize%3E-for-PushBytes"],[5925,"impl-TryFrom%3C%26%5Bu8%5D%3E-for-%26PushBytes"],[5926,"impl-TryFrom%3C%26mut+%5Bu8%5D%3E-for-%26mut+PushBytes"],[5973,"impl-Debug-for-Error"],[5974,"impl-Display-for-Error"],[6031,"impl-Debug-for-FromStrError"],[6032,"impl-Display-for-FromStrError"],[6033,"impl-Debug-for-TryFromInstructionError"],[6034,"impl-Display-for-TryFromInstructionError"],[6035,"impl-Display-for-TryFromError"],[6036,"impl-Debug-for-TryFromError"],[6038,"impl-From%3CInfallible%3E-for-FromStrError"],[6039,"impl-From%3CParseIntError%3E-for-FromStrError"],[6040,"impl-From%3CTryFromError%3E-for-FromStrError"],[6042,"impl-From%3CInfallible%3E-for-TryFromInstructionError"],[6043,"impl-From%3CTryFromError%3E-for-TryFromInstructionError"],[6138,"impl-Display-for-ParseOutPointError"],[6139,"impl-Debug-for-ParseOutPointError"],[6140,"impl-Display-for-InputsIndexError"],[6141,"impl-Debug-for-InputsIndexError"],[6142,"impl-Debug-for-OutputsIndexError"],[6143,"impl-Display-for-OutputsIndexError"],[6144,"impl-Debug-for-IndexOutOfBoundsError"],[6145,"impl-Display-for-IndexOutOfBoundsError"],[6146,"impl-Display-for-Version"],[6147,"impl-Debug-for-Version"],[6290,"impl-Display-for-DecodeError%3CE%3E"],[6291,"impl-Debug-for-DecodeError%3CE%3E"],[6292,"impl-From%3CNetwork%3E-for-%26Params"],[6293,"impl-From%3C%26Network%3E-for-%26Params"],[6294,"impl-From%3CNetwork%3E-for-Params"],[6295,"impl-From%3C%26Network%3E-for-Params"],[6383,"impl-Debug-for-Error"],[6384,"impl-Display-for-Error"],[6385,"impl-Debug-for-FromHexError"],[6386,"impl-Display-for-FromHexError"],[6389,"impl-From%3CInfallible%3E-for-Error"],[6390,"impl-From%3CError%3E-for-Error"],[6571,"impl-AsRef%3CPushBytes%3E-for-SerializedSignature"],[6572,"impl-AsRef%3C%5Bu8%5D%3E-for-SerializedSignature"],[6599,"impl-Display-for-Signature"],[6600,"impl-Debug-for-Signature"],[6601,"impl-UpperHex-for-SerializedSignature"],[6602,"impl-LowerHex-for-SerializedSignature"],[6603,"impl-Debug-for-SerializedSignature"],[6604,"impl-Display-for-SerializedSignature"],[6605,"impl-Debug-for-Error"],[6606,"impl-Display-for-Error"],[6609,"impl-From%3CHexToBytesError%3E-for-Error"],[6610,"impl-From%3CNonStandardSighashTypeError%3E-for-Error"],[6611,"impl-From%3CInfallible%3E-for-Error"],[6612,"impl-From%3CError%3E-for-Error"],[6623,"impl-Serialize-for-Signature"],[6624,"impl-Signature"],[6687,"impl-Debug-for-PrefixedHexError"],[6688,"impl-Display-for-PrefixedHexError"],[6689,"impl-Display-for-UnprefixedHexError"],[6690,"impl-Debug-for-UnprefixedHexError"],[6691,"impl-Debug-for-MissingPrefixError"],[6692,"impl-Display-for-MissingPrefixError"],[6693,"impl-Debug-for-ContainsPrefixError"],[6694,"impl-Display-for-ContainsPrefixError"],[6696,"impl-From%3CParseIntError%3E-for-PrefixedHexError"],[6697,"impl-From%3CMissingPrefixError%3E-for-PrefixedHexError"],[6698,"impl-From%3CParseIntError%3E-for-UnprefixedHexError"],[6699,"impl-From%3CContainsPrefixError%3E-for-UnprefixedHexError"],[6786,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[6787,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::hash160::%7Bimpl%2311%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[6799,"impl-Debug-for-Hash"],[6800,"impl-LowerHex-for-Hash"],[6801,"impl-Display-for-Hash"],[6802,"impl-UpperHex-for-Hash"],[6803,"impl-From%3CWPubkeyHash%3E-for-Hash"],[6804,"impl-From%3CPubkeyHash%3E-for-Hash"],[6806,"impl-From%3CXKeyIdentifier%3E-for-Hash"],[6807,"impl-From%3CScriptHash%3E-for-Hash"],[6891,"impl-Debug-for-HexToBytesError"],[6892,"impl-Display-for-HexToBytesError"],[6893,"impl-Debug-for-InvalidCharError"],[6894,"impl-Display-for-InvalidCharError"],[6895,"impl-Display-for-OddLengthStringError"],[6896,"impl-Debug-for-OddLengthStringError"],[6897,"impl-Display-for-HexToArrayError"],[6898,"impl-Debug-for-HexToArrayError"],[6903,"impl-From%3CInvalidCharError%3E-for-HexToBytesError"],[6905,"impl-From%3COddLengthStringError%3E-for-HexToBytesError"],[6908,"impl-From%3CInvalidCharError%3E-for-HexToArrayError"],[6909,"impl-From%3CInvalidLengthError%3E-for-HexToArrayError"],[7020,"impl-Debug-for-DisplayByteSlice%3C\'a%3E"],[7021,"impl-LowerHex-for-DisplayByteSlice%3C\'a%3E"],[7022,"impl-UpperHex-for-DisplayByteSlice%3C\'a%3E"],[7023,"impl-Display-for-DisplayByteSlice%3C\'a%3E"],[7024,"impl-LowerHex-for-DisplayArray%3C\'a,+LEN%3E"],[7025,"impl-UpperHex-for-DisplayArray%3C\'a,+LEN%3E"],[7026,"impl-Display-for-DisplayArray%3C\'a,+LEN%3E"],[7027,"impl-Debug-for-DisplayArray%3C\'a,+LEN%3E"],[7065,"impl-Debug-for-InvalidLengthError"],[7066,"impl-Display-for-InvalidLengthError"],[7114,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::ripemd160::%7Bimpl%2314%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[7115,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[7142,"impl-Write-for-HashEngine"],[7143,"impl-Write-for-HashEngine"],[7144,"impl-Debug-for-Hash"],[7145,"impl-Display-for-Hash"],[7146,"impl-UpperHex-for-Hash"],[7147,"impl-LowerHex-for-Hash"],[7179,"impl-Write-for-HashEngine"],[7180,"impl-Write-for-HashEngine"],[7365,"impl-Display-for-Unexpected%3C\'a%3E"],[7366,"impl-Debug-for-Unexpected%3C\'a%3E"],[7597,"impl-Error-for-Error"],[7598,"impl-Error-for-Error"],[8480,"impl-Debug-for-Error"],[8481,"impl-Display-for-Error"],[8592,"impl-MapAccess%3C\'de%3E-for-MapDeserializer%3C\'de,+I,+E%3E"],[8593,"impl-SeqAccess%3C\'de%3E-for-MapDeserializer%3C\'de,+I,+E%3E"],[8790,"impl-dyn+Error"],[8791,"impl-dyn+Error+%2B+Send"],[8792,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8793,"impl-dyn+Error"],[8794,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8795,"impl-dyn+Error+%2B+Send"],[8796,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8797,"impl-dyn+Error+%2B+Send"],[8798,"impl-dyn+Error"],[8806,"impl-SerializeMap-for-Impossible%3COk,+Error%3E"],[8807,"impl-SerializeStructVariant-for-Impossible%3COk,+Error%3E"],[8808,"impl-SerializeTuple-for-Impossible%3COk,+Error%3E"],[8809,"impl-SerializeSeq-for-Impossible%3COk,+Error%3E"],[8810,"impl-SerializeTupleVariant-for-Impossible%3COk,+Error%3E"],[8811,"impl-SerializeTupleStruct-for-Impossible%3COk,+Error%3E"],[8812,"impl-SerializeStruct-for-Impossible%3COk,+Error%3E"],[8815,"impl-dyn+Error+%2B+Send"],[8816,"impl-dyn+Error"],[8817,"impl-dyn+Error+%2B+Send+%2B+Sync"],[8826,"impl-SerializeSeq-for-Impossible%3COk,+Error%3E"],[8827,"impl-SerializeTuple-for-Impossible%3COk,+Error%3E"],[8835,"impl-SerializeStructVariant-for-Impossible%3COk,+Error%3E"],[8836,"impl-SerializeTupleVariant-for-Impossible%3COk,+Error%3E"],[8837,"impl-SerializeStruct-for-Impossible%3COk,+Error%3E"],[8838,"impl-SerializeTupleStruct-for-Impossible%3COk,+Error%3E"],[8886,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[8887,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha1::%7Bimpl%2314%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[8914,"impl-Write-for-HashEngine"],[8915,"impl-Write-for-HashEngine"],[8916,"impl-Debug-for-Hash"],[8917,"impl-UpperHex-for-Hash"],[8918,"impl-Display-for-Hash"],[8919,"impl-LowerHex-for-Hash"],[8950,"impl-Write-for-HashEngine"],[8951,"impl-Write-for-HashEngine"],[8957,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha256::%7Bimpl%2320%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[8958,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9000,"impl-Write-for-HashEngine"],[9001,"impl-Write-for-HashEngine"],[9002,"impl-UpperHex-for-Hash"],[9003,"impl-Display-for-Hash"],[9004,"impl-Debug-for-Hash"],[9005,"impl-LowerHex-for-Hash"],[9006,"impl-LowerHex-for-Midstate"],[9007,"impl-Debug-for-Midstate"],[9008,"impl-Display-for-Midstate"],[9009,"impl-UpperHex-for-Midstate"],[9011,"impl-From%3CWScriptHash%3E-for-Hash"],[9012,"impl-From%3CDescriptorId%3E-for-Hash"],[9064,"impl-Write-for-HashEngine"],[9065,"impl-Write-for-HashEngine"],[9069,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha256d::%7Bimpl%2311%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9070,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9084,"impl-Display-for-Hash"],[9085,"impl-UpperHex-for-Hash"],[9086,"impl-LowerHex-for-Hash"],[9087,"impl-Debug-for-Hash"],[9088,"impl-From%3CBlockHash%3E-for-Hash"],[9089,"impl-From%3CHash%3E-for-Hash"],[9091,"impl-From%3CWtxid%3E-for-Hash"],[9092,"impl-From%3CSegwitV0Sighash%3E-for-Hash"],[9093,"impl-From%3CFilterHash%3E-for-Hash"],[9094,"impl-From%3CLegacySighash%3E-for-Hash"],[9095,"impl-From%3CTxid%3E-for-Hash"],[9096,"impl-From%3CWitnessCommitment%3E-for-Hash"],[9097,"impl-From%3CTxMerkleNode%3E-for-Hash"],[9098,"impl-From%3CWitnessMerkleNode%3E-for-Hash"],[9099,"impl-From%3CFilterHeader%3E-for-Hash"],[9123,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha256t::%7Bimpl%2311%7D::%7Bconstant%230%7D%5D%3E-for-Hash%3CT%3E"],[9124,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash%3CT%3E"],[9138,"impl-UpperHex-for-Hash%3CT%3E"],[9139,"impl-LowerHex-for-Hash%3CT%3E"],[9140,"impl-Debug-for-Hash%3CT%3E"],[9141,"impl-Display-for-Hash%3CT%3E"],[9142,"impl-From%3CTapNodeHash%3E-for-Hash%3CTapBranchTag%3E"],[9144,"impl-From%3CTapLeafHash%3E-for-Hash%3CTapLeafTag%3E"],[9145,"impl-From%3CTapTweakHash%3E-for-Hash%3CTapTweakTag%3E"],[9146,"impl-From%3CTapSighash%3E-for-Hash%3CTapSighashTag%3E"],[9170,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9171,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha384::%7Bimpl%2313%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9188,"impl-UpperHex-for-Hash"],[9189,"impl-Debug-for-Hash"],[9190,"impl-LowerHex-for-Hash"],[9191,"impl-Display-for-Hash"],[9226,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha512::%7Bimpl%2315%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9227,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9254,"impl-Write-for-HashEngine"],[9255,"impl-Write-for-HashEngine"],[9256,"impl-Display-for-Hash"],[9257,"impl-UpperHex-for-Hash"],[9258,"impl-LowerHex-for-Hash"],[9259,"impl-Debug-for-Hash"],[9290,"impl-Write-for-HashEngine"],[9291,"impl-Write-for-HashEngine"],[9296,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9297,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::sha512_256::%7Bimpl%2313%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9314,"impl-Display-for-Hash"],[9315,"impl-Debug-for-Hash"],[9316,"impl-UpperHex-for-Hash"],[9317,"impl-LowerHex-for-Hash"],[9353,"impl-AsRef%3C%5Bu8;+bitcoin_hashes::::siphash24::%7Bimpl%2315%7D::%7Bconstant%230%7D%5D%3E-for-Hash"],[9354,"impl-AsRef%3C%5Bu8%5D%3E-for-Hash"],[9386,"impl-Write-for-HashEngine"],[9387,"impl-Write-for-HashEngine"],[9388,"impl-UpperHex-for-Hash"],[9389,"impl-Display-for-Hash"],[9390,"impl-LowerHex-for-Hash"],[9391,"impl-Debug-for-Hash"],[9438,"impl-Write-for-HashEngine"],[9439,"impl-Write-for-HashEngine"],[9503,"impl-Write-for-Sink"],[9504,"impl-Write-for-Sink"],[9505,"impl-Debug-for-Error"],[9506,"impl-Display-for-Error"],[9511,"impl-From%3CErrorKind%3E-for-Error"],[9512,"impl-From%3CError%3E-for-Error"],[9581,"impl-Write-for-Sink"],[9582,"impl-Write-for-Sink"],[9584,"impl-Write-for-Sink"],[9585,"impl-Write-for-Sink"],[9747,"impl-LowerHex-for-TweakedPublicKey"],[9748,"impl-Debug-for-TweakedPublicKey"],[9749,"impl-Display-for-TweakedPublicKey"],[9751,"impl-Display-for-FromSliceError"],[9752,"impl-Debug-for-FromSliceError"],[9753,"impl-Debug-for-FromWifError"],[9754,"impl-Display-for-FromWifError"],[9755,"impl-Display-for-ParsePublicKeyError"],[9756,"impl-Debug-for-ParsePublicKeyError"],[9757,"impl-Display-for-ParseCompressedPublicKeyError"],[9758,"impl-Debug-for-ParseCompressedPublicKeyError"],[9759,"impl-Debug-for-UncompressedPublicKeyError"],[9760,"impl-Display-for-UncompressedPublicKeyError"],[9761,"impl-Debug-for-InvalidBase58PayloadLengthError"],[9762,"impl-Display-for-InvalidBase58PayloadLengthError"],[9763,"impl-Display-for-InvalidAddressVersionError"],[9764,"impl-Debug-for-InvalidAddressVersionError"],[9773,"impl-From%3CError%3E-for-FromSliceError"],[9775,"impl-From%3CInfallible%3E-for-FromSliceError"],[9776,"impl-From%3CInvalidAddressVersionError%3E-for-FromWifError"],[9777,"impl-From%3CInvalidBase58PayloadLengthError%3E-for-FromWifError"],[9778,"impl-From%3CError%3E-for-FromWifError"],[9779,"impl-From%3CError%3E-for-FromWifError"],[9780,"impl-From%3CInfallible%3E-for-FromWifError"],[9782,"impl-From%3CFromSliceError%3E-for-ParsePublicKeyError"],[9783,"impl-From%3CInfallible%3E-for-ParsePublicKeyError"],[9785,"impl-From%3CInfallible%3E-for-ParseCompressedPublicKeyError"],[9786,"impl-From%3CHexToArrayError%3E-for-ParseCompressedPublicKeyError"],[9787,"impl-From%3CError%3E-for-ParseCompressedPublicKeyError"],[9852,"impl-Serialize-for-TweakedPublicKey"],[9853,"impl-TweakedPublicKey"],[9901,"impl-TryFrom%3Ci32%3E-for-Parity"],[9902,"impl-TryFrom%3Cu8%3E-for-Parity"],[9990,"impl-Display-for-MerkleBlockError"],[9991,"impl-Debug-for-MerkleBlockError"],[10039,"impl-Debug-for-ParseNetworkError"],[10040,"impl-Display-for-ParseNetworkError"],[10041,"impl-Debug-for-UnknownChainHashError"],[10042,"impl-Display-for-UnknownChainHashError"],[10084,"impl-AsMut%3C%5Bu8%5D%3E-for-Magic"],[10085,"impl-AsMut%3C%5Bu8;+4%5D%3E-for-Magic"],[10086,"impl-AsRef%3C%5Bu8%5D%3E-for-Magic"],[10087,"impl-AsRef%3C%5Bu8;+4%5D%3E-for-Magic"],[10095,"impl-Borrow%3C%5Bu8%5D%3E-for-Magic"],[10096,"impl-Borrow%3C%5Bu8;+4%5D%3E-for-Magic"],[10102,"impl-BorrowMut%3C%5Bu8;+4%5D%3E-for-Magic"],[10103,"impl-BorrowMut%3C%5Bu8%5D%3E-for-Magic"],[10141,"impl-Debug-for-ServiceFlags"],[10142,"impl-UpperHex-for-ServiceFlags"],[10143,"impl-LowerHex-for-ServiceFlags"],[10144,"impl-Display-for-ServiceFlags"],[10145,"impl-LowerHex-for-Magic"],[10146,"impl-Display-for-Magic"],[10147,"impl-Debug-for-Magic"],[10148,"impl-UpperHex-for-Magic"],[10149,"impl-Debug-for-ParseMagicError"],[10150,"impl-Display-for-ParseMagicError"],[10151,"impl-Debug-for-UnknownMagicError"],[10152,"impl-Display-for-UnknownMagicError"],[10356,"impl-Display-for-CommandString"],[10357,"impl-Debug-for-CommandString"],[10358,"impl-Debug-for-CommandStringError"],[10359,"impl-Display-for-CommandStringError"],[10382,"impl-TryFrom%3CBox%3Cstr%3E%3E-for-CommandString"],[10383,"impl-TryFrom%3CString%3E-for-CommandString"],[10384,"impl-TryFrom%3C%26str%3E-for-CommandString"],[10857,"impl-Display-for-ParseIntError"],[10858,"impl-Debug-for-ParseIntError"],[11067,"impl-Display-for-Error"],[11068,"impl-Debug-for-Error"],[11072,"impl-Display-for-GetKeyError"],[11073,"impl-Debug-for-GetKeyError"],[11076,"impl-Debug-for-SignError"],[11077,"impl-Display-for-SignError"],[11078,"impl-Debug-for-ExtractTxError"],[11079,"impl-Display-for-ExtractTxError"],[11080,"impl-Display-for-IndexOutOfBoundsError"],[11081,"impl-Debug-for-IndexOutOfBoundsError"],[11082,"impl-Display-for-PsbtParseError"],[11083,"impl-Debug-for-PsbtParseError"],[11084,"impl-Display-for-PsbtSighashType"],[11085,"impl-Debug-for-PsbtSighashType"],[11087,"impl-From%3CInfallible%3E-for-Error"],[11089,"impl-From%3CFromSliceError%3E-for-Error"],[11090,"impl-From%3CError%3E-for-Error"],[11091,"impl-From%3CError%3E-for-Error"],[11095,"impl-From%3CError%3E-for-GetKeyError"],[11097,"impl-From%3CInfallible%3E-for-GetKeyError"],[11100,"impl-From%3CInfallible%3E-for-SignError"],[11101,"impl-From%3CIndexOutOfBoundsError%3E-for-SignError"],[11103,"impl-From%3CP2wpkhError%3E-for-SignError"],[11104,"impl-From%3CTaprootError%3E-for-SignError"],[11111,"impl-From%3CEcdsaSighashType%3E-for-PsbtSighashType"],[11113,"impl-From%3CTapSighashType%3E-for-PsbtSighashType"],[11304,"impl-Debug-for-Key"],[11305,"impl-Display-for-Key"],[11515,"impl-Display-for-PublicKey"],[11516,"impl-Debug-for-PublicKey"],[11517,"impl-LowerHex-for-PublicKey"],[11518,"impl-Debug-for-InvalidParityValue"],[11519,"impl-Display-for-InvalidParityValue"],[11521,"impl-Debug-for-Message"],[11522,"impl-LowerHex-for-Message"],[11523,"impl-Display-for-Message"],[11524,"impl-Debug-for-Error"],[11525,"impl-Display-for-Error"],[11532,"impl-From%3C%26Keypair%3E-for-SecretKey"],[11534,"impl-From%3CT%3E-for-SecretKey"],[11535,"impl-From%3CKeypair%3E-for-SecretKey"],[11537,"impl-From%3CKeypair%3E-for-PublicKey"],[11538,"impl-From%3C%26Keypair%3E-for-PublicKey"],[11539,"impl-From%3CPublicKey%3E-for-PublicKey"],[11544,"impl-From%3CLegacySighash%3E-for-Message"],[11545,"impl-From%3CSegwitV0Sighash%3E-for-Message"],[11546,"impl-From%3CT%3E-for-Message"],[11547,"impl-From%3CTapSighash%3E-for-Message"],[11619,"impl-PublicKey"],[11620,"impl-Serialize-for-PublicKey"],[11784,"impl-PartialEq%3C%5Bu8%5D%3E-for-SerializedSignature"],[11785,"impl-PartialEq-for-SerializedSignature"],[11798,"impl-Debug-for-SerializedSignature"],[11799,"impl-Display-for-SerializedSignature"],[11800,"impl-Debug-for-Signature"],[11801,"impl-Display-for-Signature"],[11806,"impl-From%3C%26Signature%3E-for-SerializedSignature"],[11807,"impl-From%3CSignature%3E-for-SerializedSignature"],[11824,"impl-IntoIterator-for-%26SerializedSignature"],[11825,"impl-IntoIterator-for-SerializedSignature"],[11831,"impl-PartialOrd%3C%5Bu8%5D%3E-for-SerializedSignature"],[11832,"impl-PartialOrd-for-SerializedSignature"],[11851,"impl-TryFrom%3CSerializedSignature%3E-for-Signature"],[11852,"impl-TryFrom%3C%26SerializedSignature%3E-for-Signature"],[11920,"impl-Debug-for-ElligatorSwift"],[11921,"impl-Display-for-ElligatorSwift"],[11922,"impl-LowerHex-for-ElligatorSwift"],[12321,"impl-Write-for-HmacEngine%3CT%3E"],[12322,"impl-Write-for-HmacEngine%3CT%3E"],[12323,"impl-Debug-for-FromSliceError"],[12324,"impl-Display-for-FromSliceError"],[12325,"impl-LowerHex-for-Hmac%3CT%3E"],[12326,"impl-Debug-for-Hmac%3CT%3E"],[12327,"impl-Display-for-Hmac%3CT%3E"],[12344,"impl-Index%3Cusize%3E-for-Hmac%3CT%3E"],[12345,"impl-Index%3CRange%3Cusize%3E%3E-for-Hmac%3CT%3E"],[12346,"impl-Index%3CRangeFull%3E-for-Hmac%3CT%3E"],[12347,"impl-Index%3CRangeFrom%3Cusize%3E%3E-for-Hmac%3CT%3E"],[12348,"impl-Index%3CRangeTo%3Cusize%3E%3E-for-Hmac%3CT%3E"],[12383,"impl-Write-for-HmacEngine%3CT%3E"],[12384,"impl-Write-for-HmacEngine%3CT%3E"],[12400,"impl-Debug-for-Error"],[12401,"impl-Display-for-Error"],[12402,"impl-From%3CError%3E-for-Error"],[12403,"impl-From%3CNonZero%3Cu32%3E%3E-for-Error"],[12515,"impl-Display-for-BernoulliError"],[12516,"impl-Debug-for-BernoulliError"],[12524,"impl-Debug-for-WeightedError"],[12525,"impl-Display-for-WeightedError"],[12539,"impl-From%3CRangeInclusive%3CX%3E%3E-for-Uniform%3CX%3E"],[12540,"impl-From%3CRange%3CX%3E%3E-for-Uniform%3CX%3E"],[12567,"impl-Distribution%3Cf32%3E-for-OpenClosed01"],[12568,"impl-Distribution%3Cf64%3E-for-OpenClosed01"],[12569,"impl-Distribution%3Cf32%3E-for-Open01"],[12570,"impl-Distribution%3Cf64%3E-for-Open01"],[12575,"impl-Distribution%3Cu16%3E-for-Standard"],[12576,"impl-Distribution%3Cf64%3E-for-Standard"],[12577,"impl-Distribution%3C(A,+B)%3E-for-Standard"],[12578,"impl-Distribution%3Cbool%3E-for-Standard"],[12579,"impl-Distribution%3C(A,+B,+C,+D)%3E-for-Standard"],[12580,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2326%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12581,"impl-Distribution%3Cisize%3E-for-Standard"],[12582,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2331%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12583,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2334%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12584,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2351%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12585,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I)%3E-for-Standard"],[12586,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2324%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12587,"impl-Distribution%3C(A,+B,+C)%3E-for-Standard"],[12588,"impl-Distribution%3CNonZero%3Cu32%3E%3E-for-Standard"],[12589,"impl-Distribution%3CNonZero%3Cu64%3E%3E-for-Standard"],[12590,"impl-Distribution%3C(A,)%3E-for-Standard"],[12591,"impl-Distribution%3C()%3E-for-Standard"],[12592,"impl-Distribution%3Cu64%3E-for-Standard"],[12593,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2330%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12594,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2340%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12595,"impl-Distribution%3Cf32%3E-for-Standard"],[12596,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2336%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12597,"impl-Distribution%3CNonZero%3Cu128%3E%3E-for-Standard"],[12598,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2348%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12599,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2335%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12600,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2352%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12601,"impl-Distribution%3Cu128%3E-for-Standard"],[12602,"impl-Distribution%3Ci8%3E-for-Standard"],[12603,"impl-Distribution%3Cusize%3E-for-Standard"],[12604,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K)%3E-for-Standard"],[12605,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2355%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12606,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I,+J)%3E-for-Standard"],[12607,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2338%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12608,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2337%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12609,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2332%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12610,"impl-Distribution%3Ci128%3E-for-Standard"],[12611,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G)%3E-for-Standard"],[12612,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2354%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12613,"impl-Distribution%3C(A,+B,+C,+D,+E,+F)%3E-for-Standard"],[12614,"impl-Distribution%3Cu32%3E-for-Standard"],[12615,"impl-Distribution%3CNonZero%3Cusize%3E%3E-for-Standard"],[12616,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2341%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12617,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2345%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12618,"impl-Distribution%3Ci32%3E-for-Standard"],[12619,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2349%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12620,"impl-Distribution%3Cchar%3E-for-Standard"],[12621,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2333%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12622,"impl-Distribution%3CNonZero%3Cu16%3E%3E-for-Standard"],[12623,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2353%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12624,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2343%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12625,"impl-Distribution%3Cu8%3E-for-Standard"],[12626,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2339%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12627,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2329%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12628,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2350%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12629,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2347%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12630,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2342%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12631,"impl-Distribution%3CWrapping%3CT%3E%3E-for-Standard"],[12632,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H)%3E-for-Standard"],[12633,"impl-Distribution%3CNonZero%3Cu8%3E%3E-for-Standard"],[12634,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2327%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12635,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2344%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12636,"impl-Distribution%3C(A,+B,+C,+D,+E)%3E-for-Standard"],[12637,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2328%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12638,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2346%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12639,"impl-Distribution%3COption%3CT%3E%3E-for-Standard"],[12640,"impl-Distribution%3Ci64%3E-for-Standard"],[12641,"impl-Distribution%3C(A,+B,+C,+D,+E,+F,+G,+H,+I,+J,+K,+L)%3E-for-Standard"],[12642,"impl-Distribution%3C%5BT;+rand::::distributions::other::%7Bimpl%2325%7D::%7Bconstant%230%7D%5D%3E-for-Standard"],[12643,"impl-Distribution%3C%5BT;+32%5D%3E-for-Standard"],[12644,"impl-Distribution%3Ci16%3E-for-Standard"],[12756,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12757,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12758,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12759,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12760,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12761,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12762,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12763,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12764,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12765,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12766,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12767,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12769,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12770,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12773,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12774,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12775,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12776,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12777,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12778,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12779,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12780,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12781,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12782,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12783,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12784,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12786,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12787,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12790,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12791,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12792,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12793,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12794,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12795,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12796,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12797,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12798,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12799,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12800,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12801,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12803,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12804,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12808,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12809,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12810,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12811,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12812,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12813,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12814,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12815,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12816,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12817,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12818,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12819,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12820,"impl-UniformSampler-for-UniformFloat%3Cf32%3E"],[12821,"impl-UniformSampler-for-UniformFloat%3Cf64%3E"],[12823,"impl-UniformSampler-for-UniformInt%3Cu128%3E"],[12824,"impl-UniformSampler-for-UniformInt%3Ci64%3E"],[12825,"impl-UniformSampler-for-UniformInt%3Cu32%3E"],[12826,"impl-UniformSampler-for-UniformInt%3Cisize%3E"],[12827,"impl-UniformSampler-for-UniformInt%3Cu64%3E"],[12828,"impl-UniformSampler-for-UniformInt%3Ci128%3E"],[12829,"impl-UniformSampler-for-UniformInt%3Cusize%3E"],[12830,"impl-UniformSampler-for-UniformInt%3Cu8%3E"],[12831,"impl-UniformSampler-for-UniformInt%3Ci32%3E"],[12832,"impl-UniformSampler-for-UniformInt%3Ci8%3E"],[12833,"impl-UniformSampler-for-UniformInt%3Ci16%3E"],[12834,"impl-UniformSampler-for-UniformInt%3Cu16%3E"],[12996,"impl-Display-for-ReadError"],[12997,"impl-Debug-for-ReadError"],[13099,"impl-From%3CVec%3Cu32%3E%3E-for-IndexVec"],[13101,"impl-From%3CVec%3Cusize%3E%3E-for-IndexVec"],[13148,"impl-Debug-for-OutOfRangeError"],[13149,"impl-Display-for-OutOfRangeError"],[13172,"impl-LowerHex-for-Signature"],[13173,"impl-Debug-for-Signature"],[13174,"impl-Display-for-Signature"],[13182,"impl-Signature"],[13183,"impl-Serialize-for-Signature"],[13347,"impl-Display-for-PrevoutsSizeError"],[13348,"impl-Debug-for-PrevoutsSizeError"],[13349,"impl-Display-for-PrevoutsKindError"],[13350,"impl-Debug-for-PrevoutsKindError"],[13351,"impl-Debug-for-PrevoutsIndexError"],[13352,"impl-Display-for-PrevoutsIndexError"],[13353,"impl-Display-for-InvalidSighashTypeError"],[13354,"impl-Debug-for-InvalidSighashTypeError"],[13355,"impl-Debug-for-NonStandardSighashTypeError"],[13356,"impl-Display-for-NonStandardSighashTypeError"],[13357,"impl-Debug-for-SighashTypeParseError"],[13358,"impl-Display-for-SighashTypeParseError"],[13360,"impl-Debug-for-TaprootError"],[13361,"impl-Display-for-TaprootError"],[13362,"impl-Debug-for-P2wpkhError"],[13363,"impl-Display-for-P2wpkhError"],[13364,"impl-Display-for-SingleMissingOutputError"],[13365,"impl-Debug-for-SingleMissingOutputError"],[13366,"impl-Display-for-AnnexError"],[13367,"impl-Debug-for-AnnexError"],[13368,"impl-Display-for-SigningDataError%3CE%3E"],[13369,"impl-Debug-for-SigningDataError%3CE%3E"],[13382,"impl-From%3CInfallible%3E-for-TaprootError"],[13383,"impl-From%3CPrevoutsKindError%3E-for-TaprootError"],[13384,"impl-From%3CPrevoutsIndexError%3E-for-TaprootError"],[13385,"impl-From%3CInputsIndexError%3E-for-TaprootError"],[13387,"impl-From%3CPrevoutsSizeError%3E-for-TaprootError"],[13388,"impl-From%3CInputsIndexError%3E-for-P2wpkhError"],[13389,"impl-From%3CInfallible%3E-for-P2wpkhError"],[13394,"impl-From%3CInfallible%3E-for-SigningDataError%3CE%3E"],[13395,"impl-From%3CError%3E-for-SigningDataError%3CE%3E"],[13561,"impl-Display-for-MessageSignatureError"],[13562,"impl-Debug-for-MessageSignatureError"],[13563,"impl-Debug-for-MessageSignature"],[13564,"impl-Display-for-MessageSignature"],[13566,"impl-From%3CError%3E-for-MessageSignatureError"],[13567,"impl-From%3CInfallible%3E-for-MessageSignatureError"],[13812,"impl-Display-for-SigFromSliceError"],[13813,"impl-Debug-for-SigFromSliceError"],[13817,"impl-Debug-for-IncompleteBuilderError"],[13818,"impl-Display-for-IncompleteBuilderError"],[13819,"impl-Display-for-HiddenNodesError"],[13820,"impl-Debug-for-HiddenNodesError"],[13827,"impl-Display-for-FutureLeafVersion"],[13828,"impl-UpperHex-for-FutureLeafVersion"],[13829,"impl-Debug-for-FutureLeafVersion"],[13830,"impl-LowerHex-for-FutureLeafVersion"],[13831,"impl-Display-for-LeafVersion"],[13832,"impl-Debug-for-LeafVersion"],[13833,"impl-LowerHex-for-LeafVersion"],[13834,"impl-UpperHex-for-LeafVersion"],[13835,"impl-Debug-for-TaprootBuilderError"],[13836,"impl-Display-for-TaprootBuilderError"],[13837,"impl-Display-for-TaprootError"],[13838,"impl-Debug-for-TaprootError"],[13842,"impl-From%3CInvalidSighashTypeError%3E-for-SigFromSliceError"],[13843,"impl-From%3CInfallible%3E-for-SigFromSliceError"],[13844,"impl-From%3CError%3E-for-SigFromSliceError"],[13846,"impl-From%3C%5BTapNodeHash;+3%5D%3E-for-TaprootMerkleBranch"],[13847,"impl-From%3C%5BTapNodeHash;+127%5D%3E-for-TaprootMerkleBranch"],[13848,"impl-From%3C%5BTapNodeHash;+79%5D%3E-for-TaprootMerkleBranch"],[13849,"impl-From%3C%5BTapNodeHash;+93%5D%3E-for-TaprootMerkleBranch"],[13850,"impl-From%3C%5BTapNodeHash;+84%5D%3E-for-TaprootMerkleBranch"],[13851,"impl-From%3C%5BTapNodeHash;+39%5D%3E-for-TaprootMerkleBranch"],[13852,"impl-From%3C%5BTapNodeHash;+18%5D%3E-for-TaprootMerkleBranch"],[13853,"impl-From%3C%5BTapNodeHash;+48%5D%3E-for-TaprootMerkleBranch"],[13854,"impl-From%3C%5BTapNodeHash;+2%5D%3E-for-TaprootMerkleBranch"],[13855,"impl-From%3C%5BTapNodeHash;+99%5D%3E-for-TaprootMerkleBranch"],[13856,"impl-From%3C%5BTapNodeHash;+20%5D%3E-for-TaprootMerkleBranch"],[13857,"impl-From%3C%5BTapNodeHash;+87%5D%3E-for-TaprootMerkleBranch"],[13858,"impl-From%3C%5BTapNodeHash;+10%5D%3E-for-TaprootMerkleBranch"],[13859,"impl-From%3C%5BTapNodeHash;+42%5D%3E-for-TaprootMerkleBranch"],[13860,"impl-From%3C%5BTapNodeHash;+119%5D%3E-for-TaprootMerkleBranch"],[13861,"impl-From%3C%5BTapNodeHash;+63%5D%3E-for-TaprootMerkleBranch"],[13862,"impl-From%3C%5BTapNodeHash;+117%5D%3E-for-TaprootMerkleBranch"],[13863,"impl-From%3C%5BTapNodeHash;+121%5D%3E-for-TaprootMerkleBranch"],[13864,"impl-From%3C%5BTapNodeHash;+58%5D%3E-for-TaprootMerkleBranch"],[13865,"impl-From%3C%5BTapNodeHash;+118%5D%3E-for-TaprootMerkleBranch"],[13866,"impl-From%3C%5BTapNodeHash;+16%5D%3E-for-TaprootMerkleBranch"],[13867,"impl-From%3C%5BTapNodeHash;+77%5D%3E-for-TaprootMerkleBranch"],[13868,"impl-From%3C%5BTapNodeHash;+76%5D%3E-for-TaprootMerkleBranch"],[13869,"impl-From%3C%5BTapNodeHash;+103%5D%3E-for-TaprootMerkleBranch"],[13870,"impl-From%3C%5BTapNodeHash;+125%5D%3E-for-TaprootMerkleBranch"],[13871,"impl-From%3C%5BTapNodeHash;+80%5D%3E-for-TaprootMerkleBranch"],[13872,"impl-From%3C%5BTapNodeHash;+128%5D%3E-for-TaprootMerkleBranch"],[13873,"impl-From%3C%5BTapNodeHash;+46%5D%3E-for-TaprootMerkleBranch"],[13874,"impl-From%3C%5BTapNodeHash;+82%5D%3E-for-TaprootMerkleBranch"],[13875,"impl-From%3C%5BTapNodeHash;+22%5D%3E-for-TaprootMerkleBranch"],[13876,"impl-From%3C%5BTapNodeHash;+98%5D%3E-for-TaprootMerkleBranch"],[13877,"impl-From%3C%5BTapNodeHash;+38%5D%3E-for-TaprootMerkleBranch"],[13878,"impl-From%3C%5BTapNodeHash;+106%5D%3E-for-TaprootMerkleBranch"],[13879,"impl-From%3C%5BTapNodeHash;+28%5D%3E-for-TaprootMerkleBranch"],[13880,"impl-From%3C%5BTapNodeHash;+73%5D%3E-for-TaprootMerkleBranch"],[13881,"impl-From%3C%5BTapNodeHash;+65%5D%3E-for-TaprootMerkleBranch"],[13882,"impl-From%3C%5BTapNodeHash;+32%5D%3E-for-TaprootMerkleBranch"],[13883,"impl-From%3C%5BTapNodeHash;+111%5D%3E-for-TaprootMerkleBranch"],[13884,"impl-From%3C%5BTapNodeHash;+40%5D%3E-for-TaprootMerkleBranch"],[13885,"impl-From%3C%5BTapNodeHash;+52%5D%3E-for-TaprootMerkleBranch"],[13886,"impl-From%3C%5BTapNodeHash;+97%5D%3E-for-TaprootMerkleBranch"],[13887,"impl-From%3C%5BTapNodeHash;+126%5D%3E-for-TaprootMerkleBranch"],[13888,"impl-From%3C%5BTapNodeHash;+88%5D%3E-for-TaprootMerkleBranch"],[13889,"impl-From%3C%5BTapNodeHash;+49%5D%3E-for-TaprootMerkleBranch"],[13890,"impl-From%3C%5BTapNodeHash;+114%5D%3E-for-TaprootMerkleBranch"],[13891,"impl-From%3C%5BTapNodeHash;+44%5D%3E-for-TaprootMerkleBranch"],[13892,"impl-From%3C%5BTapNodeHash;+9%5D%3E-for-TaprootMerkleBranch"],[13893,"impl-From%3C%5BTapNodeHash;+108%5D%3E-for-TaprootMerkleBranch"],[13894,"impl-From%3C%5BTapNodeHash;+74%5D%3E-for-TaprootMerkleBranch"],[13895,"impl-From%3C%5BTapNodeHash;+123%5D%3E-for-TaprootMerkleBranch"],[13896,"impl-From%3C%5BTapNodeHash;+124%5D%3E-for-TaprootMerkleBranch"],[13897,"impl-From%3C%5BTapNodeHash;+47%5D%3E-for-TaprootMerkleBranch"],[13898,"impl-From%3C%5BTapNodeHash;+24%5D%3E-for-TaprootMerkleBranch"],[13899,"impl-From%3C%5BTapNodeHash;+19%5D%3E-for-TaprootMerkleBranch"],[13900,"impl-From%3C%5BTapNodeHash;+107%5D%3E-for-TaprootMerkleBranch"],[13901,"impl-From%3C%5BTapNodeHash;+70%5D%3E-for-TaprootMerkleBranch"],[13902,"impl-From%3C%5BTapNodeHash;+53%5D%3E-for-TaprootMerkleBranch"],[13903,"impl-From%3C%5BTapNodeHash;+36%5D%3E-for-TaprootMerkleBranch"],[13904,"impl-From%3C%5BTapNodeHash;+109%5D%3E-for-TaprootMerkleBranch"],[13905,"impl-From%3C%5BTapNodeHash;+43%5D%3E-for-TaprootMerkleBranch"],[13906,"impl-From%3C%5BTapNodeHash;+95%5D%3E-for-TaprootMerkleBranch"],[13907,"impl-From%3C%5BTapNodeHash;+64%5D%3E-for-TaprootMerkleBranch"],[13908,"impl-From%3C%5BTapNodeHash;+89%5D%3E-for-TaprootMerkleBranch"],[13909,"impl-From%3C%5BTapNodeHash;+90%5D%3E-for-TaprootMerkleBranch"],[13910,"impl-From%3C%5BTapNodeHash;+5%5D%3E-for-TaprootMerkleBranch"],[13911,"impl-From%3C%5BTapNodeHash;+96%5D%3E-for-TaprootMerkleBranch"],[13912,"impl-From%3C%5BTapNodeHash;+6%5D%3E-for-TaprootMerkleBranch"],[13913,"impl-From%3C%5BTapNodeHash;+67%5D%3E-for-TaprootMerkleBranch"],[13914,"impl-From%3C%5BTapNodeHash;+7%5D%3E-for-TaprootMerkleBranch"],[13915,"impl-From%3C%5BTapNodeHash;+55%5D%3E-for-TaprootMerkleBranch"],[13916,"impl-From%3C%5BTapNodeHash;+12%5D%3E-for-TaprootMerkleBranch"],[13917,"impl-From%3C%5BTapNodeHash;+66%5D%3E-for-TaprootMerkleBranch"],[13918,"impl-From%3C%5BTapNodeHash;+72%5D%3E-for-TaprootMerkleBranch"],[13919,"impl-From%3C%5BTapNodeHash;+91%5D%3E-for-TaprootMerkleBranch"],[13920,"impl-From%3C%5BTapNodeHash;+60%5D%3E-for-TaprootMerkleBranch"],[13921,"impl-From%3C%5BTapNodeHash;+112%5D%3E-for-TaprootMerkleBranch"],[13922,"impl-From%3C%5BTapNodeHash;+15%5D%3E-for-TaprootMerkleBranch"],[13923,"impl-From%3C%5BTapNodeHash;+33%5D%3E-for-TaprootMerkleBranch"],[13924,"impl-From%3C%5BTapNodeHash;+8%5D%3E-for-TaprootMerkleBranch"],[13925,"impl-From%3C%5BTapNodeHash;+71%5D%3E-for-TaprootMerkleBranch"],[13926,"impl-From%3C%5BTapNodeHash;+59%5D%3E-for-TaprootMerkleBranch"],[13927,"impl-From%3C%5BTapNodeHash;+13%5D%3E-for-TaprootMerkleBranch"],[13928,"impl-From%3C%5BTapNodeHash;+50%5D%3E-for-TaprootMerkleBranch"],[13929,"impl-From%3C%5BTapNodeHash;+83%5D%3E-for-TaprootMerkleBranch"],[13930,"impl-From%3C%5BTapNodeHash;+69%5D%3E-for-TaprootMerkleBranch"],[13931,"impl-From%3C%5BTapNodeHash;+29%5D%3E-for-TaprootMerkleBranch"],[13932,"impl-From%3C%5BTapNodeHash;+86%5D%3E-for-TaprootMerkleBranch"],[13933,"impl-From%3C%5BTapNodeHash;+68%5D%3E-for-TaprootMerkleBranch"],[13934,"impl-From%3C%5BTapNodeHash;+115%5D%3E-for-TaprootMerkleBranch"],[13935,"impl-From%3C%5BTapNodeHash;+122%5D%3E-for-TaprootMerkleBranch"],[13936,"impl-From%3C%5BTapNodeHash;+62%5D%3E-for-TaprootMerkleBranch"],[13937,"impl-From%3C%5BTapNodeHash;+113%5D%3E-for-TaprootMerkleBranch"],[13938,"impl-From%3C%5BTapNodeHash;+34%5D%3E-for-TaprootMerkleBranch"],[13939,"impl-From%3C%5BTapNodeHash;+81%5D%3E-for-TaprootMerkleBranch"],[13940,"impl-From%3C%5BTapNodeHash;+37%5D%3E-for-TaprootMerkleBranch"],[13941,"impl-From%3C%5BTapNodeHash;+17%5D%3E-for-TaprootMerkleBranch"],[13942,"impl-From%3C%5BTapNodeHash;+1%5D%3E-for-TaprootMerkleBranch"],[13943,"impl-From%3C%5BTapNodeHash;+110%5D%3E-for-TaprootMerkleBranch"],[13944,"impl-From%3C%5BTapNodeHash;+61%5D%3E-for-TaprootMerkleBranch"],[13945,"impl-From%3C%5BTapNodeHash;+75%5D%3E-for-TaprootMerkleBranch"],[13946,"impl-From%3C%5BTapNodeHash;+31%5D%3E-for-TaprootMerkleBranch"],[13947,"impl-From%3C%5BTapNodeHash;+26%5D%3E-for-TaprootMerkleBranch"],[13949,"impl-From%3C%5BTapNodeHash;+41%5D%3E-for-TaprootMerkleBranch"],[13950,"impl-From%3C%5BTapNodeHash;+21%5D%3E-for-TaprootMerkleBranch"],[13951,"impl-From%3C%5BTapNodeHash;+104%5D%3E-for-TaprootMerkleBranch"],[13952,"impl-From%3C%5BTapNodeHash;+25%5D%3E-for-TaprootMerkleBranch"],[13953,"impl-From%3C%5BTapNodeHash;+27%5D%3E-for-TaprootMerkleBranch"],[13954,"impl-From%3C%5BTapNodeHash;+11%5D%3E-for-TaprootMerkleBranch"],[13955,"impl-From%3C%5BTapNodeHash;+51%5D%3E-for-TaprootMerkleBranch"],[13956,"impl-From%3C%5BTapNodeHash;+23%5D%3E-for-TaprootMerkleBranch"],[13957,"impl-From%3C%5BTapNodeHash;+14%5D%3E-for-TaprootMerkleBranch"],[13958,"impl-From%3C%5BTapNodeHash;+85%5D%3E-for-TaprootMerkleBranch"],[13959,"impl-From%3C%5BTapNodeHash;+57%5D%3E-for-TaprootMerkleBranch"],[13960,"impl-From%3C%5BTapNodeHash;+0%5D%3E-for-TaprootMerkleBranch"],[13961,"impl-From%3C%5BTapNodeHash;+101%5D%3E-for-TaprootMerkleBranch"],[13962,"impl-From%3C%5BTapNodeHash;+54%5D%3E-for-TaprootMerkleBranch"],[13963,"impl-From%3C%5BTapNodeHash;+45%5D%3E-for-TaprootMerkleBranch"],[13964,"impl-From%3C%5BTapNodeHash;+100%5D%3E-for-TaprootMerkleBranch"],[13965,"impl-From%3C%5BTapNodeHash;+94%5D%3E-for-TaprootMerkleBranch"],[13966,"impl-From%3C%5BTapNodeHash;+35%5D%3E-for-TaprootMerkleBranch"],[13967,"impl-From%3C%5BTapNodeHash;+116%5D%3E-for-TaprootMerkleBranch"],[13968,"impl-From%3C%5BTapNodeHash;+30%5D%3E-for-TaprootMerkleBranch"],[13969,"impl-From%3C%5BTapNodeHash;+78%5D%3E-for-TaprootMerkleBranch"],[13970,"impl-From%3C%5BTapNodeHash;+120%5D%3E-for-TaprootMerkleBranch"],[13971,"impl-From%3C%5BTapNodeHash;+4%5D%3E-for-TaprootMerkleBranch"],[13972,"impl-From%3C%5BTapNodeHash;+102%5D%3E-for-TaprootMerkleBranch"],[13973,"impl-From%3C%5BTapNodeHash;+92%5D%3E-for-TaprootMerkleBranch"],[13974,"impl-From%3C%5BTapNodeHash;+56%5D%3E-for-TaprootMerkleBranch"],[13975,"impl-From%3C%5BTapNodeHash;+105%5D%3E-for-TaprootMerkleBranch"],[14039,"impl-IntoIterator-for-TaprootMerkleBranch"],[14040,"impl-IntoIterator-for-%26TaprootMerkleBranch"],[14041,"impl-IntoIterator-for-%26mut+TaprootMerkleBranch"],[14090,"impl-Signature"],[14091,"impl-Serialize-for-Signature"],[14092,"impl-Serialize-for-TaprootMerkleBranch"],[14093,"impl-TaprootMerkleBranch"],[14097,"impl-ControlBlock"],[14098,"impl-Serialize-for-ControlBlock"],[14144,"impl-TryFrom%3CSerializedSignature%3E-for-Signature"],[14146,"impl-TryFrom%3C%26SerializedSignature%3E-for-Signature"],[14148,"impl-TryFrom%3CVec%3CTapNodeHash%3E%3E-for-TaprootMerkleBranch"],[14149,"impl-TryFrom%3CBox%3C%5BTapNodeHash%5D%3E%3E-for-TaprootMerkleBranch"],[14150,"impl-TryFrom%3C%26%5BTapNodeHash%5D%3E-for-TaprootMerkleBranch"],[14157,"impl-TryFrom%3CNodeInfo%3E-for-TapTree"],[14158,"impl-TryFrom%3CTaprootBuilder%3E-for-TapTree"],[14274,"impl-PartialEq%3C%5Bu8%5D%3E-for-SerializedSignature"],[14275,"impl-PartialEq-for-SerializedSignature"],[14278,"impl-Display-for-SerializedSignature"],[14279,"impl-Debug-for-SerializedSignature"],[14281,"impl-From%3C%26Signature%3E-for-SerializedSignature"],[14282,"impl-From%3CSignature%3E-for-SerializedSignature"],[14290,"impl-IntoIterator-for-SerializedSignature"],[14291,"impl-IntoIterator-for-%26SerializedSignature"],[14297,"impl-PartialOrd-for-SerializedSignature"],[14298,"impl-PartialOrd%3C%5Bu8%5D%3E-for-SerializedSignature"],[14339,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[14340,"impl-From%3CChangeSet%3E-for-ChangeSet%3CA,+ChangeSet%3E"],[14385,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[14386,"impl-KeychainTxOutIndex%3CK%3E"],[14405,"impl-Display-for-InsertDescriptorError%3CK%3E"],[14406,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[14571,"impl-Debug-for-MissingGenesisError"],[14572,"impl-Display-for-MissingGenesisError"],[14573,"impl-Debug-for-AlterCheckPointError"],[14574,"impl-Display-for-AlterCheckPointError"],[14575,"impl-Debug-for-CannotConnectError"],[14576,"impl-Display-for-CannotConnectError"],[14577,"impl-Display-for-ApplyHeaderError"],[14578,"impl-Debug-for-ApplyHeaderError"],[14589,"impl-FromIterator%3C(u32,+Option%3CBlockHash%3E)%3E-for-ChangeSet"],[14590,"impl-FromIterator%3C(u32,+BlockHash)%3E-for-ChangeSet"],[14705,"impl-Display-for-SyncItem%3C\'i,+I%3E"],[14706,"impl-Debug-for-SyncItem%3C\'i,+I%3E"],[14877,"impl-Display-for-CalculateFeeError"],[14878,"impl-Debug-for-CalculateFeeError"]],"c":"OjAAAAEAAAAAADIAEAAAAFACUgJuBOMH+gf+ByIIQwrYCgsODQ4ODg8OFQ4XDhgOGQ5PEFAQURBSEKUYLxmTHJocUSJWIp0lniVyLIAsgSwpLTgtSS3pLeot6y3sLfctMy6oMT4yPzJAMkMyRjK2MrcyVDXVNg==","e":"OjAAAAEAAAAAAK8mEAAAAAAAYISth////+////f/D36+//3/8/9z1SEyZ4cAAOAAEfcjP/2//4P///8H/z//PwAAAAAAAAAAAAAAAAAAAAAAAIA//v/v//++AADA//////8fAPz/////////////////////oQEAwP//////////////////////////APj/////P7////////93wD/8////////////7/////////////////9/A/j3//////////////////////8/wI7yfDe7+OdNuXffRRUS6lng//8A/P8fgAAAAAAA/8/5///P/////wMA8P////////j//38AAAAAAAAAAAIAAABAAADwHwAAAAAA4P///////4H/BwAeAPi///P//98h4P8A/P8fAA/+////////YwAAMDD//////wMA4f///////////////////3/A/////////wED+P///////wcAAAAAAAD4//////////////v//5ffAxwA8P///////////wEAAAAAwPv/Hvx/+PcOGA9+/h+e//////8/4Of/+P///vF//zsApoB/BPAHxDOqw/8YAAAGwf7nH/CPH/D/P/D/AMD/AwDA/x/B//8BgP8/+L/jA8D/L0D+B8D//wEAAHDweBnAvwDM+f/f////9/////8x4CcAvva//7//HwDA//8OBwwAAPD///9/AAAAgIf/////AQD+/z8D/Pz//+P//61kD/n7OAAaAICAD/zhn3/8/////wMAAADw//8///+TBtjj//c8AADM//9HYz8BAPD/////////TznAOQD+/z/+/////z8AgP/////f/////6MBwAcA4P9/8Pf///9//gAA/P8n/wcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMf///P///7/93/h/////////////////////////////////////7////////////P/AsAB/A0A4P8f/v///x+A//kDAAD4//+/G/z/PwAAgP////f//78GBAAC////78cPjHsAQPgBAPxJAADg/wAAflMA4N8BAPD/HwAAAOADwT/g//9/ArD3//8P+P////88R8Hf/wPw/////x7w//8/AAAAAAAA/v+/8/sfAAD+f//3//cfZQiAxc8f//H///9YgAf+H8D+AfyNPwAAYHj+////n/z5/78gAAAAAAAAAAAAAAAAAACA/yYAAADA+gAAAP4GhKRIVYkcAAAA/P//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////n////z8AAAAAAAAAN/7/8P////////////////////////8PAAAAgEMAgD8AGPBAAAAQHuD/////yZ////H///f///83sX6Of///9///9z+///y//57ff/7//8mf/3/+////n/z5/5///3/y5/8f7/////9Hugz7/78BAADA//f/bx9LAHj/86///98GAAAAAJj/////////Qb7/3///////v0i/HQDiAwCADwC4APjg///7/////4//DwB4/t8J/HsA/P8P//8AAOD//////////zPoADDsf///DwD//88A/wcAAAAAwP9/+P//h4D/3/8DgP////8IkP/nAP//7z8H/PfD///7//9/eHjv33vA/////////wP4AQDg////B8Dv//9/AAD/z/2PPwAAAAAAAAAAAAAAAPD///////98/v////P//x1lW5UPAMADOH4A/P/v/////w/7/wAA4P///8fAzvvnAAAAAAC08P///////3/wD7/v/////38gnVYA7P8cAAD8H6j2////////9/8AAPj3GPXh4X//7+//pwUexg+e///Hx+/B/v//P+DhuP8PAgDw/4P///8/+MH/PyB8PwDwCf//7//+/////3/427eb//Pu4f8A0L////v9oSy+oMr//wMYHgAgSDwAAPz//////////wEwACDQ////////////P//f//////P/AOD//wfg/9//v/9//n//////wM8HAAAAAAD4//8fw///P/7/AO//v//4hwEIp8f/XwDDPP/Pf/32/1x/AAAAAAAA4P///////////////////weEd9oBAADA/g/////+///////9/wP4978RoP8HAAAAAAAAYP7///////////8/7D/////////3////uP///////////////9////9JAgr+HwAAwAcAAB74P7Ab/PH//48fP////5////P/f8CPf0///4+4f/0DxP8zAPs9AAD0//+BBQIAAJD/cXDgzxHAkQAA/v//9/9PwBCARf///t8PAP7/Afj+fxECAAASOfz/g///AACA/P/8/+//+AkAAIAFbX7w5w8A/z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","a":{"is_coin_base":[1995],"ntxid":[1005],"read_to_end":[9546],"txid":[1006],"wtxid":[1008]}}],\ +["bdk_core",{"t":"FFFFIIKFOENONNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNONONNNNNNNNMNNMNNNNNNNODNNCNNNNNNNNNNNNNNNNOONNNNNNNNNNFFFPPGFFFFPNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNOONNNNONONNNNNNNNNNNNNNNNNNNNNNNNOONOONNNNNNNNNNNNNNNN","n":["BlockId","CheckPoint","CheckPointIter","ConfirmationBlockTime","Indexed","KeychainIndexed","Merge","TxUpdate","anchors","bitcoin","block_id","block_id","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","confirmation_time","default","default","default","deserialize","deserialize","eq","eq","eq","eq_ptr","extend","extend","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_block_ids","from_header","get","hash","hash","hash","hash","height","height","insert","into","into","into","into","into","into_iter","into_iter","is_empty","iter","map_anchors","merge","new","next","partial_cmp","partial_cmp","prev","push","range","seen_ats","serde","serialize","serialize","spk_client","take","take","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","txouts","txs","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","FullScanRequest","FullScanRequestBuilder","FullScanResult","OutPoint","Spk","SyncItem","SyncProgress","SyncRequest","SyncRequestBuilder","SyncResult","Txid","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","builder","builder","chain_tip","chain_tip","chain_tip","chain_tip","chain_update","chain_update","clone","clone","clone_into","clone_into","cmp","consumed","default","default","default","default","default","default","eq","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","inspect","inspect","into","into","into","into","into","into","into","into","iter_outpoints","iter_spks","iter_spks","iter_txids","keychains","last_active_indices","next_outpoint","next_spk","next_spk","next_txid","outpoints","outpoints_consumed","outpoints_remaining","partial_cmp","progress","remaining","spks","spks_consumed","spks_for_keychain","spks_remaining","spks_with_indexes","to_owned","to_owned","to_string","total","total_outpoints","total_spks","total_txids","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_update","tx_update","txids","txids_consumed","txids_remaining","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"bdk_core"],[116,"bdk_core::spk_client"],[257,"bdk_core::checkpoint"],[258,"bdk_core::block_id"],[259,"bdk_core::tx_update"],[260,"core::clone"],[261,"core::cmp"],[262,"core::result"],[263,"serde::de"],[264,"core::iter::traits::collect"],[265,"core::fmt"],[266,"bitcoin::blockdata::block"],[267,"core::option"],[268,"core::hash"],[269,"bdk_core::merge"],[270,"core::ops::function"],[271,"core::iter::traits::iterator"],[272,"core::ops::range"],[273,"serde::ser"],[274,"core::any"],[275,"core::marker"],[276,"bitcoin::blockdata::script::borrowed"],[277,"bitcoin::blockdata::transaction"],[278,"core::iter::traits::exact_size"],[279,"bitcoin::blockdata::script::owned"],[280,"alloc::vec"],[281,"alloc::string"]],"i":[0,0,0,0,0,0,0,0,6,0,1,5,26,3,5,1,6,26,3,5,1,6,3,5,1,6,3,5,1,6,3,5,5,3,5,6,3,5,3,5,1,1,1,6,3,5,1,6,26,3,3,3,5,1,6,1,1,1,3,5,1,3,1,3,1,26,3,5,1,6,26,1,25,1,6,25,1,26,3,5,1,1,1,6,0,3,5,0,25,25,3,5,1,6,26,3,5,1,6,26,3,5,1,6,6,6,26,3,5,1,6,26,3,5,1,6,0,0,0,37,37,0,0,0,0,0,37,33,34,35,36,37,38,40,41,33,34,35,36,37,38,40,41,33,35,34,36,33,34,35,36,40,41,37,38,37,38,37,38,33,34,35,36,40,41,37,37,37,38,40,41,33,34,34,35,36,36,37,38,40,41,37,33,35,33,34,35,36,37,38,40,41,34,34,36,34,36,41,34,34,36,34,33,38,38,37,34,38,33,38,35,38,33,37,38,37,38,38,38,38,33,34,35,36,37,38,40,41,33,34,35,36,37,38,40,41,40,41,33,38,38,33,34,35,36,37,38,40,41,33,34,35,36,37,38,40,41],"f":"``````````{{{d{b}}}f}`{{{d{c}}}{{d{e}}}{}{}}0000{{{d{hc}}}{{d{he}}}{}{}}0000{{{d{f}}}f}{{{d{j}}}j}{{{d{b}}}b}{{{d{{l{c}}}}}{{l{c}}}n}{{{d{c}}{d{he}}}A`{}{}}000{{{d{f}}{d{f}}}Ab}{{{d{j}}{d{j}}}Ab}`{{}f}{{}j}{{}{{l{c}}}{}}{c{{Ad{f}}}Af}{c{{Ad{j}}}Af}{{{d{f}}{d{f}}}Ah}{{{d{j}}{d{j}}}Ah}{{{d{b}}{d{b}}}Ah}0{{bc}{{Ad{bb}}}{{Al{}{{Aj{f}}}}}}{{{d{h{l{c}}}}{l{c}}}A`An}{{{d{f}}{d{hB`}}}Bb}{{{d{j}}{d{hB`}}}Bb}{{{d{b}}{d{hB`}}}Bb}{{{d{{l{c}}}}{d{hB`}}}BbBd}{cc{}}{{{Bj{BfBh}}}f}1{{{Bj{{d{Bf}}{d{Bh}}}}}f}222{c{{Ad{b{Bl{b}}}}}{{Al{}{{Aj{f}}}}}}{{{d{Bn}}Bf}b}{{{d{b}}Bf}{{Bl{b}}}}{{{d{f}}{d{hc}}}A`C`}{{{d{j}}{d{hc}}}A`C`}{{{d{b}}}Bh}`{{{d{b}}}Bf}`{{bf}b}{ce{}{}}00000{bc{}}{{{d{Cb}}}Ah}{{{d{b}}}Cd}{{{l{c}}g}{{l{e}}}AnAn{{Ch{c}{{Cf{e}}}}}}{{{d{hCb}}Cb}A`}{fb}{{{d{hCd}}}{{Bl{c}}}{}}{{{d{f}}{d{f}}}{{Bl{Ab}}}}{{{d{j}}{d{j}}}{{Bl{Ab}}}}{{{d{b}}}{{Bl{b}}}}{{bf}{{Ad{bb}}}}{{{d{b}}c}{{`{{Cj{}{{Aj{b}}}}}}}{{Cl{Bf}}}}``{{{d{f}}c}AdCn}{{{d{j}}c}AdCn}`{{{d{hCb}}}{{Bl{Cb}}}}0{{{d{c}}}e{}{}}000{c{{Ad{e}}}{}{}}000000000``{{{d{c}}}D`{}}0000{ce{}{}}0000```````````{{{d{c}}}{{d{e}}}{}{}}0000000{{{d{hc}}}{{d{he}}}{}{}}0000000{{{Db{c}}}{{Dd{c}}}{}}{{{Df{c}}}{{Dh{c}}}An}{{}{{Db{c}}}{}}{{}{{Df{c}}}{Ann}}{{{Db{c}}b}{{Db{c}}}{}}{{{d{{Dd{c}}}}}{{Bl{b}}}{}}{{{Df{c}}b}{{Df{c}}}An}{{{d{{Dh{c}}}}}{{Bl{b}}}{Ann}}``{{{d{{Dj{c}}}}}{{Dj{c}}}n}{{{d{Dl}}}Dl}{{{d{c}}{d{he}}}A`{}{}}0{{{d{{Dj{c}}}}{d{{Dj{c}}}}}AbAn}{{{d{Dl}}}Dn}:{{}{{Dd{c}}}{}}{{}{{Df{c}}}{}}{{}{{Dh{c}}}{}}{{}{{E`{c}}}{}}{{}{{Eb{ce}}}{}{}}{{{d{{Dj{c}}}}{d{{Dj{c}}}}}AhEd}{{{d{{Dj{c}}}}{d{hB`}}}BbBd}{{{d{{Dj{c}}}}{d{hB`}}}Bb{BdEf}}{{{d{Dl}}{d{hB`}}}Bb}{{{d{{E`{c}}}}{d{hB`}}}BbBd}{{{d{{Eb{ce}}}}{d{hB`}}}BbBdBd}{cc{}}{{{Db{c}}}{{Dd{c}}}{}}111{{{Df{c}}}{{Dh{c}}}{}}2222{{{d{{Dj{c}}}}{d{he}}}A`EhC`}{{{Db{c}}e}{{Db{c}}}{}{{Ch{{Dj{c}}Dl}}Ej}}{{{Df{c}}e}{{Df{c}}}An{{Ch{cBf{d{El}}}}Ej}}{ce{}{}}0000000{{{d{h{Dd{c}}}}}{{`{{F`{}{{Aj{En}}}}}}}{}}{{{d{h{Dd{c}}}}}{{`{{F`{}{{Aj{Fb}}}}}}}{}}{{{d{h{Dh{c}}}}c}{{`{{Cj{}{{Aj{{Fd{Fb}}}}}}}}}{Ann}}{{{d{h{Dd{c}}}}}{{`{{F`{}{{Aj{Ff}}}}}}}{}}{{{d{{Dh{c}}}}}{{Fh{c}}}{Ann}}`{{{d{h{Dd{c}}}}}{{Bl{En}}}{}}{{{d{h{Dd{c}}}}}{{Bl{Fb}}}{}}{{{d{h{Dh{c}}}}c}{{Bl{{Fd{Fb}}}}}{Ann}}{{{d{h{Dd{c}}}}}{{Bl{Ff}}}{}}{{{Db{c}}e}{{Db{c}}}{}{{Al{}{{Aj{En}}}}}}``{{{d{{Dj{c}}}}{d{{Dj{c}}}}}{{Bl{Ab}}}Fj}{{{d{{Dd{c}}}}}Dl{}}{{{d{Dl}}}Dn}{{{Db{A`}}c}{{Db{A`}}}{{Al{}{{Aj{Fb}}}}}}`{{{Df{c}}cg}{{Df{c}}}An{{Cj{}{{Aj{{Fd{Fb}}}}}}Ej}{{Al{}{{Fl{e}}}}}}`{{{Db{c}}e}{{Db{c}}}{}{{Al{}{{Aj{{Bj{cFb}}}}}}}}{{{d{c}}}e{}{}}0{{{d{c}}}Fn{}}5555{c{{Ad{e}}}{}{}}000000000000000``{{{Db{c}}e}{{Db{c}}}{}{{Al{}{{Aj{Ff}}}}}}``{{{d{c}}}D`{}}0000000{ce{}{}}0000000","D":"Nj","p":[[5,"CheckPoint",0,257],[1,"reference"],[5,"BlockId",0,258],[0,"mut"],[5,"ConfirmationBlockTime",0,258],[5,"TxUpdate",0,259],[10,"Clone",260],[1,"unit"],[6,"Ordering",261],[6,"Result",262],[10,"Deserializer",263],[1,"bool"],[17,"Item"],[10,"IntoIterator",264],[10,"Ord",261],[5,"Formatter",265],[8,"Result",265],[10,"Debug",265],[1,"u32"],[5,"BlockHash",266],[1,"tuple"],[6,"Option",267],[5,"Header",266],[10,"Hasher",268],[10,"Merge",0,269],[5,"CheckPointIter",0,257],[17,"Output"],[10,"FnMut",270],[10,"Iterator",271],[10,"RangeBounds",272],[10,"Serializer",273],[5,"TypeId",274],[5,"SyncRequestBuilder",116],[5,"SyncRequest",116],[5,"FullScanRequestBuilder",116],[5,"FullScanRequest",116],[6,"SyncItem",116],[5,"SyncProgress",116],[1,"usize"],[5,"SyncResult",116],[5,"FullScanResult",116],[10,"PartialEq",261],[10,"Any",274],[10,"Hash",268],[10,"Send",275],[5,"Script",276],[5,"OutPoint",277],[10,"ExactSizeIterator",278],[5,"ScriptBuf",279],[8,"Indexed",0],[5,"Txid",277],[5,"Vec",280],[10,"PartialOrd",261],[17,"IntoIter"],[5,"String",281]],"r":[[0,258],[1,257],[2,257],[3,258],[6,269],[7,259]],"b":[[49,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[51,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[166,"impl-Debug-for-SyncItem%3C\'i,+I%3E"],[167,"impl-Display-for-SyncItem%3C\'i,+I%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAIwAFgAKAAAADQATACIABwAtAAMAMgAAADQAAAA7AAEARwABAE4AAgBVAAIAWwANAGsACQCAAA8AmgAEAKAACwCtAAAAsQAAALYAAADOAAAA1gACAN0ADwDyAA8A"}],\ ["bdk_electrum",{"t":"FENNENNNNONNNNNNNNN","n":["BdkElectrumClient","bdk_core","borrow","borrow_mut","electrum_client","fetch_tx","fmt","from","full_scan","inner","into","new","populate_tx_cache","sync","transaction_broadcast","try_from","try_into","type_id","vzip"],"q":[[0,"bdk_electrum"],[19,"bdk_electrum::bdk_electrum_client"],[20,"bitcoin::blockdata::transaction"],[21,"alloc::sync"],[22,"electrum_client::types"],[23,"core::result"],[24,"electrum_client::api"],[25,"core::fmt"],[26,"bdk_core::spk_client"],[27,"core::cmp"],[28,"core::clone"],[29,"core::convert"],[30,"core::iter::traits::collect"],[31,"core::any"]],"i":[0,0,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3],"f":"``{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}`{{{b{{f{c}}}}h}{{A`{{l{j}}n}}}Ab}{{{b{{f{c}}}}{b{dAd}}}AfAh}{cc{}}{{{b{{f{c}}}}gAjAjAl}{{A`{{An{e}}n}}}Ab{B`Bb}{{Bf{{Bd{e}}}}}}`{ce{}{}}{c{{f{c}}}Ab}{{{b{{f{c}}}}g}BhAb{{Bf{{l{j}}}}}{{Bl{}{{Bj{e}}}}}}{{{b{{f{c}}}}gAjAl}{{A`{Bnn}}}Ab{}{{Bf{{C`{e}}}}}}{{{b{{f{c}}}}{b{j}}}{{A`{hn}}}Ab}{c{{A`{e}}}{}{}}0{{{b{c}}}Cb{}}6","D":"Af","p":[[1,"reference"],[0,"mut"],[5,"BdkElectrumClient",0,19],[5,"Txid",20],[5,"Transaction",20],[5,"Arc",21],[6,"Error",22],[6,"Result",23],[10,"ElectrumApi",24],[5,"Formatter",25],[8,"Result",25],[10,"Debug",25],[1,"usize"],[1,"bool"],[5,"FullScanResult",26],[10,"Ord",27],[10,"Clone",28],[5,"FullScanRequest",26],[10,"Into",29],[1,"unit"],[17,"Item"],[10,"IntoIterator",30],[5,"SyncResult",26],[5,"SyncRequest",26],[5,"TypeId",31]],"r":[[0,19]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAgAAwACAAMABwAAABAAAwA="}],\ ["bdk_esplora",{"t":"IKKEMMMM","n":["Error","EsploraAsyncExt","EsploraExt","esplora_client","full_scan","full_scan","sync","sync"],"q":[[0,"bdk_esplora"],[8,"bdk_esplora::blocking_ext"],[9,"bdk_core::spk_client"],[10,"core::result"],[11,"core::cmp"],[12,"core::clone"],[13,"core::convert"],[14,"bdk_esplora::async_ext"],[15,"core::future::future"],[16,"alloc::boxed"],[17,"core::pin"],[18,"core::marker"]],"i":[0,0,0,0,1,11,1,11],"f":"````{{{d{b}}eff}{{l{{h{c}}j}}}{nA`}{{Ad{{Ab{c}}}}}}{{{d{Af}}eff}{{Al{{Aj{Ah}}}}}{nA`An}{{Ad{{Ab{c}}}}An}}{{{d{b}}ef}{{l{B`j}}}{}{{Ad{{Bb{c}}}}}}{{{d{Af}}ef}{{Al{{Aj{Ah}}}}}An{{Ad{{Bb{c}}}}An}}","D":"A`","p":[[10,"EsploraExt",0,8],[1,"reference"],[1,"usize"],[5,"FullScanResult",9],[8,"Error",0,8],[6,"Result",10],[10,"Ord",11],[10,"Clone",12],[5,"FullScanRequest",9],[10,"Into",13],[10,"EsploraAsyncExt",0,14],[10,"Future",15],[5,"Box",16],[5,"Pin",17],[10,"Send",18],[5,"SyncResult",9],[5,"SyncRequest",9]],"r":[[0,8],[1,14],[2,8]],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAQA"}],\ -["bdk_file_store",{"t":"FPFGPPPGFNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNOO","n":["AggregateChangesetsError","Bincode","EntryIter","FileError","InvalidMagicBytes","Io","Io","IterError","Store","aggregate_changesets","append_changeset","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","changeset","create_new","drop","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into_iter","iter_changesets","iter_error","new","next","open","open_or_create_new","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","expected","got"],"q":[[0,"bdk_file_store"],[73,"bdk_file_store::FileError"],[75,"bdk_file_store::store"],[76,"core::option"],[77,"core::result"],[78,"bdk_core::merge"],[79,"serde::ser"],[80,"serde::de"],[81,"core::marker"],[82,"std::io::error"],[83,"std::path"],[84,"core::convert"],[85,"bdk_file_store::entry_iter"],[86,"core::fmt"],[87,"std::fs"],[88,"alloc::string"],[89,"core::any"]],"i":[0,20,0,0,16,20,16,0,0,2,2,19,20,2,5,16,19,20,2,5,16,5,2,19,20,20,2,5,5,16,16,19,20,20,2,5,16,16,19,20,2,5,16,19,2,5,19,19,2,2,20,5,16,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,28,28],"f":"`````````{{{f{b{d{c}}}}}{{l{{h{c}}{j{c}}}}}{nA`AbAdAf}}{{{f{b{d{c}}}}{f{c}}}{{l{AhAj}}}{nA`AbAdAf}}{{{f{c}}}{{f{e}}}{}{}}0000{{{f{bc}}}{{f{be}}}{}{}}0000`{{{f{{An{Al}}}}c}{{l{{d{e}}B`}}}{{Bd{Bb}}}{nA`AbAdAf}}{{{f{b{Bf{c}}}}}Ah{}}{{{f{Bh}}{f{bBj}}}Bl}0{{{f{{d{c}}}}{f{bBj}}}Bl{AfAdBn}}{{{f{{j{c}}}}{f{bBj}}}Bl{}}{{{f{{j{c}}}}{f{bBj}}}BlBn}{{{f{B`}}{f{bBj}}}Bl}0{cc{}}0{AjBh}111{AjB`}{ce{}{}}00000{{{f{b{d{c}}}}}{{Bf{c}}}{nA`AbAdAf}}`{{C`{f{bCb}}}{{Bf{c}}}{}}{{{f{b{Bf{c}}}}}{{h{e}}}Ab{}}=={{{f{c}}}Cd{}}00{c{{l{e}}}{}{}}000000000{{{f{c}}}Cf{}}000066666``","D":"Ch","p":[[0,"mut"],[5,"Store",0,75],[1,"reference"],[6,"Option",76],[5,"AggregateChangesetsError",0,75],[6,"Result",77],[10,"Merge",78],[10,"Serialize",79],[10,"DeserializeOwned",80],[10,"Send",81],[10,"Sync",81],[1,"unit"],[5,"Error",82],[1,"u8"],[1,"slice"],[6,"FileError",0],[5,"Path",83],[10,"AsRef",84],[5,"EntryIter",0,85],[6,"IterError",0,85],[5,"Formatter",86],[8,"Result",86],[10,"Debug",86],[1,"u64"],[5,"File",87],[5,"String",88],[5,"TypeId",89],[15,"InvalidMagicBytes",73]],"r":[[0,75],[2,85],[7,85],[8,75]],"b":[[24,"impl-Debug-for-IterError"],[25,"impl-Display-for-IterError"],[27,"impl-Display-for-AggregateChangesetsError%3CC%3E"],[28,"impl-Debug-for-AggregateChangesetsError%3CC%3E"],[29,"impl-Display-for-FileError"],[30,"impl-Debug-for-FileError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAC8ABwAMAAkAGAAHACIAAAAmAAAALAAAAC8AAQAzABgA"}],\ -["bdk_testenv",{"t":"FFEEEOONNNNNEOOENNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Config","TestEnv","anyhow","bitcoincore_rpc","bitcoind","bitcoind","bitcoind","borrow","borrow","borrow_mut","borrow_mut","default","electrsd","electrsd","electrsd","electrum_client","electrum_client","fmt","from","from","genesis_hash","into","into","invalidate_blocks","make_checkpoint_tip","mine_blocks","mine_empty_block","new","new_with_config","reorg","reorg_empty_blocks","reset_electrsd","rpc_client","send","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","wait_until_electrum_sees_block","wait_until_electrum_sees_txid"],"q":[[0,"bdk_testenv"],[44,"electrum_client::api"],[45,"core::fmt"],[46,"bitcoin::blockdata::block"],[47,"anyhow"],[48,"bdk_core::checkpoint"],[49,"bitcoin::address"],[50,"core::option"],[51,"alloc::vec"],[52,"bitcoincore_rpc::client"],[53,"bitcoin_units::amount"],[54,"bitcoin::blockdata::transaction"],[55,"core::result"],[56,"core::any"],[57,"core::time"]],"i":[0,0,0,0,0,4,3,4,3,4,3,3,0,4,3,0,4,3,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,4,3,4,4],"f":"```````{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0{{}f}````{{{b{h}}}{{b{{`{j}}}}}}{{{b{f}}{b{dl}}}n}{cc{}}0{{{b{h}}}{{Ab{A`}}}}{ce{}{}}0{{{b{h}}Ad}{{Ab{Af}}}}{{{b{h}}}Ah}{{{b{h}}Ad{Al{Aj}}}{{Ab{{An{A`}}}}}}{{{b{h}}}{{Ab{{B`{AdA`}}}}}}{{}{{Ab{h}}}}{f{{Ab{h}}}}{{{b{h}}Ad}{{Ab{{An{A`}}}}}}{{{b{h}}Ad}{{Ab{{An{{B`{AdA`}}}}}}}}{h{{Ab{h}}}}{{{b{h}}}{{b{{`{Bb}}}}}}{{{b{h}}{b{{Aj{Bd}}}}Bf}{{Ab{Bh}}}}{c{{Bj{e}}}{}{}}000{{{b{c}}}Bl{}}0=={{{b{h}}Bn}{{Ab{Af}}}}{{{b{h}}BhBn}{{Ab{Af}}}}","D":"Bn","p":[[1,"reference"],[0,"mut"],[5,"Config",0],[5,"TestEnv",0],[10,"ElectrumApi",44],[5,"Formatter",45],[8,"Result",45],[5,"BlockHash",46],[8,"Result",47],[1,"usize"],[1,"unit"],[5,"CheckPoint",48],[5,"Address",49],[6,"Option",50],[5,"Vec",51],[1,"tuple"],[10,"RpcApi",52],[6,"NetworkChecked",49],[5,"Amount",53],[5,"Txid",54],[6,"Result",55],[5,"TypeId",56],[5,"Duration",57]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABUACAAAAAAAAwADAAgAAwANAAEAEAAAABIAAAAgAAAAIwAHAA=="}],\ -["bdk_wallet",{"t":"GGFGKFPPPFGFGPPPPPRRPGPPEPPPPKGPGGFGPFPPPPPPPPPFPFFGPPPFGTTFKIFPNNONOONNNNNNNNONDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDOOONNNNNNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNNONCNOQNNNNNNNNNNNNNNNNNNNNNNNNNNNCCNDNNNNNNNNNNNNNNNNNNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONMMNNNNNNNNNNNNNNNNNNNNNMNNOOONNNCONNNNNNNNNNNNONNNNDNNONNNNNNONNMMNNNNCNNNECONNNDDNNNNNNNOCENNNNNNOENNNNNNNNNNNNNNNNNNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNOOONONNNNNNNNNNNNNNNNNNNNNOOHNNNNNNNNNNNNNNNNNNHOOOOOOOOOOOOOOOOFPKFIGFFPFFONNNNNNNNNNNNNNNNNNNNNNNNMNNNNHNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGPPGPPPPPPPGPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMSHPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPGPPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["AddForeignUtxoError","AddUtxoError","AddressInfo","ApplyBlockError","AsyncWalletPersister","Balance","CannotConnect","ChangeAllowed","ChangeForbidden","ChangeSet","ChangeSpendPolicy","CreateParams","CreateWithPersistError","Custom","DataAlreadyExists","Descriptor","Descriptor","Descriptor","Error","Error","External","FileStoreError","Foreign","Genesis","HdKeyPaths","Internal","InvalidChangeSet","InvalidOutpoint","InvalidTxid","IsDust","KeychainKind","Load","LoadError","LoadMismatch","LoadParams","LoadWithPersistError","Local","LocalOutput","Mismatch","MissingDescriptor","MissingGenesis","MissingNetwork","MissingUtxo","Network","OnlyChange","Persist","Persist","PersistedWallet","Shuffle","SignOptions","TxBuilder","TxOrdering","UnexpectedConnectedToHash","UnknownUtxo","Untouched","Update","Utxo","WALLET_SCHEMA_NAME","WALLET_TABLE_NAME","Wallet","WalletPersister","WalletTx","WeightedUtxo","Write","add","add_signer","address","all_unbounded_spk_iters","allow_all_sighashes","allow_grinding","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","apply_update_at","as_byte","as_ref","as_ref","assume_height","balance","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","chain_position","change_descriptor","check_genesis_hash","check_network","checkpoints","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_selection","confirmation_time","confirmed","create","create","create_async","create_single","create_wallet","create_wallet_async","create_wallet_no_persist","create_with_params","default","default","default","default","deref","deref","deref_mut","derivation_index","derivation_index","derivation_of_spk","descriptor","descriptor","descriptor","descriptor","descriptor_checksum","deserialize","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","export","extract_keys","file_store","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","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_sqlite","genesis_hash","get_psbt_input","get_signers","get_tx","get_utxo","hash","hash","immature","index","indexer","init_sqlite_tables","initialize","initialize","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_dust","is_empty","is_mine","is_spent","keychain","keychain","keychains","keymap","keymap","keys","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load","load","load_async","load_wallet","load_wallet_async","load_wallet_no_persist","load_with_params","local_chain","local_chain","lookahead","lookahead","mark_used","merge","miniscript","network","network","network","new","new","new_single","next_derivation_index","next_unused_address","outpoint","outpoint","partial_cmp","peek_address","persist","persist","persist","persist_async","persist_to_sqlite","policies","psbt","public_descriptor","reveal_addresses_to","reveal_next_address","rusqlite","rusqlite_impl","satisfaction_weight","secp_ctx","sent_and_received","sequence","serde","serde_json","serialize","serialize","serialize","serialize","set_keymap","set_keymaps","sign","sign_with_tap_internal_key","signer","signer","spk_index","staged","staged_mut","start_full_scan","start_sync_with_revealed_spks","take_staged","tap_leaves_options","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","transactions_sort_by","trust_witness_utxo","trusted_pending","trusted_spendable","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","tx_graph","tx_node","tx_update","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unbroadcast_transactions","unmark_used","untrusted_pending","utxo","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","foreign_utxo","input_txid","connected_to_hash","expected_hash","expected","expected","expected","keychain","loaded","loaded","loaded","input_sort","output_sort","outpoint","psbt_input","sequence","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Excess","InsufficientFunds","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","SingleRandomDraw","available","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_into","clone_into","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","default","eq","equivalent","equivalent","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into","into","local_selected_amount","needed","new","selected","selected_amount","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","amount","change_fee","dust_threshold","fee","remaining_amount","Bare","Bare","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","FALSE","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Pkh","Pkh","Policy","ScriptContext","Segwitv0","Sh","Sh","Sh","Single","TRUE","TapKeyOrigins","Tr","Tr","Tr","Wpkh","Wpkh","Wpkh","Wsh","Wsh","Wsh","XPub","address","as_enum","as_enum","as_inner","as_node","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","build_template","build_template_mall","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_pk","check_pk","check_pk","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains_raw_pkh","derive","derived_descriptor","derived_descriptor","desc_type","descriptor_id","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","plan","plan_mall","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","substitute_raw_pkh","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","eq","fmt","fmt","from","from","from","from","from","from","from","from","into","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","BuildFeeBumpError","CoinSelection","Conversion","CreateTxError","Descriptor","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","IrreplaceableTransaction","LockTime","MiniscriptPsbt","MiniscriptPsbtError","MissingKeyOrigin","MissingNonWitnessUtxo","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","OutputUpdate","Policy","Psbt","RbfSequenceCsv","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","UnknownUtxo","UnknownUtxo","UtxoUpdate","Version0","Version1Csv","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","csv","requested","required","required","required","sequence","FullyNodedExport","WalletExport","blockheight","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","fmt","from","from_str","into","label","label","serialize","to_string","try_from","try_into","type_id","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","MultiXPrv","MultiXPub","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","Single","Single","SinglePriv","SinglePub","SinglePubKey","SortedMultiVec","Tap","ValidNetworks","XOnly","XPrv","XPub","any_network","as_enum","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_template","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","full_derivation_paths","generate","generate_default","generate_default_with_aux_rand","generate_with_aux_rand","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_assets","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_single_keys","into_single_keys","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_multipath","is_multipath","is_segwit_v0","is_segwit_v0","is_taproot","is_taproot","is_uncompressed","is_x_only_key","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","n","name_str","new","num_der_paths","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","sanity_check","satisfy","script_size","serialize","sig_type","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public","to_string","to_string","to_string","to_string","top_level_checks","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","PsbtUtils","fee_amount","fee_rate","get_utxo_for","SCHEMAS_TABLE_NAME","migrate_schema","All","Dummy","Exclude","External","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MiniscriptPsbt","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Psbt","Segwitv0","SighashTaproot","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","remove","sign_input","sign_input","sign_input","sign_input","sign_transaction","sign_transaction","sign_with_tap_internal_key","signers","tap_leaves_options","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","is_internal_key","AddForeignUtxoError","AddUtxoError","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","Custom","InvalidOutpoint","InvalidTxid","MissingUtxo","OnlyChange","Shuffle","TxBuilder","TxOrdering","UnknownUtxo","Untouched","add_data","add_foreign_utxo","add_foreign_utxo_with_sequence","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone_into","clone_into","clone_into","cmp","coin_selection","current_height","default","default","do_not_spend_change","drain_to","drain_wallet","eq","equivalent","equivalent","fee_absolute","fee_rate","finish","finish_with_aux_rand","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","policy_path","set_exact_sequence","set_recipients","sighash","sort_tx","sort_tx_with_aux_rand","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip","foreign_utxo","input_txid","input_sort","output_sort"],"q":[[0,"bdk_wallet"],[473,"bdk_wallet::AddForeignUtxoError"],[475,"bdk_wallet::ApplyBlockError"],[477,"bdk_wallet::LoadMismatch"],[484,"bdk_wallet::TxOrdering"],[486,"bdk_wallet::Utxo"],[489,"bdk_wallet::coin_selection"],[601,"bdk_wallet::coin_selection::Excess"],[606,"bdk_wallet::descriptor"],[866,"bdk_wallet::descriptor::checksum"],[867,"bdk_wallet::descriptor::error"],[900,"bdk_wallet::descriptor::policy"],[1059,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[1062,"bdk_wallet::descriptor::policy::Satisfaction"],[1073,"bdk_wallet::descriptor::policy::SatisfiableItem"],[1083,"bdk_wallet::descriptor::template"],[1267,"bdk_wallet::error"],[1337,"bdk_wallet::error::CreateTxError"],[1343,"bdk_wallet::export"],[1366,"bdk_wallet::keys"],[1682,"bdk_wallet::psbt"],[1686,"bdk_wallet::rusqlite_impl"],[1688,"bdk_wallet::signer"],[1874,"bdk_wallet::signer::SignerContext"],[1875,"bdk_wallet::tx_builder"],[1989,"bdk_wallet::tx_builder::AddForeignUtxoError"],[1991,"bdk_wallet::tx_builder::TxOrdering"],[1993,"bdk_chain::balance"],[1994,"bdk_wallet::wallet"],[1995,"bdk_wallet::types"],[1996,"bdk_wallet::wallet::signer"],[1997,"alloc::sync"],[1998,"bitcoin::blockdata::script::owned"],[1999,"bdk_core"],[2000,"core::iter::traits::iterator"],[2001,"core::clone"],[2002,"alloc::collections::btree::map"],[2003,"bitcoin::blockdata::block"],[2004,"bdk_chain::local_chain"],[2005,"core::result"],[2006,"bdk_core::block_id"],[2007,"bitcoin::blockdata::transaction"],[2008,"core::convert"],[2009,"core::iter::traits::collect"],[2010,"core::option"],[2011,"bdk_chain::tx_graph"],[2012,"bdk_wallet::wallet::coin_selection"],[2013,"bdk_wallet::wallet::tx_builder"],[2014,"bdk_wallet::wallet::error"],[2015,"bitcoin_units::amount"],[2016,"bitcoin_units::fee_rate"],[2017,"bdk_wallet::wallet::params"],[2018,"bitcoin::network"],[2019,"bdk_core::checkpoint"],[2020,"bdk_wallet::wallet::changeset"],[2021,"core::cmp"],[2022,"bdk_wallet::wallet::persisted"],[2023,"core::marker"],[2024,"alloc::string"],[2025,"serde::de"],[2026,"bitcoin::psbt"],[2027,"core::fmt"],[2028,"bdk_chain::indexer::keychain_txout"],[2029,"bdk_chain::indexed_tx_graph"],[2030,"bdk_core::spk_client"],[2031,"rusqlite::transaction"],[2032,"rusqlite"],[2033,"bitcoin::psbt::map::input"],[2034,"core::hash"],[2035,"core::future::future"],[2036,"alloc::boxed"],[2037,"core::pin"],[2038,"bdk_wallet::wallet::utils"],[2039,"bitcoin::blockdata::script::borrowed"],[2040,"miniscript::descriptor"],[2041,"core::iter::traits::double_ended"],[2042,"secp256k1::context::alloc_only"],[2043,"secp256k1"],[2044,"serde::ser"],[2045,"alloc::vec"],[2046,"core::ops::function"],[2047,"core::any"],[2048,"rand_core"],[2049,"core::default"],[2050,"bitcoin::address"],[2051,"miniscript"],[2052,"miniscript::miniscript::private"],[2053,"miniscript::miniscript::decode"],[2054,"miniscript::miniscript::context"],[2055,"miniscript::iter::tree"],[2056,"miniscript::descriptor::key"],[2057,"miniscript::miniscript::satisfy"],[2058,"miniscript::plan"],[2059,"bitcoin_hashes::sha256"],[2060,"miniscript::miniscript::hash256"],[2061,"bitcoin_hashes::ripemd160"],[2062,"bitcoin_hashes::hash160"],[2063,"bitcoin::crypto::key"],[2064,"secp256k1::context"],[2065,"bdk_chain::descriptor_ext"],[2066,"miniscript::blanket_traits"],[2067,"miniscript::miniscript::analyzable"],[2068,"core::ops::range"],[2069,"miniscript::descriptor::bare"],[2070,"miniscript::descriptor::sh"],[2071,"miniscript::descriptor::segwitv0"],[2072,"miniscript::descriptor::tr"],[2073,"miniscript::miniscript::types"],[2074,"miniscript::miniscript::types::extra_props"],[2075,"miniscript::expression"],[2076,"miniscript::miniscript::iter"],[2077,"miniscript::policy::semantic"],[2078,"miniscript::policy"],[2079,"bitcoin_units::weight"],[2080,"bitcoin::bip32"],[2081,"hex_conservative::error"],[2082,"base58ck::error"],[2083,"bitcoin::psbt::error"],[2084,"bdk_wallet::wallet::export"],[2085,"miniscript::descriptor::sortedmulti"],[2086,"core::str::traits"],[2087,"rusqlite::error"],[2088,"bitcoin::blockdata::script::push_bytes::primitive"],[2089,"bitcoin::blockdata::locktime::absolute"],[2090,"bdk_chain"],[2091,"bdk_chain::rusqlite_impl"]],"i":[0,0,0,0,0,0,74,263,263,0,0,0,0,264,52,52,63,64,53,56,5,0,46,64,0,5,61,261,261,0,0,72,0,0,0,0,46,0,63,63,63,63,261,64,263,61,52,0,264,0,0,0,74,262,264,0,0,47,47,0,0,0,0,72,1,3,48,3,66,66,3,3,3,3,3,5,5,3,66,3,0,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,3,3,3,3,3,0,27,87,47,40,40,3,1,5,44,45,46,47,27,48,1,5,44,45,46,47,27,48,5,0,44,1,51,3,51,3,50,50,50,3,1,40,47,27,51,48,51,3,44,3,0,40,47,0,3,1,5,44,47,1,5,44,45,46,47,61,48,63,64,1,1,5,5,44,44,45,45,46,46,48,48,0,0,40,0,3,1,1,5,44,45,46,47,51,72,72,61,61,52,52,3,27,48,48,63,63,64,74,74,0,1,50,40,5,44,45,46,47,47,47,47,47,51,72,61,61,52,3,27,27,27,48,63,63,64,74,47,50,3,3,3,3,5,44,1,48,47,47,53,56,3,3,3,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,96,47,3,44,44,48,3,50,40,0,27,3,3,3,3,51,3,51,40,40,40,3,3,47,50,40,3,47,0,50,3,47,50,40,50,3,3,46,44,5,3,53,56,51,51,47,3,0,3,3,3,0,0,45,3,3,46,0,0,1,5,44,47,3,3,3,66,0,0,3,3,3,3,3,3,66,0,1,5,44,45,46,47,27,48,1,72,61,52,48,63,74,1,3,3,66,1,1,66,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,0,3,47,87,27,46,44,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,3,3,3,1,45,0,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,0,267,267,268,268,269,270,271,271,269,270,271,272,272,273,273,273,0,125,0,0,0,0,0,0,125,0,0,117,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,118,119,120,121,117,118,119,120,121,122,118,119,120,121,0,118,119,120,121,117,117,117,123,123,117,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,125,123,118,119,120,121,123,117,120,123,123,117,118,119,120,121,117,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,125,123,118,119,120,121,274,275,275,274,275,98,276,127,0,0,0,0,0,0,133,0,0,135,0,0,137,98,276,127,0,0,0,98,276,127,137,133,0,98,276,127,98,276,127,98,276,127,137,127,154,155,133,133,127,127,154,155,133,127,154,155,133,133,133,133,0,135,154,155,135,155,135,135,154,155,135,154,155,135,135,154,155,135,154,155,135,154,155,0,127,154,155,133,127,154,155,133,127,154,155,133,133,127,127,127,127,127,127,133,127,133,127,154,155,133,127,127,154,154,155,155,133,133,0,127,133,133,164,127,133,127,127,127,154,155,133,133,127,133,127,127,127,127,127,127,127,154,155,133,133,133,127,133,133,133,127,133,133,133,127,127,133,133,127,127,154,155,133,127,154,155,133,133,127,54,98,127,127,133,133,133,127,133,133,135,154,155,133,127,133,127,135,154,155,127,127,127,127,127,127,127,127,127,127,127,127,127,127,133,135,133,127,133,133,127,154,155,133,135,154,155,127,127,0,133,127,133,127,133,133,127,127,133,127,133,135,154,155,133,0,127,154,155,133,127,133,127,135,135,127,133,127,154,155,133,127,154,155,133,133,127,154,155,133,127,127,154,155,133,133,0,57,57,0,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,201,194,194,0,202,0,0,201,200,0,201,201,194,194,194,201,202,165,194,202,202,0,0,0,165,165,200,201,201,0,0,201,201,201,200,200,201,202,103,203,194,165,200,201,202,103,203,194,165,200,201,202,103,203,165,200,201,202,103,203,165,103,203,203,200,201,202,103,203,194,200,200,201,201,202,202,103,103,203,203,194,194,200,201,202,103,203,194,194,165,200,201,202,202,103,103,203,194,165,103,200,203,201,103,200,201,202,103,203,194,165,201,202,203,103,203,103,103,200,201,202,103,203,203,200,201,202,103,203,165,194,200,201,202,103,203,194,165,200,201,202,103,203,194,165,200,201,202,103,203,194,165,200,201,202,103,203,194,165,277,277,277,278,279,280,279,280,279,280,279,280,279,280,281,282,283,284,285,286,286,285,287,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,204,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,205,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,0,85,221,0,85,85,36,85,36,85,85,0,85,85,85,85,85,221,85,85,85,85,36,36,85,36,221,85,85,221,85,36,221,85,36,221,221,221,221,85,85,36,36,221,85,85,85,85,85,85,36,221,85,36,221,221,85,36,221,85,36,221,85,36,221,85,36,221,85,36,289,290,290,291,292,289,0,0,293,223,223,223,223,223,223,223,223,223,223,223,223,293,223,223,223,223,223,223,223,198,0,0,0,0,239,239,0,0,230,0,0,0,0,198,198,198,135,0,0,132,198,198,186,137,239,233,0,233,0,0,132,137,186,0,0,0,0,132,0,230,186,137,0,294,137,233,226,231,132,227,198,225,137,186,228,229,230,233,226,231,132,227,198,225,137,186,228,229,230,225,135,135,135,135,135,135,135,135,135,226,132,227,225,137,186,228,229,230,226,132,227,225,137,186,228,229,230,225,137,228,230,227,227,226,137,137,225,132,198,225,137,186,228,229,230,132,132,225,225,137,137,186,186,228,228,229,229,230,230,231,132,227,198,198,225,225,137,137,186,186,228,229,230,225,233,233,233,226,231,132,227,198,198,198,225,137,137,186,228,229,230,231,231,137,186,225,137,137,239,241,241,239,239,241,233,137,225,137,228,230,233,226,231,132,227,198,225,137,186,228,229,230,137,207,213,226,226,231,137,186,213,233,226,226,137,186,233,233,137,294,132,137,186,294,132,294,132,137,137,225,228,229,225,0,137,135,225,225,0,225,135,225,137,228,229,135,231,225,137,228,230,135,225,225,225,225,137,135,225,0,226,132,227,225,137,186,228,229,230,186,198,225,137,186,135,135,225,233,226,231,132,227,198,225,137,186,228,229,230,233,226,231,132,227,198,225,137,186,228,229,230,233,226,231,132,227,198,225,137,186,228,229,230,233,226,231,132,227,198,225,137,186,228,229,230,0,247,247,247,0,0,253,249,253,67,249,253,67,0,67,67,67,250,67,67,67,67,67,67,67,253,249,67,250,67,0,0,0,0,0,0,0,0,250,0,0,67,86,66,66,86,66,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,86,249,250,251,6,86,66,253,249,250,251,6,86,66,253,249,6,6,86,66,253,251,254,254,251,251,251,249,250,6,253,249,249,250,250,6,6,253,253,86,249,67,67,250,251,6,86,66,253,249,249,249,67,250,251,6,86,66,253,249,254,251,251,251,86,249,67,250,251,6,86,66,253,251,86,249,6,86,258,251,251,251,7,251,66,86,66,249,250,251,6,86,66,253,67,66,66,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,295,0,0,263,263,0,264,261,261,261,263,264,0,0,262,264,35,35,35,35,35,35,35,35,35,35,262,261,264,263,35,262,261,264,263,35,35,264,263,35,264,263,263,35,35,264,263,35,35,35,263,263,263,35,35,35,35,35,262,262,261,261,264,263,35,262,261,264,263,263,35,35,262,261,264,263,35,35,35,35,35,263,35,35,35,35,264,264,35,264,263,262,261,35,262,261,264,263,35,262,261,264,263,35,262,261,264,263,35,35,35,262,261,264,263,267,267,272,272],"f":"````````````````````````````````````````````````````````````````{{bb}b}{{{h{df}}jl{A`{n}}}Ab}`{{{h{f}}}{{An{j{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}}}``{{{h{df}}{h{B`}}Bb}{{Bf{AbBd}}}}{{{h{df}}{h{B`}}BbBh}{{Bf{AbBj}}}}{{{h{df}}e}Ab{{Bn{{A`{Bl}}}}}{{Cd{}{{Ad{{Cb{cC`}}}}}}}}{{{h{df}}c}{{Bf{AbBd}}}{{Bn{Cf}}}}{{{h{df}}c{Ch{C`}}}{{Bf{AbBd}}}{{Bn{Cf}}}}{{{h{j}}}Cj}{{{h{j}}}{{h{{Cl{Cj}}}}}}{{{h{f}}}{{h{{D`{Cn}}}}}}`{{{h{f}}}b}`{{{h{c}}}{{h{e}}}{}{}}00000000000000000{{{h{dc}}}{{h{de}}}{}{}}00000000000000000{{{h{df}}Db}{{Bf{{Df{Dd}}Dh}}}}{{{h{df}}}{{Df{Dd}}}}{{{h{f}}{h{Bl}}}{{Bf{DjDl}}}}{{{h{f}}{h{Bl}}}{{Bf{DnDl}}}}{{{h{df}}{h{Bl}}}Ab}````{{E`Eb}E`}{{E`Ed}E`}{{{h{f}}}Ef}{{{h{b}}}b}{{{h{j}}}j}{{{h{Eh}}}Eh}{{{h{Ej}}}Ej}{{{h{El}}}El}{{{h{En}}}En}{{{h{Cf}}}Cf}{{{h{F`}}}F`}{{{h{c}}{h{de}}}Ab{}{}}0000000{{{h{j}}{h{j}}}Fb}```{{{h{dc}}Fd}{{Bf{{Ff{c}}Fh}}}Fj}{{cc}Fd{FlFnAl}}{{{h{dc}}Fd}{{Bf{{Ff{c}}Fh}}}G`}{cFd{FlFnAl}}{{Fd{h{dc}}}{{Bf{{Ff{c}}Fh}}}Fj}{{Fd{h{dc}}}{{Bf{{Ff{c}}Fh}}}G`}{Fd{{Bf{fGb}}}}0{{}b}{{}E`}{{}En}{{}Cf}{{{h{{Ff{c}}}}}{{h{e}}}{}{}}{{{h{F`}}}{{h{c}}}{}}{{{h{d{Ff{c}}}}}{{h{de}}}{}{}}{{{h{f}}j}{{Ch{Bb}}}}`{{{h{f}}Af}{{Ch{{Cb{jBb}}}}}}`{{E`j{Ch{c}}}E`{FlFn}}``{{{h{f}}j}Gd}{c{{Bf{b}}}Gf}{c{{Bf{j}}}Gf}{c{{Bf{Eh}}}Gf}{c{{Bf{En}}}Gf}{{{h{b}}{h{b}}}Gh}{{{h{j}}{h{j}}}Gh}{{{h{Eh}}{h{Eh}}}Gh}{{{h{Ej}}{h{Ej}}}Gh}{{{h{El}}{h{El}}}Gh}{{{h{En}}{h{En}}}Gh}{{{h{{Gj{c}}}}{h{{Gj{c}}}}}GhGl}{{{h{F`}}{h{F`}}}Gh}{{{h{Gn}}{h{Gn}}}Gh}{{{h{H`}}{h{H`}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}00000000000``{E`E`}`{{{h{f}}{h{dHb}}Hd}{{Bf{GhHf}}}}{{{h{b}}{h{dHh}}}{{Bf{AbHj}}}}0{{{h{j}}{h{dHh}}}Hl}{{{h{Eh}}{h{dHh}}}Hl}{{{h{Ej}}{h{dHh}}}Hl}{{{h{El}}{h{dHh}}}Hl}{{{h{En}}{h{dHh}}}Hl}{{{h{{Ff{c}}}}{h{dHh}}}HlHn}{{{h{I`}}{h{dHh}}}Hl}0{{{h{{Gj{c}}}}{h{dHh}}}HlIb}{{{h{{Gj{c}}}}{h{dHh}}}HlHn}{{{h{{Fh{c}}}}{h{dHh}}}HlHn}{{{h{{Fh{c}}}}{h{dHh}}}HlIb}{{{h{f}}{h{dHh}}}Hl}{{{h{Cf}}{h{dHh}}}Hl}{{{h{F`}}{h{dHh}}}Hl}0{{{h{Gn}}{h{dHh}}}Hl}0{{{h{H`}}{h{dHh}}}Hl}{{{h{Id}}{h{dHh}}}Hl}0`{cc{}}000000{IfEn}{{{Ih{Cn}}}En}{{{Ij{CnIf}}}En}{IlEn}444{H`{{Gj{c}}}{}}555{InCf}6{{{J`{j}}}Cf}77{H`Gn}88{{{h{Jb}}}{{Jd{En}}}}{{FdEb}Fd}{{{h{f}}Eh{Ch{Jf}}Gh}{{Bf{JhJj}}}}{{{h{f}}j}{{A`{Jl}}}}{{{h{f}}Db}{{Ch{Jn}}}}{{{h{f}}K`}{{Ch{Eh}}}}{{{h{j}}{h{dc}}}AbKb}{{{h{Eh}}{h{dc}}}AbKb}```{{{h{Jb}}}{{Jd{Ab}}}}{{{h{d{Fj{}{{Kd{c}}}}}}}{{Bf{Enc}}}{}}{{{h{d{G`{}{{Kd{c}}}}}}}{{Kj{{Kh{Kf}}}}}{}}{{{h{df}}Bh}{{Bf{GhKl}}}}{{{h{df}}c}Gh{{Bn{{A`{Bl}}}}}}{{{h{df}}K`Kn}Ab}{ce{}{}}00000000000000000{{{h{L`}}{h{Lb}}}Gh}{{{h{En}}}Gh}{{{h{f}}Af}Gh}```{{{h{f}}}{{`{{Aj{}{{Ad{{Cb{j{h{Ld}}}}}}}}}}}}{{FdjLf}Fd}{{E`jLf}E`}``{{{h{f}}}Lh}{{{h{f}}}{{`{{Aj{}{{Ad{Eh}}}}}}}}0{{{h{f}}j}{{`{{Lj{}{{Ad{F`}}}}}}}}{{{h{dc}}E`}{{Bf{{Ch{{Ff{c}}}}Gj}}}Fj}{{}E`}{{{h{dc}}E`}{{Bf{{Ch{{Ff{c}}}}Gj}}}G`}{{E`{h{dc}}}{{Bf{{Ch{{Ff{c}}}}Gj}}}Fj}{{E`{h{dc}}}{{Bf{{Ch{{Ff{c}}}}Gj}}}G`}{{E`En}{{Bf{{Ch{f}}Gn}}}}{{EnE`}{{Bf{{Ch{f}}Gn}}}}{{{h{f}}}{{h{Ll}}}}`{{FdBb}Fd}{{E`Bb}E`}{{{h{df}}jBb}Gh}{{{h{dEn}}En}Ab}`{{FdEd}Fd}{{{h{f}}}Ed}`{{cc}Fd{FlFn}}={cFd{FlFn}}{{{h{f}}j}Bb}{{{h{df}}j}F`}{{{h{El}}}K`}`{{{h{j}}{h{j}}}{{Ch{Fb}}}}{{{h{f}}jBb}F`}{{{h{d{Fj{}{{Kd{c}}}}}}{h{En}}}{{Bf{Abc}}}{}}{{{h{d{G`{}{{Kd{c}}}}}}{h{En}}}{{Kj{{Kh{Kf}}}}}{}}{{{h{d{Ff{c}}}}{h{dc}}}{{Bf{Gh}}}Fj}{{{h{d{Ff{c}}}}{h{dc}}}{{Bf{Gh}}}G`}{{{h{En}}{h{Jb}}}{{Jd{Ab}}}}{{{h{f}}j}{{Bf{{Ch{Ln}}Gb}}}}`{{{h{f}}j}{{h{Ld}}}}{{{h{df}}jBb}{{`{{Aj{}{{Ad{F`}}}}}}}};```{{{h{f}}}{{h{{Mb{M`}}}}}}{{{h{f}}{h{Bl}}}{{Cb{DjDj}}}}{{{h{El}}}{{Ch{Md}}}}``{{{h{b}}c}BfMf}{{{h{j}}c}BfMf}{{{h{Eh}}c}BfMf}{{{h{En}}c}BfMf}{{{h{df}}jLf}Ab}{{{h{df}}c}Ab{{Cd{}{{Ad{{Cb{jLf}}}}}}}}{{{h{f}}{h{dHb}}Hd}{{Bf{GhHf}}}}```{{{h{f}}}{{h{{Mh{j}}}}}}{{{h{f}}}{{Ch{{h{En}}}}}}{{{h{df}}}{{Ch{{h{dEn}}}}}}{{{h{f}}}{{Mj{j}}}}{{{h{f}}}{{Ml{{Cb{jBb}}}}}}{{{h{df}}}{{Ch{En}}}}``{{{h{c}}}e{}{}}0000000{{{h{c}}}Gd{}}000000{{{h{b}}}Dj}{{{h{f}}}{{`{{Aj{}{{Ad{Jn}}}}}}}}{{{h{f}}c}{{Mn{Jn}}}{{Nb{{h{Jn}}{h{Jn}}}{{N`{Fb}}}}}}``2`{c{{Bf{e}}}{}{}}00000000000000000000000000000000000`{{{h{f}}}{{h{{D`{Cn}}}}}}```{{{h{El}}}{{h{Kn}}}}`{{{h{c}}}Nd{}}00000000000000000{{{h{f}}j}{{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}{{{h{f}}}{{`{{Aj{}{{Ad{{Nf{{A`{Bl}}Cn}}}}}}}}}}{{{h{df}}jBb}Gh}``{{}{{h{Nh}}}}{ce{}{}}00000000000000000{{c{Ch{c}}Ed{h{{Mb{M`}}}}}{{Bf{GdGb}}}Fl}````````````````````````````{{{h{c}}}{{h{e}}}{}{}}000000{{{h{dc}}}{{h{de}}}{}{}}000000{{{h{Nj}}}Nj}{{{h{Nl}}}Nl}{{{h{Nn}}}Nn}{{{h{{O`{c}}}}}{{O`{c}}}Al}{{{h{Ob}}}Ob}{{{h{c}}{h{de}}}Ab{}{}}0000{{{h{Od}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{{h{Nl}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{{h{Nn}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{{h{{O`{c}}}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{de}}}{{Bf{OfNj}}}OdOh}{{{h{Ob}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{C`Dn{h{Lb}}}Oj}{{}Nl}{{}Nn}{{}{{O`{c}}}Ol}{{}Ob}{{{h{Nj}}{h{Nj}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0``{{{h{Nj}}{h{dHh}}}Hl}0{{{h{Oj}}{h{dHh}}}Hl}{{{h{Of}}{h{dHh}}}Hl}{{{h{Nl}}{h{dHh}}}Hl}{{{h{Nn}}{h{dHh}}}Hl}{{{h{{O`{c}}}}{h{dHh}}}HlHn}{{{h{Ob}}{h{dHh}}}Hl}{cc{}}000000{ce{}{}}000000{{{h{Of}}}C`}`{{C`c}{{O`{c}}}{}}`1{{{h{c}}}e{}{}}0000{{{h{c}}}Gd{}}{c{{Bf{e}}}{}{}}0000000000000{{{h{c}}}Nd{}}0000006666666```````````````````````````````````````````{{{h{{On{c}}}}Ed}{{Bf{A@`A@b}}}{A@dA@f}}{{}A@h}0{{{h{{A@j{ce}}}}}{{h{{A@l{ce}}}}}A@dA@n}{{{h{{h{{A@j{ce}}}}}}}{{AA`{{h{{A@j{ce}}}}}}}A@dA@n}{{{h{{On{AAb}}}}Bb}{{Bf{{On{AAd}}AAf}}}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{dc}}}{{h{de}}}{}{}}000{{{h{{A@j{ce}}}}}{{Mn{{h{{A@j{ce}}}}}}}A@dA@n}{{{h{{A@j{ce}}}}{h{g}}}{{AAj{{AAh{c}}}}}{A@fA@d}A@n{{AAl{c}}}}0`{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{A@j{cACd}}}}}{{Bf{AbAB`}}}A@d}{{{h{{A@j{cACf}}}}}{{Bf{AbAB`}}}A@d}2022102102{{{h{c}}}{{Bf{AbAB`}}}A@d}00{{{h{{A@l{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{A@l{cACd}}}}}{{Bf{AbAB`}}}A@d}{{{h{{A@l{cACf}}}}}{{Bf{AbAB`}}}A@d}{{{h{{Cl{{Mn{Cj}}}}}}}{{Bf{AbAB`}}}}00`{{{h{{On{c}}}}}{{On{c}}}{AlA@d}}{{{h{ACd}}}ACd}{{{h{ACf}}}ACf}{{{h{{A@j{ce}}}}}{{A@j{ce}}}{AlA@d}{AlA@n}}{{{h{c}}{h{de}}}Ab{}{}}000{{{h{{On{c}}}}{h{{On{c}}}}}Fb{AChA@d}}{{{h{ACd}}{h{ACd}}}Fb}{{{h{ACf}}{h{ACf}}}Fb}{{{h{{A@j{ce}}}}{h{{A@j{ce}}}}}FbA@dA@n}{{{h{{A@j{ce}}}}}GhA@dA@n}{{{h{{On{AAb}}}}Bb}{{Bf{{On{AAd}}AAf}}}}{{{h{{On{AAb}}}}{h{{Mb{c}}}}Bb}{{Bf{{On{ACj}}AAf}}}ACl}{{{h{{On{AAd}}}}{h{{Mb{c}}}}}{{Bf{{On{ACj}}AAf}}}ACl}{{{h{{On{c}}}}}ACnA@d}{{{h{{On{AAb}}}}}AD`}{c{{Bf{{On{e}}}}}GfADb}{c{{Bf{{A@j{eg}}}}}GfADbA@n}{{{h{{On{AAb}}}}}C`}{{{h{{A@j{ce}}}}}Af{A@fA@d}A@n}{{{h{{On{c}}}}{h{{On{c}}}}}Gh{GlA@d}}{{{h{ACd}}{h{ACd}}}Gh}{{{h{ACf}}{h{ACf}}}Gh}{{{h{{A@j{ce}}}}{h{{A@j{ce}}}}}GhA@dA@n}{{{h{c}}{h{e}}}Gh{}{}}0000000`{{{h{{On{c}}}}}{{Bf{AfA@b}}}{A@dA@f}}`{{{h{{A@j{ce}}}}{h{ADd}}}{{Bf{AbADf}}}A@dA@n}{{{h{ADh}}{h{Jl}}ADj{h{{Mb{M`}}}}}{{Bf{{Ch{Ln}}Gb}}}}{{{h{{On{AAb}}}}{h{Jl}}ADj{h{{Mb{M`}}}}}{{Bf{{Ch{Ln}}Gb}}}}{{{h{{A@j{AAbc}}}}{h{Jl}}ADj{h{{Mb{M`}}}}}{{Bf{{Ch{Ln}}Gb}}}A@n}{{{h{{On{AAb}}}}{h{{Mb{c}}}}{h{Lb}}{ADl{Bb}}}{{Bf{{Ch{{Cb{Bb{On{ACj}}}}}}AAf}}}ACl}{{{h{{On{c}}}}{h{dHh}}}{{Bf{AbHj}}}A@d}0{{{h{ACd}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{ACf}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{{A@j{ce}}}}{h{dHh}}}{{Bf{AbHj}}}A@dA@n}0{{{h{{On{c}}}}e}GhA@d{{Nb{{h{c}}}{{N`{Gh}}}}}}{{{h{{A@j{ce}}}}g}GhA@dA@n{{Nb{{h{c}}}{{N`{Gh}}}}}}{{{ADn{c}}}{{On{c}}}A@d}{{{AE`{c}}}{{On{c}}}A@d}{{{AEb{c}}}{{On{c}}}A@d}{{{AEd{c}}}{{On{c}}}A@d}{{{AEf{c}}}{{On{c}}}A@d}{cc{}}{{{AEh{c}}}{{On{c}}}A@d}111{{{A@l{ce}}}{{Bf{{A@j{ce}}A@b}}}A@dA@n}{{{A@l{ce}}AEjAEl}{{A@j{ce}}}A@dA@n}{{{h{Nh}}}{{Bf{{On{c}}A@b}}}ADb}{{{h{Nh}}}{{Bf{{A@j{ce}}A@b}}}ADbA@n}{{{h{Nh}}{h{ADd}}}{{Bf{{A@j{ce}}A@b}}}ADbA@n}1{{{h{AEn}}}{{Bf{{On{c}}A@b}}}ADb}{{{h{AEn}}}{{Bf{{A@j{ce}}A@b}}}ADbA@n}{{{h{{A@j{ce}}}}AF`}{{Ch{{h{{A@j{ce}}}}}}}A@dA@n}{{{h{{A@j{ce}}}}AF`}{{Ch{c}}}A@dA@n}{{{h{{On{c}}}}e}{{Bf{{Cb{{Mn{{Mn{Cj}}}}Af}}A@b}}}{A@dA@f}{{AFb{c}}}}0{{{h{{A@j{ce}}}}}GhA@dA@n}0{{{h{{On{AAb}}}}}Gh}{{{h{{On{c}}}}{h{de}}}Ab{AFdA@d}Kb}{{{h{ACd}}{h{dc}}}AbKb}{{{h{ACf}}{h{dc}}}AbKb}{{{h{{A@j{ce}}}}{h{dg}}}AbA@dA@nKb}{ce{}{}}000{{{A@j{ce}}}{{A@l{ce}}}A@dA@n}{{{On{AAb}}}{{Bf{{Mn{{On{AAb}}}}A@b}}}}{{Fl{h{{Mb{M`}}}}Ed}{{Bf{{Cb{LdLf}}Gb}}}}{{Ld{h{{Mb{M`}}}}Ed}{{Bf{{Cb{LdLf}}Gb}}}}99:{{{h{{A@j{ce}}}}}{{AFf{ce}}}A@dA@n}{{{h{{A@j{ce}}}}}{{AFh{ce}}}A@dA@n}{{{h{{On{c}}}}}{{Bf{{AFj{c}}A@b}}}A@d}{{{h{{A@j{ce}}}}}{{Bf{{AFj{c}}A@b}}}A@dA@n}{{{h{{A@j{ce}}}}}{{Bf{AbAFl}}}A@dA@n}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Ch{AF`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{A@j{cACd}}}}}{{Ch{AF`}}}A@d}{{{h{{A@j{cACf}}}}}{{Ch{AF`}}}A@d}{{{h{{A@j{ce}}}}}{{Bf{AF`A@b}}}A@dA@n}{{{h{{On{c}}}}}{{Bf{AF`A@b}}}A@d}1{{{h{{On{c}}}}}{{Bf{AFnA@b}}}A@d}{{}{{h{Nh}}}}00{{{A@j{cAG`}}}{{Bf{{On{c}}A@b}}}A@d}{c{{On{c}}}A@d}{c{{Bf{{On{c}}A@b}}}A@d}{{{A@j{cACd}}}{{Bf{{On{c}}A@b}}}A@d}{{AF`{Mn{c}}}{{Bf{{On{c}}A@b}}}A@d}{{{AEf{c}}}{{On{c}}}A@d}{{{AEd{c}}}{{On{c}}}A@d}4{{{A@j{cACf}}}{{Bf{{On{c}}A@b}}}A@d}3{{c{Ch{{AGb{c}}}}}{{Bf{{On{c}}A@b}}}A@d}614`{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{Lb}}}{{Bf{{A@j{c}}A@b}}}A@n}{{{h{{Mb{c}}}}{h{Nh}}}{{Bf{{Cb{{On{AAb}}{An{AAbAGd}}}}A@b}}}AGf}1{{{h{Lb}}{h{ADd}}}{{Bf{{A@j{c}}A@b}}}A@n}{{{h{{On{c}}}}{h{{On{c}}}}}{{Ch{Fb}}}{AGhA@d}}{{{h{ACd}}{h{ACd}}}{{Ch{Fb}}}}{{{h{ACf}}{h{ACf}}}{{Ch{Fb}}}}{{{h{{A@j{ce}}}}{h{{A@j{ce}}}}}{{Ch{Fb}}}A@dA@n}{{{h{c}}}AF`A@d}00{{{On{AAd}}{h{c}}}{{Bf{AGj{On{AAd}}}}}{{AAl{AAd}}}}0`{{{h{{A@j{ce}}}}}GhA@dA@n}{{{h{{On{c}}}}}{{Bf{AbA@b}}}A@d}{{{h{{A@j{ce}}}}}{{Bf{AbADf}}}A@dA@n}{{{h{{On{c}}}}{h{dAGl}}e}{{Bf{AbA@b}}}{A@dA@f}{{AFb{c}}}}{{{h{{A@j{ce}}}}g}{{Bf{{Mn{{Mn{Cj}}}}A@b}}}{A@fA@d}A@n{{AFb{c}}}}0{{{h{{On{c}}}}}{{Bf{AfA@b}}}{A@dA@f}}{{{h{{On{c}}}}}Af{A@dA@f}}{{{h{{A@j{ce}}}}}AF`A@dA@n}{{{h{{On{c}}}}e}BfA@dMf}{{{h{{A@j{ce}}}}g}BfA@dA@nMf}{{}AGn}00{{{h{{A@j{ce}}}}{h{{An{AC`c}}}}}{{A@j{ce}}}A@dA@n}`{{{h{c}}}e{}{}}000{{{h{c}}}Gd{}}0{{{h{{On{AAb}}}}{h{{An{AAbAGd}}}}}Gd}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}0{{{h{{On{c}}}}{h{di}}}{{Bf{{AH`{g}}}}}A@dA@d{}{{AHb{ceg}}}}{{{h{{A@j{ce}}}}{h{dk}}}{{Bf{{AH`{i}}}}}A@dA@nA@d{}{{AHb{cgi}}}}{c{{Bf{e}}}{}{}}0000000`{{{h{c}}}Nd{}}000={ce{}{}}000{{{h{{A@j{ce}}}}}GhA@dA@n}{{{h{Nh}}}{{Bf{GdGb}}}}``````````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{Gb}}{h{Gb}}}Gh}{{{h{Gb}}{h{dHh}}}Hl}0{AHdGb}{cc{}}{AHfGb}{AHhGb}{A@bGb}{AHjGb}{AHlGb}{AHnGb}>{{{h{c}}}Gd{}}{c{{Bf{e}}}{}{}}0{{{h{c}}}Nd{}}{ce{}{}}```````````````````````````````````???????>>>>>>>{{{h{AI`}}}AI`}{{{h{AIb}}}AIb}{{{h{AId}}}AId}{{{h{Ln}}}Ln}{{{h{AIf}}}AIf}{{{h{ADj}}}ADj}{{{h{c}}{h{de}}}Ab{}{}}00000``{{}AIf}{{{h{AI`}}{h{AI`}}}Gh}{{{h{AIb}}{h{AIb}}}Gh}{{{h{AId}}{h{AId}}}Gh}{{{h{Ln}}{h{Ln}}}Gh}{{{h{AIf}}{h{AIf}}}Gh}{{{h{AHd}}{h{AHd}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}00000000000{{{h{AI`}}{h{dHh}}}Hl}{{{h{AIb}}{h{dHh}}}Hl}{{{h{AId}}{h{dHh}}}Hl}{{{h{Ln}}{h{dHh}}}Hl}{{{h{AIf}}{h{dHh}}}Hl}{{{h{AHd}}{h{dHh}}}Hl}0{{{h{ADj}}{h{dHh}}}Hl}{cc{}}00{GhAId}{AIbLn}2222{{{h{Ln}}{h{{An{Gd{Mn{AF`}}}}}}}{{Bf{AIfAHd}}}}{{{h{AI`}}{h{dc}}}AbKb}{{{h{AIf}}{h{dc}}}AbKb}{{{h{AIb}}}Gd}`{ce{}{}}000000{{{h{AIb}}}Gh}{{{h{AId}}}Gh}{{{h{AIf}}}Gh}`{{{h{AIf}}{h{AIf}}}{{Ch{Fb}}}}{{{h{Ln}}}Gh}`{{{h{AI`}}c}BfMf}{{{h{AIb}}c}BfMf}{{{h{AId}}c}BfMf}{{{h{Ln}}c}BfMf}{{{h{AIf}}c}BfMf}`{{{h{c}}}e{}{}}00000{{{h{c}}}Gd{}}{c{{Bf{e}}}{}{}}0000000000000{{{h{c}}}Nd{}}000000>>>>>>>``````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{dc}}}{{h{de}}}{}{}}00000000000{{AIhEd}{{Bf{AIjGb}}}}{{{AIl{c}}Ed}{{Bf{AIjGb}}}{{AIn{ACd}}}}{{{AJ`{c}}Ed}{{Bf{AIjGb}}}{{AIn{ACf}}}}{{{AJb{c}}Ed}{{Bf{AIjGb}}}{{AIn{ACf}}}}{{{AJd{c}}Ed}{{Bf{AIjGb}}}{{AIn{AJf}}}}{{{AJh{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACd}}}}{{{AJl{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACd}}}}{{{AJn{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AK`{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AKb{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AKd{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AKf{c}}Ed}{{Bf{AIjGb}}}{{AJj{AJf}}}}{{{AKh{c}}Ed}{{Bf{AIjGb}}}{{AJj{AJf}}}}{{{h{{AIl{c}}}}}{{AIl{c}}}{Al{AIn{ACd}}}}{{{h{{AJ`{c}}}}}{{AJ`{c}}}{Al{AIn{ACf}}}}{{{h{{AJb{c}}}}}{{AJb{c}}}{Al{AIn{ACf}}}}{{{h{{AJd{c}}}}}{{AJd{c}}}{Al{AIn{AJf}}}}{{{h{{AJh{c}}}}}{{AJh{c}}}{Al{AJj{ACd}}}}{{{h{{AJl{c}}}}}{{AJl{c}}}{Al{AJj{ACd}}}}{{{h{{AJn{c}}}}}{{AJn{c}}}{Al{AJj{ACf}}}}{{{h{{AK`{c}}}}}{{AK`{c}}}{Al{AJj{ACf}}}}{{{h{{AKb{c}}}}}{{AKb{c}}}{Al{AJj{ACf}}}}{{{h{{AKd{c}}}}}{{AKd{c}}}{Al{AJj{ACf}}}}{{{h{{AKf{c}}}}}{{AKf{c}}}{Al{AJj{AJf}}}}{{{h{{AKh{c}}}}}{{AKh{c}}}{Al{AJj{AJf}}}}{{{h{c}}{h{de}}}Ab{}{}}00000000000{{{h{{AIl{c}}}}{h{dHh}}}Hl{Hn{AIn{ACd}}}}{{{h{{AJ`{c}}}}{h{dHh}}}Hl{Hn{AIn{ACf}}}}{{{h{{AJb{c}}}}{h{dHh}}}Hl{Hn{AIn{ACf}}}}{{{h{{AJd{c}}}}{h{dHh}}}Hl{Hn{AIn{AJf}}}}{{{h{{AJh{c}}}}{h{dHh}}}Hl{Hn{AJj{ACd}}}}{{{h{{AJl{c}}}}{h{dHh}}}Hl{Hn{AJj{ACd}}}}{{{h{{AJn{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AK`{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AKb{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AKd{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AKf{c}}}}{h{dHh}}}Hl{Hn{AJj{AJf}}}}{{{h{{AKh{c}}}}{h{dHh}}}Hl{Hn{AJj{AJf}}}}{cc{}}00000000000{ce{}{}}00000000000{{AIj{h{{Mb{M`}}}}Ed}{{Bf{{Cb{LdLf}}Gb}}}}{{c{h{{Mb{M`}}}}Ed}{{Bf{{Cb{{On{AAb}}{An{AAbAGd}}}}Gb}}}{}}00000000000{{{h{c}}}e{}{}}00000000000{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Nd{}}00000000000555555555555`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{dc}}}{{h{de}}}{}{}}00{{{h{AKj}}}AKj}{{{h{c}}{h{de}}}Ab{}{}}{{{h{AKj}}{h{dHh}}}Hl}0{{{h{Jj}}{h{dHh}}}Hl}0{{{h{Dh}}{h{dHh}}}Hl}0=={NjJj}{AKlJj}{AKjJj}{GbJj}{AHdJj}{cc{}}{ce{}{}}00{{{h{c}}}e{}{}}{{{h{c}}}Gd{}}00{c{{Bf{e}}}{}{}}00000{{{h{c}}}Nd{}}00444``````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{AKn}}}{{Ch{Gd}}}}{{{h{AKn}}}Gd}{c{{Bf{AKn}}}Gf}{{{h{f}}{h{Nh}}Gh}{{Bf{AKn{h{Nh}}}}}}{{{h{AKn}}{h{dHh}}}Hl}0<{{{h{Nh}}}{{Bf{AKnc}}}{}}<``{{{h{AKn}}c}BfMf};::9=```````````````````````````````````````````{{}AL`}{{}A@h}{{AAbBb}{{Bf{AAdAAf}}}};;;;;;;;;;;;::::::::::::{{{h{{ALb{ce}}}}{h{g}}}{{AAj{{AAh{c}}}}}{A@fA@d}A@n{{AAl{c}}}}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}00000{{{h{c}}}{{Bf{AbAB`}}}A@d}{{{h{{A@l{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{Cl{{Mn{Cj}}}}}}}{{Bf{AbAB`}}}}{{{h{{ALd{ce}}}}}{{ALd{ce}}}AlA@n}{{{h{A@h}}}A@h}{{{h{ALf}}}ALf}{{{h{{ALb{ce}}}}}{{ALb{ce}}}{AlA@d}{AlA@n}}{{{h{AAb}}}AAb}{{{h{AGd}}}AGd}{{{h{ALh}}}ALh}{{{h{ALj}}}ALj}{{{h{ALl}}}ALl}{{{h{c}}{h{de}}}Ab{}{}}00000000{{{h{{ALb{ce}}}}{h{{ALb{ce}}}}}Fb{AChA@d}{AChA@n}}{{{h{AAb}}{h{AAb}}}Fb}{{{h{ALh}}{h{ALh}}}Fb}{{{h{ALl}}{h{ALl}}}Fb}`{{}ALf}{{{h{{ALd{ce}}}}}{{h{g}}}{}A@n{}}{{AAbBb}{{Bf{AAdAAf}}}}{c{{Bf{AAb}}}Gf}{{{h{{ALb{ce}}}}}Af{A@fA@d}A@n}{{{h{A@h}}{h{A@h}}}Gh}{{{h{AHl}}{h{AHl}}}Gh}{{{h{{ALb{ce}}}}{h{{ALb{ce}}}}}Gh{GlA@d}{GlA@n}}{{{h{AAb}}{h{AAb}}}Gh}{{{h{AGd}}{h{AGd}}}Gh}{{{h{ALh}}{h{ALh}}}Gh}{{{h{ALj}}{h{ALj}}}Gh}{{{h{ALl}}{h{ALl}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0000000000000{{{h{{ALn{c}}}}{h{dHh}}}Hl{HnA@n}}{{{h{A@h}}{h{dHh}}}Hl}{{{h{ALf}}{h{dHh}}}Hl}{{{h{AHl}}{h{dHh}}}Hl}0{{{h{{ALb{ce}}}}{h{dHh}}}{{Bf{AbHj}}}A@dA@n}0{{{h{AAb}}{h{dHh}}}{{Bf{AbHj}}}}0{{{h{AGd}}{h{dHh}}}{{Bf{AbHj}}}}0{{{h{ALh}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{ALj}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{ALl}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{{ALb{ce}}}}g}GhA@dA@n{{Nb{{h{c}}}{{N`{Gh}}}}}}{cc{}}{AM`{{AMb{c}}}A@n}{AMd{{AMb{c}}}A@n}2222{A@bAHl}3{AHfAHl}44{AAdAAb}5555{{AAbAL`}{{ALn{c}}}A@n}{{AGdAL`}{{ALn{c}}}A@n}{{{h{Nh}}}{{Bf{AAb}}}}{{{h{Nh}}}{{Bf{AGd}}}}{{{h{AEn}}}{{Bf{{ALb{ce}}A@b}}}{AMfA@d}A@n}{{{h{AAb}}}{{Ch{AMh}}}}{{{h{AAb}}}{{Mn{AMh}}}}{c{{Bf{{ALd{{AMn{}{{AMj{e}}{AMl{c}}{Kd{g}}}}i}}g}}}{}{{AN`{{Cl{Cj}}}}Ol}HnA@n}{{}{{Bf{{ALd{ANbc}}e}}}A@n{}}{{{h{dc}}}{{Bf{{ALd{ANbe}}g}}}{ANdOh}A@n{}}{{c{h{de}}}{{Bf{{ALd{{AMn{}{{AMj{g}}{AMl{c}}{Kd{i}}}}k}}i}}}{}{ANdOh}{{AN`{{Cl{Cj}}}}Ol}HnA@n}{{ce}{{Bf{{ALd{{AMn{}{{AMj{e}}{AMl{c}}{Kd{g}}}}i}}g}}}{}{{AN`{{Cl{Cj}}}}Ol}HnA@n}{c{{Bf{{ALd{ANbe}}g}}}{}A@n{}}{{{h{{AMb{c}}}}}GhA@n}{{{h{AAb}}}Gh}{{{h{{ALb{ce}}}}{h{dg}}}Ab{AFdA@d}{AFdA@n}Kb}{{{h{AAb}}{h{dc}}}AbKb}{{{h{ALh}}{h{dc}}}AbKb}{{{h{ALl}}{h{dc}}}AbKb}{ce{}{}}00000000000{AAbANf}{AIn{{Bf{{ALn{c}}AHl}}}A@n}{{AJj{Ch{ANh}}AMh}{{Bf{{ALn{c}}AHl}}}A@n}{{{ALd{ec}}{Ch{ANh}}AMh}{{Bf{{ALn{c}}AHl}}}A@n{{AJj{c}}}}{{{ALd{ec}}}{{Bf{{ALn{c}}AHl}}}A@n{{AIn{c}}}}{{{ALn{c}}}{{Bf{{ALn{c}}AHl}}}A@n}{AAb{{Bf{{ALn{c}}AHl}}}A@n}{AGd{{Bf{{ALn{c}}AHl}}}A@n}{AJj{{Bf{{AMb{c}}AHl}}}A@n}{{{AMb{c}}}{{Bf{{AMb{c}}AHl}}}A@n}{{{ALd{ec}}}{{Bf{{AMb{c}}AHl}}}A@n{{AJj{c}}}}{{{ALd{ce}}}c{}A@n}{AAb{{Mn{AAb}}}}{AGd{{Mn{AGd}}}}{{{AMb{c}}Ed}{{Ch{AM`}}}A@n}{{{AMb{c}}Ed{h{{Mb{e}}}}}AMdA@nAGf}{{{h{AAb}}}Gh}{{}Gh}{{{h{A@h}}}Gh}2{{{h{AGd}}}Gh}212133{{{h{{ALb{ce}}}}}AF`A@dA@n}``{{{h{{ALb{ce}}}}}{{Bf{{AFj{c}}A@b}}}A@dA@n}{{}AL`}{{{h{AAb}}}ANj}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Ch{AF`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}44{{{h{AL`}}{h{AL`}}}AL`}5{{}{{h{Nh}}}}{{AF`{Mn{c}}}{{Bf{{ALb{ce}}A@b}}}A@dA@n}{{{h{AAb}}}AF`}``{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{ALn{c}}AL`}{{ALn{c}}}A@n}{{{h{{ALb{ce}}}}{h{{ALb{ce}}}}}{{Ch{Fb}}}{AGhA@d}{AGhA@n}}{{{h{AAb}}{h{AAb}}}{{Ch{Fb}}}}{{{h{ALh}}{h{ALh}}}{{Ch{Fb}}}}{{{h{ALl}}{h{ALl}}}{{Ch{Fb}}}}{{{h{c}}}AF`A@d}{{{h{{ALb{ce}}}}}{{h{{Cl{c}}}}}A@dA@n}{{{h{{ALb{ce}}}}}{{Bf{AbA@b}}}A@dA@n}{{{h{{ALb{ce}}}}g}{{Bf{{Mn{{Mn{Cj}}}}A@b}}}{A@fA@d}A@n{{AFb{c}}}}{{{h{{ALb{ce}}}}}AF`A@dA@n}{{{h{AAb}}c}BfMf}{{}AGn}{{{h{{ALb{ce}}}}}{{A@l{ce}}}{A@fA@d}A@n}{{}AL`}{{{h{c}}}e{}{}}00000000{{{h{AGd}}{h{{Mb{c}}}}}{{Bf{AAbANl}}}AGf}{{{h{c}}}Gd{}}000{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}0{{{h{{ALb{ce}}}}{h{dk}}}{{Bf{{ALb{ge}}{AH`{i}}}}}A@dA@nA@d{}{{AHb{cgi}}}}{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Nd{}}00000000000{ce{}{}}00000000000`{{{h{ANn}}}{{Ch{Dj}}}}{{{h{ANn}}}{{Ch{Dn}}}}{{{h{ANn}}AF`}{{Ch{Kn}}}}`{{{h{Jb}}{h{Nh}}{h{{Cl{{h{{Cl{{h{Nh}}}}}}}}}}}{{Bf{AbAO`}}}}````````````````````````````````````{{{h{dJl}}AObl{A`{n}}}{{Ch{{A`{n}}}}}}``{{{h{Jl}}{h{{Mb{M`}}}}}Lf}`{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{dc}}}{{h{de}}}{}{}}0000000{{Lf{h{{On{AAb}}}}{h{{Mb{M`}}}}}Jl}{{{h{AOb}}}AOb}{{{h{AOd}}}AOd}{{{h{{AOf{c}}}}}{{AOf{c}}}{AlAOhHnAl}}{{{h{l}}}l}{{{h{Jl}}}Jl}{{{h{Hd}}}Hd}{{{h{AOj}}}AOj}{{{h{c}}{h{de}}}Ab{}{}}000000{{{h{AOb}}{h{AOb}}}Fb}{{{h{l}}{h{l}}}Fb}{{}l}{{}Jl}{{}Hd}{{}AOj}{{{h{{AOf{c}}}}}{{h{e}}}{AOhHnAl}{}}{{{h{AOl}}}{{Ch{AGd}}}}0{{{h{{AOf{{AOn{AM`}}}}}}}{{Ch{AGd}}}}{{{h{{AOf{{B@`{AM`}}}}}}}{{Ch{AGd}}}}{{{h{{AOf{B@b}}}}}{{Ch{AGd}}}}{{{h{AOb}}{h{AOb}}}Gh}{{{h{AOd}}{h{AOd}}}Gh}{{{h{l}}{h{l}}}Gh}{{{h{AOj}}{h{AOj}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0000000{{{h{Jl}}AOb}{{Ch{{h{{A`{n}}}}}}}}{{{h{AOb}}{h{dHh}}}Hl}{{{h{Hf}}{h{dHh}}}Hl}0{{{h{AOd}}{h{dHh}}}Hl}{{{h{{AOf{c}}}}{h{dHh}}}Hl{HnAOhHnAl}}{{{h{l}}{h{dHh}}}Hl}{{{h{Jl}}{h{dHh}}}Hl}{{{h{Hd}}{h{dHh}}}Hl}{{{h{AOj}}{h{dHh}}}Hl}{ANjAOb}{cc{}}{AC`AOb}1111111{{{h{AOb}}{h{dc}}}AbKb}{{{h{AOl}}{h{{Mb{M`}}}}}AOb}{{{h{{AOf{{B@`{AM`}}}}}}{h{{Mb{M`}}}}}AOb}{{{h{{AOf{B@b}}}}{h{{Mb{M`}}}}}AOb}{{{h{{AOf{{AOn{AM`}}}}}}{h{{Mb{M`}}}}}AOb}{{{h{Jl}}}{{Mn{{h{AOb}}}}}}{ce{}{}}0000000{{cAOd}{{AOf{c}}}{AOhHnAl}}{{}Jl}{{{h{AOb}}{h{AOb}}}{{Ch{Fb}}}}{{{h{l}}{h{l}}}{{Ch{Fb}}}}{{{h{dJl}}AObl}{{Ch{{A`{n}}}}}}{{{h{B@d}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{{AOf{B@b}}}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{{AOf{{AOn{AM`}}}}}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{{AOf{{B@`{AM`}}}}}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{n}}{h{dHb}}{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{c}}{h{dHb}}{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}{}}`{{{h{Jl}}}{{Mn{{h{{A`{n}}}}}}}}`{{{h{c}}}e{}{}}000000{{{h{c}}}Gd{}}``{c{{Bf{e}}}{}{}}000000000000000{{{h{c}}}Nd{}}0000000{ce{}{}}0000000````````````````{{{h{d{Df{c}}}}{h{e}}}{{h{d{Df{c}}}}}{}{{B@h{B@f}}}}{{{h{d{Df{c}}}}K`JhAFn}{{Bf{{h{d{Df{c}}}}B@j}}}{}}{{{h{d{Df{c}}}}K`JhAFnMd}{{Bf{{h{d{Df{c}}}}B@j}}}{}}{{{h{d{Df{c}}}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}AfDj}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}K`}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}K`}{{Bf{{h{d{Df{c}}}}B@l}}}{}}{{{h{d{Df{c}}}}{h{{Cl{K`}}}}}{{Bf{{h{d{Df{c}}}}B@l}}}{}}{{{h{d{Df{c}}}}Gh}{{h{d{Df{c}}}}}{}}{{{h{c}}}{{h{e}}}{}{}}0000{{{h{dc}}}{{h{de}}}{}{}}0000{{{h{d{Df{c}}}}B@n}{{h{d{Df{c}}}}}{}}{{{h{{Df{c}}}}}{{Df{c}}}Al}{{{h{BA`}}}BA`}{{{h{B@n}}}B@n}{{{h{c}}{h{de}}}Ab{}{}}00{{{h{B@n}}{h{B@n}}}Fb}{{{Df{c}}e}{{Df{e}}}{}Od}{{{h{d{Df{c}}}}Bb}{{h{d{Df{c}}}}}{}}{{}BA`}{{}B@n}{{{h{d{Df{c}}}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Af}{{h{d{Df{c}}}}}{}}1{{{h{B@n}}{h{B@n}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0{{{h{d{Df{c}}}}Dj}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Dn}{{h{d{Df{c}}}}}{}}{{{Df{c}}}{{Bf{HbJj}}}Od}{{{Df{c}}{h{de}}}{{Bf{HbJj}}}OdOh}{{{h{{Df{c}}}}{h{dHh}}}HlHn}{{{h{B@l}}{h{dHh}}}Hl}0{{{h{B@j}}{h{dHh}}}Hl}0{{{h{BA`}}{h{dHh}}}Hl}{{{h{B@n}}{h{dHh}}}Hl}{cc{}}0000{{{h{B@n}}{h{dc}}}AbKb}>{ce{}{}}0000?{{{h{d{Df{c}}}}BAb}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}}{{h{d{Df{c}}}}}{}}0{{{h{d{Df{c}}}}BA`}{{h{d{Df{c}}}}}{}}{{{h{B@n}}{h{B@n}}}{{Ch{Fb}}}}{{{h{d{Df{c}}}}{An{Gd{Mn{AF`}}}}j}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Md}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}{Mn{{Cb{AfDj}}}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Jf}{{h{d{Df{c}}}}}{}}{{{h{BA`}}{h{dBl}}}Ab}{{{h{BA`}}{h{dBl}}{h{dc}}}AbOh}{{{h{c}}}e{}{}}00{{{h{c}}}Gd{}}0{c{{Bf{e}}}{}{}}000000000{{{h{c}}}Nd{}}0000{{{h{d{Df{c}}}}{Mn{K`}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}BAd}{{h{d{Df{c}}}}}{}}{ce{}{}}0000````","D":"GCl","p":[[5,"Balance",0,1993],[0,"mut"],[5,"Wallet",0,1994],[1,"reference"],[6,"KeychainKind",0,1995],[5,"SignerOrdering",1688,1996],[10,"TransactionSigner",1688,1996],[5,"Arc",1997],[1,"unit"],[17,"Item"],[5,"ScriptBuf",1998],[8,"Indexed",1999],[10,"Iterator",2000],[10,"Clone",2001],[5,"BTreeMap",2002],[5,"Block",2003],[1,"u32"],[5,"CannotConnectError",2004],[6,"Result",2005],[5,"BlockId",2006],[6,"ApplyHeaderError",2004],[5,"Transaction",2007],[10,"Into",2008],[1,"u64"],[1,"tuple"],[10,"IntoIterator",2009],[5,"Update",0,1994],[6,"Option",2010],[1,"u8"],[1,"slice"],[5,"ConfirmationBlockTime",2006],[5,"TxGraph",2011],[5,"Txid",2007],[8,"DefaultCoinSelectionAlgorithm",489,2012],[5,"TxBuilder",1875,2013],[6,"BuildFeeBumpError",1267,2014],[5,"Amount",2015],[6,"CalculateFeeError",2011],[5,"FeeRate",2016],[5,"LoadParams",0,2017],[5,"BlockHash",2003],[6,"Network",2018],[5,"CheckPointIter",2019],[5,"LocalOutput",0,1995],[5,"WeightedUtxo",0,1995],[6,"Utxo",0,1995],[5,"ChangeSet",0,2020],[5,"AddressInfo",0,1994],[6,"Ordering",2021],[5,"CreateParams",0,2017],[5,"PersistedWallet",0,2022],[6,"CreateWithPersistError",0,2022],[10,"WalletPersister",0,2022],[10,"IntoWalletDescriptor",606],[10,"Send",2023],[10,"AsyncWalletPersister",0,2022],[6,"Error",867],[5,"String",2024],[10,"Deserializer",2025],[1,"bool"],[6,"LoadWithPersistError",0,2022],[10,"PartialEq",2021],[6,"LoadError",0,1994],[6,"LoadMismatch",0,1994],[5,"Psbt",2026],[5,"SignOptions",1688,1996],[6,"SignerError",1688,1996],[5,"Formatter",2027],[5,"Error",2027],[8,"Result",2027],[10,"Debug",2027],[6,"FileStoreError",0,2022],[10,"Display",2027],[6,"ApplyBlockError",0,1994],[5,"ChangeSet",2028],[5,"ChangeSet",2011],[5,"ChangeSet",2029],[5,"ChangeSet",2004],[5,"SyncResult",2030],[5,"FullScanResult",2030],[5,"Transaction",2031],[8,"Result",2032],[5,"PsbtSighashType",2033],[5,"Input",2033],[6,"CreateTxError",1267,2014],[5,"SignersContainer",1688,1996],[8,"WalletTx",0,1994],[5,"OutPoint",2007],[10,"Hasher",2034],[17,"Error"],[10,"Future",2035],[5,"Box",2036],[5,"Pin",2037],[5,"AlterCheckPointError",2004],[5,"TxOut",2007],[10,"IsDust",0,2038],[5,"Script",2039],[8,"ExtendedDescriptor",606],[8,"KeyMap",1366,2040],[5,"CheckPoint",2019],[10,"DoubleEndedIterator",2041],[5,"LocalChain",2004],[5,"Policy",900],[6,"All",2042],[5,"Secp256k1",2043],[5,"Sequence",2007],[10,"Serializer",2044],[5,"KeychainTxOutIndex",2028],[5,"FullScanRequestBuilder",2030],[5,"SyncRequestBuilder",2030],[5,"Vec",2045],[17,"Output"],[10,"FnMut",2046],[5,"TypeId",2047],[5,"TxNode",2011],[1,"str"],[5,"InsufficientFunds",489,2012],[5,"LargestFirstCoinSelection",489,2012],[5,"OldestFirstCoinSelection",489,2012],[5,"BranchAndBoundCoinSelection",489,2012],[5,"SingleRandomDraw",489,2012],[10,"CoinSelectionAlgorithm",489,2012],[5,"CoinSelectionResult",489,2012],[10,"RngCore",2048],[6,"Excess",489,2012],[10,"Default",2049],[6,"Descriptor",606,2040],[5,"Address",2050],[6,"Error",2051],[10,"MiniscriptKey",2051],[10,"ToPublicKey",2051],[6,"ScriptContextEnum",1366],[5,"Miniscript",606,2052],[6,"Terminal",2053],[10,"ScriptContext",1366,2054],[6,"Tree",2055],[6,"DescriptorPublicKey",1366,2056],[5,"DefiniteDescriptorKey",2056],[6,"ConversionError",2056],[6,"Placeholder",2057],[5,"Satisfaction",2057],[10,"AssetProvider",2058],[17,"Key"],[6,"ScriptContextError",2054],[17,"Sha256"],[5,"Hash",2059],[17,"Hash256"],[5,"Hash",2060],[17,"Ripemd160"],[5,"Hash",2061],[17,"Hash160"],[5,"Hash",2062],[10,"ParseableKey",2053],[6,"Legacy",606,2054],[6,"Segwitv0",606,2054],[10,"Ord",2021],[5,"PublicKey",2063],[10,"Verification",2064],[6,"DescriptorType",2040],[5,"DescriptorId",2065],[10,"FromStrKey",2066],[5,"ExtParams",2067],[6,"AnalysisError",2067],[10,"ExtractPolicy",606],[6,"BuildSatisfaction",900],[5,"Range",2068],[5,"Bare",2069],[5,"Sh",2070],[5,"Pkh",2069],[5,"Wsh",2071],[5,"Wpkh",2071],[5,"Tr",2072],[5,"Type",2073],[5,"ExtData",2074],[5,"Tree",2075],[1,"usize"],[10,"Satisfier",2057],[10,"Hash",2034],[5,"Iter",2076],[5,"PkIter",2076],[6,"Policy",2077],[6,"LiftError",2078],[5,"Weight",2079],[6,"BareCtx",2054],[6,"TapTree",2072],[6,"DescriptorSecretKey",1366,2056],[10,"Signing",2064],[10,"PartialOrd",2021],[5,"Plan",2058],[5,"TxIn",2007],[6,"SigType",2054],[6,"TranslateErr",2051],[10,"Translator",2051],[6,"PolicyError",900],[6,"Error",2080],[6,"ParsePublicKeyError",2063],[6,"HexToBytesError",2081],[6,"KeyError",1366],[6,"Error",2082],[6,"PkOrF",900],[6,"SatisfiableItem",900],[6,"Satisfaction",900],[5,"Condition",900],[10,"DescriptorTemplate",1083],[8,"DescriptorTemplateOut",1083],[5,"P2Pkh",1083],[10,"IntoDescriptorKey",1366],[5,"P2Wpkh_P2Sh",1083],[5,"P2Wpkh",1083],[5,"P2TR",1083],[6,"Tap",2054],[5,"Bip44",1083],[10,"DerivableKey",1366],[5,"Bip44Public",1083],[5,"Bip49",1083],[5,"Bip49Public",1083],[5,"Bip84",1083],[5,"Bip84Public",1083],[5,"Bip86",1083],[5,"Bip86Public",1083],[6,"MiniscriptPsbtError",1267,2014],[6,"Error",2083],[5,"FullyNodedExport",1343,2084],[8,"ValidNetworks",1366],[5,"SortedMultiVec",1366,2085],[5,"GeneratedKey",1366],[5,"PrivateKeyGenerateOptions",1366],[5,"SinglePub",1366,2056],[5,"SinglePriv",1366,2056],[6,"SinglePubKey",1366,2056],[6,"DescriptorKey",1366],[5,"Xpriv",2080],[6,"ExtendedKey",1366],[5,"Xpub",2080],[10,"FromStr",2086],[5,"DerivationPath",2080],[17,"Entropy"],[17,"Options"],[10,"GeneratableKey",1366],[10,"AsMut",2008],[10,"GeneratableDefaultOptions",1366],[10,"CryptoRng",2048],[5,"Assets",2058],[8,"KeySource",2080],[5,"Fingerprint",2080],[5,"DescriptorKeyParseError",2056],[10,"PsbtUtils",1682],[6,"Error",2087],[6,"SignerId",1688,1996],[6,"SignerContext",1688,1996],[5,"SignerWrapper",1688,1996],[10,"Sized",2023],[6,"TapLeavesOptions",1688,1996],[10,"SignerCommon",1688,1996],[5,"DescriptorMultiXKey",2056],[5,"DescriptorXKey",2056],[5,"PrivateKey",2063],[10,"InputSigner",1688,1996],[5,"PushBytes",2088],[10,"AsRef",2008],[6,"AddForeignUtxoError",1875,2013],[6,"AddUtxoError",1875,2013],[6,"ChangeSpendPolicy",1875,2013],[6,"TxOrdering",1875,2013],[6,"LockTime",2089],[1,"i32"],[15,"InvalidTxid",1989],[15,"UnexpectedConnectedToHash",475],[15,"Network",477],[15,"Genesis",477],[15,"Descriptor",477],[15,"Custom",1991],[15,"Foreign",486],[15,"Change",601],[15,"NoChange",601],[8,"DerivedDescriptor",606],[15,"PsbtTimelocks",1059],[15,"Complete",1062],[15,"Partial",1062],[15,"PartialComplete",1062],[15,"Sha256Preimage",1073],[15,"Hash256Preimage",1073],[15,"Ripemd160Preimage",1073],[15,"Hash160Preimage",1073],[15,"Thresh",1073],[15,"Multisig",1073],[15,"AbsoluteTimelock",1073],[15,"RelativeTimelock",1073],[15,"RbfSequenceCsv",1337],[15,"LockTime",1337],[15,"FeeTooLow",1337],[15,"FeeRateTooLow",1337],[8,"WalletExport",1343],[10,"ExtScriptContext",1366],[15,"Tap",1874]],"r":[[0,2013],[1,2013],[2,1994],[3,1994],[4,2022],[5,1993],[9,2020],[10,2013],[11,2017],[12,2022],[21,2022],[24,606],[29,2038],[30,1995],[32,1994],[33,1994],[34,2017],[35,2022],[37,1995],[47,2022],[49,1996],[50,2013],[51,2013],[55,1994],[56,1995],[59,1994],[60,2022],[61,1994],[62,1995],[146,1994],[198,1994],[199,1994],[340,2090],[355,1994],[356,1994],[364,606],[423,1994],[472,1994],[489,2012],[491,2012],[492,2012],[493,2012],[494,2012],[495,2012],[496,2012],[498,2012],[499,2012],[530,2012],[610,2040],[612,2056],[619,2054],[620,2052],[625,900],[626,2054],[627,2054],[661,866],[1267,2014],[1270,2014],[1278,2014],[1343,2084],[1344,2084],[1369,2056],[1370,2056],[1385,2040],[1395,2054],[1400,2056],[1401,2056],[1402,2056],[1403,2085],[1686,2091],[1687,2091],[1695,1996],[1712,1996],[1713,1996],[1714,1996],[1715,1996],[1716,1996],[1717,1996],[1718,1996],[1719,1996],[1721,1996],[1722,1996],[1875,2013],[1876,2013],[1879,2013],[1886,2013],[1887,2013]],"b":[[203,"impl-Display-for-Balance"],[204,"impl-Debug-for-Balance"],[211,"impl-Debug-for-FileStoreError"],[212,"impl-Display-for-FileStoreError"],[213,"impl-Display-for-LoadWithPersistError%3CE%3E"],[214,"impl-Debug-for-LoadWithPersistError%3CE%3E"],[215,"impl-Debug-for-CreateWithPersistError%3CE%3E"],[216,"impl-Display-for-CreateWithPersistError%3CE%3E"],[219,"impl-Display-for-AddressInfo"],[220,"impl-Debug-for-AddressInfo"],[221,"impl-Debug-for-LoadError"],[222,"impl-Display-for-LoadError"],[224,"impl-Display-for-ApplyBlockError"],[225,"impl-Debug-for-ApplyBlockError"],[234,"impl-From%3CChangeSet%3E-for-ChangeSet"],[235,"impl-From%3CChangeSet%3CConfirmationBlockTime%3E%3E-for-ChangeSet"],[236,"impl-From%3CChangeSet%3CConfirmationBlockTime,+ChangeSet%3E%3E-for-ChangeSet"],[237,"impl-From%3CChangeSet%3E-for-ChangeSet"],[245,"impl-From%3CSyncResult%3E-for-Update"],[247,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[540,"impl-Debug-for-InsufficientFunds"],[541,"impl-Display-for-InsufficientFunds"],[699,"impl-Descriptor%3CDescriptorPublicKey%3E"],[700,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[727,"impl-Debug-for-Descriptor%3CPk%3E"],[728,"impl-Display-for-Descriptor%3CPk%3E"],[731,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[732,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[735,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[736,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[737,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[738,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[739,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[741,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[884,"impl-Display-for-Error"],[885,"impl-Debug-for-Error"],[886,"impl-From%3CPolicyError%3E-for-Error"],[888,"impl-From%3CError%3E-for-Error"],[889,"impl-From%3CParsePublicKeyError%3E-for-Error"],[890,"impl-From%3CError%3E-for-Error"],[891,"impl-From%3CHexToBytesError%3E-for-Error"],[892,"impl-From%3CKeyError%3E-for-Error"],[893,"impl-From%3CError%3E-for-Error"],[987,"impl-Debug-for-PolicyError"],[988,"impl-Display-for-PolicyError"],[1304,"impl-Display-for-MiniscriptPsbtError"],[1305,"impl-Debug-for-MiniscriptPsbtError"],[1306,"impl-Display-for-CreateTxError"],[1307,"impl-Debug-for-CreateTxError"],[1308,"impl-Debug-for-BuildFeeBumpError"],[1309,"impl-Display-for-BuildFeeBumpError"],[1312,"impl-From%3CInsufficientFunds%3E-for-CreateTxError"],[1313,"impl-From%3CError%3E-for-CreateTxError"],[1314,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1315,"impl-From%3CError%3E-for-CreateTxError"],[1316,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1353,"impl-Debug-for-FullyNodedExport"],[1354,"impl-Display-for-FullyNodedExport"],[1499,"impl-Display-for-KeyError"],[1500,"impl-Debug-for-KeyError"],[1501,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[1502,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[1503,"impl-Display-for-DescriptorPublicKey"],[1504,"impl-Debug-for-DescriptorPublicKey"],[1505,"impl-Debug-for-DescriptorSecretKey"],[1506,"impl-Display-for-DescriptorSecretKey"],[1512,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[1513,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[1518,"impl-From%3CError%3E-for-KeyError"],[1520,"impl-From%3CError%3E-for-KeyError"],[1562,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1563,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1769,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1770,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1771,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1786,"impl-Debug-for-SignerError"],[1787,"impl-Display-for-SignerError"],[1794,"impl-From%3CFingerprint%3E-for-SignerId"],[1796,"impl-From%3CHash%3E-for-SignerId"],[1806,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1807,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1808,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1824,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1825,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1826,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1932,"impl-Debug-for-AddUtxoError"],[1933,"impl-Display-for-AddUtxoError"],[1934,"impl-Display-for-AddForeignUtxoError"],[1935,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAALsCBQMRA0EFwAUoBg==","e":"OzAAAAEAACsEgAAZAAAAQQAAAE0AAQBRACQAewAAAIIAEACeAAYArQAZAMoAAADMABYA6wADAPIAAAD2AAAA+AAAAPsAAAAEAQEAIgEAAD0BAABIAQAAVAEAAFoBBQBlAQAAbQEPAIQBIwCvAREAxwERAPYBFwAPAgMAFAIGAB0CBwA4AiEAZAIAAHICAACGAgEAiQIAAIsCBwCWAgAAmAIBAJsCAACeAgEAoQIBAKUCAQCoAgEAqwIBAK4CCwC/AgMAxAILANUCAQDYAgwA5gIAAOwCAAD5AgMABAMAAAoDAQAOAwEAFQMBACsDAwAwAwEAPgMBAEEDAQBFAwUAUAMHAFkDAwBeAwMAcgMFAHkDBQCAAwQAqAMZAMQDGgDiAwEA6QMBAPgDAAD7AwQAAQQiAEoEFwBjBC8AqwRIABEFDQAhBQQAKgUPAEQFAQBIBQAASgUBAE0FAABRBQUAhQUXAKcFFQC+BQEAwQUAAMMFJADpBQEA7wUAAPEFAAD0BQAA+wUBAAgGAwAYBgAAGwYEACEGAQAxBgEANgYAAEAGAABFBgMATgYAAFIGCABcBgMAYwYvAMIGDwDTBhQA6gYOAPoGCQAFBwAADQcAAA8HAgAdBwEAIQcCACUHAAApBwcAMwcfAGwHCQB3BwYAgAcBAIUHAgCMBwYAmAcAAKQHAACrBxMAwQcEAA=="}],\ +["bdk_file_store",{"t":"FPFGPPPGFNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNOO","n":["AggregateChangesetsError","Bincode","EntryIter","FileError","InvalidMagicBytes","Io","Io","IterError","Store","aggregate_changesets","append_changeset","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","changeset","create_new","drop","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into_iter","iter_changesets","iter_error","new","next","open","open_or_create_new","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","expected","got"],"q":[[0,"bdk_file_store"],[73,"bdk_file_store::FileError"],[75,"bdk_file_store::store"],[76,"core::option"],[77,"core::result"],[78,"bdk_core::merge"],[79,"serde::ser"],[80,"serde::de"],[81,"core::marker"],[82,"std::io::error"],[83,"std::path"],[84,"core::convert"],[85,"bdk_file_store::entry_iter"],[86,"core::fmt"],[87,"std::fs"],[88,"alloc::string"],[89,"core::any"]],"i":[0,20,0,0,16,20,16,0,0,2,2,19,20,2,5,16,19,20,2,5,16,5,2,19,20,20,2,5,5,16,16,19,20,20,2,5,16,16,19,20,2,5,16,19,2,5,19,19,2,2,20,5,16,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,19,20,2,5,16,28,28],"f":"`````````{{{f{b{d{c}}}}}{{l{{h{c}}{j{c}}}}}{nA`AbAdAf}}{{{f{b{d{c}}}}{f{c}}}{{l{AhAj}}}{nA`AbAdAf}}{{{f{c}}}{{f{e}}}{}{}}0000{{{f{bc}}}{{f{be}}}{}{}}0000`{{{f{{An{Al}}}}c}{{l{{d{e}}B`}}}{{Bd{Bb}}}{nA`AbAdAf}}{{{f{b{Bf{c}}}}}Ah{}}{{{f{Bh}}{f{bBj}}}Bl}0{{{f{{d{c}}}}{f{bBj}}}Bl{AfAdBn}}{{{f{{j{c}}}}{f{bBj}}}Bl{}}{{{f{{j{c}}}}{f{bBj}}}BlBn}{{{f{B`}}{f{bBj}}}Bl}0{cc{}}{AjBh}111{AjB`}2{ce{}{}}00000{{{f{b{d{c}}}}}{{Bf{c}}}{nA`AbAdAf}}`{{C`{f{bCb}}}{{Bf{c}}}{}}{{{f{b{Bf{c}}}}}{{h{e}}}Ab{}}=={{{f{c}}}Cd{}}00{c{{l{e}}}{}{}}000000000{{{f{c}}}Cf{}}000066666``","D":"Ch","p":[[0,"mut"],[5,"Store",0,75],[1,"reference"],[6,"Option",76],[5,"AggregateChangesetsError",0,75],[6,"Result",77],[10,"Merge",78],[10,"Serialize",79],[10,"DeserializeOwned",80],[10,"Send",81],[10,"Sync",81],[1,"unit"],[5,"Error",82],[1,"u8"],[1,"slice"],[6,"FileError",0],[5,"Path",83],[10,"AsRef",84],[5,"EntryIter",0,85],[6,"IterError",0,85],[5,"Formatter",86],[8,"Result",86],[10,"Debug",86],[1,"u64"],[5,"File",87],[5,"String",88],[5,"TypeId",89],[15,"InvalidMagicBytes",73]],"r":[[0,75],[2,85],[7,85],[8,75]],"b":[[24,"impl-Debug-for-IterError"],[25,"impl-Display-for-IterError"],[27,"impl-Display-for-AggregateChangesetsError%3CC%3E"],[28,"impl-Debug-for-AggregateChangesetsError%3CC%3E"],[29,"impl-Display-for-FileError"],[30,"impl-Debug-for-FileError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAC8ABwAMAAkAGAAHACEAAAAlAAAALAAAAC8AAQAzABgA"}],\ +["bdk_testenv",{"t":"FFEEEOOQNNNNQQNEOOENNNNNQNNNQNNNNNNNNNNNNNNNNCNNNNSH","n":["Config","TestEnv","anyhow","bitcoincore_rpc","bitcoind","bitcoind","bitcoind","block_id","borrow","borrow","borrow_mut","borrow_mut","chain_update","changeset","default","electrsd","electrsd","electrsd","electrum_client","electrum_client","fmt","from","from","genesis_hash","hash","into","into","invalidate_blocks","local_chain","make_checkpoint_tip","mine_blocks","mine_empty_block","new","new_with_config","reorg","reorg_empty_blocks","reset_electrsd","rpc_client","send","try_from","try_from","try_into","try_into","type_id","type_id","utils","vzip","vzip","wait_until_electrum_sees_block","wait_until_electrum_sees_txid","DESCRIPTORS","new_tx"],"q":[[0,"bdk_testenv"],[50,"bdk_testenv::utils"],[52,"electrum_client::api"],[53,"core::fmt"],[54,"bitcoin::blockdata::block"],[55,"anyhow"],[56,"bdk_core::checkpoint"],[57,"bitcoin::address"],[58,"core::option"],[59,"alloc::vec"],[60,"bitcoincore_rpc::client"],[61,"bitcoin_units::amount"],[62,"bitcoin::blockdata::transaction"],[63,"core::result"],[64,"core::any"],[65,"core::time"]],"i":[0,0,0,0,0,4,3,0,4,3,4,3,0,0,3,0,4,3,0,4,3,4,3,4,0,4,3,4,0,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,0,4,3,4,4,0,0],"f":"````````{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0``{{}f}````{{{b{h}}}{{b{{`{j}}}}}}{{{b{f}}{b{dl}}}n}{cc{}}0{{{b{h}}}{{Ab{A`}}}}`{ce{}{}}0{{{b{h}}Ad}{{Ab{Af}}}}`{{{b{h}}}Ah}{{{b{h}}Ad{Al{Aj}}}{{Ab{{An{A`}}}}}}{{{b{h}}}{{Ab{{B`{AdA`}}}}}}{{}{{Ab{h}}}}{f{{Ab{h}}}}{{{b{h}}Ad}{{Ab{{An{A`}}}}}}{{{b{h}}Ad}{{Ab{{An{{B`{AdA`}}}}}}}}{h{{Ab{h}}}}{{{b{h}}}{{b{{`{Bb}}}}}}{{{b{h}}{b{{Aj{Bd}}}}Bf}{{Ab{Bh}}}}{c{{Bj{e}}}{}{}}000{{{b{c}}}Bl{}}0`=={{{b{h}}Bn}{{Ab{Af}}}}{{{b{h}}BhBn}{{Ab{Af}}}}`{C`Cb}","D":"Bn","p":[[1,"reference"],[0,"mut"],[5,"Config",0],[5,"TestEnv",0],[10,"ElectrumApi",52],[5,"Formatter",53],[8,"Result",53],[5,"BlockHash",54],[8,"Result",55],[1,"usize"],[1,"unit"],[5,"CheckPoint",56],[5,"Address",57],[6,"Option",58],[5,"Vec",59],[1,"tuple"],[10,"RpcApi",60],[6,"NetworkChecked",57],[5,"Amount",61],[5,"Txid",62],[6,"Result",63],[5,"TypeId",64],[5,"Duration",65],[1,"u32"],[5,"Transaction",62]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAB0ACwAAAAAAAwADAAgABgAQAAEAEwAAABUAAAAZAAAAHQAAACUAAAAoAAgAMwABAA=="}],\ +["bdk_wallet",{"t":"GGFGKFPPPFGFGPPPPPRRPGPPEPPPPKGPGGFGPFPPPPPPPPPFPFFGPPPFGTTFKIFPNNONOONNNNNNNNONDNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNDOOONNNNNNNNNNNNNNNNNNNNCOONNNNNNNNNNNNNNNNONCNOQNNNNNNNNNNNNNNNNNNNNNNNNNNNCCNDNNNNNNNNNNNNNNNNNNNNNNNNQNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONMMNNNNNNNNNNNNNNNNNNNNNMNNOOONNNCONNNNNNNNNNNNONNNNDNNONNNNNNONNMMNNNNCNNNECONNNDDNNNNNNNOCENNNNNNOENNNNNNNNNNNNNNNNNNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNOOONONNNNNNNNNNNNNNNNNNNNNOOHNNNNNNNNNNNNNNNNNNHOOOOOOOOOOOOOOOOFPKFIGFFPFFONNNNNNNNNNNNNNNNNNNNNNNNMNNNNHNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGPPGPPPPPPPGPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMSHPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPGPPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOO","n":["AddForeignUtxoError","AddUtxoError","AddressInfo","ApplyBlockError","AsyncWalletPersister","Balance","CannotConnect","ChangeAllowed","ChangeForbidden","ChangeSet","ChangeSpendPolicy","CreateParams","CreateWithPersistError","Custom","DataAlreadyExists","Descriptor","Descriptor","Descriptor","Error","Error","External","FileStoreError","Foreign","Genesis","HdKeyPaths","Internal","InvalidChangeSet","InvalidOutpoint","InvalidTxid","IsDust","KeychainKind","Load","LoadError","LoadMismatch","LoadParams","LoadWithPersistError","Local","LocalOutput","Mismatch","MissingDescriptor","MissingGenesis","MissingNetwork","MissingUtxo","Network","OnlyChange","Persist","Persist","PersistedWallet","Shuffle","SignOptions","TxBuilder","TxOrdering","UnexpectedConnectedToHash","UnknownUtxo","Untouched","Update","Utxo","WALLET_SCHEMA_NAME","WALLET_TABLE_NAME","Wallet","WalletPersister","WalletTx","WeightedUtxo","Write","add","add_signer","address","all_unbounded_spk_iters","allow_all_sighashes","allow_grinding","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","apply_update_at","as_byte","as_ref","as_ref","assume_height","balance","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","chain_position","change_descriptor","check_genesis_hash","check_network","checkpoints","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_selection","confirmation_time","confirmed","create","create","create_async","create_single","create_wallet","create_wallet_async","create_wallet_no_persist","create_with_params","default","default","default","default","deref","deref","deref_mut","derivation_index","derivation_index","derivation_of_spk","descriptor","descriptor","descriptor","descriptor","descriptor_checksum","deserialize","deserialize","deserialize","deserialize","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","export","extract_keys","file_store","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","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_sqlite","genesis_hash","get_psbt_input","get_signers","get_tx","get_utxo","hash","hash","immature","index","indexer","init_sqlite_tables","initialize","initialize","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_dust","is_empty","is_mine","is_spent","keychain","keychain","keychains","keymap","keymap","keys","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load","load","load_async","load_wallet","load_wallet_async","load_wallet_no_persist","load_with_params","local_chain","local_chain","lookahead","lookahead","mark_used","merge","miniscript","network","network","network","new","new","new_single","next_derivation_index","next_unused_address","outpoint","outpoint","partial_cmp","peek_address","persist","persist","persist","persist_async","persist_to_sqlite","policies","psbt","public_descriptor","reveal_addresses_to","reveal_next_address","rusqlite","rusqlite_impl","satisfaction_weight","secp_ctx","sent_and_received","sequence","serde","serde_json","serialize","serialize","serialize","serialize","set_keymap","set_keymaps","sign","sign_with_tap_internal_key","signer","signer","spk_index","staged","staged_mut","start_full_scan","start_sync_with_revealed_spks","take_staged","tap_leaves_options","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","transactions_sort_by","trust_witness_utxo","trusted_pending","trusted_spendable","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","tx_graph","tx_node","tx_update","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unbroadcast_transactions","unmark_used","untrusted_pending","utxo","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","foreign_utxo","input_txid","connected_to_hash","expected_hash","expected","expected","expected","keychain","loaded","loaded","loaded","input_sort","output_sort","outpoint","psbt_input","sequence","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Excess","InsufficientFunds","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","SingleRandomDraw","available","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_into","clone_into","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","default","eq","equivalent","equivalent","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","into","into","into","into","into","into","into","local_selected_amount","needed","new","selected","selected_amount","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","amount","change_fee","dust_threshold","fee","remaining_amount","Bare","Bare","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","FALSE","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Pkh","Pkh","Policy","ScriptContext","Segwitv0","Sh","Sh","Sh","Single","TRUE","TapKeyOrigins","Tr","Tr","Tr","Wpkh","Wpkh","Wpkh","Wsh","Wsh","Wsh","XPub","address","as_enum","as_enum","as_inner","as_node","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","build_template","build_template_mall","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_pk","check_pk","check_pk","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains_raw_pkh","derive","derived_descriptor","derived_descriptor","desc_type","descriptor_id","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","plan","plan_mall","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","substitute_raw_pkh","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","eq","fmt","fmt","from","from","from","from","from","from","from","from","into","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","BuildFeeBumpError","CoinSelection","Conversion","CreateTxError","Descriptor","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","IrreplaceableTransaction","LockTime","MiniscriptPsbt","MiniscriptPsbtError","MissingKeyOrigin","MissingNonWitnessUtxo","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","OutputUpdate","Policy","Psbt","RbfSequenceCsv","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","UnknownUtxo","UnknownUtxo","UtxoUpdate","Version0","Version1Csv","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","csv","requested","required","required","required","sequence","FullyNodedExport","WalletExport","blockheight","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","fmt","from","from_str","into","label","label","serialize","to_string","try_from","try_into","type_id","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","MultiXPrv","MultiXPub","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","Single","Single","SinglePriv","SinglePub","SinglePubKey","SortedMultiVec","Tap","ValidNetworks","XOnly","XPrv","XPub","any_network","as_enum","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_template","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","full_derivation_paths","generate","generate_default","generate_default_with_aux_rand","generate_with_aux_rand","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_assets","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_single_keys","into_single_keys","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_multipath","is_multipath","is_segwit_v0","is_segwit_v0","is_taproot","is_taproot","is_uncompressed","is_x_only_key","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","n","name_str","new","num_der_paths","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","sanity_check","satisfy","script_size","serialize","sig_type","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public","to_string","to_string","to_string","to_string","top_level_checks","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","PsbtUtils","fee_amount","fee_rate","get_utxo_for","SCHEMAS_TABLE_NAME","migrate_schema","All","Dummy","Exclude","External","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MiniscriptPsbt","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Psbt","Segwitv0","SighashTaproot","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","remove","sign_input","sign_input","sign_input","sign_input","sign_transaction","sign_transaction","sign_with_tap_internal_key","signers","tap_leaves_options","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","is_internal_key","AddForeignUtxoError","AddUtxoError","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","Custom","InvalidOutpoint","InvalidTxid","MissingUtxo","OnlyChange","Shuffle","TxBuilder","TxOrdering","UnknownUtxo","Untouched","add_data","add_foreign_utxo","add_foreign_utxo_with_sequence","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone_into","clone_into","clone_into","cmp","coin_selection","current_height","default","default","do_not_spend_change","drain_to","drain_wallet","eq","equivalent","equivalent","fee_absolute","fee_rate","finish","finish_with_aux_rand","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","policy_path","set_exact_sequence","set_recipients","sighash","sort_tx","sort_tx_with_aux_rand","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip","foreign_utxo","input_txid","input_sort","output_sort"],"q":[[0,"bdk_wallet"],[473,"bdk_wallet::AddForeignUtxoError"],[475,"bdk_wallet::ApplyBlockError"],[477,"bdk_wallet::LoadMismatch"],[484,"bdk_wallet::TxOrdering"],[486,"bdk_wallet::Utxo"],[489,"bdk_wallet::coin_selection"],[601,"bdk_wallet::coin_selection::Excess"],[606,"bdk_wallet::descriptor"],[866,"bdk_wallet::descriptor::checksum"],[867,"bdk_wallet::descriptor::error"],[900,"bdk_wallet::descriptor::policy"],[1059,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[1062,"bdk_wallet::descriptor::policy::Satisfaction"],[1073,"bdk_wallet::descriptor::policy::SatisfiableItem"],[1083,"bdk_wallet::descriptor::template"],[1267,"bdk_wallet::error"],[1337,"bdk_wallet::error::CreateTxError"],[1343,"bdk_wallet::export"],[1366,"bdk_wallet::keys"],[1682,"bdk_wallet::psbt"],[1686,"bdk_wallet::rusqlite_impl"],[1688,"bdk_wallet::signer"],[1874,"bdk_wallet::signer::SignerContext"],[1875,"bdk_wallet::tx_builder"],[1989,"bdk_wallet::tx_builder::AddForeignUtxoError"],[1991,"bdk_wallet::tx_builder::TxOrdering"],[1993,"bdk_chain::balance"],[1994,"bdk_wallet::wallet"],[1995,"bdk_wallet::types"],[1996,"bdk_wallet::wallet::signer"],[1997,"alloc::sync"],[1998,"bitcoin::blockdata::script::owned"],[1999,"bdk_core"],[2000,"core::iter::traits::iterator"],[2001,"core::clone"],[2002,"alloc::collections::btree::map"],[2003,"bitcoin::blockdata::block"],[2004,"bdk_chain::local_chain"],[2005,"core::result"],[2006,"bdk_core::block_id"],[2007,"bitcoin::blockdata::transaction"],[2008,"core::convert"],[2009,"core::iter::traits::collect"],[2010,"core::option"],[2011,"bdk_chain::tx_graph"],[2012,"bdk_wallet::wallet::coin_selection"],[2013,"bdk_wallet::wallet::tx_builder"],[2014,"bdk_wallet::wallet::error"],[2015,"bitcoin_units::amount"],[2016,"bitcoin_units::fee_rate"],[2017,"bdk_wallet::wallet::params"],[2018,"bitcoin::network"],[2019,"bdk_core::checkpoint"],[2020,"bdk_wallet::wallet::changeset"],[2021,"core::cmp"],[2022,"bdk_wallet::wallet::persisted"],[2023,"core::marker"],[2024,"alloc::string"],[2025,"serde::de"],[2026,"bitcoin::psbt"],[2027,"core::fmt"],[2028,"bdk_chain::indexer::keychain_txout"],[2029,"bdk_chain::indexed_tx_graph"],[2030,"bdk_core::spk_client"],[2031,"rusqlite::transaction"],[2032,"rusqlite"],[2033,"bitcoin::psbt::map::input"],[2034,"core::hash"],[2035,"core::future::future"],[2036,"alloc::boxed"],[2037,"core::pin"],[2038,"bdk_wallet::wallet::utils"],[2039,"bitcoin::blockdata::script::borrowed"],[2040,"miniscript::descriptor"],[2041,"core::iter::traits::double_ended"],[2042,"secp256k1::context::alloc_only"],[2043,"secp256k1"],[2044,"serde::ser"],[2045,"alloc::vec"],[2046,"core::ops::function"],[2047,"core::any"],[2048,"rand_core"],[2049,"core::default"],[2050,"bitcoin::address"],[2051,"miniscript"],[2052,"miniscript::miniscript::private"],[2053,"miniscript::miniscript::decode"],[2054,"miniscript::miniscript::context"],[2055,"miniscript::iter::tree"],[2056,"miniscript::descriptor::key"],[2057,"miniscript::miniscript::satisfy"],[2058,"miniscript::plan"],[2059,"bitcoin_hashes::sha256"],[2060,"miniscript::miniscript::hash256"],[2061,"bitcoin_hashes::ripemd160"],[2062,"bitcoin_hashes::hash160"],[2063,"bitcoin::crypto::key"],[2064,"secp256k1::context"],[2065,"bdk_chain::descriptor_ext"],[2066,"miniscript::blanket_traits"],[2067,"miniscript::miniscript::analyzable"],[2068,"core::ops::range"],[2069,"miniscript::descriptor::bare"],[2070,"miniscript::descriptor::sh"],[2071,"miniscript::descriptor::segwitv0"],[2072,"miniscript::descriptor::tr"],[2073,"miniscript::miniscript::types"],[2074,"miniscript::miniscript::types::extra_props"],[2075,"miniscript::expression"],[2076,"miniscript::miniscript::iter"],[2077,"miniscript::policy::semantic"],[2078,"miniscript::policy"],[2079,"bitcoin_units::weight"],[2080,"base58ck::error"],[2081,"bitcoin::bip32"],[2082,"hex_conservative::error"],[2083,"bitcoin::psbt::error"],[2084,"bdk_wallet::wallet::export"],[2085,"miniscript::descriptor::sortedmulti"],[2086,"core::str::traits"],[2087,"rusqlite::error"],[2088,"bitcoin::blockdata::script::push_bytes::primitive"],[2089,"bitcoin::blockdata::locktime::absolute"],[2090,"bdk_chain"],[2091,"bdk_chain::rusqlite_impl"]],"i":[0,0,0,0,0,0,74,263,263,0,0,0,0,264,52,52,63,64,53,56,5,0,46,64,0,5,61,261,261,0,0,72,0,0,0,0,46,0,63,63,63,63,261,64,263,61,52,0,264,0,0,0,74,262,264,0,0,47,47,0,0,0,0,72,1,3,48,3,66,66,3,3,3,3,3,5,5,3,66,3,0,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,3,3,3,3,3,0,27,87,47,40,40,3,1,5,44,45,46,47,27,48,1,5,44,45,46,47,27,48,5,0,44,1,51,3,51,3,50,50,50,3,1,40,47,27,51,48,51,3,44,3,0,40,47,0,3,1,5,44,47,1,5,44,45,46,47,61,48,63,64,1,1,5,5,44,44,45,45,46,46,48,48,0,0,40,0,3,1,1,5,44,45,46,47,51,72,72,61,61,52,52,3,27,48,48,63,63,64,74,74,0,1,50,40,5,44,45,46,47,47,47,47,47,51,72,61,61,52,3,27,27,27,48,63,63,64,74,47,50,3,3,3,3,5,44,1,48,47,47,53,56,3,3,3,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,96,47,3,44,44,48,3,50,40,0,27,3,3,3,3,51,3,51,40,40,40,3,3,47,50,40,3,47,0,50,3,47,50,40,50,3,3,46,44,5,3,53,56,51,51,47,3,0,3,3,3,0,0,45,3,3,46,0,0,1,5,44,47,3,3,3,66,0,0,3,3,3,3,3,3,66,0,1,5,44,45,46,47,27,48,1,72,61,52,48,63,74,1,3,3,66,1,1,66,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,0,3,47,87,27,46,44,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,3,3,3,1,45,0,1,50,40,5,44,45,46,47,51,72,61,52,3,27,48,63,64,74,0,267,267,268,268,269,270,271,271,269,270,271,272,272,273,273,273,0,125,0,0,0,0,0,0,125,0,0,117,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,118,119,120,121,117,118,119,120,121,122,118,119,120,121,0,118,119,120,121,117,117,117,123,123,117,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,125,123,118,119,120,121,123,117,120,123,123,117,118,119,120,121,117,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,125,123,118,119,120,121,117,125,123,118,119,120,121,274,275,275,274,275,98,276,127,0,0,0,0,0,0,133,0,0,135,0,0,137,98,276,127,0,0,0,98,276,127,137,133,0,98,276,127,98,276,127,98,276,127,137,127,154,155,133,133,127,127,154,155,133,127,154,155,133,133,133,133,0,135,154,155,135,155,135,135,154,155,135,154,155,135,135,154,155,135,154,155,135,154,155,0,127,154,155,133,127,154,155,133,127,154,155,133,133,127,127,127,127,127,127,133,127,133,127,154,155,133,127,127,154,154,155,155,133,133,0,127,133,133,164,127,133,127,127,127,154,155,133,133,127,133,127,127,127,127,127,127,127,154,155,133,133,133,127,133,133,133,127,133,133,133,127,127,133,133,127,127,154,155,133,127,154,155,133,133,127,54,98,127,127,133,133,133,127,133,133,135,154,155,133,127,133,127,135,154,155,127,127,127,127,127,127,127,127,127,127,127,127,127,127,133,135,133,127,133,133,127,154,155,133,135,154,155,127,127,0,133,127,133,127,133,133,127,127,133,127,133,135,154,155,133,0,127,154,155,133,127,133,127,135,135,127,133,127,154,155,133,127,154,155,133,133,127,154,155,133,127,127,154,155,133,133,0,57,57,0,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,201,196,196,0,202,0,0,201,200,0,201,201,196,196,196,201,202,165,196,202,202,0,0,0,165,165,200,201,201,0,0,201,201,201,200,200,201,202,103,203,196,165,200,201,202,103,203,196,165,200,201,202,103,203,165,200,201,202,103,203,165,103,203,203,200,201,202,103,203,196,200,200,201,201,202,202,103,103,203,203,196,196,200,201,202,103,203,196,196,165,200,201,202,202,103,103,203,196,165,103,200,203,201,103,200,201,202,103,203,196,165,201,202,203,103,203,103,103,200,201,202,103,203,203,200,201,202,103,203,165,196,200,201,202,103,203,196,165,200,201,202,103,203,196,165,200,201,202,103,203,196,165,200,201,202,103,203,196,165,277,277,277,278,279,280,279,280,279,280,279,280,279,280,281,282,283,284,285,286,286,285,287,288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,204,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,205,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,206,208,209,210,212,214,215,216,217,218,219,220,0,85,221,0,85,85,36,85,36,85,85,0,85,85,85,85,85,221,85,85,85,85,36,36,85,36,221,85,85,221,85,36,221,85,36,221,221,221,221,85,85,36,36,221,85,85,85,85,85,85,36,221,85,36,221,221,85,36,221,85,36,221,85,36,221,85,36,221,85,36,289,290,290,291,292,289,0,0,293,223,223,223,223,223,223,223,223,223,223,223,223,293,223,223,223,223,223,223,223,197,0,0,0,0,239,239,0,0,230,0,0,0,0,197,197,197,135,0,0,132,197,197,186,137,239,233,0,233,0,0,132,137,186,0,0,0,0,132,0,230,186,137,0,294,137,233,226,231,132,227,197,225,137,186,228,229,230,233,226,231,132,227,197,225,137,186,228,229,230,225,135,135,135,135,135,135,135,135,135,226,132,227,225,137,186,228,229,230,226,132,227,225,137,186,228,229,230,225,137,228,230,227,227,226,137,137,225,132,197,225,137,186,228,229,230,132,132,225,225,137,137,186,186,228,228,229,229,230,230,231,132,227,197,197,225,225,137,137,186,186,228,229,230,225,233,233,233,226,231,132,227,197,197,197,225,137,137,186,228,229,230,231,231,137,186,225,137,137,239,241,241,239,239,241,233,137,225,137,228,230,233,226,231,132,227,197,225,137,186,228,229,230,137,207,213,226,226,231,137,186,213,233,226,226,137,186,233,233,137,294,132,137,186,294,132,294,132,137,137,225,228,229,225,0,137,135,225,225,0,225,135,225,137,228,229,135,231,225,137,228,230,135,225,225,225,225,137,135,225,0,226,132,227,225,137,186,228,229,230,186,197,225,137,186,135,135,225,233,226,231,132,227,197,225,137,186,228,229,230,233,226,231,132,227,197,225,137,186,228,229,230,233,226,231,132,227,197,225,137,186,228,229,230,233,226,231,132,227,197,225,137,186,228,229,230,0,247,247,247,0,0,253,249,253,67,249,253,67,0,67,67,67,250,67,67,67,67,67,67,67,253,249,67,250,67,0,0,0,0,0,0,0,0,250,0,0,67,86,66,66,86,66,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,86,249,250,251,6,86,66,253,249,250,251,6,86,66,253,249,6,6,86,66,253,251,254,254,251,251,251,249,250,6,253,249,249,250,250,6,6,253,253,86,249,67,67,250,251,6,86,66,253,249,249,249,67,250,251,6,86,66,253,249,254,251,251,251,86,249,67,250,251,6,86,66,253,251,86,249,6,86,258,251,251,251,7,251,66,86,66,249,250,251,6,86,66,253,67,66,66,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,249,67,250,251,6,86,66,253,295,0,0,263,263,0,264,261,261,261,263,264,0,0,262,264,35,35,35,35,35,35,35,35,35,35,262,261,264,263,35,262,261,264,263,35,35,264,263,35,264,263,263,35,35,264,263,35,35,35,263,263,263,35,35,35,35,35,262,262,261,261,264,263,35,262,261,264,263,263,35,35,262,261,264,263,35,35,35,35,35,263,35,35,35,35,264,264,35,264,263,262,261,35,262,261,264,263,35,262,261,264,263,35,262,261,264,263,35,35,35,262,261,264,263,267,267,272,272],"f":"````````````````````````````````````````````````````````````````{{bb}b}{{{h{df}}jl{A`{n}}}Ab}`{{{h{f}}}{{An{j{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}}}``{{{h{df}}{h{B`}}Bb}{{Bf{AbBd}}}}{{{h{df}}{h{B`}}BbBh}{{Bf{AbBj}}}}{{{h{df}}e}Ab{{Bn{{A`{Bl}}}}}{{Cd{}{{Ad{{Cb{cC`}}}}}}}}{{{h{df}}c}{{Bf{AbBd}}}{{Bn{Cf}}}}{{{h{df}}c{Ch{C`}}}{{Bf{AbBd}}}{{Bn{Cf}}}}{{{h{j}}}Cj}{{{h{j}}}{{h{{Cl{Cj}}}}}}{{{h{f}}}{{h{{D`{Cn}}}}}}`{{{h{f}}}b}`{{{h{c}}}{{h{e}}}{}{}}00000000000000000{{{h{dc}}}{{h{de}}}{}{}}00000000000000000{{{h{df}}Db}{{Bf{{Df{Dd}}Dh}}}}{{{h{df}}}{{Df{Dd}}}}{{{h{f}}{h{Bl}}}{{Bf{DjDl}}}}{{{h{f}}{h{Bl}}}{{Bf{DnDl}}}}{{{h{df}}{h{Bl}}}Ab}````{{E`Eb}E`}{{E`Ed}E`}{{{h{f}}}Ef}{{{h{b}}}b}{{{h{j}}}j}{{{h{Eh}}}Eh}{{{h{Ej}}}Ej}{{{h{El}}}El}{{{h{En}}}En}{{{h{Cf}}}Cf}{{{h{F`}}}F`}{{{h{c}}{h{de}}}Ab{}{}}0000000{{{h{j}}{h{j}}}Fb}```{{{h{dc}}Fd}{{Bf{{Ff{c}}Fh}}}Fj}{{cc}Fd{FlFnAl}}{{{h{dc}}Fd}{{Bf{{Ff{c}}Fh}}}G`}{cFd{FlFnAl}}{{Fd{h{dc}}}{{Bf{{Ff{c}}Fh}}}Fj}{{Fd{h{dc}}}{{Bf{{Ff{c}}Fh}}}G`}{Fd{{Bf{fGb}}}}0{{}b}{{}E`}{{}En}{{}Cf}{{{h{{Ff{c}}}}}{{h{e}}}{}{}}{{{h{F`}}}{{h{c}}}{}}{{{h{d{Ff{c}}}}}{{h{de}}}{}{}}{{{h{f}}j}{{Ch{Bb}}}}`{{{h{f}}Af}{{Ch{{Cb{jBb}}}}}}`{{E`j{Ch{c}}}E`{FlFn}}``{{{h{f}}j}Gd}{c{{Bf{b}}}Gf}{c{{Bf{j}}}Gf}{c{{Bf{Eh}}}Gf}{c{{Bf{En}}}Gf}{{{h{b}}{h{b}}}Gh}{{{h{j}}{h{j}}}Gh}{{{h{Eh}}{h{Eh}}}Gh}{{{h{Ej}}{h{Ej}}}Gh}{{{h{El}}{h{El}}}Gh}{{{h{En}}{h{En}}}Gh}{{{h{{Gj{c}}}}{h{{Gj{c}}}}}GhGl}{{{h{F`}}{h{F`}}}Gh}{{{h{Gn}}{h{Gn}}}Gh}{{{h{H`}}{h{H`}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}00000000000``{E`E`}`{{{h{f}}{h{dHb}}Hd}{{Bf{GhHf}}}}{{{h{b}}{h{dHh}}}{{Bf{AbHj}}}}0{{{h{j}}{h{dHh}}}Hl}{{{h{Eh}}{h{dHh}}}Hl}{{{h{Ej}}{h{dHh}}}Hl}{{{h{El}}{h{dHh}}}Hl}{{{h{En}}{h{dHh}}}Hl}{{{h{{Ff{c}}}}{h{dHh}}}HlHn}{{{h{I`}}{h{dHh}}}Hl}0{{{h{{Gj{c}}}}{h{dHh}}}HlHn}{{{h{{Gj{c}}}}{h{dHh}}}HlIb}{{{h{{Fh{c}}}}{h{dHh}}}HlIb}{{{h{{Fh{c}}}}{h{dHh}}}HlHn}{{{h{f}}{h{dHh}}}Hl}{{{h{Cf}}{h{dHh}}}Hl}{{{h{F`}}{h{dHh}}}Hl}0{{{h{Gn}}{h{dHh}}}Hl}0{{{h{H`}}{h{dHh}}}Hl}{{{h{Id}}{h{dHh}}}Hl}0`{cc{}}000000{IfEn}1{{{Ih{Cn}}}En}{{{Ij{CnIf}}}En}{IlEn}444{H`{{Gj{c}}}{}}55{{{In{j}}}Cf}6{J`Cf}77{H`Gn}88{{{h{Jb}}}{{Jd{En}}}}{{FdEb}Fd}{{{h{f}}Eh{Ch{Jf}}Gh}{{Bf{JhJj}}}}{{{h{f}}j}{{A`{Jl}}}}{{{h{f}}Db}{{Ch{Jn}}}}{{{h{f}}K`}{{Ch{Eh}}}}{{{h{j}}{h{dc}}}AbKb}{{{h{Eh}}{h{dc}}}AbKb}```{{{h{Jb}}}{{Jd{Ab}}}}{{{h{d{Fj{}{{Kd{c}}}}}}}{{Bf{Enc}}}{}}{{{h{d{G`{}{{Kd{c}}}}}}}{{Kj{{Kh{Kf}}}}}{}}{{{h{df}}Bh}{{Bf{GhKl}}}}{{{h{df}}c}Gh{{Bn{{A`{Bl}}}}}}{{{h{df}}K`Kn}Ab}{ce{}{}}00000000000000000{{{h{L`}}{h{Lb}}}Gh}{{{h{En}}}Gh}{{{h{f}}Af}Gh}```{{{h{f}}}{{`{{Aj{}{{Ad{{Cb{j{h{Ld}}}}}}}}}}}}{{FdjLf}Fd}{{E`jLf}E`}``{{{h{f}}}Lh}{{{h{f}}}{{`{{Aj{}{{Ad{Eh}}}}}}}}0{{{h{f}}j}{{`{{Lj{}{{Ad{F`}}}}}}}}{{{h{dc}}E`}{{Bf{{Ch{{Ff{c}}}}Gj}}}Fj}{{}E`}{{{h{dc}}E`}{{Bf{{Ch{{Ff{c}}}}Gj}}}G`}{{E`{h{dc}}}{{Bf{{Ch{{Ff{c}}}}Gj}}}Fj}{{E`{h{dc}}}{{Bf{{Ch{{Ff{c}}}}Gj}}}G`}{{E`En}{{Bf{{Ch{f}}Gn}}}}{{EnE`}{{Bf{{Ch{f}}Gn}}}}{{{h{f}}}{{h{Ll}}}}`{{FdBb}Fd}{{E`Bb}E`}{{{h{df}}jBb}Gh}{{{h{dEn}}En}Ab}`{{FdEd}Fd}{{{h{f}}}Ed}`{{cc}Fd{FlFn}}={cFd{FlFn}}{{{h{f}}j}Bb}{{{h{df}}j}F`}{{{h{El}}}K`}`{{{h{j}}{h{j}}}{{Ch{Fb}}}}{{{h{f}}jBb}F`}{{{h{d{Fj{}{{Kd{c}}}}}}{h{En}}}{{Bf{Abc}}}{}}{{{h{d{G`{}{{Kd{c}}}}}}{h{En}}}{{Kj{{Kh{Kf}}}}}{}}{{{h{d{Ff{c}}}}{h{dc}}}{{Bf{Gh}}}Fj}{{{h{d{Ff{c}}}}{h{dc}}}{{Bf{Gh}}}G`}{{{h{En}}{h{Jb}}}{{Jd{Ab}}}}{{{h{f}}j}{{Bf{{Ch{Ln}}Gb}}}}`{{{h{f}}j}{{h{Ld}}}}{{{h{df}}jBb}{{`{{Aj{}{{Ad{F`}}}}}}}};```{{{h{f}}}{{h{{Mb{M`}}}}}}{{{h{f}}{h{Bl}}}{{Cb{DjDj}}}}{{{h{El}}}{{Ch{Md}}}}``{{{h{b}}c}BfMf}{{{h{j}}c}BfMf}{{{h{Eh}}c}BfMf}{{{h{En}}c}BfMf}{{{h{df}}jLf}Ab}{{{h{df}}c}Ab{{Cd{}{{Ad{{Cb{jLf}}}}}}}}{{{h{f}}{h{dHb}}Hd}{{Bf{GhHf}}}}```{{{h{f}}}{{h{{Mh{j}}}}}}{{{h{f}}}{{Ch{{h{En}}}}}}{{{h{df}}}{{Ch{{h{dEn}}}}}}{{{h{f}}}{{Mj{j}}}}{{{h{f}}}{{Ml{{Cb{jBb}}}}}}{{{h{df}}}{{Ch{En}}}}``{{{h{c}}}e{}{}}0000000{{{h{c}}}Gd{}}000000{{{h{b}}}Dj}{{{h{f}}}{{`{{Aj{}{{Ad{Jn}}}}}}}}{{{h{f}}c}{{Mn{Jn}}}{{Nb{{h{Jn}}{h{Jn}}}{{N`{Fb}}}}}}``2`{c{{Bf{e}}}{}{}}00000000000000000000000000000000000`{{{h{f}}}{{h{{D`{Cn}}}}}}```{{{h{El}}}{{h{Kn}}}}`{{{h{c}}}Nd{}}00000000000000000{{{h{f}}j}{{`{{Aj{}{{Ad{{Ah{Af}}}}}}Al}}}}{{{h{f}}}{{`{{Aj{}{{Ad{{Nf{{A`{Bl}}Cn}}}}}}}}}}{{{h{df}}jBb}Gh}``{{}{{h{Nh}}}}{ce{}{}}00000000000000000{{c{Ch{c}}Ed{h{{Mb{M`}}}}}{{Bf{GdGb}}}Fl}````````````````````````````{{{h{c}}}{{h{e}}}{}{}}000000{{{h{dc}}}{{h{de}}}{}{}}000000{{{h{Nj}}}Nj}{{{h{Nl}}}Nl}{{{h{Nn}}}Nn}{{{h{{O`{c}}}}}{{O`{c}}}Al}{{{h{Ob}}}Ob}{{{h{c}}{h{de}}}Ab{}{}}0000{{{h{Od}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{{h{Nl}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{{h{Nn}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{{h{{O`{c}}}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{de}}}{{Bf{OfNj}}}OdOh}{{{h{Ob}}{Mn{Ej}}{Mn{Ej}}DnC`{h{Lb}}{h{dc}}}{{Bf{OfNj}}}Oh}{{C`Dn{h{Lb}}}Oj}{{}Nl}{{}Nn}{{}{{O`{c}}}Ol}{{}Ob}{{{h{Nj}}{h{Nj}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0``{{{h{Nj}}{h{dHh}}}Hl}0{{{h{Oj}}{h{dHh}}}Hl}{{{h{Of}}{h{dHh}}}Hl}{{{h{Nl}}{h{dHh}}}Hl}{{{h{Nn}}{h{dHh}}}Hl}{{{h{{O`{c}}}}{h{dHh}}}HlHn}{{{h{Ob}}{h{dHh}}}Hl}{cc{}}000000{ce{}{}}000000{{{h{Of}}}C`}`{{C`c}{{O`{c}}}{}}`1{{{h{c}}}e{}{}}0000{{{h{c}}}Gd{}}{c{{Bf{e}}}{}{}}0000000000000{{{h{c}}}Nd{}}0000006666666```````````````````````````````````````````{{{h{{On{c}}}}Ed}{{Bf{A@`A@b}}}{A@dA@f}}{{}A@h}0{{{h{{A@j{ce}}}}}{{h{{A@l{ce}}}}}A@dA@n}{{{h{{h{{A@j{ce}}}}}}}{{AA`{{h{{A@j{ce}}}}}}}A@dA@n}{{{h{{On{AAb}}}}Bb}{{Bf{{On{AAd}}AAf}}}}{{{h{c}}}{{h{e}}}{}{}}000{{{h{dc}}}{{h{de}}}{}{}}000{{{h{{A@j{ce}}}}}{{Mn{{h{{A@j{ce}}}}}}}A@dA@n}{{{h{{A@j{ce}}}}{h{g}}}{{AAj{{AAh{c}}}}}{A@fA@d}A@n{{AAl{c}}}}0`{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{A@j{cACd}}}}}{{Bf{AbAB`}}}A@d}{{{h{{A@j{cACf}}}}}{{Bf{AbAB`}}}A@d}2022102102{{{h{c}}}{{Bf{AbAB`}}}A@d}00{{{h{{A@l{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{A@l{cACd}}}}}{{Bf{AbAB`}}}A@d}{{{h{{A@l{cACf}}}}}{{Bf{AbAB`}}}A@d}{{{h{{Cl{{Mn{Cj}}}}}}}{{Bf{AbAB`}}}}00`{{{h{{On{c}}}}}{{On{c}}}{AlA@d}}{{{h{ACd}}}ACd}{{{h{ACf}}}ACf}{{{h{{A@j{ce}}}}}{{A@j{ce}}}{AlA@d}{AlA@n}}{{{h{c}}{h{de}}}Ab{}{}}000{{{h{{On{c}}}}{h{{On{c}}}}}Fb{AChA@d}}{{{h{ACd}}{h{ACd}}}Fb}{{{h{ACf}}{h{ACf}}}Fb}{{{h{{A@j{ce}}}}{h{{A@j{ce}}}}}FbA@dA@n}{{{h{{A@j{ce}}}}}GhA@dA@n}{{{h{{On{AAb}}}}Bb}{{Bf{{On{AAd}}AAf}}}}{{{h{{On{AAd}}}}{h{{Mb{c}}}}}{{Bf{{On{ACj}}AAf}}}ACl}{{{h{{On{AAb}}}}{h{{Mb{c}}}}Bb}{{Bf{{On{ACj}}AAf}}}ACl}{{{h{{On{c}}}}}ACnA@d}{{{h{{On{AAb}}}}}AD`}{c{{Bf{{On{e}}}}}GfADb}{c{{Bf{{A@j{eg}}}}}GfADbA@n}{{{h{{On{AAb}}}}}C`}{{{h{{A@j{ce}}}}}Af{A@fA@d}A@n}{{{h{{On{c}}}}{h{{On{c}}}}}Gh{GlA@d}}{{{h{ACd}}{h{ACd}}}Gh}{{{h{ACf}}{h{ACf}}}Gh}{{{h{{A@j{ce}}}}{h{{A@j{ce}}}}}GhA@dA@n}{{{h{c}}{h{e}}}Gh{}{}}0000000`{{{h{{On{c}}}}}{{Bf{AfA@b}}}{A@dA@f}}`{{{h{{A@j{ce}}}}{h{ADd}}}{{Bf{AbADf}}}A@dA@n}{{{h{ADh}}{h{Jl}}ADj{h{{Mb{M`}}}}}{{Bf{{Ch{Ln}}Gb}}}}{{{h{{On{AAb}}}}{h{Jl}}ADj{h{{Mb{M`}}}}}{{Bf{{Ch{Ln}}Gb}}}}{{{h{{A@j{AAbc}}}}{h{Jl}}ADj{h{{Mb{M`}}}}}{{Bf{{Ch{Ln}}Gb}}}A@n}{{{h{{On{AAb}}}}{h{{Mb{c}}}}{h{Lb}}{ADl{Bb}}}{{Bf{{Ch{{Cb{Bb{On{ACj}}}}}}AAf}}}ACl}{{{h{{On{c}}}}{h{dHh}}}{{Bf{AbHj}}}A@d}0{{{h{ACd}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{ACf}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{{A@j{ce}}}}{h{dHh}}}{{Bf{AbHj}}}A@dA@n}0{{{h{{On{c}}}}e}GhA@d{{Nb{{h{c}}}{{N`{Gh}}}}}}{{{h{{A@j{ce}}}}g}GhA@dA@n{{Nb{{h{c}}}{{N`{Gh}}}}}}{cc{}}{{{ADn{c}}}{{On{c}}}A@d}{{{AE`{c}}}{{On{c}}}A@d}{{{AEb{c}}}{{On{c}}}A@d}{{{AEd{c}}}{{On{c}}}A@d}{{{AEf{c}}}{{On{c}}}A@d}{{{AEh{c}}}{{On{c}}}A@d}666{{{A@l{ce}}}{{Bf{{A@j{ce}}A@b}}}A@dA@n}{{{A@l{ce}}AEjAEl}{{A@j{ce}}}A@dA@n}{{{h{Nh}}}{{Bf{{On{c}}A@b}}}ADb}{{{h{Nh}}}{{Bf{{A@j{ce}}A@b}}}ADbA@n}{{{h{Nh}}{h{ADd}}}{{Bf{{A@j{ce}}A@b}}}ADbA@n}1{{{h{AEn}}}{{Bf{{On{c}}A@b}}}ADb}{{{h{AEn}}}{{Bf{{A@j{ce}}A@b}}}ADbA@n}{{{h{{A@j{ce}}}}AF`}{{Ch{{h{{A@j{ce}}}}}}}A@dA@n}{{{h{{A@j{ce}}}}AF`}{{Ch{c}}}A@dA@n}{{{h{{On{c}}}}e}{{Bf{{Cb{{Mn{{Mn{Cj}}}}Af}}A@b}}}{A@dA@f}{{AFb{c}}}}0{{{h{{A@j{ce}}}}}GhA@dA@n}0{{{h{{On{AAb}}}}}Gh}{{{h{{On{c}}}}{h{de}}}Ab{AFdA@d}Kb}{{{h{ACd}}{h{dc}}}AbKb}{{{h{ACf}}{h{dc}}}AbKb}{{{h{{A@j{ce}}}}{h{dg}}}AbA@dA@nKb}{ce{}{}}000{{{A@j{ce}}}{{A@l{ce}}}A@dA@n}{{{On{AAb}}}{{Bf{{Mn{{On{AAb}}}}A@b}}}}{{Fl{h{{Mb{M`}}}}Ed}{{Bf{{Cb{LdLf}}Gb}}}}{{Ld{h{{Mb{M`}}}}Ed}{{Bf{{Cb{LdLf}}Gb}}}}99:{{{h{{A@j{ce}}}}}{{AFf{ce}}}A@dA@n}{{{h{{A@j{ce}}}}}{{AFh{ce}}}A@dA@n}{{{h{{On{c}}}}}{{Bf{{AFj{c}}A@b}}}A@d}{{{h{{A@j{ce}}}}}{{Bf{{AFj{c}}A@b}}}A@dA@n}{{{h{{A@j{ce}}}}}{{Bf{AbAFl}}}A@dA@n}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Ch{AF`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{A@j{cACd}}}}}{{Ch{AF`}}}A@d}{{{h{{A@j{cACf}}}}}{{Ch{AF`}}}A@d}{{{h{{A@j{ce}}}}}{{Bf{AF`A@b}}}A@dA@n}{{{h{{On{c}}}}}{{Bf{AF`A@b}}}A@d}1{{{h{{On{c}}}}}{{Bf{AFnA@b}}}A@d}{{}{{h{Nh}}}}00{{{A@j{cAG`}}}{{Bf{{On{c}}A@b}}}A@d}{c{{On{c}}}A@d}{c{{Bf{{On{c}}A@b}}}A@d}{{{A@j{cACd}}}{{Bf{{On{c}}A@b}}}A@d}{{AF`{Mn{c}}}{{Bf{{On{c}}A@b}}}A@d}{{{AEb{c}}}{{On{c}}}A@d}{{{AEf{c}}}{{On{c}}}A@d}4{{{A@j{cACf}}}{{Bf{{On{c}}A@b}}}A@d}3{{c{Ch{{AGb{c}}}}}{{Bf{{On{c}}A@b}}}A@d}614`{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{Lb}}}{{Bf{{A@j{c}}A@b}}}A@n}{{{h{{Mb{c}}}}{h{Nh}}}{{Bf{{Cb{{On{AAb}}{An{AAbAGd}}}}A@b}}}AGf}1{{{h{Lb}}{h{ADd}}}{{Bf{{A@j{c}}A@b}}}A@n}{{{h{{On{c}}}}{h{{On{c}}}}}{{Ch{Fb}}}{AGhA@d}}{{{h{ACd}}{h{ACd}}}{{Ch{Fb}}}}{{{h{ACf}}{h{ACf}}}{{Ch{Fb}}}}{{{h{{A@j{ce}}}}{h{{A@j{ce}}}}}{{Ch{Fb}}}A@dA@n}{{{h{c}}}AF`A@d}00{{{On{AAd}}{h{c}}}{{Bf{AGj{On{AAd}}}}}{{AAl{AAd}}}}0`{{{h{{A@j{ce}}}}}GhA@dA@n}{{{h{{On{c}}}}}{{Bf{AbA@b}}}A@d}{{{h{{A@j{ce}}}}}{{Bf{AbADf}}}A@dA@n}{{{h{{On{c}}}}{h{dAGl}}e}{{Bf{AbA@b}}}{A@dA@f}{{AFb{c}}}}{{{h{{A@j{ce}}}}g}{{Bf{{Mn{{Mn{Cj}}}}A@b}}}{A@fA@d}A@n{{AFb{c}}}}0{{{h{{On{c}}}}}{{Bf{AfA@b}}}{A@dA@f}}{{{h{{On{c}}}}}Af{A@dA@f}}{{{h{{A@j{ce}}}}}AF`A@dA@n}{{{h{{On{c}}}}e}BfA@dMf}{{{h{{A@j{ce}}}}g}BfA@dA@nMf}{{}AGn}00{{{h{{A@j{ce}}}}{h{{An{AC`c}}}}}{{A@j{ce}}}A@dA@n}`{{{h{c}}}e{}{}}000{{{h{c}}}Gd{}}0{{{h{{On{AAb}}}}{h{{An{AAbAGd}}}}}Gd}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}0{{{h{{On{c}}}}{h{di}}}{{Bf{{AH`{g}}}}}A@dA@d{}{{AHb{ceg}}}}{{{h{{A@j{ce}}}}{h{dk}}}{{Bf{{AH`{i}}}}}A@dA@nA@d{}{{AHb{cgi}}}}{c{{Bf{e}}}{}{}}0000000`{{{h{c}}}Nd{}}000={ce{}{}}000{{{h{{A@j{ce}}}}}GhA@dA@n}{{{h{Nh}}}{{Bf{GdGb}}}}``````````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{Gb}}{h{Gb}}}Gh}{{{h{Gb}}{h{dHh}}}Hl}0{AHdGb}{AHfGb}{cc{}}{AHhGb}{AHjGb}{AHlGb}{A@bGb}{AHnGb}>{{{h{c}}}Gd{}}{c{{Bf{e}}}{}{}}0{{{h{c}}}Nd{}}{ce{}{}}```````````````````````````````````???????>>>>>>>{{{h{AI`}}}AI`}{{{h{AIb}}}AIb}{{{h{AId}}}AId}{{{h{Ln}}}Ln}{{{h{AIf}}}AIf}{{{h{ADj}}}ADj}{{{h{c}}{h{de}}}Ab{}{}}00000``{{}AIf}{{{h{AI`}}{h{AI`}}}Gh}{{{h{AIb}}{h{AIb}}}Gh}{{{h{AId}}{h{AId}}}Gh}{{{h{Ln}}{h{Ln}}}Gh}{{{h{AIf}}{h{AIf}}}Gh}{{{h{AHh}}{h{AHh}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}00000000000{{{h{AI`}}{h{dHh}}}Hl}{{{h{AIb}}{h{dHh}}}Hl}{{{h{AId}}{h{dHh}}}Hl}{{{h{Ln}}{h{dHh}}}Hl}{{{h{AIf}}{h{dHh}}}Hl}{{{h{AHh}}{h{dHh}}}Hl}0{{{h{ADj}}{h{dHh}}}Hl}{cc{}}00{GhAId}{AIbLn}2222{{{h{Ln}}{h{{An{Gd{Mn{AF`}}}}}}}{{Bf{AIfAHh}}}}{{{h{AI`}}{h{dc}}}AbKb}{{{h{AIf}}{h{dc}}}AbKb}{{{h{AIb}}}Gd}`{ce{}{}}000000{{{h{AIb}}}Gh}{{{h{AId}}}Gh}{{{h{AIf}}}Gh}`{{{h{AIf}}{h{AIf}}}{{Ch{Fb}}}}{{{h{Ln}}}Gh}`{{{h{AI`}}c}BfMf}{{{h{AIb}}c}BfMf}{{{h{AId}}c}BfMf}{{{h{Ln}}c}BfMf}{{{h{AIf}}c}BfMf}`{{{h{c}}}e{}{}}00000{{{h{c}}}Gd{}}{c{{Bf{e}}}{}{}}0000000000000{{{h{c}}}Nd{}}000000>>>>>>>``````````````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00000000000{{{h{dc}}}{{h{de}}}{}{}}00000000000{{AIhEd}{{Bf{AIjGb}}}}{{{AIl{c}}Ed}{{Bf{AIjGb}}}{{AIn{ACd}}}}{{{AJ`{c}}Ed}{{Bf{AIjGb}}}{{AIn{ACf}}}}{{{AJb{c}}Ed}{{Bf{AIjGb}}}{{AIn{ACf}}}}{{{AJd{c}}Ed}{{Bf{AIjGb}}}{{AIn{AJf}}}}{{{AJh{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACd}}}}{{{AJl{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACd}}}}{{{AJn{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AK`{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AKb{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AKd{c}}Ed}{{Bf{AIjGb}}}{{AJj{ACf}}}}{{{AKf{c}}Ed}{{Bf{AIjGb}}}{{AJj{AJf}}}}{{{AKh{c}}Ed}{{Bf{AIjGb}}}{{AJj{AJf}}}}{{{h{{AIl{c}}}}}{{AIl{c}}}{Al{AIn{ACd}}}}{{{h{{AJ`{c}}}}}{{AJ`{c}}}{Al{AIn{ACf}}}}{{{h{{AJb{c}}}}}{{AJb{c}}}{Al{AIn{ACf}}}}{{{h{{AJd{c}}}}}{{AJd{c}}}{Al{AIn{AJf}}}}{{{h{{AJh{c}}}}}{{AJh{c}}}{Al{AJj{ACd}}}}{{{h{{AJl{c}}}}}{{AJl{c}}}{Al{AJj{ACd}}}}{{{h{{AJn{c}}}}}{{AJn{c}}}{Al{AJj{ACf}}}}{{{h{{AK`{c}}}}}{{AK`{c}}}{Al{AJj{ACf}}}}{{{h{{AKb{c}}}}}{{AKb{c}}}{Al{AJj{ACf}}}}{{{h{{AKd{c}}}}}{{AKd{c}}}{Al{AJj{ACf}}}}{{{h{{AKf{c}}}}}{{AKf{c}}}{Al{AJj{AJf}}}}{{{h{{AKh{c}}}}}{{AKh{c}}}{Al{AJj{AJf}}}}{{{h{c}}{h{de}}}Ab{}{}}00000000000{{{h{{AIl{c}}}}{h{dHh}}}Hl{Hn{AIn{ACd}}}}{{{h{{AJ`{c}}}}{h{dHh}}}Hl{Hn{AIn{ACf}}}}{{{h{{AJb{c}}}}{h{dHh}}}Hl{Hn{AIn{ACf}}}}{{{h{{AJd{c}}}}{h{dHh}}}Hl{Hn{AIn{AJf}}}}{{{h{{AJh{c}}}}{h{dHh}}}Hl{Hn{AJj{ACd}}}}{{{h{{AJl{c}}}}{h{dHh}}}Hl{Hn{AJj{ACd}}}}{{{h{{AJn{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AK`{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AKb{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AKd{c}}}}{h{dHh}}}Hl{Hn{AJj{ACf}}}}{{{h{{AKf{c}}}}{h{dHh}}}Hl{Hn{AJj{AJf}}}}{{{h{{AKh{c}}}}{h{dHh}}}Hl{Hn{AJj{AJf}}}}{cc{}}00000000000{ce{}{}}00000000000{{AIj{h{{Mb{M`}}}}Ed}{{Bf{{Cb{LdLf}}Gb}}}}{{c{h{{Mb{M`}}}}Ed}{{Bf{{Cb{{On{AAb}}{An{AAbAGd}}}}Gb}}}{}}00000000000{{{h{c}}}e{}{}}00000000000{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Nd{}}00000000000555555555555`````````````````````````````{{{h{c}}}{{h{e}}}{}{}}00{{{h{dc}}}{{h{de}}}{}{}}00{{{h{AKj}}}AKj}{{{h{c}}{h{de}}}Ab{}{}}{{{h{AKj}}{h{dHh}}}Hl}0{{{h{Jj}}{h{dHh}}}Hl}0{{{h{Dh}}{h{dHh}}}Hl}0={AKjJj}{GbJj}{NjJj}{AHhJj}{AKlJj}{cc{}}0{ce{}{}}00{{{h{c}}}e{}{}}{{{h{c}}}Gd{}}00{c{{Bf{e}}}{}{}}00000{{{h{c}}}Nd{}}00444``````````{{{h{c}}}{{h{e}}}{}{}}{{{h{dc}}}{{h{de}}}{}{}}{{{h{AKn}}}{{Ch{Gd}}}}{{{h{AKn}}}Gd}{c{{Bf{AKn}}}Gf}{{{h{f}}{h{Nh}}Gh}{{Bf{AKn{h{Nh}}}}}}{{{h{AKn}}{h{dHh}}}Hl}0<{{{h{Nh}}}{{Bf{AKnc}}}{}}<``{{{h{AKn}}c}BfMf};::9=```````````````````````````````````````````{{}AL`}{{}A@h}{{AAbBb}{{Bf{AAdAAf}}}};;;;;;;;;;;;::::::::::::{{{h{{ALb{ce}}}}{h{g}}}{{AAj{{AAh{c}}}}}{A@fA@d}A@n{{AAl{c}}}}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}00000{{{h{c}}}{{Bf{AbAB`}}}A@d}{{{h{{A@l{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbAB`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{h{{Cl{{Mn{Cj}}}}}}}{{Bf{AbAB`}}}}{{{h{{ALd{ce}}}}}{{ALd{ce}}}AlA@n}{{{h{A@h}}}A@h}{{{h{ALf}}}ALf}{{{h{{ALb{ce}}}}}{{ALb{ce}}}{AlA@d}{AlA@n}}{{{h{AAb}}}AAb}{{{h{AGd}}}AGd}{{{h{ALh}}}ALh}{{{h{ALj}}}ALj}{{{h{ALl}}}ALl}{{{h{c}}{h{de}}}Ab{}{}}00000000{{{h{{ALb{ce}}}}{h{{ALb{ce}}}}}Fb{AChA@d}{AChA@n}}{{{h{AAb}}{h{AAb}}}Fb}{{{h{ALh}}{h{ALh}}}Fb}{{{h{ALl}}{h{ALl}}}Fb}`{{}ALf}{{{h{{ALd{ce}}}}}{{h{g}}}{}A@n{}}{{AAbBb}{{Bf{AAdAAf}}}}{c{{Bf{AAb}}}Gf}{{{h{{ALb{ce}}}}}Af{A@fA@d}A@n}{{{h{A@h}}{h{A@h}}}Gh}{{{h{AHj}}{h{AHj}}}Gh}{{{h{{ALb{ce}}}}{h{{ALb{ce}}}}}Gh{GlA@d}{GlA@n}}{{{h{AAb}}{h{AAb}}}Gh}{{{h{AGd}}{h{AGd}}}Gh}{{{h{ALh}}{h{ALh}}}Gh}{{{h{ALj}}{h{ALj}}}Gh}{{{h{ALl}}{h{ALl}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0000000000000{{{h{{ALn{c}}}}{h{dHh}}}Hl{HnA@n}}{{{h{A@h}}{h{dHh}}}Hl}{{{h{ALf}}{h{dHh}}}Hl}{{{h{AHj}}{h{dHh}}}Hl}0{{{h{{ALb{ce}}}}{h{dHh}}}{{Bf{AbHj}}}A@dA@n}0{{{h{AAb}}{h{dHh}}}{{Bf{AbHj}}}}0{{{h{AGd}}{h{dHh}}}{{Bf{AbHj}}}}0{{{h{ALh}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{ALj}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{ALl}}{h{dHh}}}{{Bf{AbHj}}}}{{{h{{ALb{ce}}}}g}GhA@dA@n{{Nb{{h{c}}}{{N`{Gh}}}}}}{AM`{{AMb{c}}}A@n}{AMd{{AMb{c}}}A@n}{cc{}}00000{AHfAHj}{A@bAHj}22{AAdAAb}3333{{AAbAL`}{{ALn{c}}}A@n}{{AGdAL`}{{ALn{c}}}A@n}{{{h{Nh}}}{{Bf{AAb}}}}{{{h{Nh}}}{{Bf{AGd}}}}{{{h{AEn}}}{{Bf{{ALb{ce}}A@b}}}{AMfA@d}A@n}{{{h{AAb}}}{{Ch{AMh}}}}{{{h{AAb}}}{{Mn{AMh}}}}{c{{Bf{{ALd{{AMn{}{{AMj{e}}{AMl{c}}{Kd{g}}}}i}}g}}}{}{{AN`{{Cl{Cj}}}}Ol}HnA@n}{{}{{Bf{{ALd{ANbc}}e}}}A@n{}}{{{h{dc}}}{{Bf{{ALd{ANbe}}g}}}{ANdOh}A@n{}}{{c{h{de}}}{{Bf{{ALd{{AMn{}{{AMj{g}}{AMl{c}}{Kd{i}}}}k}}i}}}{}{ANdOh}{{AN`{{Cl{Cj}}}}Ol}HnA@n}{{ce}{{Bf{{ALd{{AMn{}{{AMj{e}}{AMl{c}}{Kd{g}}}}i}}g}}}{}{{AN`{{Cl{Cj}}}}Ol}HnA@n}{c{{Bf{{ALd{ANbe}}g}}}{}A@n{}}{{{h{{AMb{c}}}}}GhA@n}{{{h{AAb}}}Gh}{{{h{{ALb{ce}}}}{h{dg}}}Ab{AFdA@d}{AFdA@n}Kb}{{{h{AAb}}{h{dc}}}AbKb}{{{h{ALh}}{h{dc}}}AbKb}{{{h{ALl}}{h{dc}}}AbKb}{ce{}{}}00000000000{AAbANf}{AIn{{Bf{{ALn{c}}AHj}}}A@n}{{AJj{Ch{ANh}}AMh}{{Bf{{ALn{c}}AHj}}}A@n}{{{ALd{ec}}}{{Bf{{ALn{c}}AHj}}}A@n{{AIn{c}}}}{{{ALd{ec}}{Ch{ANh}}AMh}{{Bf{{ALn{c}}AHj}}}A@n{{AJj{c}}}}{{{ALn{c}}}{{Bf{{ALn{c}}AHj}}}A@n}{AAb{{Bf{{ALn{c}}AHj}}}A@n}{AGd{{Bf{{ALn{c}}AHj}}}A@n}{AJj{{Bf{{AMb{c}}AHj}}}A@n}{{{AMb{c}}}{{Bf{{AMb{c}}AHj}}}A@n}{{{ALd{ec}}}{{Bf{{AMb{c}}AHj}}}A@n{{AJj{c}}}}{{{ALd{ce}}}c{}A@n}{AAb{{Mn{AAb}}}}{AGd{{Mn{AGd}}}}{{{AMb{c}}Ed}{{Ch{AMd}}}A@n}{{{AMb{c}}Ed{h{{Mb{e}}}}}AM`A@nAGf}{{{h{AAb}}}Gh}{{}Gh}{{{h{A@h}}}Gh}2{{{h{AGd}}}Gh}212133{{{h{{ALb{ce}}}}}AF`A@dA@n}``{{{h{{ALb{ce}}}}}{{Bf{{AFj{c}}A@b}}}A@dA@n}{{}AL`}{{{h{AAb}}}ANj}{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Ch{AF`}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}44{{{h{AL`}}{h{AL`}}}AL`}5{{}{{h{Nh}}}}{{AF`{Mn{c}}}{{Bf{{ALb{ce}}A@b}}}A@dA@n}{{{h{AAb}}}AF`}``{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}{{{ALn{c}}AL`}{{ALn{c}}}A@n}{{{h{{ALb{ce}}}}{h{{ALb{ce}}}}}{{Ch{Fb}}}{AGhA@d}{AGhA@n}}{{{h{AAb}}{h{AAb}}}{{Ch{Fb}}}}{{{h{ALh}}{h{ALh}}}{{Ch{Fb}}}}{{{h{ALl}}{h{ALl}}}{{Ch{Fb}}}}{{{h{c}}}AF`A@d}{{{h{{ALb{ce}}}}}{{h{{Cl{c}}}}}A@dA@n}{{{h{{ALb{ce}}}}}{{Bf{AbA@b}}}A@dA@n}{{{h{{ALb{ce}}}}g}{{Bf{{Mn{{Mn{Cj}}}}A@b}}}{A@fA@d}A@n{{AFb{c}}}}{{{h{{ALb{ce}}}}}AF`A@dA@n}{{{h{AAb}}c}BfMf}{{}AGn}{{{h{{ALb{ce}}}}}{{A@l{ce}}}{A@fA@d}A@n}{{}AL`}{{{h{c}}}e{}{}}00000000{{{h{AGd}}{h{{Mb{c}}}}}{{Bf{AAbANl}}}AGf}{{{h{c}}}Gd{}}000{{{h{{A@j{c{A@n{}{{AAn{e}}}}}}}}}{{Bf{AbA@b}}}A@d{{ACb{}{{ABb{ABd}}{ABf{ABh}}{ABj{ABl}}{ABn{AC`}}}}A@dA@dA@dA@d}}0{{{h{{ALb{ce}}}}{h{dk}}}{{Bf{{ALb{ge}}{AH`{i}}}}}A@dA@nA@d{}{{AHb{cgi}}}}{c{{Bf{e}}}{}{}}00000000000000000000000{{{h{c}}}Nd{}}00000000000{ce{}{}}00000000000`{{{h{ANn}}}{{Ch{Dj}}}}{{{h{ANn}}}{{Ch{Dn}}}}{{{h{ANn}}AF`}{{Ch{Kn}}}}`{{{h{Jb}}{h{Nh}}{h{{Cl{{h{{Cl{{h{Nh}}}}}}}}}}}{{Bf{AbAO`}}}}````````````````````````````````````{{{h{dJl}}AObl{A`{n}}}{{Ch{{A`{n}}}}}}``{{{h{Jl}}{h{{Mb{M`}}}}}Lf}`{{{h{c}}}{{h{e}}}{}{}}0000000{{{h{dc}}}{{h{de}}}{}{}}0000000{{Lf{h{{On{AAb}}}}{h{{Mb{M`}}}}}Jl}{{{h{AOb}}}AOb}{{{h{AOd}}}AOd}{{{h{{AOf{c}}}}}{{AOf{c}}}{AlAOhHnAl}}{{{h{l}}}l}{{{h{Jl}}}Jl}{{{h{Hd}}}Hd}{{{h{AOj}}}AOj}{{{h{c}}{h{de}}}Ab{}{}}000000{{{h{AOb}}{h{AOb}}}Fb}{{{h{l}}{h{l}}}Fb}{{}l}{{}Jl}{{}Hd}{{}AOj}{{{h{{AOf{c}}}}}{{h{e}}}{AOhHnAl}{}}{{{h{AOl}}}{{Ch{AGd}}}}0{{{h{{AOf{{AOn{AMd}}}}}}}{{Ch{AGd}}}}{{{h{{AOf{B@`}}}}}{{Ch{AGd}}}}{{{h{{AOf{{B@b{AMd}}}}}}}{{Ch{AGd}}}}{{{h{AOb}}{h{AOb}}}Gh}{{{h{AOd}}{h{AOd}}}Gh}{{{h{l}}{h{l}}}Gh}{{{h{AOj}}{h{AOj}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0000000{{{h{Jl}}AOb}{{Ch{{h{{A`{n}}}}}}}}{{{h{AOb}}{h{dHh}}}Hl}{{{h{Hf}}{h{dHh}}}Hl}0{{{h{AOd}}{h{dHh}}}Hl}{{{h{{AOf{c}}}}{h{dHh}}}Hl{HnAOhHnAl}}{{{h{l}}{h{dHh}}}Hl}{{{h{Jl}}{h{dHh}}}Hl}{{{h{Hd}}{h{dHh}}}Hl}{{{h{AOj}}{h{dHh}}}Hl}{AC`AOb}{ANjAOb}{cc{}}0000000{{{h{AOb}}{h{dc}}}AbKb}{{{h{AOl}}{h{{Mb{M`}}}}}AOb}{{{h{{AOf{{B@b{AMd}}}}}}{h{{Mb{M`}}}}}AOb}{{{h{{AOf{B@`}}}}{h{{Mb{M`}}}}}AOb}{{{h{{AOf{{AOn{AMd}}}}}}{h{{Mb{M`}}}}}AOb}{{{h{Jl}}}{{Mn{{h{AOb}}}}}}{ce{}{}}0000000{{cAOd}{{AOf{c}}}{AOhHnAl}}{{}Jl}{{{h{AOb}}{h{AOb}}}{{Ch{Fb}}}}{{{h{l}}{h{l}}}{{Ch{Fb}}}}{{{h{dJl}}AObl}{{Ch{{A`{n}}}}}}{{{h{B@d}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{{AOf{{B@b{AMd}}}}}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{{AOf{B@`}}}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{{AOf{{AOn{AMd}}}}}}{h{dHb}}AF`{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{n}}{h{dHb}}{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}}{{{h{c}}{h{dHb}}{h{Hd}}{h{{Mb{M`}}}}}{{Bf{AbHf}}}{}}`{{{h{Jl}}}{{Mn{{h{{A`{n}}}}}}}}`{{{h{c}}}e{}{}}000000{{{h{c}}}Gd{}}``{c{{Bf{e}}}{}{}}000000000000000{{{h{c}}}Nd{}}0000000{ce{}{}}0000000````````````````{{{h{d{Df{c}}}}{h{e}}}{{h{d{Df{c}}}}}{}{{B@h{B@f}}}}{{{h{d{Df{c}}}}K`JhAFn}{{Bf{{h{d{Df{c}}}}B@j}}}{}}{{{h{d{Df{c}}}}K`JhAFnMd}{{Bf{{h{d{Df{c}}}}B@j}}}{}}{{{h{d{Df{c}}}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}AfDj}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}K`}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}K`}{{Bf{{h{d{Df{c}}}}B@l}}}{}}{{{h{d{Df{c}}}}{h{{Cl{K`}}}}}{{Bf{{h{d{Df{c}}}}B@l}}}{}}{{{h{d{Df{c}}}}Gh}{{h{d{Df{c}}}}}{}}{{{h{c}}}{{h{e}}}{}{}}0000{{{h{dc}}}{{h{de}}}{}{}}0000{{{h{d{Df{c}}}}B@n}{{h{d{Df{c}}}}}{}}{{{h{{Df{c}}}}}{{Df{c}}}Al}{{{h{BA`}}}BA`}{{{h{B@n}}}B@n}{{{h{c}}{h{de}}}Ab{}{}}00{{{h{B@n}}{h{B@n}}}Fb}{{{Df{c}}e}{{Df{e}}}{}Od}{{{h{d{Df{c}}}}Bb}{{h{d{Df{c}}}}}{}}{{}BA`}{{}B@n}{{{h{d{Df{c}}}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Af}{{h{d{Df{c}}}}}{}}1{{{h{B@n}}{h{B@n}}}Gh}{{{h{c}}{h{e}}}Gh{}{}}0{{{h{d{Df{c}}}}Dj}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Dn}{{h{d{Df{c}}}}}{}}{{{Df{c}}}{{Bf{HbJj}}}Od}{{{Df{c}}{h{de}}}{{Bf{HbJj}}}OdOh}{{{h{{Df{c}}}}{h{dHh}}}HlHn}{{{h{B@l}}{h{dHh}}}Hl}0{{{h{B@j}}{h{dHh}}}Hl}0{{{h{BA`}}{h{dHh}}}Hl}{{{h{B@n}}{h{dHh}}}Hl}{cc{}}0000{{{h{B@n}}{h{dc}}}AbKb}>{ce{}{}}0000?{{{h{d{Df{c}}}}BAb}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}}{{h{d{Df{c}}}}}{}}0{{{h{d{Df{c}}}}BA`}{{h{d{Df{c}}}}}{}}{{{h{B@n}}{h{B@n}}}{{Ch{Fb}}}}{{{h{d{Df{c}}}}{An{Gd{Mn{AF`}}}}j}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Md}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}{Mn{{Cb{AfDj}}}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}Jf}{{h{d{Df{c}}}}}{}}{{{h{BA`}}{h{dBl}}}Ab}{{{h{BA`}}{h{dBl}}{h{dc}}}AbOh}{{{h{c}}}e{}{}}00{{{h{c}}}Gd{}}0{c{{Bf{e}}}{}{}}000000000{{{h{c}}}Nd{}}0000{{{h{d{Df{c}}}}{Mn{K`}}}{{h{d{Df{c}}}}}{}}{{{h{d{Df{c}}}}BAd}{{h{d{Df{c}}}}}{}}{ce{}{}}0000````","D":"GCl","p":[[5,"Balance",0,1993],[0,"mut"],[5,"Wallet",0,1994],[1,"reference"],[6,"KeychainKind",0,1995],[5,"SignerOrdering",1688,1996],[10,"TransactionSigner",1688,1996],[5,"Arc",1997],[1,"unit"],[17,"Item"],[5,"ScriptBuf",1998],[8,"Indexed",1999],[10,"Iterator",2000],[10,"Clone",2001],[5,"BTreeMap",2002],[5,"Block",2003],[1,"u32"],[5,"CannotConnectError",2004],[6,"Result",2005],[5,"BlockId",2006],[6,"ApplyHeaderError",2004],[5,"Transaction",2007],[10,"Into",2008],[1,"u64"],[1,"tuple"],[10,"IntoIterator",2009],[5,"Update",0,1994],[6,"Option",2010],[1,"u8"],[1,"slice"],[5,"ConfirmationBlockTime",2006],[5,"TxGraph",2011],[5,"Txid",2007],[8,"DefaultCoinSelectionAlgorithm",489,2012],[5,"TxBuilder",1875,2013],[6,"BuildFeeBumpError",1267,2014],[5,"Amount",2015],[6,"CalculateFeeError",2011],[5,"FeeRate",2016],[5,"LoadParams",0,2017],[5,"BlockHash",2003],[6,"Network",2018],[5,"CheckPointIter",2019],[5,"LocalOutput",0,1995],[5,"WeightedUtxo",0,1995],[6,"Utxo",0,1995],[5,"ChangeSet",0,2020],[5,"AddressInfo",0,1994],[6,"Ordering",2021],[5,"CreateParams",0,2017],[5,"PersistedWallet",0,2022],[6,"CreateWithPersistError",0,2022],[10,"WalletPersister",0,2022],[10,"IntoWalletDescriptor",606],[10,"Send",2023],[10,"AsyncWalletPersister",0,2022],[6,"Error",867],[5,"String",2024],[10,"Deserializer",2025],[1,"bool"],[6,"LoadWithPersistError",0,2022],[10,"PartialEq",2021],[6,"LoadError",0,1994],[6,"LoadMismatch",0,1994],[5,"Psbt",2026],[5,"SignOptions",1688,1996],[6,"SignerError",1688,1996],[5,"Formatter",2027],[5,"Error",2027],[8,"Result",2027],[10,"Debug",2027],[6,"FileStoreError",0,2022],[10,"Display",2027],[6,"ApplyBlockError",0,1994],[5,"ChangeSet",2028],[5,"ChangeSet",2011],[5,"ChangeSet",2029],[5,"ChangeSet",2004],[5,"FullScanResult",2030],[5,"SyncResult",2030],[5,"Transaction",2031],[8,"Result",2032],[5,"PsbtSighashType",2033],[5,"Input",2033],[6,"CreateTxError",1267,2014],[5,"SignersContainer",1688,1996],[8,"WalletTx",0,1994],[5,"OutPoint",2007],[10,"Hasher",2034],[17,"Error"],[10,"Future",2035],[5,"Box",2036],[5,"Pin",2037],[5,"AlterCheckPointError",2004],[5,"TxOut",2007],[10,"IsDust",0,2038],[5,"Script",2039],[8,"ExtendedDescriptor",606],[8,"KeyMap",1366,2040],[5,"CheckPoint",2019],[10,"DoubleEndedIterator",2041],[5,"LocalChain",2004],[5,"Policy",900],[6,"All",2042],[5,"Secp256k1",2043],[5,"Sequence",2007],[10,"Serializer",2044],[5,"KeychainTxOutIndex",2028],[5,"FullScanRequestBuilder",2030],[5,"SyncRequestBuilder",2030],[5,"Vec",2045],[17,"Output"],[10,"FnMut",2046],[5,"TypeId",2047],[5,"TxNode",2011],[1,"str"],[5,"InsufficientFunds",489,2012],[5,"LargestFirstCoinSelection",489,2012],[5,"OldestFirstCoinSelection",489,2012],[5,"BranchAndBoundCoinSelection",489,2012],[5,"SingleRandomDraw",489,2012],[10,"CoinSelectionAlgorithm",489,2012],[5,"CoinSelectionResult",489,2012],[10,"RngCore",2048],[6,"Excess",489,2012],[10,"Default",2049],[6,"Descriptor",606,2040],[5,"Address",2050],[6,"Error",2051],[10,"MiniscriptKey",2051],[10,"ToPublicKey",2051],[6,"ScriptContextEnum",1366],[5,"Miniscript",606,2052],[6,"Terminal",2053],[10,"ScriptContext",1366,2054],[6,"Tree",2055],[6,"DescriptorPublicKey",1366,2056],[5,"DefiniteDescriptorKey",2056],[6,"ConversionError",2056],[6,"Placeholder",2057],[5,"Satisfaction",2057],[10,"AssetProvider",2058],[17,"Key"],[6,"ScriptContextError",2054],[17,"Sha256"],[5,"Hash",2059],[17,"Hash256"],[5,"Hash",2060],[17,"Ripemd160"],[5,"Hash",2061],[17,"Hash160"],[5,"Hash",2062],[10,"ParseableKey",2053],[6,"Legacy",606,2054],[6,"Segwitv0",606,2054],[10,"Ord",2021],[5,"PublicKey",2063],[10,"Verification",2064],[6,"DescriptorType",2040],[5,"DescriptorId",2065],[10,"FromStrKey",2066],[5,"ExtParams",2067],[6,"AnalysisError",2067],[10,"ExtractPolicy",606],[6,"BuildSatisfaction",900],[5,"Range",2068],[5,"Bare",2069],[5,"Sh",2070],[5,"Wpkh",2071],[5,"Tr",2072],[5,"Wsh",2071],[5,"Pkh",2069],[5,"Type",2073],[5,"ExtData",2074],[5,"Tree",2075],[1,"usize"],[10,"Satisfier",2057],[10,"Hash",2034],[5,"Iter",2076],[5,"PkIter",2076],[6,"Policy",2077],[6,"LiftError",2078],[5,"Weight",2079],[6,"BareCtx",2054],[6,"TapTree",2072],[6,"DescriptorSecretKey",1366,2056],[10,"Signing",2064],[10,"PartialOrd",2021],[5,"Plan",2058],[5,"TxIn",2007],[6,"SigType",2054],[6,"TranslateErr",2051],[10,"Translator",2051],[6,"Error",2080],[6,"Error",2081],[6,"PolicyError",900],[6,"KeyError",1366],[6,"ParsePublicKeyError",2063],[6,"HexToBytesError",2082],[6,"PkOrF",900],[6,"SatisfiableItem",900],[6,"Satisfaction",900],[5,"Condition",900],[10,"DescriptorTemplate",1083],[8,"DescriptorTemplateOut",1083],[5,"P2Pkh",1083],[10,"IntoDescriptorKey",1366],[5,"P2Wpkh_P2Sh",1083],[5,"P2Wpkh",1083],[5,"P2TR",1083],[6,"Tap",2054],[5,"Bip44",1083],[10,"DerivableKey",1366],[5,"Bip44Public",1083],[5,"Bip49",1083],[5,"Bip49Public",1083],[5,"Bip84",1083],[5,"Bip84Public",1083],[5,"Bip86",1083],[5,"Bip86Public",1083],[6,"MiniscriptPsbtError",1267,2014],[6,"Error",2083],[5,"FullyNodedExport",1343,2084],[8,"ValidNetworks",1366],[5,"SortedMultiVec",1366,2085],[5,"GeneratedKey",1366],[5,"PrivateKeyGenerateOptions",1366],[5,"SinglePub",1366,2056],[5,"SinglePriv",1366,2056],[6,"SinglePubKey",1366,2056],[6,"DescriptorKey",1366],[5,"Xpub",2081],[6,"ExtendedKey",1366],[5,"Xpriv",2081],[10,"FromStr",2086],[5,"DerivationPath",2081],[17,"Entropy"],[17,"Options"],[10,"GeneratableKey",1366],[10,"AsMut",2008],[10,"GeneratableDefaultOptions",1366],[10,"CryptoRng",2048],[5,"Assets",2058],[8,"KeySource",2081],[5,"Fingerprint",2081],[5,"DescriptorKeyParseError",2056],[10,"PsbtUtils",1682],[6,"Error",2087],[6,"SignerId",1688,1996],[6,"SignerContext",1688,1996],[5,"SignerWrapper",1688,1996],[10,"Sized",2023],[6,"TapLeavesOptions",1688,1996],[10,"SignerCommon",1688,1996],[5,"DescriptorXKey",2056],[5,"PrivateKey",2063],[5,"DescriptorMultiXKey",2056],[10,"InputSigner",1688,1996],[5,"PushBytes",2088],[10,"AsRef",2008],[6,"AddForeignUtxoError",1875,2013],[6,"AddUtxoError",1875,2013],[6,"ChangeSpendPolicy",1875,2013],[6,"TxOrdering",1875,2013],[6,"LockTime",2089],[1,"i32"],[15,"InvalidTxid",1989],[15,"UnexpectedConnectedToHash",475],[15,"Network",477],[15,"Genesis",477],[15,"Descriptor",477],[15,"Custom",1991],[15,"Foreign",486],[15,"Change",601],[15,"NoChange",601],[8,"DerivedDescriptor",606],[15,"PsbtTimelocks",1059],[15,"Complete",1062],[15,"Partial",1062],[15,"PartialComplete",1062],[15,"Sha256Preimage",1073],[15,"Hash256Preimage",1073],[15,"Ripemd160Preimage",1073],[15,"Hash160Preimage",1073],[15,"Thresh",1073],[15,"Multisig",1073],[15,"AbsoluteTimelock",1073],[15,"RelativeTimelock",1073],[15,"RbfSequenceCsv",1337],[15,"LockTime",1337],[15,"FeeTooLow",1337],[15,"FeeRateTooLow",1337],[8,"WalletExport",1343],[10,"ExtScriptContext",1366],[15,"Tap",1874]],"r":[[0,2013],[1,2013],[2,1994],[3,1994],[4,2022],[5,1993],[9,2020],[10,2013],[11,2017],[12,2022],[21,2022],[24,606],[29,2038],[30,1995],[32,1994],[33,1994],[34,2017],[35,2022],[37,1995],[47,2022],[49,1996],[50,2013],[51,2013],[55,1994],[56,1995],[59,1994],[60,2022],[61,1994],[62,1995],[146,1994],[198,1994],[199,1994],[340,2090],[355,1994],[356,1994],[364,606],[423,1994],[472,1994],[489,2012],[491,2012],[492,2012],[493,2012],[494,2012],[495,2012],[496,2012],[498,2012],[499,2012],[530,2012],[610,2040],[612,2056],[619,2054],[620,2052],[625,900],[626,2054],[627,2054],[661,866],[1267,2014],[1270,2014],[1278,2014],[1343,2084],[1344,2084],[1369,2056],[1370,2056],[1385,2040],[1395,2054],[1400,2056],[1401,2056],[1402,2056],[1403,2085],[1686,2091],[1687,2091],[1695,1996],[1712,1996],[1713,1996],[1714,1996],[1715,1996],[1716,1996],[1717,1996],[1718,1996],[1719,1996],[1721,1996],[1722,1996],[1875,2013],[1876,2013],[1879,2013],[1886,2013],[1887,2013]],"b":[[203,"impl-Debug-for-Balance"],[204,"impl-Display-for-Balance"],[211,"impl-Debug-for-FileStoreError"],[212,"impl-Display-for-FileStoreError"],[213,"impl-Debug-for-LoadWithPersistError%3CE%3E"],[214,"impl-Display-for-LoadWithPersistError%3CE%3E"],[215,"impl-Display-for-CreateWithPersistError%3CE%3E"],[216,"impl-Debug-for-CreateWithPersistError%3CE%3E"],[219,"impl-Display-for-AddressInfo"],[220,"impl-Debug-for-AddressInfo"],[221,"impl-Display-for-LoadError"],[222,"impl-Debug-for-LoadError"],[224,"impl-Debug-for-ApplyBlockError"],[225,"impl-Display-for-ApplyBlockError"],[234,"impl-From%3CChangeSet%3E-for-ChangeSet"],[236,"impl-From%3CChangeSet%3CConfirmationBlockTime%3E%3E-for-ChangeSet"],[237,"impl-From%3CChangeSet%3CConfirmationBlockTime,+ChangeSet%3E%3E-for-ChangeSet"],[238,"impl-From%3CChangeSet%3E-for-ChangeSet"],[245,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[247,"impl-From%3CSyncResult%3E-for-Update"],[540,"impl-Debug-for-InsufficientFunds"],[541,"impl-Display-for-InsufficientFunds"],[699,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[700,"impl-Descriptor%3CDescriptorPublicKey%3E"],[727,"impl-Display-for-Descriptor%3CPk%3E"],[728,"impl-Debug-for-Descriptor%3CPk%3E"],[731,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[732,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[736,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[737,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[738,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[739,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[740,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[741,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[884,"impl-Display-for-Error"],[885,"impl-Debug-for-Error"],[886,"impl-From%3CError%3E-for-Error"],[887,"impl-From%3CError%3E-for-Error"],[889,"impl-From%3CPolicyError%3E-for-Error"],[890,"impl-From%3CKeyError%3E-for-Error"],[891,"impl-From%3CParsePublicKeyError%3E-for-Error"],[892,"impl-From%3CError%3E-for-Error"],[893,"impl-From%3CHexToBytesError%3E-for-Error"],[987,"impl-Display-for-PolicyError"],[988,"impl-Debug-for-PolicyError"],[1304,"impl-Display-for-MiniscriptPsbtError"],[1305,"impl-Debug-for-MiniscriptPsbtError"],[1306,"impl-Debug-for-CreateTxError"],[1307,"impl-Display-for-CreateTxError"],[1308,"impl-Display-for-BuildFeeBumpError"],[1309,"impl-Debug-for-BuildFeeBumpError"],[1311,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1312,"impl-From%3CError%3E-for-CreateTxError"],[1313,"impl-From%3CInsufficientFunds%3E-for-CreateTxError"],[1314,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1315,"impl-From%3CError%3E-for-CreateTxError"],[1353,"impl-Display-for-FullyNodedExport"],[1354,"impl-Debug-for-FullyNodedExport"],[1499,"impl-Debug-for-KeyError"],[1500,"impl-Display-for-KeyError"],[1501,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[1502,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[1503,"impl-Display-for-DescriptorPublicKey"],[1504,"impl-Debug-for-DescriptorPublicKey"],[1505,"impl-Display-for-DescriptorSecretKey"],[1506,"impl-Debug-for-DescriptorSecretKey"],[1511,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[1512,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[1519,"impl-From%3CError%3E-for-KeyError"],[1520,"impl-From%3CError%3E-for-KeyError"],[1562,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1563,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1769,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1770,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1771,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1786,"impl-Display-for-SignerError"],[1787,"impl-Debug-for-SignerError"],[1794,"impl-From%3CHash%3E-for-SignerId"],[1795,"impl-From%3CFingerprint%3E-for-SignerId"],[1806,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1807,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1808,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1824,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1825,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1826,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1932,"impl-Display-for-AddUtxoError"],[1933,"impl-Debug-for-AddUtxoError"],[1934,"impl-Display-for-AddForeignUtxoError"],[1935,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAALsCBQMRA0EFwAUoBg==","e":"OzAAAAEAACsEfgAZAAAAQQAAAE0AAQBRACQAewAAAIIAEACeAAYArQAZAMoAAADMABYA6wAAAO0AAgDzAAAA9gAAAPgAAAD7AAAABAEBACIBAAA9AQAASAEAAFQBAABaAQUAZQEAAG0BDwCEASMArwERAMcBEQD2ARcADwIDABQCBgAdAgcAOAIhAGQCAAByAgAAhgIBAIkCAACLAgcAlgIAAJgCAQCbAgAAngIBAKECAQClAgEAqAIBAKsCAQCuAgsAvwIDAMQCCwDVAgEA2AIHAOECBQDsAgAA+QIDAAQDAAAKAwEADgMBABUDAQArAwMAMAMBAD4DAQBBAwEARQMFAFADBwBZAwMAXgMDAHIDBgB6AwQAgAMEAKgDGQDEAxoA4gMBAOkDAQD4AwAA+wMEAAEEIgBKBBcAYwQvAKsESAARBQ0AIAUEACoFDwBEBQEASAUAAEoFAQBNBQAAUQUFAIUFFwCnBRUAvgUBAMEFAADDBSYA8AUBAPQFAAD7BQEACAYDABgGAAAbBgQAIQYBADEGAQA2BgAAQAYAAEUGAwBOBgAAUgYIAFwGAwBjBi8AwgYPANMGFADqBg4A+gYKAA0HAAAPBwIAHQcBACEHAgAlBwAAKQcHADMHHwBsBwkAdwcGAIAHAQCFBwIAjAcGAJgHAACkBwAAqwcTAMEHBAA="}],\ ["example_bitcoind_rpc_polling",{"t":"PSSSSGPSPFGSPPNNNNHNNNNNNNNNNONNNNNNNNNNNNNNNHNOOOHNNNNNNNNNNNNNNNONNNOO","n":["Block","CHANNEL_BOUND","DB_COMMIT_DELAY","DB_MAGIC","DB_PATH","Emission","Live","MEMPOOL_EMIT_DELAY","Mempool","RpcArgs","RpcCommands","STDOUT_PRINT_DELAY","Sync","Tip","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","await_flag","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","fallback_height","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","group_id","has_subcommand","into","into","into","main","new_client","rpc_cookie","rpc_password","rpc_user","start_ctrlc_handler","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","url","vzip","vzip","vzip","rpc_args","rpc_args"],"q":[[0,"example_bitcoind_rpc_polling"],[70,"example_bitcoind_rpc_polling::RpcCommands"],[72,"clap_builder::builder::command"],[73,"core::sync::atomic"],[74,"core::time"],[75,"core::fmt"],[76,"clap_builder::parser::matches::arg_matches"],[77,"clap_builder"],[78,"core::result"],[79,"clap_builder::util::id"],[80,"core::option"],[81,"anyhow"],[82,"bitcoincore_rpc::client"],[83,"alloc::sync"],[84,"core::any"]],"i":[10,0,0,0,0,0,8,0,10,0,0,0,8,10,7,7,8,8,0,10,7,8,10,7,8,7,8,7,8,7,10,7,8,10,7,8,7,8,7,8,7,8,10,7,8,0,7,7,7,7,0,7,8,10,7,8,10,7,8,10,7,8,7,8,7,8,7,10,7,8,23,24],"f":"``````````````{bb}000{{{f{d}}h}j}{{{f{c}}}{{f{e}}}{}{}}00{{{f{lc}}}{{f{le}}}{}{}}00{{{f{n}}}n}{{{f{A`}}}A`}{{{f{c}}{f{le}}}Ab{}{}}0`{{{f{Ad}}{f{lAf}}}Ah}{{{f{n}}{f{lAf}}}Ah}{{{f{A`}}{f{lAf}}}Ah}{cc{}}00{{{f{Aj}}}{{An{nAl}}}}{{{f{Aj}}}{{An{A`Al}}}}{{{f{lAj}}}{{An{nAl}}}}{{{f{lAj}}}{{An{A`Al}}}}{{}{{Bb{B`}}}}{{{f{Bd}}}j}{ce{}{}}00{{}{{Bf{Ab}}}}{{{f{n}}}{{Bf{Bh}}}}```{{}{{Bj{d}}}}{{{f{c}}}e{}{}}0{c{{An{e}}}{}{}}00000{{{f{c}}}Bl{}}00{{{f{ln}}{f{Aj}}}{{An{AbAl}}}}{{{f{lA`}}{f{Aj}}}{{An{AbAl}}}}{{{f{ln}}{f{lAj}}}{{An{AbAl}}}}{{{f{lA`}}{f{lAj}}}{{An{AbAl}}}}`:::``","D":"Bb","p":[[5,"Command",72],[5,"AtomicBool",73],[1,"reference"],[5,"Duration",74],[1,"bool"],[0,"mut"],[5,"RpcArgs",0],[6,"RpcCommands",0],[1,"unit"],[6,"Emission",0],[5,"Formatter",75],[8,"Result",75],[5,"ArgMatches",76],[8,"Error",77],[6,"Result",78],[5,"Id",79],[6,"Option",80],[1,"str"],[8,"Result",81],[5,"Client",82],[5,"Arc",83],[5,"TypeId",84],[15,"Sync",70],[15,"Live",70]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADcACQAAAAEABAACAAkAAgAOAA8AHwACACUABQAuAAEAMwAPAEQABAA="}],\ -["example_cli",{"t":"PGFPPPFFGGPPPPFPPGIPPPPPPPPIPGPPPGEONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOENNNNNNNNNNNNNNNNONHONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONHNNNNOOOOHNNNNNNNNNNNONOONHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOO","n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","ChangeInfo","ChangeSet","CoinSelectionAlgo","Commands","External","Extract","Generate","Index","Init","Init","Internal","Keychain","KeychainTxGraph","LargestFirst","List","List","New","New","NewestFirst","Next","OldestFirst","PlanUtxo","Psbt","PsbtCmd","Sign","SmallestFirst","TxOut","TxOutCmd","anyhow","args","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","change_descriptor","change_keychain","clap","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","command","command_for_update","create_tx","db","default","default","descriptor","deserialize","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_str","graph","group_id","handle_commands","has_subcommand","has_subcommand","has_subcommand","has_subcommand","index","index","indexer","indexer","init_or_load","into","into","into","into","into","into","into","into","into","into","is_empty","local_chain","merge","network","network","partial_cmp","planned_utxos","serialize","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","change","addr_cmd","change_descriptor","descriptor","network","network","psbt_cmd","txout_cmd","address","after","chain_specific","coin_select","debug","descriptor","older","psbt","psbt","try_broadcast","value","confirmed","spent","unconfirmed","unspent"],"q":[[0,"example_cli"],[221,"example_cli::AddressCmd"],[222,"example_cli::Commands"],[229,"example_cli::PsbtCmd"],[240,"example_cli::TxOutCmd"],[244,"clap_builder::builder::command"],[245,"core::clone"],[246,"clap_builder::derive"],[247,"core::cmp"],[248,"miniscript::plan"],[249,"bitcoin::address"],[250,"bitcoin::psbt"],[251,"core::option"],[252,"anyhow"],[253,"bdk_chain::chain_oracle"],[254,"core::result"],[255,"serde::de"],[256,"core::fmt"],[257,"clap_builder::parser::matches::arg_matches"],[258,"clap_builder"],[259,"clap_builder::util::id"],[260,"std::sync::mutex"],[261,"bdk_chain::local_chain"],[262,"bdk_file_store::store"],[263,"bitcoin::network"],[264,"bitcoin::blockdata::transaction"],[265,"core::ops::function"],[266,"alloc::vec"],[267,"serde::ser"],[268,"alloc::string"],[269,"core::any"]],"i":[5,0,0,5,13,5,0,0,0,0,12,11,5,9,0,5,12,0,0,13,9,10,9,11,13,9,13,0,5,0,11,13,5,0,0,46,33,33,5,9,10,11,5,9,10,11,46,4,33,5,9,10,11,12,13,21,46,4,33,5,9,10,11,12,13,21,46,4,21,0,4,5,9,10,11,12,13,4,5,9,10,11,12,13,12,33,33,33,0,46,4,13,4,4,12,4,12,12,12,4,5,9,10,11,12,12,13,13,21,46,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,13,46,33,0,5,9,10,11,16,21,4,21,0,46,4,33,5,9,10,11,12,13,21,4,4,4,46,4,12,0,4,12,4,5,9,10,11,12,13,12,13,46,4,33,5,9,10,11,12,13,21,46,4,33,5,9,10,11,12,13,21,4,46,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,46,4,33,5,9,10,11,12,13,21,52,53,54,54,54,55,56,57,58,58,59,58,58,60,58,60,59,59,58,61,61,61,61],"f":"````````````````````````````````````{bb}000000000{{{d{c}}}{{d{e}}}{}{}}000000000{{{d{fc}}}{{d{fe}}}{}{}}000000000````{{{d{h}}}h}{{{d{{j{ce}}}}}{{j{ce}}}{ln}{lA`}}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{{Af{c}}}}}{{Af{c}}}{lA`}}{{{d{Ah}}}Ah}{{{d{Aj}}}Aj}{{{d{c}}{d{fe}}}Al{}{}}000000{{{d{Ah}}{d{Ah}}}An}{{}b}`0{{{d{fB`}}{d{c}}{d{Bb}}AjBdBf}{{C`{{Bn{Bh{Bl{Bj}}}}}}}Cb}`{{}h}{{}Aj}`{c{{Cd{h}}}Cf}{c{{Cd{Ah}}}Cf}{{{d{h}}{d{h}}}Ch}{{{d{Ah}}{d{Ah}}}Ch}{{{d{c}}{d{e}}}Ch{}{}}0{{{d{h}}{d{fCj}}}Cl}{{{d{{j{ce}}}}{d{fCj}}}Cl{Cnn}{CnA`}}{{{d{Ab}}{d{fCj}}}Cl}{{{d{Ad}}{d{fCj}}}Cl}{{{d{{Af{c}}}}{d{fCj}}}Cl{CnA`}}{{{d{Ah}}{d{fCj}}}Cl}0{{{d{Aj}}{d{fCj}}}Cl}0{{{d{Bj}}{d{fCj}}}Cl}{cc{}}000000000{{{d{D`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{AbDd}}}}{{{d{D`}}}{{Cd{AdDd}}}}{{{d{D`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{fD`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{AbDd}}}}{{{d{fD`}}}{{Cd{AdDd}}}}{{{d{fD`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{Df}}}{{Cd{Ajc}}}{}}`{{}{{Bl{Dh}}}}{{{d{{Dj{B`}}}}{d{{Dj{Dl}}}}{d{{Dj{{Dn{h}}}}}}E`e{j{gc}}}{{C`{Al}}}A`{{Ef{c{d{Eb}}}{{Ed{{C`{Al}}}}}}}n}{{{d{Df}}}Ch}000````{{{d{{Ej{Eh}}}}{d{Df}}}{{C`{{Bl{{El{ce}}}}}}}nA`}{ce{}{}}000000000{{{d{h}}}Ch}`{{{d{fh}}h}Al}``{{{d{Ah}}{d{Ah}}}{{Bl{An}}}}{{{d{B`}}{d{c}}{d{Bb}}}{{Cd{{F`{En}}}}}Cb}{{{d{h}}c}CdFb}{{{d{Ah}}c}CdFb}{{{d{c}}}e{}{}}000000{{{d{c}}}Fd{}}0{c{{Cd{e}}}{}{}}0000000000000000000`{{{d{c}}}Ff{}}000000000{{{d{f{Db{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{D`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{D`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{D`}}}{{Cd{AlDd}}}A`}{{{d{f{Db{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{fD`}}}{{Cd{AlDd}}}A`}{ce{}{}}000000000```````````````````````","D":"Hj","p":[[5,"Command",244],[1,"reference"],[0,"mut"],[5,"ChangeSet",0],[6,"Commands",0],[10,"Clone",245],[10,"Subcommand",246],[10,"Args",246],[6,"AddressCmd",0],[6,"TxOutCmd",0],[6,"PsbtCmd",0],[6,"Keychain",0],[6,"CoinSelectionAlgo",0],[1,"unit"],[6,"Ordering",247],[8,"KeychainTxGraph",0],[5,"Assets",248],[5,"Address",249],[1,"u64"],[5,"Psbt",250],[5,"ChangeInfo",0],[6,"Option",251],[1,"tuple"],[8,"Result",252],[10,"ChainOracle",253],[6,"Result",254],[10,"Deserializer",255],[1,"bool"],[5,"Formatter",256],[8,"Result",256],[10,"Debug",256],[5,"ArgMatches",257],[5,"Args",0],[8,"Error",258],[1,"str"],[5,"Id",259],[5,"Mutex",260],[5,"LocalChain",261],[5,"Store",262],[6,"Network",263],[5,"Transaction",264],[17,"Output"],[10,"FnOnce",265],[1,"u8"],[1,"slice"],[5,"Init",0],[8,"PlanUtxo",0],[5,"Vec",266],[10,"Serializer",267],[5,"String",268],[5,"TypeId",269],[15,"List",221],[15,"Address",222],[15,"Init",222],[15,"Generate",222],[15,"Psbt",222],[15,"TxOut",222],[15,"New",229],[15,"Extract",229],[15,"Sign",229],[15,"List",240]],"r":[],"b":[[104,"impl-Display-for-Keychain"],[105,"impl-Debug-for-Keychain"],[106,"impl-Display-for-CoinSelectionAlgo"],[107,"impl-Debug-for-CoinSelectionAlgo"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAK8AGgAAAAAAAgABAAUAAgAJAAIAEQABABQAAAAZAAAAGwABAB4AAAAgAAAAIgABACUAHQBFABQAWwABAF4ADwB4AAoAhAAFAIsAAACNAAAAmQAAAJsAAACeACAAwAAdAN8AAADkAAEA6AAAAA=="}],\ +["example_cli",{"t":"PGFPPPFFGGPPPPFPPGIPPPPPPPPIPGPPPGEONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOENNNNNNNNNNNNNNNNONHONNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONHNNNNOOOOHNNNNNNNNNNNONOONHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOO","n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","ChangeInfo","ChangeSet","CoinSelectionAlgo","Commands","External","Extract","Generate","Index","Init","Init","Internal","Keychain","KeychainTxGraph","LargestFirst","List","List","New","New","NewestFirst","Next","OldestFirst","PlanUtxo","Psbt","PsbtCmd","Sign","SmallestFirst","TxOut","TxOutCmd","anyhow","args","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","change_descriptor","change_keychain","clap","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","command","command_for_update","create_tx","db","default","default","descriptor","deserialize","deserialize","eq","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_str","graph","group_id","handle_commands","has_subcommand","has_subcommand","has_subcommand","has_subcommand","index","index","indexer","indexer","init_or_load","into","into","into","into","into","into","into","into","into","into","is_empty","local_chain","merge","network","network","partial_cmp","planned_utxos","serialize","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","change","addr_cmd","change_descriptor","descriptor","network","network","psbt_cmd","txout_cmd","address","after","chain_specific","coin_select","debug","descriptor","older","psbt","psbt","try_broadcast","value","confirmed","spent","unconfirmed","unspent"],"q":[[0,"example_cli"],[221,"example_cli::AddressCmd"],[222,"example_cli::Commands"],[229,"example_cli::PsbtCmd"],[240,"example_cli::TxOutCmd"],[244,"clap_builder::builder::command"],[245,"core::clone"],[246,"clap_builder::derive"],[247,"core::cmp"],[248,"miniscript::plan"],[249,"bitcoin::address"],[250,"bitcoin::psbt"],[251,"core::option"],[252,"anyhow"],[253,"bdk_chain::chain_oracle"],[254,"core::result"],[255,"serde::de"],[256,"core::fmt"],[257,"clap_builder::parser::matches::arg_matches"],[258,"clap_builder"],[259,"clap_builder::util::id"],[260,"std::sync::mutex"],[261,"bdk_chain::local_chain"],[262,"bdk_file_store::store"],[263,"bitcoin::network"],[264,"bitcoin::blockdata::transaction"],[265,"core::ops::function"],[266,"alloc::vec"],[267,"serde::ser"],[268,"alloc::string"],[269,"core::any"]],"i":[5,0,0,5,13,5,0,0,0,0,12,11,5,9,0,5,12,0,0,13,9,10,9,11,13,9,13,0,5,0,11,13,5,0,0,46,33,33,5,9,10,11,5,9,10,11,46,4,33,5,9,10,11,12,13,21,46,4,33,5,9,10,11,12,13,21,46,4,21,0,4,5,9,10,11,12,13,4,5,9,10,11,12,13,12,33,33,33,0,46,4,13,4,4,12,4,12,12,12,4,5,9,10,11,12,12,13,13,21,46,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,13,46,33,0,5,9,10,11,16,21,4,21,0,46,4,33,5,9,10,11,12,13,21,4,4,4,46,4,12,0,4,12,4,5,9,10,11,12,13,12,13,46,4,33,5,9,10,11,12,13,21,46,4,33,5,9,10,11,12,13,21,4,46,4,33,5,9,10,11,12,13,21,33,5,9,10,11,33,5,9,10,11,46,4,33,5,9,10,11,12,13,21,52,53,54,54,54,55,56,57,58,58,59,58,58,60,58,60,59,59,58,61,61,61,61],"f":"````````````````````````````````````{bb}000000000{{{d{c}}}{{d{e}}}{}{}}000000000{{{d{fc}}}{{d{fe}}}{}{}}000000000````{{{d{h}}}h}{{{d{{j{ce}}}}}{{j{ce}}}{ln}{lA`}}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{{Af{c}}}}}{{Af{c}}}{lA`}}{{{d{Ah}}}Ah}{{{d{Aj}}}Aj}{{{d{c}}{d{fe}}}Al{}{}}000000{{{d{Ah}}{d{Ah}}}An}{{}b}`0{{{d{fB`}}{d{c}}{d{Bb}}AjBdBf}{{C`{{Bn{Bh{Bl{Bj}}}}}}}Cb}`{{}h}{{}Aj}`{c{{Cd{h}}}Cf}{c{{Cd{Ah}}}Cf}{{{d{h}}{d{h}}}Ch}{{{d{Ah}}{d{Ah}}}Ch}{{{d{c}}{d{e}}}Ch{}{}}0{{{d{h}}{d{fCj}}}Cl}{{{d{{j{ce}}}}{d{fCj}}}Cl{Cnn}{CnA`}}{{{d{Ab}}{d{fCj}}}Cl}{{{d{Ad}}{d{fCj}}}Cl}{{{d{{Af{c}}}}{d{fCj}}}Cl{CnA`}}{{{d{Ah}}{d{fCj}}}Cl}0{{{d{Aj}}{d{fCj}}}Cl}0{{{d{Bj}}{d{fCj}}}Cl}{cc{}}000000000{{{d{D`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{D`}}}{{Cd{AbDd}}}}{{{d{D`}}}{{Cd{AdDd}}}}{{{d{D`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{fD`}}}{{Cd{{Db{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{{j{ce}}Dd}}}nA`}{{{d{fD`}}}{{Cd{AbDd}}}}{{{d{fD`}}}{{Cd{AdDd}}}}{{{d{fD`}}}{{Cd{{Af{c}}Dd}}}A`}{{{d{Df}}}{{Cd{Ajc}}}{}}`{{}{{Bl{Dh}}}}{{{d{{Dj{B`}}}}{d{{Dj{Dl}}}}{d{{Dj{{Dn{h}}}}}}E`e{j{gc}}}{{C`{Al}}}A`{{Ef{c{d{Eb}}}{{Ed{{C`{Al}}}}}}}n}{{{d{Df}}}Ch}000````{{{d{{Ej{Eh}}}}{d{Df}}}{{C`{{Bl{{El{ce}}}}}}}nA`}{ce{}{}}000000000{{{d{h}}}Ch}`{{{d{fh}}h}Al}``{{{d{Ah}}{d{Ah}}}{{Bl{An}}}}{{{d{B`}}{d{c}}{d{Bb}}}{{Cd{{F`{En}}}}}Cb}{{{d{h}}c}CdFb}{{{d{Ah}}c}CdFb}{{{d{c}}}e{}{}}000000{{{d{c}}}Fd{}}0{c{{Cd{e}}}{}{}}0000000000000000000`{{{d{c}}}Ff{}}000000000{{{d{f{Db{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{D`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{D`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{D`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{D`}}}{{Cd{AlDd}}}A`}{{{d{f{Db{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{f{j{ce}}}}{d{fD`}}}{{Cd{AlDd}}}nA`}{{{d{fAb}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{fAd}}{d{fD`}}}{{Cd{AlDd}}}}{{{d{f{Af{c}}}}{d{fD`}}}{{Cd{AlDd}}}A`}{ce{}{}}000000000```````````````````````","D":"Hj","p":[[5,"Command",244],[1,"reference"],[0,"mut"],[5,"ChangeSet",0],[6,"Commands",0],[10,"Clone",245],[10,"Subcommand",246],[10,"Args",246],[6,"AddressCmd",0],[6,"TxOutCmd",0],[6,"PsbtCmd",0],[6,"Keychain",0],[6,"CoinSelectionAlgo",0],[1,"unit"],[6,"Ordering",247],[8,"KeychainTxGraph",0],[5,"Assets",248],[5,"Address",249],[1,"u64"],[5,"Psbt",250],[5,"ChangeInfo",0],[6,"Option",251],[1,"tuple"],[8,"Result",252],[10,"ChainOracle",253],[6,"Result",254],[10,"Deserializer",255],[1,"bool"],[5,"Formatter",256],[8,"Result",256],[10,"Debug",256],[5,"ArgMatches",257],[5,"Args",0],[8,"Error",258],[1,"str"],[5,"Id",259],[5,"Mutex",260],[5,"LocalChain",261],[5,"Store",262],[6,"Network",263],[5,"Transaction",264],[17,"Output"],[10,"FnOnce",265],[1,"u8"],[1,"slice"],[5,"Init",0],[8,"PlanUtxo",0],[5,"Vec",266],[10,"Serializer",267],[5,"String",268],[5,"TypeId",269],[15,"List",221],[15,"Address",222],[15,"Init",222],[15,"Generate",222],[15,"Psbt",222],[15,"TxOut",222],[15,"New",229],[15,"Extract",229],[15,"Sign",229],[15,"List",240]],"r":[],"b":[[104,"impl-Display-for-Keychain"],[105,"impl-Debug-for-Keychain"],[106,"impl-Debug-for-CoinSelectionAlgo"],[107,"impl-Display-for-CoinSelectionAlgo"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAK8AGgAAAAAAAgABAAUAAgAJAAIAEQABABQAAAAZAAAAGwABAB4AAAAgAAAAIgABACUAHQBFABQAWwABAF4ADwB4AAoAhAAFAIsAAACNAAAAmQAAAJsAAACeACAAwAAdAN8AAADkAAEA6AAAAA=="}],\ ["example_electrum",{"t":"SSFGPFPNNNNNNONNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNOOOOOOOOO","n":["DB_MAGIC","DB_PATH","ElectrumArgs","ElectrumCommands","Scan","ScanOptions","Sync","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","batch_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","client","clone","clone","clone","clone_into","clone_into","clone_into","command","command_for_update","electrum_args","electrum_url","eq","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","group_id","group_id","has_subcommand","into","into","into","main","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","all_spks","electrum_args","electrum_args","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":[[0,"example_electrum"],[72,"example_electrum::ElectrumCommands"],[81,"clap_builder::builder::command"],[82,"bitcoin::network"],[83,"electrum_client::client"],[84,"anyhow"],[85,"core::fmt"],[86,"clap_builder::parser::matches::arg_matches"],[87,"clap_builder"],[88,"core::result"],[89,"clap_builder::util::id"],[90,"core::option"],[91,"core::any"]],"i":[0,0,0,0,8,0,8,4,9,4,9,8,8,9,8,4,9,8,4,9,4,8,4,9,8,4,9,9,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,4,9,8,8,4,9,0,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,21,22,21,22,21,22,21,21,21],"f":"```````{bb}00000`{{{d{c}}}{{d{e}}}{}{}}00{{{d{fc}}}{{d{fe}}}{}{}}00{{{d{h}}j}{{n{l}}}}{{{d{A`}}}A`}{{{d{h}}}h}{{{d{Ab}}}Ab}{{{d{c}}{d{fe}}}Ad{}{}}00{{}b}0{{{d{A`}}}h}`{{{d{Ab}}{d{Ab}}}Af}{{{d{A`}}{d{fAh}}}Aj}{{{d{h}}{d{fAh}}}Aj}{{{d{Ab}}{d{fAh}}}Aj}{cc{}}00{{{d{Al}}}{{B`{A`An}}}}{{{d{Al}}}{{B`{hAn}}}}{{{d{Al}}}{{B`{AbAn}}}}{{{d{fAl}}}{{B`{A`An}}}}{{{d{fAl}}}{{B`{hAn}}}}{{{d{fAl}}}{{B`{AbAn}}}}{{}{{Bd{Bb}}}}0{{{d{Bf}}}Af}{ce{}{}}00{{}{{n{Ad}}}}{{{d{c}}}e{}{}}00{c{{B`{e}}}{}{}}00000{{{d{c}}}Bh{}}00{{{d{fA`}}{d{Al}}}{{B`{AdAn}}}}{{{d{fh}}{d{Al}}}{{B`{AdAn}}}}{{{d{fAb}}{d{Al}}}{{B`{AdAn}}}}{{{d{fA`}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fh}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fAb}}{d{fAl}}}{{B`{AdAn}}}}:::`````````","D":"An","p":[[5,"Command",81],[1,"reference"],[0,"mut"],[5,"ElectrumArgs",0],[6,"Network",82],[5,"Client",83],[8,"Result",84],[6,"ElectrumCommands",0],[5,"ScanOptions",0],[1,"unit"],[1,"bool"],[5,"Formatter",85],[8,"Result",85],[5,"ArgMatches",86],[8,"Error",87],[6,"Result",88],[5,"Id",89],[6,"Option",90],[1,"str"],[5,"TypeId",91],[15,"Sync",72],[15,"Scan",72]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEIACAAAAAQABgAAAAgABQAPAA8AIAADACcACAAzABUASgADAA=="}],\ ["example_esplora",{"t":"SSFGPFPNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNHONNNNNNNNNNNNNNNNNNNNNOOOOOOOOO","n":["DB_MAGIC","DB_PATH","EsploraArgs","EsploraCommands","Scan","ScanOptions","Sync","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","client","clone","clone","clone","clone_into","clone_into","clone_into","command","command_for_update","eq","esplora_args","esplora_url","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","group_id","group_id","has_subcommand","into","into","into","main","parallel_requests","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","all_spks","esplora_args","esplora_args","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":[[0,"example_esplora"],[72,"example_esplora::EsploraCommands"],[81,"clap_builder::builder::command"],[82,"bitcoin::network"],[83,"esplora_client::blocking"],[84,"anyhow"],[85,"core::fmt"],[86,"clap_builder::parser::matches::arg_matches"],[87,"clap_builder"],[88,"core::result"],[89,"clap_builder::util::id"],[90,"core::option"],[91,"core::any"]],"i":[0,0,0,0,8,0,8,4,9,4,9,8,8,8,4,9,8,4,9,4,8,4,9,8,4,9,9,9,9,8,4,8,4,9,8,4,9,8,4,9,8,4,9,4,9,8,8,4,9,0,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,21,22,21,22,21,22,21,21,21],"f":"```````{bb}00000{{{d{c}}}{{d{e}}}{}{}}00{{{d{fc}}}{{d{fe}}}{}{}}00{{{d{h}}j}{{n{l}}}}{{{d{A`}}}A`}{{{d{h}}}h}{{{d{Ab}}}Ab}{{{d{c}}{d{fe}}}Ad{}{}}00{{}b}0{{{d{Ab}}{d{Ab}}}Af}{{{d{A`}}}h}`{{{d{A`}}{d{fAh}}}Aj}{{{d{h}}{d{fAh}}}Aj}{{{d{Ab}}{d{fAh}}}Aj}{cc{}}00{{{d{Al}}}{{B`{A`An}}}}{{{d{Al}}}{{B`{hAn}}}}{{{d{Al}}}{{B`{AbAn}}}}{{{d{fAl}}}{{B`{A`An}}}}{{{d{fAl}}}{{B`{hAn}}}}{{{d{fAl}}}{{B`{AbAn}}}}{{}{{Bd{Bb}}}}0{{{d{Bf}}}Af}{ce{}{}}00{{}{{n{Ad}}}}`{{{d{c}}}e{}{}}00{c{{B`{e}}}{}{}}00000{{{d{c}}}Bh{}}00{{{d{fA`}}{d{Al}}}{{B`{AdAn}}}}{{{d{fh}}{d{Al}}}{{B`{AdAn}}}}{{{d{fAb}}{d{Al}}}{{B`{AdAn}}}}{{{d{fA`}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fh}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fAb}}{d{fAl}}}{{B`{AdAn}}}}:::`````````","D":"An","p":[[5,"Command",81],[1,"reference"],[0,"mut"],[5,"EsploraArgs",0],[6,"Network",82],[5,"BlockingClient",83],[8,"Result",84],[6,"EsploraCommands",0],[5,"ScanOptions",0],[1,"unit"],[1,"bool"],[5,"Formatter",85],[8,"Result",85],[5,"ArgMatches",86],[8,"Error",87],[6,"Result",88],[5,"Id",89],[6,"Option",90],[1,"str"],[5,"TypeId",91],[15,"Sync",72],[15,"Scan",72]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEIACAAAAAQABgAAAAgAFgAgAAIAJgAIADIAAAA0ABQASgADAA=="}],\ ["example_wallet_electrum",{"t":"SSSSSSSSH","n":["BATCH_SIZE","DB_MAGIC","ELECTRUM_URL","EXTERNAL_DESC","INTERNAL_DESC","NETWORK","SEND_AMOUNT","STOP_GAP","main"],"q":[[0,"example_wallet_electrum"],[9,"anyhow"],[10,"core::result"]],"i":[0,0,0,0,0,0,0,0,0],"f":"````````{{}{{f{bd}}}}","D":"`","p":[[1,"unit"],[5,"Error",9],[6,"Result",10]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAkAAQAAAAkA"}],\ diff --git a/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js b/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js index ee03877319..3dd464f1e4 100644 --- a/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js +++ b/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("bdk_chain", 0, "This crate is a collection of core structures for Bitcoin …\nTrait that “anchors” blockchain data to a specific …\nA wrapper that we use to impl remote traits for types in …\nMaximum BIP32 derivation index.\nBalance, differentiated into various categories.\nA reference to a block in the canonical chain.\nHow many confirmations are needed f or a coinbase output …\nRepresents a service that tracks the blockchain.\nRepresents the observed position of some chain data.\nA checkpoint is a node of a reference-counted linked list …\nIterates over checkpoints backwards.\nRepresents the confirmation block and time of a …\nBlock height and timestamp at which a transaction is …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nA trait to extend the functionality of a miniscript …\nRepresents the unique ID of a descriptor.\nError type.\nA TxOut with as much data as we can retrieve about it\nA wrapper that we use to impl remote traits for types in …\nA tuple of keychain index and T representing the indexed …\nA tuple of keychain K, derivation index (u32) and a T …\nTrait that makes an object mergeable.\nAn iterator for derived script pubkeys.\nSet of parameters sufficient to construct an Anchor.\nData object used to communicate updates about relevant …\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nReturns the BlockId that the associated blockchain data is …\nTransaction anchors. Anchors tells us a position in the …\nReturns a reference to the inner hash (sha256, sh256d …\nBlock in which the transaction appeared.\nGet the BlockId of the checkpoint.\nThe anchor block.\nBlock’s BlockId.\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\nGet the upper bound of the chain data’s confirmation …\nGet the upper bound of the chain data’s confirmation …\nDetermines the upper bound of the confirmation height.\nThe confirmation time of the transaction being anchored.\nConfirmed and immediately spendable balance\nGet a reference to the internal descriptor.\nReturns the descriptor ID, calculated as the sha256 hash …\nReturns the minimum value (in satoshis) at which an output …\nThis method tests for self and other to have equal …\nExtends the checkpoint linked list by a iterator of block …\nExtend this update with other.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a checkpoint from a list of BlockIds in …\nConstruct a checkpoint from the given header and block …\nCreates this wrapper type from the inner hash type.\nGet checkpoint at height.\nGet the best chain’s chain tip.\nGet the block hash of the checkpoint.\nThe hash of the block.\nGet the height of the checkpoint.\nThe height of the block.\nAll coinbase outputs not yet matured\nContains the IndexedTxGraph and associated types. Refer to …\nIndexer provides utilities for indexing transaction data.\nInserts block_id at its height within the chain.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nReturns the inner T.\nReturns the inner T.\nDetermines whether block of BlockId exists as an ancestor …\nReturns whether ChainPosition is confirmed or not.\nReturns whether ConfirmationTime is the confirmed variant.\nWhether the utxo is/was/will be spendable with chain tip.\nReturns whether the structure is considered empty.\nWhether the txout is considered mature.\nWhether this output is on a coinbase transaction.\nIterate from this checkpoint in descending height.\nThe LocalChain is a local implementation of ChainOracle.\nTransforms the TxUpdate to have anchors (A) of another …\nMerge another object of the same type onto self.\nConstruct a new base block at the front of a linked list.\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nGet the previous checkpoint in the chain\nPuts another checkpoint onto the linked list representing …\nIterate checkpoints over a height range.\nModule for stuff\nSeen at times for transactions. This records when a …\nThe txid and chain position of the transaction (if any) …\nHelper types for spk-based blockchain clients.\nTake the value, replacing it with the default value.\nReturns the inner hash (sha256, sh256d etc.).\nGet the whole balance visible to the wallet.\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nUnconfirmed UTXOs generated by a wallet tx\nGet sum of trusted_pending and confirmed coins.\nModule for structures that store and traverse transactions.\nPosition in the block on which the transaction appeared.\nThe TxOut.\nFloating txouts. These are TxOuts that exist but the whole …\nFull transactions. These are transactions that were …\nConstruct an unconfirmed variant using the given last_seen …\nUnconfirmed UTXOs received from an external wallet\nConfirmation height.\nThe last-seen timestamp in unix seconds.\nConfirmation time in unix seconds.\nA Bitcoin address.\nThe different types of addresses.\n0x1: Sign all outputs.\n0x1: Sign all outputs.\n0x81: Sign all outputs but only this input.\n0x81: Sign all outputs but only this input.\nAmount\nMinimum fee rate required to broadcast a transaction.\nConvenience alias for Denomination::Bitcoin.\nbits\nBTC\nMainnet Bitcoin.\nBitcoin block.\nA bitcoin block hash.\ncBTC\nEncoding of 256-bit target as 32-bit float.\nAn always-compressed Bitcoin ECDSA public key\nThe default max_fee_rate value used for extracting …\nFee rate used to compute dust amount.\n0x0: Used when not explicitly specified, defaults to …\nA set of denominations in which amounts can be expressed.\nThe sequence number that enables absolute lock time but …\nThe sequence number that enables replace-by-fee and …\nHashtype of an input’s signature, encoded in the last …\nRepresents fee rate.\nFilter hash, as defined in BIP-157\nFilter header, as defined in BIP-157\nKnown bech32 human-readable parts.\nHash of a transaction according to the legacy signature …\nThe maximum value of an amount.\nThe maximum value of an amount.\nMaximum possible value.\nMaximum possible value.\nThe maximum allowable sequence number.\nThe maximum possible target.\nThe maximum attainable target value on mainnet.\nThe proof of work limit on regtest.\nThe proof of work limit on signet.\nThe proof of work limit on testnet.\nThe maximum allowed weight for a block, see BIP 141 …\nThe maximum value allowed as an amount. Useful for sanity …\nThe maximum value allowed as an amount. Useful for sanity …\nMaximum transaction weight for Bitcoin Core 25.0.\nThe minimum value of an amount.\nThe minimum value of an amount.\nMinimum possible value (0 sat/kwu).\nMinimum possible value (0 wu).\nThe minimum transaction weight for a valid serialized …\nThe Bitcoin mainnet network.\nThe main Bitcoin network.\nData structure that represents a block header paired to a …\nuBTC\nmBTC\nmsat\nThis is used as a “null txout” in consensus signing …\nnBTC\nThe cryptocurrency network to act on.\nWhat kind of network we are on.\n0x2: Sign no outputs — anyone can choose the destination.\n0x2: Sign no outputs — anyone can choose the destination.\n0x82: Sign no outputs and only this input.\n0x82: Sign no outputs and only this input.\nExactly one bitcoin.\nExactly one bitcoin.\nExactly one satoshi.\nExactly one satoshi.\nA script Opcode.\nA reference to a transaction output.\nPay to pubkey hash.\nPay to script hash.\nPay to taproot.\nPay to witness pubkey hash.\nPay to witness script hash.\npBTC\nA Bitcoin ECDSA private key\nA Partially Signed Transaction.\nA hash of a public key.\nA Bitcoin ECDSA public key\nThe regtest network.\nBitcoin’s regtest network.\nConvenience alias for Denomination::Satoshi.\nThe number of bytes that an amount contributes to the size …\nsatoshi\nBitcoin script slice.\nAn owned, growable script.\nA hash of Bitcoin Script bytecode.\nHash of a transaction according to the segwit version 0 …\nBitcoin transaction input sequence number.\nSignedAmount\nBitcoin’s signet network.\n0x3: Sign the output whose index matches this input’s …\n0x3: Sign the output whose index matches this input’s …\n0x83: Sign one output and only this input (see Single for …\n0x83: Sign one output and only this input (see Single for …\nThe tag used for TapNodeHash\nTaproot-tagged hash with tag "TapLeaf".\nThe tag used for TapLeafHash\nTagged hash used in taproot trees.\nTaproot-tagged hash with tag "TapSighash".\nThe tag used for TapSighash\nHashtype of an input’s signature, encoded in the last …\nTaproot-tagged hash with tag "TapTweak".\nThe tag used for TapTweakHash\nA 256 bit integer representing target.\nSome kind of testnet network.\nBitcoin’s testnet network.\nThe test networks, testnet and signet.\nBitcoin transaction.\nBitcoin transaction input.\nA hash of the Merkle tree branch or root for transactions.\nBitcoin transaction output.\nA bitcoin transaction hash/transaction ID.\nInitial version of witness program. Used for P2WPKH and …\nVersion of witness program used for Taproot P2TR outputs.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nA variable-length unsigned integer.\nThe factor that non-witness serialization data is …\nSegWit version of a public key hash.\nSegWit version of a Bitcoin Script bytecode hash.\nRepresents block weight - the weight of a transaction or …\nThe Witness is the data used to unlock bitcoin since the …\nA hash corresponding to the witness structure commitment …\nA hash corresponding to the Merkle tree root for witness …\nThe segregated witness program.\nVersion of the segregated witness program.\nA 256 bit integer representing work.\nA bitcoin witness transaction ID.\nExtended key identifier as defined in BIP-32.\nAn x-only public key, used for verification of Taproot …\nThe zero amount.\nThe zero amount.\n0 sat/kwu.\n0 wu.\nZero value sequence.\nWhen parsing nBits, Bitcoin Core converts a negative …\nGet the absolute value of this SignedAmount.\nTweaks an XOnlyPublicKey by adding the generator …\nBitcoin addresses.\nGets the address type of the address.\nBitcoin amounts.\nReturns the script data as a byte slice.\nReturns the script data as a mutable byte slice.\nObtains a raw mutable pointer suitable for use with FFI …\nReturns a mutable reference to unsized script.\nObtains a raw const pointer suitable for use with FFI …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to unsized script.\nReturns a reference to the address as if it was unchecked.\nMarks, without any additional checks, network of this …\nReturns a reference to the checked address.\nAssumes the given 32 byte array as hidden TapNodeHash.\nReturns the base size of this input.\nReturns the base transaction size.\nBIP152 Compact Blocks\nBIP 158 Compact Block Filters for Light Clients.\nBIP32 implementation.\nReturns the block height, as encoded in the coinbase …\nReturns the block hash.\nBitcoin block data.\nCreates a new script builder\nCreates a new script builder\nReturns an iterator over script bytes.\nReturn the network’s chain hash (genesis block hash).\nChecks if merkle root of header matches merkle root of the …\nChecks if witness commitment in coinbase matches the …\nGet the absolute value of this SignedAmount. Returns None …\nChecked addition.\nChecked addition. Returns None if overflow occurred.\nChecked addition.\nChecked integer division.\nChecked integer division. Be aware that integer division …\nChecked division.\nChecked division.\nChecked multiplication.\nChecked multiplication. Returns None if overflow occurred.\nChecked multiplication.\nChecked multiplication.\nChecked weight multiplication.\nChecked remainder.\nChecked remainder. Returns None if overflow occurred.\nChecked subtraction.\nChecked subtraction. Returns None if overflow occurred.\nChecked subtraction.\nClassifies an Opcode into a broad class.\nClear the witness.\nLike cmp::Cmp but faster and with no guarantees across …\nReturns the coinbase transaction, if one is present.\nCombines this Psbt with other PSBT as described by BIP 174.\nWhether this public key should be serialized as compressed\nWhether this private key should be serialized as compressed\nComputes the transaction merkle root.\nComputes a “normalized TXID” which does not include …\nComputes the Txid.\nComputes the witness commitment for the block’s …\nComputes the segwit version of the transaction id.\nBitcoin consensus.\nCounts the sigops for this Script using accurate counting.\nCounts the sigops for this Script using legacy counting.\nThe default value of sequence is 0xffffffff.\nDeserialize a value from raw binary data.\nDeserialize a value from raw binary data read from a …\nComputes the popular “difficulty” measure for mining.\nComputes the popular “difficulty” measure for mining …\nCreate an object that implements fmt::Display dynamically …\nCreate an object that implements fmt::Display dynamically …\nCreate an object that implements fmt::Display using …\nCreate an object that implements fmt::Display using …\nReturns the minimum value an output with this script …\nECDSA Bitcoin signatures.\nReturns true if the sequence number enables absolute …\nReturns true if this input enables the absolute::LockTime …\nLike cmp::Eq but faster and with no guarantees across …\nContains error types and other error handling tools.\nExtract the matching txid’s represented by this partial …\nAn alias for extract_tx_fee_rate_limit.\nExtracts the Transaction from a Psbt by filling in the …\nPerform extract_tx_fee_rate_limit without the fee rate …\nExtracts the Transaction from a Psbt by filling in the …\nCalculates transaction fee.\nCalculates fee by multiplying this fee rate by weight, in …\nCalculates fee by multiplying this fee rate by weight, in …\nComputes the filter header from a filter hash and previous …\nReturns the first opcode of the script (if there is any).\nWrites the human-readable assembly representation of the …\nFormat the value of this Amount in the given denomination.\nFormat the value of this SignedAmount in the given …\nFormat the private key to WIF format.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a relative lock-time using time intervals where …\nCreates Work from a big-endian byte array.\nCreates Target from a big-endian byte array.\nCreate a MerkleBlock from a block, that contains proofs …\nConvert from a value expressing bitcoins to an Amount.\nConvert from a value expressing bitcoins to an SignedAmount…\nTreat byte slice as Script\nConverts byte vector into script.\nTreat mutable byte slice as Script\nCreates a Network from the chain hash (genesis block hash).\nComputes the Target value from a compact representation.\nCreates a sequence from a u32 value.\nCreates a EcdsaSighashType from a raw u32.\nCreates a CompactTarget from a consensus encoded u32.\nConstructs a TapSighashType from a raw u8.\nConverts a bitcoind -chain argument name to its equivalent …\nConvert this Amount in floating-point notation with a given\nConvert this SignedAmount in floating-point notation with …\nCreate a MerkleBlock from the block’s header and txids, …\nCreates a relative lock-time using block height.\nCreates a ScriptBuf from a hex string.\nCreates a Sequence from an prefixed hex string.\nCreates Work from a prefixed hex string.\nCreates Target from a prefixed hex string.\nCreates a CompactTarget from an prefixed hex string.\nConvert from a value expressing integer values of bitcoins …\nCreates a new BIP341 TapTweakHash from key and tweak. …\nReturns the XOnlyPublicKey (and it’s Parity) for keypair.\nConstructs Weight from kilo weight units returning None if …\nCreates Work from a little-endian byte array.\nCreates Target from a little-endian byte array.\nCreates a Network from the magic bytes.\nComputes branch hash given two hashes of the nodes …\nConstructs Weight from non-witness size.\nComputes the public key as supposed to be used with this …\nComputes the public key as supposed to be used with this …\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreate an Amount with satoshi precision and the given …\nCreate an SignedAmount with satoshi precision and the …\nConstructs FeeRate from satoshis per 1000 weight units.\nConstructs FeeRate from satoshis per virtual bytes.\nConstructs FeeRate from satoshis per virtual bytes without …\nConstructs an Address from an output script (scriptPubkey).\nComputes the leaf hash from components.\nComputes the TapNodeHash from a script and a leaf version.\nCreates a relative lock-time from seconds, converting the …\nCreates a relative lock-time from seconds, converting the …\nCreates a schnorr public key directly from a slice.\nCreates a Witness object from a slice of bytes slices …\nDeserialize a public key from a slice\nDeserialize a public key from a slice\nDeserialize a private key from a slice\nCreates a EcdsaSighashType from a raw u32.\nConvert from a str to Denomination.\nParse a decimal string as a value in the given …\nParse a decimal string as a value in the given …\nParses amounts with denomination suffix like they are …\nParses amounts with denomination suffix like they are …\nCreates a Sequence from an unprefixed hex string.\nCreates Work from an unprefixed hex string.\nCreates Target from an unprefixed hex string.\nCreates a CompactTarget from an unprefixed hex string.\nCreates a PSBT from an unsigned transaction.\nConstructs Weight from virtual bytes, returning None on …\nConstructs Weight from virtual bytes without an overflow …\nConstructs Weight from virtual bytes panicking on overflow.\nParse WIF encoded private key.\nConstructs Weight from witness size.\nCreates an address from an arbitrary witness program.\nDirectly constructs Weight from weight units.\nDirectly constructs Weight from usize weight units.\nConstructs new compressed ECDSA private key using the …\nBitcoin hash types.\nThe block header\nThe block header\nThe actual ECDSA key\nThe actual ECDSA key\nList of transaction inputs.\nThe corresponding key-value map for each input in the …\nIterates over the script instructions and their indices.\nIterates over the script instructions and their indices …\nIterates over the script instructions.\nIterates over the script instructions while enforcing …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts this ScriptBuf into a boxed Script.\nConverts the script into a byte vector.\nConverts a Box<Script> into a ScriptBuf without copying or …\nReturns true if this Transaction’s absolute timelock is …\nChecks if this is a coinbase transaction.\nReturns whether the script is the empty script.\nReturns true if the witness contains no element.\nReturns true if the transaction itself opted in to be …\nReturns true if the sequence number indicates that the …\nReturns true if the sequence number encodes a block based …\nReturns true if this transactions nLockTime is enabled (…\nReturns true if this is real mainnet bitcoin.\nReturns true if block hash is less than or equal to this …\nChecks whether a script pubkey is a bare multisig output.\nReturns true if this SignedAmount is negative and false if …\nChecks if an OutPoint is “null”.\nCheck if this is an OP_RETURN output.\nChecks whether a script pubkey is a P2PK output.\nChecks whether a script pubkey is a P2PKH output.\nChecks whether a script pubkey is a P2SH output.\nChecks whether a script pubkey is a P2TR output.\nReturns true if this witness program is for a P2TR output.\nChecks whether a script pubkey is a P2WPKH output.\nReturns true if this witness program is for a P2WPKH …\nChecks whether a script pubkey is a P2WSH output.\nReturns true if this witness program is for a P2WPSH …\nReturns true if this SignedAmount is positive and false if …\nChecks whether a script is trivially known to have no …\nChecks whether a script is push only.\nReturns true if the transaction opted-in to BIP125 …\nReturns true if the given pubkey is directly related to …\nReturns true if the supplied xonly public key can be used …\nReturns true if the sequence has a relative lock-time.\nChecks whether or not the address is following Bitcoin …\nReturns true if the sequence number encodes a time …\nReturns the compressed-ness of the underlying secp256k1 …\nParsed addresses do not always have one network. The …\nChecks whether a script pubkey is a Segregated Witness …\nReturns a struct implementing Iterator.\nReturns an iterator for the funding UTXOs of the psbt\nBitcoin keys.\nReturns the last element in the witness, if any.\nThe weight of the TxIn when it’s included in a legacy …\nReturns the length in bytes of the script.\nReturns the number of elements this witness holds.\nBlock height or timestamp. Transaction cannot be included …\nReturns log2 of this work.\nReturn the network magic bytes, which should be encoded …\nReturns true if the address creates a particular script …\nComputes the maximum valid Target threshold allowed for a …\nComputes the maximum valid Target threshold allowed for a …\nComputes the maximum valid Target threshold allowed for a …\nBitcoin merkle tree functions.\nComputes the minimum valid Target threshold allowed for a …\nComputes the minimum valid Target threshold allowed for a …\nReturns the minimum value an output with this script …\nCreates a TxOut with given script and the smallest …\nReturns the minimum value an output with this script …\nCreates a TxOut with given script and the smallest …\nBitcoin network.\nThe network kind on which this key should be used\nCreates a new empty script.\nCreates a new empty script.\nCreates a new witness program, copying the content from …\nCreates a new OutPoint.\nCreates a new empty Witness.\nConstructs compressed ECDSA public key from the provided …\nConstructs compressed ECDSA private key from the provided …\nGenerates OP_RETURN-type of scriptPubkey for the given …\nGenerates P2PK-type of scriptPubkey.\nGenerates P2PKH-type of scriptPubkey.\nGenerates P2SH-type of scriptPubkey with a given hash of …\nGenerates P2TR for script spending path using an internal …\nGenerates P2TR for key spending path for a known …\nGenerates P2WPKH-type of scriptPubkey.\nGenerates P2WSH-type of scriptPubkey with a given hash of …\nConstructs uncompressed (legacy) ECDSA public key from the …\nConstructs uncompressed (legacy) ECDSA private key from …\nGenerates P2WSH-type of scriptPubkey with a given …\nReturn the nth element in the witness, if any\nComputes a “normalized TXID” which does not include …\nCreates a “null” OutPoint.\nList of transaction outputs.\nThe corresponding key-value map for each output in the …\nBitcoin p2p network types.\nReturns the public key if this script is P2PK with a valid …\nCreates a pay to (compressed) public key hash address from …\nCreates a pay to script hash P2SH address from a script.\nCreates a pay to script hash P2SH address from a script …\nCreates a pay to script address that embeds a witness pay …\nCreates a pay to script address that embeds a witness pay …\nCreates a pay to taproot address from an untweaked key.\nCreates a pay to taproot address from an untweaked key.\nCreates a witness required to do a key path spend of a …\nCreates a pay to taproot address from a pre-tweaked output …\nCreates a pay to taproot address from a pre-tweaked output …\nCreates a witness pay to public key address from a public …\nCreates a WitnessProgram from pk for a P2WPKH output.\nCreates a witness required to spend a P2WPKH output.\nReturns the script code used for spending a P2WPKH output …\nCreates the script code used for spending a P2WPKH output.\nReturns the script code used to spend a P2WPKH input.\nReturns the script code used to spend a P2WPKH input.\nCreates a witness pay to script hash address.\nCreates a WitnessProgram from script for a P2WSH output.\nReturns the associated network parameters.\nUnit parsing utilities.\nBitcoin policy.\nSubtraction that doesn’t allow negative SignedAmounts. …\nProof-of-work related integer types.\nThe reference to the previous output that is being used as …\nReturns the witness program.\nGlobal proprietary key-value pairs.\nPartially Signed Bitcoin Transactions.\nGets the pubkey hash for this address if this is a P2PKH …\nReturns bitcoin 160-bit hash of the public key\nReturns bitcoin 160-bit hash of the public key\nReturns the PublicKey for this XOnlyPublicKey.\nCreates a public key from this private key\nPush a new element on the witness, requires an allocation.\nPushes, as a new element on the witness, an ECDSA …\nAdd a single instruction to the script.\nLike push_instruction, but avoids calling reserve to not …\nAdds a single opcode to the script.\nAdds instructions to push some arbitrary data onto the …\nRead the public key from a reader\nRead the public key from a reader\nChecks whether network of this address is as required.\nPre-allocates at least additional_len bytes if needed.\nPre-allocates exactly additional_len bytes if needed.\nScale by witness factor.\nAdds an OP_VERIFY to the script or replaces the last …\nGets the script hash for this address if this is a P2SH …\nReturns 160-bit hash of the script.\nGenerates a script pubkey spending to this address.\nThe script which must be satisfied for the output to be …\nReturns an iterator over lengths of script_pubkeys in the …\nThe script which pushes values on the stack which will …\nReturns the second-to-last element in the witness, if any.\nThe weight of the TxIn when it’s included in a segwit …\nThe sequence number, which suggests to miners which of two …\nSerializes the key as a byte-encoded x coordinate value …\nUser-facing serialization for Script.\nUser-facing serialization for Script.\nSerialize as raw binary data\nSerialize a value as bytes in hex.\nSerialize the PSBT into a writer.\nSignature hash implementation (used in transaction …\nReturns the sighash message to sign an ECDSA input along …\nAttempts to create all the required signatures for this …\nSignature\nReturns a number representing sign of this SignedAmount.\nReturns the total number of bytes that this output …\nReturns the number of bytes this witness contributes to a …\nReturns the number of bytes this varint contributes to a …\nReturns the spending utxo for this PSBT’s input at …\nTweaks an untweaked public key with corresponding public …\nBitcoin Taproot.\nGet Tapscript following BIP341 rules regarding accounting …\nComputes leaf hash of tapscript.\nGets the address data from this address.\nReturns the human-readable assembly representation of the …\nConverts Work to a big-endian byte array.\nConverts Target to a big-endian byte array.\nExpress this Amount as a floating-point value in Bitcoin.\nExpress this SignedAmount as a floating-point value in …\nReturns a copy of the script data.\nSerialize the public key to bytes\nSerializes the public key.\nSerialize the private key to bytes\nComputes the compact value from a Target representation.\nReturns the consensus encoded u32 representation of this …\nReturns the inner 32bit integer value of Sequence.\nConverts a Network to its equivalent bitcoind -chain …\nConverts this witness version to a GF32 field element.\nExpress this Amount as a floating-point value in the given …\nExpress this SignedAmount as a floating-point value in the …\nFormats the script as lower-case hex.\nConverts to kilo weight units rounding down.\nConverts Work to a little-endian byte array.\nConverts Target to a little-endian byte array.\nReturns integer version number representation for a given …\nComputes the P2SH output corresponding to this redeem …\nComputes P2TR output with a given internal key and a …\nComputes the P2WSH output corresponding to this …\nCreates a URI string bitcoin:address optimized to be …\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nCreates a relative::LockTime from this Sequence number.\nGets the number of satoshis in this Amount.\nGets the number of satoshis in this SignedAmount.\nReturns raw fee rate.\nConverts to sat/vB rounding up.\nConverts to sat/vB rounding down.\nConverts a TapTweakHash into a Scalar ready for use with …\nConvert to a signed amount.\nSerialize the public key into a SortKey.\nGet a string number of this Amount in the given …\nGet a string number of this SignedAmount in the given …\nGet a formatted string of this Amount in the given …\nGet a formatted string of this SignedAmount in the given …\nConverts this Work to Target.\nConverts EcdsaSighashType to a u32 sighash flag.\nEncodes Opcode as a byte.\nConvert to an unsigned amount.\nConverts to vB rounding up.\nConverts to vB rounding down.\nConvenience method to create an array of byte-arrays from …\nGet WIF encoding of this private key.\nConverts this Target to Work.\nReturns raw weight units.\nCounts the total number of sigops.\nReturns the total block size.\nReturns the total number of bytes that this input …\nReturns the total transaction size.\nVerifies that a tweak produced by XOnlyPublicKey::add_tweak…\nReturns a reference to the input at input_index if it …\nReturns a reference to the output at output_index if it …\nList of transactions contained in the block\nComputes the Txid.\nThe referenced transaction’s txid.\nTransactions making up a partial merkle tree\nUnchecked addition.\nUnchecked addition.\nUnchecked subtraction.\nUnchecked subtraction.\nUnknown global key-value pairs.\nGet the absolute value of this SignedAmount returning …\nThe unsigned transaction, scriptSigs and witnesses for …\nThe value of the output, in satoshis.\nChecks that sig is a valid schnorr signature for msg using …\nChecks that sig is a valid ECDSA signature for msg using …\nChecks that sig is a valid ECDSA signature for msg using …\nReturns the witness program version.\nThe protocol version, is currently expected to be 1 or 2 …\nThe version number of this PSBT. If omitted, the version …\nThe index of the referenced output in its transaction’s …\nReturns the “virtual size” (vsize) of this transaction.\nReturns the weight of the block.\nThe weight of this output.\nReturns the weight of this transaction, as defined by …\nCreates a new empty script with pre-allocated capacity.\nWitness data: an array of byte-arrays. Note that this …\nGets the witness program for this address if this is a …\nComputes the merkle root of transactions hashed for …\nReturns witness version of the script, if any, assuming …\nReturns bitcoin 160-bit hash of the public key for witness …\nReturns bitcoin 160-bit hash of the public key for witness …\nWrite the public key into a writer\nWrite the public key into a writer\nReturns 256-bit hash of the script for P2WSH outputs.\nComputes the segwit version of the transaction id.\nA global map from extended public keys to the used key …\nA Bitcoin address.\nThe data encoded by an Address.\nThe different types of addresses.\nBase58 error.\nBech32 segwit decoding error.\nAddress size more than 520 bytes is not allowed.\nError while generating address from script.\nIndicates whether this NetworkValidation is NetworkChecked …\nInvalid base58 payload data length for legacy address.\nDecoded base58 data was an invalid length.\nInvalid legacy address prefix in base58 data payload.\nInvalid legacy address prefix in decoded base58 data.\nKnown bech32 human-readable parts.\nLegacy address is too long.\nLegacy base58 address was too long, max 50 characters.\nThe main Bitcoin network.\nMarker that address’s network has been successfully …\nMarker that address’s network has not yet been …\nMarker of status of address’s network validation. See …\nAddress’s network differs from required one.\nAddress’s network differs from required one.\nPay to pubkey hash.\nData encoded by a P2PKH address.\nPay to script hash.\nData encoded by a P2SH address.\nError while generating address from a p2sh script.\nPay to taproot.\nPay to witness pubkey hash.\nPay to witness script hash.\nAddress parsing error.\nThe regtest network.\nData encoded by a Segwit address.\nThe test networks, testnet and signet.\nAddress type is either invalid or not supported in …\nTried to parse an unknown HRP.\nUnknown HRP error.\nScript is not a p2pkh, p2sh or witness program.\nA witness program error.\nA witness program error.\nA witness version construction error.\nA witness version conversion/parsing error.\nError code for the address module.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid payload length.\nReturns the invalid prefix.\nReturns the invalid legacy address length.\nThe pubkey hash used to encumber outputs to this address.\nThe script hash used to encumber outputs to this address.\nThe witness program used to encumber outputs to this …\nBase58 error.\nBech32 segwit decoding error.\nAddress size more than 520 bytes is not allowed.\nError while generating address from script.\nInvalid base58 payload data length for legacy address.\nDecoded base58 data was an invalid length.\nInvalid legacy address prefix in base58 data payload.\nInvalid legacy address prefix in decoded base58 data.\nLegacy address is too long.\nLegacy base58 address was too long, max 50 characters.\nAddress’s network differs from required one.\nAddress’s network differs from required one.\nError while generating address from a p2sh script.\nAddress parsing error.\nAddress type is either invalid or not supported in …\nTried to parse an unknown HRP.\nUnknown HRP error.\nScript is not a p2pkh, p2sh or witness program.\nA witness program error.\nA witness program error.\nA witness version construction error.\nA witness version conversion/parsing error.\nAmount\nbits\nBTC\ncBTC\nCalculate the sum over the iterator using checked …\nA set of denominations in which amounts can be expressed.\nA helper/builder that displays amount with specified …\nInput string was too large.\nInvalid character in input.\nuBTC\nmBTC\nmsat\nA digit was expected but not found.\nnBTC\nThe amount is too big or too small.\nAn error during amount parsing.\npBTC\nsatoshi\nSignedAmount\nAmount has higher precision than supported by the type.\nCalculate the sum over the iterator using checked …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nThis module adds serde serialization and deserialization …\nMakes subsequent calls to Display::fmt display …\nThis trait is used only to avoid code duplication and …\nThis trait is only for internal Amount type …\nSerialize and deserialize Amount as JSON numbers …\nSerialize and deserialize Amount as real numbers …\nSerialize and deserialize Option<Amount> as JSON numbers …\nSerialize and deserialize Option<Amount> as real numbers …\nInvalid character while decoding.\nAn error occurred during base58 decoding (with checksum).\nChecksum was not correct.\nFound a invalid ASCII byte while decoding base58 string.\nA UTF-8–encoded, growable string.\nChecked data was too short.\nA contiguous growable array type, written as Vec<T>, short …\nReturns a reference to the underlying allocator.\nMoves all the elements of other into self, leaving other …\nReturns a byte slice of this String’s contents.\nReturns an unsafe mutable pointer to the vector’s …\nExtracts a mutable slice of the entire vector.\nConverts a String into a mutable string slice.\nReturns a mutable reference to the contents of this String.\nReturns a raw pointer to the vector’s buffer, or a …\nExtracts a slice containing the entire vector.\nExtracts a string slice containing the entire String.\nReturns the total number of elements the vector can hold …\nReturns this String’s capacity, in bytes.\nClears the vector, removing all values.\nTruncates this String, removing all contents.\nOverwrites the contents of self with a clone of the …\nClones the contents of source into self.\nDecodes a base58-encoded string into a byte vector.\nDecodes a base58check-encoded string into a byte vector …\nRemoves consecutive repeated elements in the vector …\nRemoves all but the first of consecutive elements in the …\nRemoves all but the first of consecutive elements in the …\nCreates an empty Vec<T>.\nCreates an empty String.\nRemoves the specified range from the vector in bulk, …\nRemoves the specified range from the string in bulk, …\nEncodes data as a base58 string (see also …\nEncodes data as a base58 string including the checksum.\nEncodes a slice as base58, including the checksum, into a …\nError code for the base58 crate.\nClones and appends all elements in a slice to the Vec.\nCopies elements from src range to the end of the vector.\nCopies elements from src range to the end of the string.\nCreates an iterator which uses a closure to determine if …\nReturns the argument unchanged.\nReturns the argument unchanged.\nTurn a VecDeque<T> into a Vec<T>.\nAllocate a Vec<T> and fill it by cloning s’s items.\nConvert a clone-on-write slice into a vector.\nAllocate a Vec<T> and move s’s items into it.\nConverts a BinaryHeap<T> into a Vec<T>.\nConverts the given String to a vector Vec that holds …\nAllocate a Vec<T> and fill it by cloning s’s items.\nConvert a boxed slice into a vector by transferring …\nConverts a CString into a Vec<u8>.\nReturns the argument unchanged.\nAllocate a Vec<T> and fill it by cloning s’s items.\nAllocate a Vec<u8> and fill it with a UTF-8 string.\nAllocate a Vec<T> and fill it by cloning s’s items.\nConverts a &str into a String.\nConverts a &String into a String.\nReturns the argument unchanged.\nConverts the given boxed str slice to a String. It is …\nAllocates an owned String from a single character.\nConverts a &mut str into a String.\nConverts a clone-on-write string to an owned instance of …\nCreates a Vec<T> directly from a pointer, a length, and a …\nCreates a new String from a pointer, a length and a …\nCreates a Vec<T, A> directly from a pointer, a length, a …\nDecode a UTF-16–encoded vector v into a String, …\nDecode a UTF-16–encoded slice v into a String, replacing …\nDecode a UTF-16BE–encoded vector v into a String, …\nDecode a UTF-16BE–encoded slice v into a String, …\nDecode a UTF-16LE–encoded vector v into a String, …\nDecode a UTF-16LE–encoded slice v into a String, …\nConverts a vector of bytes to a String.\nConverts a slice of bytes to a string, including invalid …\nConverts a vector of bytes to a String without checking …\nInserts an element at position index within the vector, …\nInserts a character into this String at a byte position.\nInserts a string slice into this String at a byte position.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts the vector into Box<[T]>.\nConverts this String into a Box<str>.\nConverts a String into a byte vector.\nTakes a Vec<[T; N]> and flattens it into a Vec<T>.\nCreates a consuming iterator, that is, one that moves each …\nDecomposes a Vec<T> into its raw components: …\nDecomposes a String into its raw components: …\nDecomposes a Vec<T> into its raw components: …\nReturns the ASCII byte that is not a valid base58 …\nReturns true if the vector contains no elements.\nReturns true if this String has a length of zero, and false…\nConsumes and leaks the Vec, returning a mutable reference …\nConsumes and leaks the String, returning a mutable …\nReturns the number of elements in the vector, also …\nReturns the length of this String, in bytes, not chars or …\nConstructs a new, empty Vec<T>.\nCreates a new empty String.\nConstructs a new, empty Vec<T, A>.\nRemoves the last element from a vector and returns it, or …\nRemoves the last character from the string buffer and …\nRemoves and returns the last element in a vector if the …\nAppends an element to the back of a collection.\nAppends the given char to the end of this String.\nAppends a given string slice onto the end of this String.\nAppends an element if there is sufficient spare capacity, …\nRemoves and returns the element at position index within …\nRemoves a char from this String at a byte position and …\nRemove all matches of pattern pat in the String.\nRemoves the specified range in the string, and replaces it …\nReserves capacity for at least additional more elements to …\nReserves capacity for at least additional bytes more than …\nReserves the minimum capacity for at least additional more …\nReserves the minimum capacity for at least additional …\nResizes the Vec in-place so that len is equal to new_len.\nResizes the Vec in-place so that len is equal to new_len.\nRetains only the elements specified by the predicate.\nRetains only the characters specified by the predicate.\nRetains only the elements specified by the predicate, …\nForces the length of the vector to new_len.\nShrinks the capacity of the vector with a lower bound.\nShrinks the capacity of this String with a lower bound.\nShrinks the capacity of the vector as much as possible.\nShrinks the capacity of this String to match its length.\nReturns the remaining spare capacity of the vector as a …\nCreates a splicing iterator that replaces the specified …\nReturns vector content as a slice of T, along with the …\nSplits the collection into two at the given index.\nSplits the string into two at the given byte index.\nRemoves an element from the vector and returns it.\nShortens the vector, keeping the first len elements and …\nShortens this String to the specified length.\nTries to reserve capacity for at least additional more …\nTries to reserve capacity for at least additional bytes …\nTries to reserve the minimum capacity for at least …\nTries to reserve the minimum capacity for at least …\nConstructs a new, empty Vec<T> with at least the specified …\nCreates a new empty String with at least the specified …\nConstructs a new, empty Vec<T, A> with at least the …\nConstructs a new, empty Vec<T> with at least the specified …\nCreates a new empty String with at least the specified …\nConstructs a new, empty Vec<T, A> with at least the …\nInvalid character while decoding.\nAn error occurred during base58 decoding (with checksum).\nChecksum was not correct.\nChecksum was not correct.\nFound a invalid ASCII byte while decoding base58 string.\nChecked data was too short.\nThe decode base58 data was too short (require at least 4 …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the incorrect checksum along with the expected …\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid base58 string length (require at least …\nThe config type used by this engine\nErrors that can occur while decoding.\nA DecodeError occurred\nThe decode estimate used by this engine\nErrors that can occur while decoding into a slice.\nErrors that can occur while encoding into a slice.\nAn Engine provides low-level encoding and decoding …\nAn invalid byte was found in the input. The offset and …\nThe last non-padding input symbol’s encoded 6 bits have …\nThe length of the input is invalid. A typical cause of …\nThe nature of the padding was not as configured: absent or …\nThe provided slice is too small.\nThe provided slice may be too small.\nProvides Alphabet and constants for alphabets commonly …\nReturns the config for this engine.\nDecode base64 using the STANDARD engine.\nDecode the input into a new Vec.\nDecode from string reference as octets using the specified …\nDecode the input into the provided output slice.\nDecode from string reference as octets.\nDecode the input into the provided output slice.\nDecode the input into the provided output slice.\nDecode the input into the supplied buffer.\nReturns a conservative estimate of the decoded size of …\nEnables base64’d output anywhere you might use a Display …\nEncode arbitrary octets as base64 using the STANDARD engine…\nEncode arbitrary octets as base64 using the provided Engine…\nEncode arbitrary octets as base64 using the provided Engine…\nEncode arbitrary octets as base64 into a supplied slice.\nEncode arbitrary octets as base64 into a supplied String.\nEncode arbitrary octets as base64 into a supplied slice. …\nEncode arbitrary octets as base64 into a supplied String. …\nCalculate the base64 encoded length for a given input …\nProvides the Engine abstraction and out of the box …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nPreconfigured engines for common use cases.\nImplementations of io::Read to transparently decode base64.\nImplementations of io::Write to transparently handle …\nAn alphabet defines the 64 ASCII characters (symbols) used …\nThe bcrypt alphabet.\nThe alphabet used in BinHex 4.0 files.\nThe crypt(3) alphabet (with . and / as the first two …\nAll bytes must be unique\nThe alphabet used in IMAP-modified UTF-7 (with + and ,).\nAlphabets must be 64 ASCII bytes\nPossible errors when constructing an Alphabet from a str.\n= cannot be used\nThe standard alphabet (with + and /) specified in RFC 4648.\nThe URL-safe alphabet (with - and _) specified in RFC 4648.\nAll bytes must be printable (in the range [32, 126]).\nCreate a &str from the symbols in the Alphabet\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCreate an Alphabet from a string of 64 unique printable …\nA convenience wrapper for base64’ing bytes into a format …\nReturns the argument unchanged.\nCalls U::from(self).\nCreate a Base64Display with the provided engine.\nThe minimal level of configuration that engines must …\nThe config type used by this engine\nThe decode estimate used by an engine implementation. …\nThe decode estimate used by this engine\nMetadata about the result of a decode operation\nControls how pad bytes are handled when decoding.\nAn Engine provides low-level encoding and decoding …\nA general-purpose base64 engine.\nContains configuration parameters for base64 encoding and …\nCanonical padding is allowed, but any fewer padding bytes …\nPadding must be canonical (0, 1, or 2 = as needed to …\nPadding must be absent – for when you want predictable …\nReturns the config for this engine.\nDecode the input into a new Vec.\nDecode the input into the provided output slice.\nDecode the input into the provided output slice.\nDecode the input into the supplied buffer.\nReturns a conservative (err on the side of too big) …\nDelegates to GeneralPurposeConfig::new.\nEncode arbitrary octets as base64 using the provided Engine…\nReturns true if padding should be added after the encoded …\nEncode arbitrary octets as base64 into a supplied slice. …\nEncode arbitrary octets as base64 into a supplied String. …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nProvides the GeneralPurpose engine and associated config …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a GeneralPurpose engine from an Alphabet.\nCreate a new config with padding = true, …\nCreate a new config based on self with an updated …\nCreate a new config based on self with an updated …\nCreate a new config based on self with an updated padding …\nA general-purpose base64 engine.\nContains configuration parameters for base64 encoding and …\nDon’t add padding when encoding, and require no padding …\nInclude padding bytes when encoding, and require that they …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nThe config type used by this engine\nThe decode estimate used by this engine\nAn Engine provides low-level encoding and decoding …\nReturns the config for this engine.\nDecode the input into a new Vec.\nDecode the input into the provided output slice.\nDecode the input into the provided output slice.\nDecode the input into the supplied buffer.\nEncode arbitrary octets as base64 using the provided Engine…\nEncode arbitrary octets as base64 into a supplied slice. …\nEncode arbitrary octets as base64 into a supplied String. …\nA Read implementation that decodes base64 data read from …\nReturns the argument unchanged.\nCalls U::from(self).\nUnwraps this DecoderReader, returning the base reader …\nCreate a new decoder that will read from the provided …\nDecode input from the wrapped reader.\nA Write implementation that base64-encodes data using the …\nA Write implementation that base64 encodes data before …\nAn abstraction around consuming strs produced by base64 …\nConsume the base64 encoded data in buf\nEncode all remaining buffered data and write it, including …\nBecause this is usually treated as OK to call multiple …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a EncoderStringWriter that will append to the …\nCalls U::from(self).\nCalls U::from(self).\nUnwraps this EncoderWriter, returning the base writer it …\nEncode all remaining buffered data, including any trailing …\nCreate a new encoder that will write to the provided …\nCreate a EncoderStringWriter that will encode into a new …\nEncode input and then write to the delegate writer.\nA BlockTransactions structure is used to provide some of …\nA BlockTransactionsRequest structure is used to list …\nA BIP-152 error\nA HeaderAndShortIds structure is used to relay a block …\nThe prefill slice provided was invalid.\nA PrefilledTransaction structure is used in …\nShort transaction IDs are used to represent a transaction …\nA transaction index is requested that is out of range from …\nAn unknown version number was used.\nReturns a reference the underlying bytes.\nConverts the object to a mutable raw pointer.\nConverts the object to a raw pointer.\nThe blockhash of the block which the transactions being …\nThe blockhash of the block which the transactions being …\nCalculate the SipHash24 keys used to calculate short IDs.\nPanics\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a new HeaderAndShortIds from a full block.\nCreates Self from a hex string.\nConstruct a BlockTransactions from a …\nThe header of the block being provided.\nThe index of the transaction in the block.\nThe indexes of the transactions being requested in the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the object, as an array, is empty. Always …\nReturns the length of the object as an array.\nA nonce for use in short transaction ID calculations.\nUsed to provide the coinbase transaction and a select few …\nThe short transaction IDs calculated from the transactions …\nReturns the underlying bytes.\nThe transactions provided.\nThe actual transaction.\nCalculate the short ID with the given (w)txid and using …\nBitwise stream reader.\nBitwise stream writer.\nA block filter, as described by BIP 158.\nReads and interprets a block filter.\nCompiles and writes a block filter.\nErrors for blockfilter.\nFilter hash, as defined in BIP-157\nFilter header, as defined in BIP-157\nGolomb-Rice encoded filter reader.\nGolomb-Rice encoded filter writer.\nIO error reading or writing binary serialization of the …\nMissing UTXO, cannot calculate script filter.\nAdds an arbitrary element to filter.\nAdds data to the filter.\nAdds consumed output scripts of a block to filter.\nAdds output scripts of the block to filter (excluding …\nGolomb encoded filter\nComputes this filter’s ID in a chain of filters (see BIP …\nWrites the block filter.\nWrites the filter to the wrapped writer.\nflush bits not yet written.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if all queries match against this …\nReturns true if all queries match against this …\nReturns true if all queries match against this BlockFilter.\nReturns true if any query matches against this …\nReturns true if any query matches against this …\nReturns true if any query matches against this BlockFilter.\nCreates a new BlockFilterWriter from block.\nCreates a new BlockFilterReader from block_hash.\nCreates a new GcsFilterReader with specific seed to …\nCreates a new GcsFilterWriter wrapping a generic writer, …\nCreates a new BitStreamReader that reads bitwise from a …\nCreates a new BitStreamWriter that writes bitwise to a …\nCreates a new filter from pre-computed data.\nComputes a SCRIPT_FILTER that contains spent and output …\nReads nbit bits, returning the bits in a u64 starting with …\nWrites nbits bits from data.\nBase58 encoding error\nA pk->pk derivation was attempted on a hardened key\nA chain code\nA child number for a derived key\nA BIP-32 derivation path.\nAn iterator over children of a DerivationPath.\nA BIP32 error\nThe old name for xpriv, extended public key.\nThe old name for xpub, extended public key.\nThe old name for xpriv, extended public key (with a …\nThe old name for xpub, extended public key (with a …\nA fingerprint\nHardened key\nHexadecimal decoding error\nTrait that allows possibly failable conversion from a type …\nBase58 decoded data was an invalid length.\nDecoded base58 data was an invalid length.\nA child number was provided that was out of range\nInvalid childnumber format.\nInvalid derivation path format.\nPublicKey hex should be 66 or 130 digits long.\nFull information on the used extended public key: …\nNon-hardened key\nA secp256k1 error occurred\nUnknown version magic bytes\nEncoded extended key data has wrong length\nExtended key identifier as defined in BIP-32.\nExtended private key\nExtended public key\nReturns a reference the underlying bytes.\nReturns a reference the underlying bytes.\nConverts the object to a mutable raw pointer.\nConverts the object to a mutable raw pointer.\nConverts the object to a raw pointer.\nConverts the object to a raw pointer.\nChain code\nChain code\nChain code\nChain code\nChain code\nChain code\nCreate a new DerivationPath that is a child of this one.\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nGet an Iterator over the children of this DerivationPath …\nPublic->Public child key derivation\nCompute the scalar tweak added to this key to get a child …\nDecoding extended private key from binary data according …\nDecoding extended public key from binary data according to …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nAttempts to derive an extended private key from a path.\nAttempts to derive an extended public key from a path.\nExtended private key binary encoding according to BIP 32\nExtended public key binary encoding according to BIP 32\nConcatenate self with path and return the resulting new …\nReturns the first four bytes of the identifier\nReturns the first four bytes of the identifier\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a Hardened from an index, returns an error if the …\nCreates Self from a hex string.\nCreates Self from a hex string.\nCreate a Normal from an index, returns an error if the …\nDerives a public key from a private key\nGet an Iterator over the hardened children of this …\nReturns the HASH160 of the public key belonging to the …\nReturns the HASH160 of the chaincode\nReturns the child number that is a single increment from …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert into a DerivationPath that is a child of this one.\nConverts a given type into a DerivationPath with possible …\nConvert an iterator of anything into FallibleIterator by …\nReturns the invalid payload length.\nReturns whether the object, as an array, is empty. Always …\nReturns whether the object, as an array, is empty. Always …\nReturns true if the derivation path is empty\nReturns true if the child number is a Hardened value.\nReturns whether derivation path represents master key …\nReturns true if the child number is a Normal value.\nReturns the length of the object as an array.\nReturns the length of the object as an array.\nReturns length of the derivation path\nReturns derivation path for a master key (i.e. empty …\nThe network kind this key is to be used on\nThe network kind this key is to be used on\nThe network this key is to be used on\nThe network this key is to be used on\nThe network this key is to be used on\nThe network kind this key is to be used on\nConstruct a new master key from a seed value\nGet an Iterator over the unhardened children of this …\nFingerprint of the parent key\nFingerprint of the parent key\nFingerprint of the parent key (0 for master)\nFingerprint of the parent key (0 for master)\nFingerprint of the parent key (0 for master)\nFingerprint of the parent key\nPrivate key\nPrivate key\nPrivate key\nPublic key\nPublic key\nPublic key\nStart a new DerivationPathIterator at the given child.\nReturns the underlying bytes.\nReturns the underlying bytes.\nConstructs BIP340 keypair for Schnorr signatures and …\nConstructs ECDSA compressed private key matching internal …\nConstructs ECDSA compressed public key matching internal …\nReturns the derivation path as a vector of u32 integers. …\nConstructs BIP340 x-only public key for BIP-340 signatures …\nConvert an iterator of Results into FallibleIterator by …\nKey index, within [0, 2^31 - 1]\nKey index, within [0, 2^31 - 1]\nRepresents fee rate.\nRepresents block weight - the weight of a transaction or …\nBitcoin blocks.\nBlockdata constants.\nImplements FeeRate and assoctiated features.\nProvides absolute and relative locktimes.\nBitcoin script opcodes.\nBitcoin scripts.\nBitcoin transactions.\nImplements Weight and associated features.\nWitness\nThe header hash is not below the target.\nThe target field of a block header did not match the …\nAn error when looking up a BIP34 block height.\nBitcoin block.\nA bitcoin block hash.\nBitcoin block header.\nBIP-9 compatible version number that does not signal for …\nThe BIP34 push was negative.\nNo push was present where the BIP34 push was expected.\nThe original Bitcoin Block v1.\nThe number of bytes that the block header contributes to …\nBIP-34 Block v2.\nA hash of the Merkle tree branch or root for transactions.\nThe BIP34 push was larger than 8 bytes.\nThe block does not support BIP34 yet.\nA block validation error.\nBitcoin block version number.\nA hash corresponding to the witness structure commitment …\nA hash corresponding to the Merkle tree root for witness …\nThe target value below which the blockhash must lie.\nReturns the block hash.\nComputes the popular “difficulty” measure for mining.\nComputes the popular “difficulty” measure for mining …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a Version from a signed 32 bit integer value.\nThe block header\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nChecks whether the version number is signalling a soft …\nThe root hash of the merkle tree of transactions in the …\nThe nonce, selected to obtain a low enough blockhash.\nReference to the previous block in the chain.\nComputes the target (range [0, T] inclusive) that a …\nThe timestamp of the block, as claimed by the miner.\nReturns the inner i32 value.\nList of transactions contained in the block\nChecks that the proof-of-work for the block is valid, …\nBlock version, now repurposed for soft fork signalling.\nReturns the total work of the block.\nChainHash for mainnet bitcoin.\nNumber of blocks needed for an output from a coinbase …\nThe uniquely identifying hash of the target blockchain.\nHow many blocks between diffchanges.\nHow much time on average should occur between diffchanges.\nThe maximum allowed number of signature check operations …\nMaximum allowed value for an integer in Script.\nThe maximum allowed script size.\nMainnet (bitcoin) pubkey address prefix.\nTest (tesnet, signet, regtest) pubkey address prefix.\nChainHash for regtest bitcoin.\nMainnet (bitcoin) script address prefix.\nTest (tesnet, signet, regtest) script address prefix.\nChainHash for signet bitcoin.\nHow may blocks between halvings.\nHow many seconds between blocks we expect on average.\nChainHash for testnet bitcoin.\nThe factor that non-witness serialization data is …\nReturns a reference the underlying bytes.\nConverts the object to a mutable raw pointer.\nConverts the object to a raw pointer.\nReturns the argument unchanged.\nConverts genesis block hash into ChainHash.\nCreates Self from a hex string.\nConstructs and returns the genesis block.\nCalls U::from(self).\nReturns whether the object, as an array, is empty. Always …\nReturns the length of the object as an array.\nReturns the underlying bytes.\nReturns the hash of the network genesis block for use as a …\nReturns the hash of the network genesis block for use as a …\nRepresents fee rate.\nProvides type LockTime that implements the logic around …\nProvides type LockTime that implements the logic around …\nA block height lock time value.\nAn error that occurs when converting a u32 to a lock time …\nAn absolute block height, guaranteed to always contain a …\nThe Threshold for deciding whether a lock time value is a …\nAn absolute lock time value, representing either a block …\nThe maximum absolute block height.\nThe maximum absolute block time (Sun Feb 07 2106 06:28:15 …\nThe minimum absolute block height (0), the genesis block.\nThe minimum absolute block time (Tue Nov 05 1985 00:53:20 …\nError returned when parsing block height fails.\nError returned when parsing block time fails.\nThe number of bytes that the locktime contributes to the …\nA UNIX timestamp lock time value.\nA UNIX timestamp, seconds since epoch, guaranteed to …\nAbsolute block height 0, the genesis block.\nIf crate::Transaction::lock_time is set to zero it is …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a new block height.\nConstructs a new block time.\nConstructs a LockTime from an nLockTime value or the …\nConstructs a LockTime from n, expecting n to be a valid …\nCreates a Height from a hex string.\nCreates a Time from a hex string.\nCreates a LockTime from an prefixed hex string.\nConstructs a LockTime from n, expecting n to be a valid …\nCreates a LockTime from an unprefixed hex string.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if this lock time value is a block height.\nReturns true if this lock time value is a block time (UNIX …\nReturns true if satisfaction of other lock time implies …\nReturns true if both lock times use the same unit i.e., …\nReturns true if this timelock constraint is satisfied by …\nConverts this Height to its inner u32 value.\nConverts this Time to its inner u32 value.\nReturns the inner u32 value. This is the value used when …\nA block height lock time value.\nError returned when a sequence number is parsed as a lock …\nA relative lock time lock-by-blockheight value.\nTried to satisfy a lock-by-blocktime lock using a height …\nTried to satisfy a lock-by-blockheight lock using a time …\nA relative lock time value, representing either a block …\nThe maximum relative block height.\nThe maximum relative block time (33,554,432 seconds or …\nThe minimum relative block height (0), can be included in …\nThe minimum relative block time (0), can be included in …\nThe number of bytes that the locktime contributes to the …\nA relative lock time lock-by-blocktime value.\nA 512 second time interval value.\nInput time in seconds was too large to be encoded to a 16 …\nRelative block height 0, can be included in any block.\nRelative block time 0, can be included in any block.\nA relative locktime of 0 is always valid, and is assumed …\nAccessor for the u32 whose “disable” flag was set, …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a Time using time intervals where each interval is …\nConstructs a LockTime from n, expecting n to be a count of …\nConstructs a LockTime from an nSequence value or the …\nCreate a Height using a count of blocks.\nConstructs a LockTime from n, expecting n to be a 16-bit …\nCreate a Time from seconds, converting the seconds into …\nCreate a LockTime from seconds, converting the seconds …\nCreate a Time from seconds, converting the seconds into …\nCreate a LockTime from seconds, converting the seconds …\nConstructs a LockTime from the sequence number of a …\nAttempted to satisfy a lock-by-blocktime lock with this …\nThe inner height value of the lock-by-blockheight lock.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if this lock time value is in units of block …\nReturns true if this lock time value is in units of time.\nReturns true if satisfaction of other lock time implies …\nReturns true if satisfaction of the sequence number …\nReturns true if both lock times use the same unit i.e., …\nReturns true if this [relative::LockTime] is satisfied by …\nReturns true if this [relative::LockTime] is satisfied by …\nReturns true if this [relative::LockTime] is satisfied by …\nCreates a new TimeOverflowError using seconds.\nThe inner time value of the lock-by-blocktime lock.\nAttempted to satisfy a lock-by-blockheight lock with this …\nReturns the u32 value used to encode this locktime in an …\nReturns the u32 value used to encode this locktime in an …\nReturns the u32 value used to encode this locktime in an …\nEncodes the locktime as a sequence number.\nReturns the inner u16 value.\nReturns the inner u16 value.\nBroad categories of opcodes with similar behavior.\nClassification context for the opcode.\nFails the script even if not executed.\nOpcode used in legacy context.\nDoes nothing.\nPush an empty array onto the stack.\nEmpty stack is also FALSE.\nPreviously called OP_NOP2.\nPreviously called OP_NOP3.\nNumber 1 is also TRUE.\nA script Opcode.\nAny opcode not covered above.\nPushes the given number of bytes onto the stack.\nPushes the given number onto the stack.\nFails the script if executed.\nSucceeds the script even if not executed.\nOpcode used in tapscript context.\nEnables wildcard imports to bring into scope all opcodes …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nMap 0 to 0 and everything else to 1, in place.\nIncrement the top stack element in place.\nDecrement the top stack element in place.\nFail the script unconditionally, does not even need to be …\nDrops the top two stack items.\nDuplicates the top two stack items as AB -> ABAB.\nFail the script unconditionally, does not even need to be …\nCopies the two stack items of items two spaces back to the …\nMoves the two stack items four spaces back to the front, …\nSwaps the top two pairs, as ABCD -> CDAB.\nDuplicates the two three stack items as ABC -> ABCABC.\nAbsolute value the top stack item in place.\nPop two stack items and push their sum.\nFail the script unconditionally, does not even need to be …\nPop the top two stack items and push 1 if both are …\nPop the top two stack items and push 1 if either is …\nFail the script unconditionally, does not even need to be …\nPop N, N pubkeys, M, M signatures, a dummy (due to bug in …\nLike the above but return success/failure.\nhttps://en.bitcoin.it/wiki/OP_CHECKSIG pushing 1/0 for …\nOP_CHECKSIGADD post tapscript.\nhttps://en.bitcoin.it/wiki/OP_CHECKSIG returning …\n…\nIgnore this and everything preceding when deciding what to …\n…\nPush the current number of stack items onto the stack.\nFail the script unconditionally, does not even need to be …\nDrops the top stack item.\nDuplicates the top stack item.\nExecute statements if those after the previous OP_IF were …\nPop and execute the next statements if a zero element was …\nPushes 1 if the inputs are exactly equal, 0 otherwise.\nReturns success if the inputs are exactly equal, failure …\nPop one element from the alt stack onto the main stack.\nPop the top two items; push 1 if the second is greater …\nPop the top two items; push 1 if the second is >= the top, …\nPop the top stack item and push its RIPEMD(SHA256) hash.\nPop the top stack item and push its SHA256(SHA256) hash.\nPop and execute the next statements if a nonzero element …\nDuplicate the top stack element unless it is zero.\nSynonym for OP_RETURN.\nFail the script unconditionally, does not even need to be …\nFail the script unconditionally, does not even need to be …\nPop the top two items; push 1 if the second is less than …\nPop the top two items; push 1 if the second is <= the top, …\nFail the script unconditionally, does not even need to be …\nPop the top two items; push the larger.\nPop the top two items; push the smaller.\nFail the script unconditionally, does not even need to be …\nFail the script unconditionally, does not even need to be …\nMultiply the top stack item by -1 in place.\nDrops the second-to-top stack item.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nMap 0 to 1 and everything else to 0, in place.\nPop and execute the next statements if a zero element was …\nPop the top two stack items and push 1 if both are …\nPop the top two stack items and return success if both are …\nPop the top two stack items and push 0 if both are …\nFail the script unconditionally, does not even need to be …\nCopies the second-to-top stack item, as xA -> AxA.\nPop the top stack element as N. Copy the Nth stack element …\nPush an empty array onto the stack.\nPush the next byte as an array onto the stack.\nPush the next 10 bytes as an array onto the stack.\nPush the next 11 bytes as an array onto the stack.\nPush the next 12 bytes as an array onto the stack.\nPush the next 13 bytes as an array onto the stack.\nPush the next 14 bytes as an array onto the stack.\nPush the next 15 bytes as an array onto the stack.\nPush the next 16 bytes as an array onto the stack.\nPush the next 17 bytes as an array onto the stack.\nPush the next 18 bytes as an array onto the stack.\nPush the next 19 bytes as an array onto the stack.\nPush the next 2 bytes as an array onto the stack.\nPush the next 20 bytes as an array onto the stack.\nPush the next 21 bytes as an array onto the stack.\nPush the next 22 bytes as an array onto the stack.\nPush the next 23 bytes as an array onto the stack.\nPush the next 24 bytes as an array onto the stack.\nPush the next 25 bytes as an array onto the stack.\nPush the next 26 bytes as an array onto the stack.\nPush the next 27 bytes as an array onto the stack.\nPush the next 28 bytes as an array onto the stack.\nPush the next 29 bytes as an array onto the stack.\nPush the next 3 bytes as an array onto the stack.\nPush the next 30 bytes as an array onto the stack.\nPush the next 31 bytes as an array onto the stack.\nPush the next 32 bytes as an array onto the stack.\nPush the next 33 bytes as an array onto the stack.\nPush the next 34 bytes as an array onto the stack.\nPush the next 35 bytes as an array onto the stack.\nPush the next 36 bytes as an array onto the stack.\nPush the next 37 bytes as an array onto the stack.\nPush the next 38 bytes as an array onto the stack.\nPush the next 39 bytes as an array onto the stack.\nPush the next 4 bytes as an array onto the stack.\nPush the next 40 bytes as an array onto the stack.\nPush the next 41 bytes as an array onto the stack.\nPush the next 42 bytes as an array onto the stack.\nPush the next 43 bytes as an array onto the stack.\nPush the next 44 bytes as an array onto the stack.\nPush the next 45 bytes as an array onto the stack.\nPush the next 46 bytes as an array onto the stack.\nPush the next 47 bytes as an array onto the stack.\nPush the next 48 bytes as an array onto the stack.\nPush the next 49 bytes as an array onto the stack.\nPush the next 5 bytes as an array onto the stack.\nPush the next 50 bytes as an array onto the stack.\nPush the next 51 bytes as an array onto the stack.\nPush the next 52 bytes as an array onto the stack.\nPush the next 53 bytes as an array onto the stack.\nPush the next 54 bytes as an array onto the stack.\nPush the next 55 bytes as an array onto the stack.\nPush the next 56 bytes as an array onto the stack.\nPush the next 57 bytes as an array onto the stack.\nPush the next 58 bytes as an array onto the stack.\nPush the next 59 bytes as an array onto the stack.\nPush the next 6 bytes as an array onto the stack.\nPush the next 60 bytes as an array onto the stack.\nPush the next 61 bytes as an array onto the stack.\nPush the next 62 bytes as an array onto the stack.\nPush the next 63 bytes as an array onto the stack.\nPush the next 64 bytes as an array onto the stack.\nPush the next 65 bytes as an array onto the stack.\nPush the next 66 bytes as an array onto the stack.\nPush the next 67 bytes as an array onto the stack.\nPush the next 68 bytes as an array onto the stack.\nPush the next 69 bytes as an array onto the stack.\nPush the next 7 bytes as an array onto the stack.\nPush the next 70 bytes as an array onto the stack.\nPush the next 71 bytes as an array onto the stack.\nPush the next 72 bytes as an array onto the stack.\nPush the next 73 bytes as an array onto the stack.\nPush the next 74 bytes as an array onto the stack.\nPush the next 75 bytes as an array onto the stack.\nPush the next 8 bytes as an array onto the stack.\nPush the next 9 bytes as an array onto the stack.\nRead the next byte as N; push the next N bytes as an array …\nRead the next 2 bytes as N; push the next N bytes as an …\nRead the next 4 bytes as N; push the next N bytes as an …\nPush the array 0x01 onto the stack.\nPush the array 0x0a onto the stack.\nPush the array 0x0b onto the stack.\nPush the array 0x0c onto the stack.\nPush the array 0x0d onto the stack.\nPush the array 0x0e onto the stack.\nPush the array 0x0f onto the stack.\nPush the array 0x10 onto the stack.\nPush the array 0x02 onto the stack.\nPush the array 0x03 onto the stack.\nPush the array 0x04 onto the stack.\nPush the array 0x05 onto the stack.\nPush the array 0x06 onto the stack.\nPush the array 0x07 onto the stack.\nPush the array 0x08 onto the stack.\nPush the array 0x09 onto the stack.\nPush the array 0x81 onto the stack.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nFail the script immediately. (Must be executed.).\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nFail the script unconditionally, does not even need to be …\nPop the top stack item and push its RIPEMD160 hash.\nPop the top stack element as N. Move the Nth stack element …\nRotate the top three stack items, as [top next1 next2] -> […\nFail the script unconditionally, does not even need to be …\nPop the top stack item and push its SHA1 hash.\nPop the top stack item and push its SHA256 hash.\nPushes the length of the top stack item onto the stack.\nPop two stack items and push the second minus the top.\nFail the script unconditionally, does not even need to be …\nSwap the top two stack items.\nPop one element from the main stack onto the alt stack.\nCopy the top stack item to before the second item, as [top …\nSynonym for OP_RETURN.\nFail the script unconditionally, does not even need to be …\nIf the top value is zero or the stack is empty, fail; …\nFail the script unconditionally, does not even need to be …\nPop the top three items; if the top is >= the second and < …\nFail the script unconditionally, does not even need to be …\nAn Object which can be used to construct a script piece by …\nIterator over bytes of a script\nSome opcode expected a parameter but it was missing or …\nWays that a script might fail. Not everything is split up …\nA “parsed opcode” which allows iterating over a Script …\nIterator over script instructions with their positions.\nIterator over a script returning parsed opcodes.\nSomething did a non-minimal push; for more information see …\nTried to read an array off the stack as a number when it …\nSome non-push opcode.\nByte slices that can be in Bitcoin script.\nPush a bunch of data.\nOwned, growable counterpart to PushBytes.\nError returned on attempt to create too large PushBytes.\nReports information about failed conversion into PushBytes.\nBitcoin script slice.\nAn owned, growable script.\nA hash of Bitcoin Script bytecode.\nCan not serialize the spending transaction.\nCan not find the spent output.\nSegWit version of a Bitcoin Script bytecode hash.\nReturns script bytes\nReturns the underlying bytes.\nReturns the underlying mutbale bytes.\nExtracts mutable PushBytes slice\nExtracts PushBytes slice\nReturns the internal script\nViews the remaining script as a slice.\nViews the remaining script as a slice.\nReturns the number of bytes the buffer can contain without …\nRemove all bytes from buffer without affecting capacity.\nCreates an empty PushBytes.\nTry appending a slice to PushBytesBuf\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nHow many bytes the input had.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts the Builder into script bytes\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nConverts the Builder into ScriptBuf.\nChecks whether the script is the empty script.\nReturns true if the buffer contains zero bytes.\nReturns true if the buffer contains zero bytes.\nReturns the length in bytes of the script.\nReturns the number of bytes in buffer.\nReturns the number of bytes in buffer.\nCreates a new empty script.\nCreates a new empty PushBytesBuf.\nReturns the opcode if the instruction is not a data push.\nRemove the last byte from buffer if any.\nTry pushing a single byte.\nReturns the pushed bytes if the instruction is a data push.\nAdds instructions to push an integer onto the stack.\nAdds instructions to push a public key onto the stack.\nAdds instructions to push an absolute lock time onto the …\nAdds a single opcode to the script.\nAdds instructions to push a sequence number onto the stack.\nAdds instructions to push some arbitrary data onto the …\nAdds an OP_VERIFY to the script or replaces the last …\nAdds instructions to push an XOnly public key onto the …\nDecodes a boolean.\nDecodes an integer in script(minimal CScriptNum) format.\nDecodes an integer in script format without non-minimal …\nRemove the byte at index and return it.\nReserve capacity for additional_capacity bytes.\nReturns the number interpretted by the script parser if it …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nRemove bytes from buffer past len.\nCreates a new empty PushBytesBuf with reserved capacity.\nThe segregated witness program as defined by BIP141.\nThe segregated witness version byte as defined by BIP141.\nEncodes an integer in script(minimal CScriptNum) format.\nWitness program error.\nThe witness program must be between 2 and 40 bytes in …\nA v0 witness program must be either of length 20 or 32.\nThe maximum byte size of a segregated witness program.\nThe minimum byte size of a segregated witness program.\nThe segregated witness program.\nReturns the argument unchanged.\nCalls U::from(self).\nCannot create a witness version from non-zero data push.\nError parsing WitnessVersion from a string.\nString contained an invalid witness version number.\nCannot not convert OP to a witness version.\nError attempting to create a WitnessVersion from an …\nError attempting to create a WitnessVersion from an …\nUnable to parse integer from string.\nInitial version of witness program. Used for P2WPKH and …\nVersion of witness program used for Taproot P2TR outputs.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nVersion of the segregated witness program.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid non-witness version integer.\nError in general format.\nError attempting to do an out of bounds access on a vector.\nWeight prediction of an individual input.\nError attempting to do an out of bounds access on the …\nThe original Bitcoin transaction version (pre-BIP-68).\nA reference to a transaction output.\nError attempting to do an out of bounds access on the …\nInput weight prediction corresponding to spending of a …\nInput weight prediction corresponding to spending of a …\nInput weight prediction corresponding to spending of …\nInput weight prediction corresponding to spending of …\nInput weight prediction corresponding to spending of …\nAn error in parsing an OutPoint.\nBitcoin transaction input sequence number.\nThe second Bitcoin transaction version (post-BIP-68).\nSize exceeds max.\nBitcoin transaction.\nBitcoin transaction input.\nBitcoin transaction output.\nA bitcoin transaction hash/transaction ID.\nError in TXID part.\nThe transaction version.\nError in vout part.\nVout part is not strictly numeric without leading zeroes.\nA bitcoin witness transaction ID.\nComputes the value of an output accounting for the cost of …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nComputes the prediction for a single input in const …\nInput weight prediction corresponding to spending of a …\nInput weight prediction corresponding to spending of …\nAttempted index access.\nList of transaction inputs.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if this transaction version number is …\nLength of the vector where access was attempted.\nBlock height or timestamp. Transaction cannot be included …\nComputes the prediction for a single input.\nCreates a non-standard transaction version.\nList of transaction outputs.\nPredicts the weight of a to-be-constructed transaction.\nPredicts the weight of a to-be-constructed transaction in …\nThe reference to the previous output that is being used as …\nThe script which must be satisfied for the output to be …\nThe script which pushes values on the stack which will …\nThe sequence number, which suggests to miners which of two …\nThe referenced transaction’s txid.\nThe value of the output, in satoshis.\nThe protocol version, is currently expected to be 1 or 2 …\nThe index of the referenced output in its transaction’s …\nTallies the total weight added to a transaction by an …\nWitness data: an array of byte-arrays. Note that this …\nThe factor that non-witness serialization data is …\nRepresents block weight - the weight of a transaction or …\nAn iterator returning individual witness elements.\nThe Witness is the data used to unlock bitcoin since the …\nReturns the argument unchanged.\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nThe mainnet parameters (alias for Params::MAINNET).\nInvalid consensus encoding.\nData which can be encoded in a consensus-consistent way.\nError when consensus decoding from an [IterReader].\nData which can be encoded in a consensus-consistent way.\nThe mainnet parameters.\nOther decoding error.\nParameters that influence chain consensus.\nThe regtest parameters.\nExtensions of Read to decode data as per Bitcoin consensus.\nThe signet parameters.\nThe testnet parameters.\nAttempted to decode an object from an iterator that …\nExtensions of Write to encode data as per Bitcoin …\nDetermines whether minimal difficulty may be used for …\nTime when BIP16 becomes active.\nBlock height at which BIP34 becomes active.\nBlock height at which BIP65 becomes active.\nBlock height at which BIP66 becomes active.\nDecode an object with a well-defined format.\nDecode Self from a size-limited reader.\nEncodes an object with a well-defined format.\nDeserializes an object from a vector, will error if said …\nDeserializes an object from a vector, but will not report …\nCalculates the number of blocks between difficulty …\nOutputs a boolean.\nOutputs a 16-bit signed integer.\nOutputs a 32-bit signed integer.\nOutputs a 64-bit signed integer.\nOutputs an 8-bit signed integer.\nOutputs a byte slice.\nOutputs a 16-bit unsigned integer.\nOutputs a 32-bit unsigned integer.\nOutputs a 64-bit unsigned integer.\nOutputs an 8-bit unsigned integer.\nBitcoin consensus-encodable types.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nThe maximum attainable target value for these params.\nNumber of blocks with the same set of rules.\nNetwork for which parameters are valid.\nCreates parameters set for the given network. /// …\nDetermines whether retargeting is disabled for this …\nBitcoin consensus parameters.\nProof of work limit value. It contains the lowest possible …\nExpected amount of time to mine one block.\nDifficulty recalculation interval.\nReads a boolean.\nReads a 16-bit signed integer.\nReads a 32-bit signed integer.\nReads a 64-bit signed integer.\nReads an 8-bit signed integer.\nReads a byte slice.\nReads a 16-bit unsigned integer.\nReads a 32-bit unsigned integer.\nReads a 64-bit unsigned integer.\nReads an 8-bit unsigned integer.\nMinimum blocks including miner confirmation of the total …\nSerde serialization via consensus encoding\nEncodes an object into a vector.\nData and a 4-byte checksum.\nData which can be encoded in a consensus-consistent way.\nDecoding error.\nData which can be encoded in a consensus-consistent way.\nEncoding error.\nHex deserialization error.\nChecksum was invalid.\nAnd I/O error.\nMaximum size, in bytes, of a vector we are allowed to …\nVarInt was encoded in a non-minimal way.\nPurported hex string had odd length.\nTried to allocate an oversized vector.\nParsing error.\nExtensions of Read to decode data as per Bitcoin consensus.\nUnsupported Segwit flag.\nA variable-length unsigned integer.\nExtensions of Write to encode data as per Bitcoin …\nReturns the checksum of the data.\nDecode an object with a well-defined format.\nDecode Self from a size-limited reader.\nEncodes an object with a well-defined format.\nReturns a reference to the raw data without the checksum.\nDeserializes an object from a vector, will error if said …\nDeserialize any decodable type from a hex string, will …\nDeserializes an object from a vector, but will not report …\nOutputs a boolean.\nOutputs a 16-bit signed integer.\nOutputs a 32-bit signed integer.\nOutputs a 64-bit signed integer.\nOutputs an 8-bit signed integer.\nOutputs a byte slice.\nOutputs a 16-bit unsigned integer.\nOutputs a 32-bit unsigned integer.\nOutputs a 64-bit unsigned integer.\nOutputs an 8-bit unsigned integer.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the raw data without the checksum.\nCreates a new CheckedData computing the checksum of given …\nReads a boolean.\nReads a 16-bit signed integer.\nReads a 32-bit signed integer.\nReads a 64-bit signed integer.\nReads an 8-bit signed integer.\nReads a byte slice.\nReads a 16-bit unsigned integer.\nReads a 32-bit unsigned integer.\nReads a 64-bit unsigned integer.\nReads an 8-bit unsigned integer.\nEncodes an object into a vector.\nEncodes an object into a hex-encoded string.\nThe invalid checksum.\nThe expected checksum.\nThe maximum capacity.\nThe capacity requested.\nThe mainnet parameters.\nParameters that influence chain consensus.\nThe regtest parameters.\nThe signet parameters.\nThe testnet parameters.\nDetermines whether minimal difficulty may be used for …\nTime when BIP16 becomes active.\nBlock height at which BIP34 becomes active.\nBlock height at which BIP65 becomes active.\nBlock height at which BIP66 becomes active.\nThe maximum attainable target value for these params.\nNumber of blocks with the same set of rules.\nNetwork for which parameters are valid.\nDetermines whether retargeting is disabled for this …\nProof of work limit value. It contains the lowest possible …\nExpected amount of time to mine one block.\nDifficulty recalculation interval.\nMinimum blocks including miner confirmation of the total …\nProvides an instance of string-to-byte decoder.\nProvides an instance of byte-to-string encoder.\nError returned when decoding fails.\nThe decoder state.\nTransforms given bytes and writes to the writer.\nThe encoder state.\nHex-encoding strategy\nError returned when decoder can’t be created.\nConverts error into a type implementing serde::de::Error\nHelper for #[serde(with = "")].\nDeserializes the value as consensus-encoded\nTransform the provided slice and write to the writer.\nWrite data in buffer (if any) to the writer.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs the decoder from string.\nImplements hex encoding.\nCalls U::from(self).\nCalls U::from(self).\nPerforms the conversion.\nSerializes the value as consensus-encoded\nMarker for upper/lower case type-level flags (“…\nError returned when a hex string contains invalid …\nError returned when a hex string decoder can’t be …\nHex decoder state.\nHex byte encoder.\nMarker for using lower-case hex encoding.\nMarker for using upper-case hex encoding.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nSignature was empty.\nAn ECDSA signature-related error.\nHex decoding error.\nA secp256k1 error.\nHolds signature serialized in-line (not in Vec).\nNon-standard sighash type.\nAn ECDSA signature with the corresponding hash type.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDeserializes from slice following the standardness rules …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns an iterator over bytes of the signature.\nSerializes an ECDSA signature (inner secp256k1 signature …\nSerializes an ECDSA signature (inner secp256k1 signature …\nConstructs an ECDSA Bitcoin signature for …\nThe corresponding hash type.\nThe underlying ECDSA Signature.\nSerializes an ECDSA signature (inner secp256k1 signature …\nWrites this serialized signature to a writer.\nHex string contains prefix.\nError when hex string contains a prefix (e.g. 0x).\nHex string is missing prefix.\nError when hex string is missing a prefix (e.g. 0x).\nError parsing integer from hex string.\nError parsing integer from string.\nError with rich context returned when a string can’t be …\nError returned when parsing integer from an supposedly …\nError returned when parsing integer from an supposedly …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nA bitcoin block hash.\nFilter hash, as defined in BIP-157\nFilter header, as defined in BIP-157\nA hash of the Merkle tree branch or root for transactions.\nA bitcoin transaction hash/transaction ID.\nA hash corresponding to the witness structure commitment …\nA hash corresponding to the Merkle tree root for witness …\nA bitcoin witness transaction ID.\nLength of the hash’s internal block size, in bytes.\nThe byte array that represents the hash internally.\nFlag indicating whether user-visible serializations of …\nA hashing engine which bytes can be serialized into. It is …\nAttempted to create a hash from an invalid length slice.\nTrait which applies to hashes of all types.\nA hashing engine which bytes can be serialized into.\nA hash computed from a RFC 2104 HMAC. Parameterized by the …\nPair of underlying hash engines, used for the inner and …\nLength of the hash, in bytes.\nByte array representing the internal state of the hash …\nReturns an all zero hash.\nReturns a reference to the underlying byte array.\nAdds slicing traits implementations to a given type $ty\nUseful comparison functions.\nConstructs a new engine.\nConstructs a hash from the underlying byte array.\nProduces a hash from the current state of a given engine.\nCopies a byte slice into a hash object.\nHashes some bytes.\nHASH160 (SHA256 then RIPEMD160) implementation.\nHashes all the byte slices retrieved from the iterator …\nCreates a new newtype around a Hash type.\nAdds hexadecimal formatting implementation of a trait $imp …\nHash-based Message Authentication Code (HMAC).\nAdd data to the hash engine.\nOutputs the midstate of the hash engine. This function …\nReturn the number of bytes already …\nRIPEMD160 implementation.\nImplements Serialize and Deserialize for a type $t which …\nMacros for serde trait implementations, and supporting …\nSHA1 implementation.\nSHA256 implementation.\nSHA256d implementation (double SHA256).\nSHA256t implementation (tagged SHA256).\nMacro used to define a newtype tagged hash.\nSHA384 implementation.\nSHA512 implementation.\nSHA512_256 implementation.\nSipHash 2-4 implementation.\nReturns the underlying byte array.\nCompare two slices for equality in fixed time. Panics if …\nOutput of the Bitcoin HASH160 hash function. …\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nIterator over bytes which encodes the bytes and yields hex …\nPossible case of hex.\nThe type providing fmt::Display implementation.\nExtension trait for types that can be displayed as hex.\nError type returned while parsing hex string.\nTrait for objects that can be deserialized from hex …\nConvenience alias for HexToBytesIter<HexDigitsIter<'a>>.\nHex decoding error.\nHex decoding error.\nIterator yielding bytes decoded from an iterator of pairs …\nNon-hexadecimal character.\nNon-hexadecimal character.\nInvalid hex character.\nTried to parse fixed-length hash from a string with the …\nProduce lower-case chars ([0-9a-f]).\nPurported hex string had odd length.\nPurported hex string had odd length.\nProduce upper-case chars ([0-9A-F]).\nAppends hex-encoded content to an existing String.\nDisplay Self as a continuous sequence of ASCII hex chars.\nImplements a buffered encoder.\nHelpers for displaying bytes as hex strings.\nError code for the hex-conservative crate.\nFormat known-length array as hex.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nProduces an object from a hex string.\nConstructs a custom hex decoding iterator from another …\nHints how much bytes to reserve when creating a String.\nAdds core::fmt trait implementations to type $ty.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nReturns the invalid character byte.\nReturns the odd length of the input string.\nConstructs a new HexToBytesIter from a string slice.\nConstructs a new BytesToHexIter from a byte iterator.\nHex encoding and decoding.\nRe-exports of the common crate traits.\nQuick and dirty macro for parsing hex in tests.\nCreate a hex-encoded string.\nCreate a lower-hex-encoded string.\nCreate an upper-hex-encoded string.\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nFormats error.\nHex-encodes bytes into the provided buffer.\nReturns the written bytes as a hex str.\nResets the buffer to become empty.\nReturns the argument unchanged.\nCalls U::from(self).\nReturns true if no more bytes can be written into the …\nCreates an empty BufEncoder.\nEncodes byte as hex in given case and appends it to the …\nEncodes bytes as hex in given case and appends them to the …\nEncodes as many bytes as fit into the buffer as hex and …\nHow many bytes can be written to this buffer.\nThe type providing fmt::Display implementation.\nDisplays byte array as hex.\nDisplays byte slice as hex.\nExtension trait for types that can be displayed as hex.\nAppends hex-encoded content to an existing String.\nDisplay Self as a continuous sequence of ASCII hex chars.\nFormat known-length array as hex.\nReturns the argument unchanged.\nReturns the argument unchanged.\nHints how much bytes to reserve when creating a String.\nAdds core::fmt trait implementations to type $ty.\nCalls U::from(self).\nCalls U::from(self).\nCreate a hex-encoded string.\nCreate a lower-hex-encoded string.\nCreate an upper-hex-encoded string.\nHex decoding error.\nHex decoding error.\nNon-hexadecimal character.\nNon-hexadecimal character.\nInvalid hex character.\nTried to parse fixed-length hash from a string with the …\nTried to parse fixed-length hash from a string with the …\nPurported hex string had odd length.\nPurported hex string had odd length.\nThe expected length.\nReturns the argument unchanged.\nCalls U::from(self).\nThe invalid length.\nError type returned while parsing hex string.\nTrait for objects that can be deserialized from hex …\nHex decoding error.\nHex decoding error.\nNon-hexadecimal character.\nNon-hexadecimal character.\nTried to parse fixed-length hash from a string with the …\nPurported hex string had odd length.\nProduces an object from a hex string.\nThe type providing fmt::Display implementation.\nExtension trait for types that can be displayed as hex.\nError type returned while parsing hex string.\nTrait for objects that can be deserialized from hex …\nAppends hex-encoded content to an existing String.\nDisplay Self as a continuous sequence of ASCII hex chars.\nProduces an object from a hex string.\nHints how much bytes to reserve when creating a String.\nCreate a hex-encoded string.\nCreate a lower-hex-encoded string.\nCreate an upper-hex-encoded string.\nA hash computed from a RFC 2104 HMAC. Parameterized by the …\nPair of underlying hash engines, used for the inner and …\nPair of underlying hash midstates which represent the …\nReturns the argument unchanged.\nMidstate of the inner hash engine\nCalls U::from(self).\nMidstate of the outer hash engine\nOutput of the RIPEMD160 hash function.\nEngine to compute RIPEMD160 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nA data structure that can be deserialized from any data …\nA data format that can deserialize any data structure …\nThe error type that can be returned if some error occurs …\nThe error type when some error occurs during serialization.\nThe output type produced by this Serializer during …\nA data structure that can be serialized into any data …\nType returned from serialize_map for serializing the …\nType returned from serialize_seq for serializing the …\nType returned from serialize_struct for serializing the …\nType returned from serialize_struct_variant for …\nType returned from serialize_tuple for serializing the …\nType returned from serialize_tuple_struct for serializing …\nType returned from serialize_tuple_variant for serializing …\nA data format that can serialize any data structure …\nCollect an iterator as a map.\nCollect an iterator as a sequence.\nSerialize a string produced by an implementation of Display…\nGeneric data structure deserialization framework.\nDeserialize this value from the given Serde deserializer.\nRequire the Deserializer to figure out how to drive the …\nHint that the Deserialize type is expecting a bool value.\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a char value.\nHint that the Deserialize type is expecting an enum value …\nHint that the Deserialize type is expecting a f32 value.\nHint that the Deserialize type is expecting a f64 value.\nHint that the Deserialize type is expecting an i128 value.\nHint that the Deserialize type is expecting an i16 value.\nHint that the Deserialize type is expecting an i32 value.\nHint that the Deserialize type is expecting an i64 value.\nHint that the Deserialize type is expecting an i8 value.\nHint that the Deserialize type is expecting the name of a …\nHint that the Deserialize type needs to deserialize a …\nHint that the Deserialize type is expecting a map of …\nHint that the Deserialize type is expecting a newtype …\nHint that the Deserialize type is expecting an optional …\nHint that the Deserialize type is expecting a sequence of …\nHint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a struct with …\nHint that the Deserialize type is expecting a sequence of …\nHint that the Deserialize type is expecting a tuple struct …\nHint that the Deserialize type is expecting an u128 value.\nHint that the Deserialize type is expecting a u16 value.\nHint that the Deserialize type is expecting a u32 value.\nHint that the Deserialize type is expecting a u64 value.\nHint that the Deserialize type is expecting a u8 value.\nHint that the Deserialize type is expecting a unit value.\nHint that the Deserialize type is expecting a unit struct …\nHelper macro when implementing the Deserializer part of a …\nDetermine whether Deserialize implementations should …\nDetermine whether Serialize implementations should …\nGeneric data structure serialization framework.\nSerialize this value into the given Serde serializer.\nSerialize a bool value.\nSerialize a chunk of raw byte data.\nSerialize a character.\nSerialize an f32 value.\nSerialize an f64 value.\nSerialize an i128 value.\nSerialize an i16 value.\nSerialize an i32 value.\nSerialize an i64 value.\nSerialize an i8 value.\nBegin to serialize a map. This call must be followed by …\nSerialize a newtype struct like struct Millimeters(u8).\nSerialize a newtype variant like E::N in enum E { N(u8) }.\nSerialize a None value.\nBegin to serialize a variably sized sequence. This call …\nSerialize a Some(T) value.\nSerialize a &str.\nBegin to serialize a struct like …\nBegin to serialize a struct variant like E::S in …\nBegin to serialize a statically sized sequence whose …\nBegin to serialize a tuple struct like …\nBegin to serialize a tuple variant like E::T in …\nSerialize a u128 value.\nSerialize a u16 value.\nSerialize a u32 value.\nSerialize a u64 value.\nSerialize a u8 value.\nSerialize a () value.\nSerialize a unit struct like struct Unit or PhantomData<T>.\nSerialize a unit variant like E::A in enum E { A, B }.\nThe input contained a boolean value that was not expected.\nThe input contained a &[u8] or Vec<u8> that was not …\nThe input contained a char that was not expected.\nA data structure that can be deserialized from any data …\nA data structure that can be deserialized without …\nDeserializeSeed is the stateful form of the Deserialize …\nA data format that can deserialize any data structure …\nThe type of the deserializer being converted into.\nThe input contained an enum that was not expected.\nProvides a Visitor access to the data of an enum in the …\nThe Error trait allows Deserialize implementations to …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nExpected represents an explanation of what data a Visitor …\nThe input contained a floating point f32 or f64 that was …\nAn efficient way of discarding data from a deserializer.\nConverts an existing value into a Deserializer from which …\nThe input contained a map that was not expected.\nProvides a Visitor access to each entry of a map in the …\nThe input contained a newtype struct that was not expected.\nThe input contained a newtype variant that was not …\nThe input contained an Option<T> that was not expected.\nA message stating what uncategorized thing the input …\nThe input contained a sequence that was not expected.\nProvides a Visitor access to each element of a sequence in …\nThe input contained a signed integer i8, i16, i32 or i64 …\nError is a trait representing the basic expectations for …\nThe input contained a &str or String that was not expected.\nThe input contained a struct variant that was not expected.\nThe input contained a tuple variant that was not expected.\nUnexpected represents an unexpected invocation of any one …\nThe input contained a unit () that was not expected.\nThe input contained a unit variant that was not expected.\nThe input contained an unsigned integer u8, u16, u32 or u64…\nThe type produced by using this seed.\nThe value produced by this visitor.\nThe Visitor that will be used to deserialize the content …\nVariantAccess is a visitor that is created by the …\nThis trait represents a visitor that walks through a …\nRaised when there is general error when deserializing a …\nEquivalent to the more common Deserialize::deserialize …\nDeserialize this value from the given Serde deserializer.\nRequire the Deserializer to figure out how to drive the …\nHint that the Deserialize type is expecting a bool value.\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a char value.\nHint that the Deserialize type is expecting an enum value …\nHint that the Deserialize type is expecting a f32 value.\nHint that the Deserialize type is expecting a f64 value.\nHint that the Deserialize type is expecting an i128 value.\nHint that the Deserialize type is expecting an i16 value.\nHint that the Deserialize type is expecting an i32 value.\nHint that the Deserialize type is expecting an i64 value.\nHint that the Deserialize type is expecting an i8 value.\nHint that the Deserialize type is expecting the name of a …\nHint that the Deserialize type needs to deserialize a …\nHint that the Deserialize type is expecting a map of …\nHint that the Deserialize type is expecting a newtype …\nHint that the Deserialize type is expecting an optional …\nHint that the Deserialize type is expecting a sequence of …") \ No newline at end of file +searchState.loadedDescShard("bdk_chain", 0, "This crate is a collection of core structures for Bitcoin …\nTrait that “anchors” blockchain data to a specific …\nA wrapper that we use to impl remote traits for types in …\nMaximum BIP32 derivation index.\nBalance, differentiated into various categories.\nA reference to a block in the canonical chain.\nHow many confirmations are needed f or a coinbase output …\nRepresents a service that tracks the blockchain.\nRepresents the observed position of some chain data.\nA checkpoint is a node of a reference-counted linked list …\nIterates over checkpoints backwards.\nRepresents the confirmation block and time of a …\nBlock height and timestamp at which a transaction is …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nA trait to extend the functionality of a miniscript …\nRepresents the unique ID of a descriptor.\nError type.\nA TxOut with as much data as we can retrieve about it\nA wrapper that we use to impl remote traits for types in …\nA tuple of keychain index and T representing the indexed …\nA tuple of keychain K, derivation index (u32) and a T …\nTrait that makes an object mergeable.\nAn iterator for derived script pubkeys.\nSet of parameters sufficient to construct an Anchor.\nData object used to communicate updates about relevant …\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nReturns the BlockId that the associated blockchain data is …\nTransaction anchors. Anchors tells us a position in the …\nReturns a reference to the inner hash (sha256, sh256d …\nBlock in which the transaction appeared.\nGet the BlockId of the checkpoint.\nThe anchor block.\nBlock’s BlockId.\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\nGet the upper bound of the chain data’s confirmation …\nGet the upper bound of the chain data’s confirmation …\nDetermines the upper bound of the confirmation height.\nThe confirmation time of the transaction being anchored.\nConfirmed and immediately spendable balance\nGet a reference to the internal descriptor.\nReturns the descriptor ID, calculated as the sha256 hash …\nReturns the minimum value (in satoshis) at which an output …\nThis method tests for self and other to have equal …\nExtends the checkpoint linked list by a iterator of block …\nExtend this update with other.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a checkpoint from a list of BlockIds in …\nConstruct a checkpoint from the given header and block …\nCreates this wrapper type from the inner hash type.\nGet checkpoint at height.\nGet the best chain’s chain tip.\nGet the block hash of the checkpoint.\nThe hash of the block.\nGet the height of the checkpoint.\nThe height of the block.\nAll coinbase outputs not yet matured\nContains the IndexedTxGraph and associated types. Refer to …\nIndexer provides utilities for indexing transaction data.\nInserts block_id at its height within the chain.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nReturns the inner T.\nReturns the inner T.\nDetermines whether block of BlockId exists as an ancestor …\nReturns whether ChainPosition is confirmed or not.\nReturns whether ConfirmationTime is the confirmed variant.\nWhether the utxo is/was/will be spendable with chain tip.\nReturns whether the structure is considered empty.\nWhether the txout is considered mature.\nWhether this output is on a coinbase transaction.\nIterate from this checkpoint in descending height.\nThe LocalChain is a local implementation of ChainOracle.\nTransforms the TxUpdate to have anchors (A) of another …\nMerge another object of the same type onto self.\nConstruct a new base block at the front of a linked list.\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nGet the previous checkpoint in the chain\nPuts another checkpoint onto the linked list representing …\nIterate checkpoints over a height range.\nModule for stuff\nSeen at times for transactions. This records when a …\nThe txid and chain position of the transaction (if any) …\nHelper types for spk-based blockchain clients.\nTake the value, replacing it with the default value.\nReturns the inner hash (sha256, sh256d etc.).\nGet the whole balance visible to the wallet.\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nUnconfirmed UTXOs generated by a wallet tx\nGet sum of trusted_pending and confirmed coins.\nModule for structures that store and traverse transactions.\nPosition in the block on which the transaction appeared.\nThe TxOut.\nFloating txouts. These are TxOuts that exist but the whole …\nFull transactions. These are transactions that were …\nConstruct an unconfirmed variant using the given last_seen …\nUnconfirmed UTXOs received from an external wallet\nConfirmation height.\nThe last-seen timestamp in unix seconds.\nConfirmation time in unix seconds.\nA Bitcoin address.\nThe different types of addresses.\n0x1: Sign all outputs.\n0x1: Sign all outputs.\n0x81: Sign all outputs but only this input.\n0x81: Sign all outputs but only this input.\nAmount\nMinimum fee rate required to broadcast a transaction.\nConvenience alias for Denomination::Bitcoin.\nbits\nBTC\nMainnet Bitcoin.\nBitcoin block.\nA bitcoin block hash.\ncBTC\nEncoding of 256-bit target as 32-bit float.\nAn always-compressed Bitcoin ECDSA public key\nThe default max_fee_rate value used for extracting …\nFee rate used to compute dust amount.\n0x0: Used when not explicitly specified, defaults to …\nA set of denominations in which amounts can be expressed.\nThe sequence number that enables absolute lock time but …\nThe sequence number that enables replace-by-fee and …\nHashtype of an input’s signature, encoded in the last …\nRepresents fee rate.\nFilter hash, as defined in BIP-157\nFilter header, as defined in BIP-157\nKnown bech32 human-readable parts.\nHash of a transaction according to the legacy signature …\nThe maximum value of an amount.\nThe maximum value of an amount.\nMaximum possible value.\nMaximum possible value.\nThe maximum allowable sequence number.\nThe maximum possible target.\nThe maximum attainable target value on mainnet.\nThe proof of work limit on regtest.\nThe proof of work limit on signet.\nThe proof of work limit on testnet.\nThe maximum allowed weight for a block, see BIP 141 …\nThe maximum value allowed as an amount. Useful for sanity …\nThe maximum value allowed as an amount. Useful for sanity …\nMaximum transaction weight for Bitcoin Core 25.0.\nThe minimum value of an amount.\nThe minimum value of an amount.\nMinimum possible value (0 sat/kwu).\nMinimum possible value (0 wu).\nThe minimum transaction weight for a valid serialized …\nThe Bitcoin mainnet network.\nThe main Bitcoin network.\nData structure that represents a block header paired to a …\nuBTC\nmBTC\nmsat\nThis is used as a “null txout” in consensus signing …\nnBTC\nThe cryptocurrency network to act on.\nWhat kind of network we are on.\n0x2: Sign no outputs — anyone can choose the destination.\n0x2: Sign no outputs — anyone can choose the destination.\n0x82: Sign no outputs and only this input.\n0x82: Sign no outputs and only this input.\nExactly one bitcoin.\nExactly one bitcoin.\nExactly one satoshi.\nExactly one satoshi.\nA script Opcode.\nA reference to a transaction output.\nPay to pubkey hash.\nPay to script hash.\nPay to taproot.\nPay to witness pubkey hash.\nPay to witness script hash.\npBTC\nA Bitcoin ECDSA private key\nA Partially Signed Transaction.\nA hash of a public key.\nA Bitcoin ECDSA public key\nThe regtest network.\nBitcoin’s regtest network.\nConvenience alias for Denomination::Satoshi.\nThe number of bytes that an amount contributes to the size …\nsatoshi\nBitcoin script slice.\nAn owned, growable script.\nA hash of Bitcoin Script bytecode.\nHash of a transaction according to the segwit version 0 …\nBitcoin transaction input sequence number.\nSignedAmount\nBitcoin’s signet network.\n0x3: Sign the output whose index matches this input’s …\n0x3: Sign the output whose index matches this input’s …\n0x83: Sign one output and only this input (see Single for …\n0x83: Sign one output and only this input (see Single for …\nThe tag used for TapNodeHash\nTaproot-tagged hash with tag "TapLeaf".\nThe tag used for TapLeafHash\nTagged hash used in taproot trees.\nTaproot-tagged hash with tag "TapSighash".\nThe tag used for TapSighash\nHashtype of an input’s signature, encoded in the last …\nTaproot-tagged hash with tag "TapTweak".\nThe tag used for TapTweakHash\nA 256 bit integer representing target.\nSome kind of testnet network.\nBitcoin’s testnet network.\nThe test networks, testnet and signet.\nBitcoin transaction.\nBitcoin transaction input.\nA hash of the Merkle tree branch or root for transactions.\nBitcoin transaction output.\nA bitcoin transaction hash/transaction ID.\nInitial version of witness program. Used for P2WPKH and …\nVersion of witness program used for Taproot P2TR outputs.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nA variable-length unsigned integer.\nThe factor that non-witness serialization data is …\nSegWit version of a public key hash.\nSegWit version of a Bitcoin Script bytecode hash.\nRepresents block weight - the weight of a transaction or …\nThe Witness is the data used to unlock bitcoin since the …\nA hash corresponding to the witness structure commitment …\nA hash corresponding to the Merkle tree root for witness …\nThe segregated witness program.\nVersion of the segregated witness program.\nA 256 bit integer representing work.\nA bitcoin witness transaction ID.\nExtended key identifier as defined in BIP-32.\nAn x-only public key, used for verification of Taproot …\nThe zero amount.\nThe zero amount.\n0 sat/kwu.\n0 wu.\nZero value sequence.\nWhen parsing nBits, Bitcoin Core converts a negative …\nGet the absolute value of this SignedAmount.\nTweaks an XOnlyPublicKey by adding the generator …\nBitcoin addresses.\nGets the address type of the address.\nBitcoin amounts.\nReturns the script data as a byte slice.\nReturns the script data as a mutable byte slice.\nObtains a raw mutable pointer suitable for use with FFI …\nReturns a mutable reference to unsized script.\nObtains a raw const pointer suitable for use with FFI …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to the inner hash (sha256, sh256d …\nReturns a reference to unsized script.\nReturns a reference to the address as if it was unchecked.\nMarks, without any additional checks, network of this …\nReturns a reference to the checked address.\nAssumes the given 32 byte array as hidden TapNodeHash.\nReturns the base size of this input.\nReturns the base transaction size.\nBIP152 Compact Blocks\nBIP 158 Compact Block Filters for Light Clients.\nBIP32 implementation.\nReturns the block height, as encoded in the coinbase …\nReturns the block hash.\nBitcoin block data.\nCreates a new script builder\nCreates a new script builder\nReturns an iterator over script bytes.\nReturn the network’s chain hash (genesis block hash).\nChecks if merkle root of header matches merkle root of the …\nChecks if witness commitment in coinbase matches the …\nGet the absolute value of this SignedAmount. Returns None …\nChecked addition.\nChecked addition. Returns None if overflow occurred.\nChecked addition.\nChecked integer division.\nChecked integer division. Be aware that integer division …\nChecked division.\nChecked division.\nChecked multiplication.\nChecked multiplication. Returns None if overflow occurred.\nChecked multiplication.\nChecked multiplication.\nChecked weight multiplication.\nChecked remainder.\nChecked remainder. Returns None if overflow occurred.\nChecked subtraction.\nChecked subtraction. Returns None if overflow occurred.\nChecked subtraction.\nClassifies an Opcode into a broad class.\nClear the witness.\nLike cmp::Cmp but faster and with no guarantees across …\nReturns the coinbase transaction, if one is present.\nCombines this Psbt with other PSBT as described by BIP 174.\nWhether this public key should be serialized as compressed\nWhether this private key should be serialized as compressed\nComputes the transaction merkle root.\nComputes a “normalized TXID” which does not include …\nComputes the Txid.\nComputes the witness commitment for the block’s …\nComputes the segwit version of the transaction id.\nBitcoin consensus.\nCounts the sigops for this Script using accurate counting.\nCounts the sigops for this Script using legacy counting.\nThe default value of sequence is 0xffffffff.\nDeserialize a value from raw binary data.\nDeserialize a value from raw binary data read from a …\nComputes the popular “difficulty” measure for mining.\nComputes the popular “difficulty” measure for mining …\nCreate an object that implements fmt::Display dynamically …\nCreate an object that implements fmt::Display dynamically …\nCreate an object that implements fmt::Display using …\nCreate an object that implements fmt::Display using …\nReturns the minimum value an output with this script …\nECDSA Bitcoin signatures.\nReturns true if the sequence number enables absolute …\nReturns true if this input enables the absolute::LockTime …\nLike cmp::Eq but faster and with no guarantees across …\nContains error types and other error handling tools.\nExtract the matching txid’s represented by this partial …\nAn alias for extract_tx_fee_rate_limit.\nExtracts the Transaction from a Psbt by filling in the …\nPerform extract_tx_fee_rate_limit without the fee rate …\nExtracts the Transaction from a Psbt by filling in the …\nCalculates transaction fee.\nCalculates fee by multiplying this fee rate by weight, in …\nCalculates fee by multiplying this fee rate by weight, in …\nComputes the filter header from a filter hash and previous …\nReturns the first opcode of the script (if there is any).\nWrites the human-readable assembly representation of the …\nFormat the value of this Amount in the given denomination.\nFormat the value of this SignedAmount in the given …\nFormat the private key to WIF format.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a relative lock-time using time intervals where …\nCreates Work from a big-endian byte array.\nCreates Target from a big-endian byte array.\nCreate a MerkleBlock from a block, that contains proofs …\nConvert from a value expressing bitcoins to an Amount.\nConvert from a value expressing bitcoins to an SignedAmount…\nTreat byte slice as Script\nConverts byte vector into script.\nTreat mutable byte slice as Script\nCreates a Network from the chain hash (genesis block hash).\nComputes the Target value from a compact representation.\nCreates a sequence from a u32 value.\nCreates a EcdsaSighashType from a raw u32.\nCreates a CompactTarget from a consensus encoded u32.\nConstructs a TapSighashType from a raw u8.\nConverts a bitcoind -chain argument name to its equivalent …\nConvert this Amount in floating-point notation with a given\nConvert this SignedAmount in floating-point notation with …\nCreate a MerkleBlock from the block’s header and txids, …\nCreates a relative lock-time using block height.\nCreates a ScriptBuf from a hex string.\nCreates a Sequence from an prefixed hex string.\nCreates Work from a prefixed hex string.\nCreates Target from a prefixed hex string.\nCreates a CompactTarget from an prefixed hex string.\nConvert from a value expressing integer values of bitcoins …\nCreates a new BIP341 TapTweakHash from key and tweak. …\nReturns the XOnlyPublicKey (and it’s Parity) for keypair.\nConstructs Weight from kilo weight units returning None if …\nCreates Work from a little-endian byte array.\nCreates Target from a little-endian byte array.\nCreates a Network from the magic bytes.\nComputes branch hash given two hashes of the nodes …\nConstructs Weight from non-witness size.\nComputes the public key as supposed to be used with this …\nComputes the public key as supposed to be used with this …\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreates this wrapper type from the inner hash type.\nCreate an Amount with satoshi precision and the given …\nCreate an SignedAmount with satoshi precision and the …\nConstructs FeeRate from satoshis per 1000 weight units.\nConstructs FeeRate from satoshis per virtual bytes.\nConstructs FeeRate from satoshis per virtual bytes without …\nConstructs an Address from an output script (scriptPubkey).\nComputes the leaf hash from components.\nComputes the TapNodeHash from a script and a leaf version.\nCreates a relative lock-time from seconds, converting the …\nCreates a relative lock-time from seconds, converting the …\nCreates a schnorr public key directly from a slice.\nCreates a Witness object from a slice of bytes slices …\nDeserialize a public key from a slice\nDeserialize a public key from a slice\nDeserialize a private key from a slice\nCreates a EcdsaSighashType from a raw u32.\nConvert from a str to Denomination.\nParse a decimal string as a value in the given …\nParse a decimal string as a value in the given …\nParses amounts with denomination suffix like they are …\nParses amounts with denomination suffix like they are …\nCreates a Sequence from an unprefixed hex string.\nCreates Work from an unprefixed hex string.\nCreates Target from an unprefixed hex string.\nCreates a CompactTarget from an unprefixed hex string.\nCreates a PSBT from an unsigned transaction.\nConstructs Weight from virtual bytes, returning None on …\nConstructs Weight from virtual bytes without an overflow …\nConstructs Weight from virtual bytes panicking on overflow.\nParse WIF encoded private key.\nConstructs Weight from witness size.\nCreates an address from an arbitrary witness program.\nDirectly constructs Weight from weight units.\nDirectly constructs Weight from usize weight units.\nConstructs new compressed ECDSA private key using the …\nBitcoin hash types.\nThe block header\nThe block header\nThe actual ECDSA key\nThe actual ECDSA key\nList of transaction inputs.\nThe corresponding key-value map for each input in the …\nIterates over the script instructions and their indices.\nIterates over the script instructions and their indices …\nIterates over the script instructions.\nIterates over the script instructions while enforcing …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts this ScriptBuf into a boxed Script.\nConverts the script into a byte vector.\nConverts a Box<Script> into a ScriptBuf without copying or …\nReturns true if this Transaction’s absolute timelock is …\nChecks if this is a coinbase transaction.\nReturns whether the script is the empty script.\nReturns true if the witness contains no element.\nReturns true if the transaction itself opted in to be …\nReturns true if the sequence number indicates that the …\nReturns true if the sequence number encodes a block based …\nReturns true if this transactions nLockTime is enabled (…\nReturns true if this is real mainnet bitcoin.\nReturns true if block hash is less than or equal to this …\nChecks whether a script pubkey is a bare multisig output.\nReturns true if this SignedAmount is negative and false if …\nChecks if an OutPoint is “null”.\nCheck if this is an OP_RETURN output.\nChecks whether a script pubkey is a P2PK output.\nChecks whether a script pubkey is a P2PKH output.\nChecks whether a script pubkey is a P2SH output.\nChecks whether a script pubkey is a P2TR output.\nReturns true if this witness program is for a P2TR output.\nChecks whether a script pubkey is a P2WPKH output.\nReturns true if this witness program is for a P2WPKH …\nChecks whether a script pubkey is a P2WSH output.\nReturns true if this witness program is for a P2WPSH …\nReturns true if this SignedAmount is positive and false if …\nChecks whether a script is trivially known to have no …\nChecks whether a script is push only.\nReturns true if the transaction opted-in to BIP125 …\nReturns true if the given pubkey is directly related to …\nReturns true if the supplied xonly public key can be used …\nReturns true if the sequence has a relative lock-time.\nChecks whether or not the address is following Bitcoin …\nReturns true if the sequence number encodes a time …\nReturns the compressed-ness of the underlying secp256k1 …\nParsed addresses do not always have one network. The …\nChecks whether a script pubkey is a Segregated Witness …\nReturns a struct implementing Iterator.\nReturns an iterator for the funding UTXOs of the psbt\nBitcoin keys.\nReturns the last element in the witness, if any.\nThe weight of the TxIn when it’s included in a legacy …\nReturns the length in bytes of the script.\nReturns the number of elements this witness holds.\nBlock height or timestamp. Transaction cannot be included …\nReturns log2 of this work.\nReturn the network magic bytes, which should be encoded …\nReturns true if the address creates a particular script …\nComputes the maximum valid Target threshold allowed for a …\nComputes the maximum valid Target threshold allowed for a …\nComputes the maximum valid Target threshold allowed for a …\nBitcoin merkle tree functions.\nComputes the minimum valid Target threshold allowed for a …\nComputes the minimum valid Target threshold allowed for a …\nReturns the minimum value an output with this script …\nCreates a TxOut with given script and the smallest …\nReturns the minimum value an output with this script …\nCreates a TxOut with given script and the smallest …\nBitcoin network.\nThe network kind on which this key should be used\nCreates a new empty script.\nCreates a new empty script.\nCreates a new witness program, copying the content from …\nCreates a new OutPoint.\nCreates a new empty Witness.\nConstructs compressed ECDSA public key from the provided …\nConstructs compressed ECDSA private key from the provided …\nGenerates OP_RETURN-type of scriptPubkey for the given …\nGenerates P2PK-type of scriptPubkey.\nGenerates P2PKH-type of scriptPubkey.\nGenerates P2SH-type of scriptPubkey with a given hash of …\nGenerates P2TR for script spending path using an internal …\nGenerates P2TR for key spending path for a known …\nGenerates P2WPKH-type of scriptPubkey.\nGenerates P2WSH-type of scriptPubkey with a given hash of …\nConstructs uncompressed (legacy) ECDSA public key from the …\nConstructs uncompressed (legacy) ECDSA private key from …\nGenerates P2WSH-type of scriptPubkey with a given …\nReturn the nth element in the witness, if any\nComputes a “normalized TXID” which does not include …\nCreates a “null” OutPoint.\nList of transaction outputs.\nThe corresponding key-value map for each output in the …\nBitcoin p2p network types.\nReturns the public key if this script is P2PK with a valid …\nCreates a pay to (compressed) public key hash address from …\nCreates a pay to script hash P2SH address from a script.\nCreates a pay to script hash P2SH address from a script …\nCreates a pay to script address that embeds a witness pay …\nCreates a pay to script address that embeds a witness pay …\nCreates a pay to taproot address from an untweaked key.\nCreates a pay to taproot address from an untweaked key.\nCreates a witness required to do a key path spend of a …\nCreates a pay to taproot address from a pre-tweaked output …\nCreates a pay to taproot address from a pre-tweaked output …\nCreates a witness pay to public key address from a public …\nCreates a WitnessProgram from pk for a P2WPKH output.\nCreates a witness required to spend a P2WPKH output.\nReturns the script code used for spending a P2WPKH output …\nCreates the script code used for spending a P2WPKH output.\nReturns the script code used to spend a P2WPKH input.\nReturns the script code used to spend a P2WPKH input.\nCreates a witness pay to script hash address.\nCreates a WitnessProgram from script for a P2WSH output.\nReturns the associated network parameters.\nUnit parsing utilities.\nBitcoin policy.\nSubtraction that doesn’t allow negative SignedAmounts. …\nProof-of-work related integer types.\nThe reference to the previous output that is being used as …\nReturns the witness program.\nGlobal proprietary key-value pairs.\nPartially Signed Bitcoin Transactions.\nGets the pubkey hash for this address if this is a P2PKH …\nReturns bitcoin 160-bit hash of the public key\nReturns bitcoin 160-bit hash of the public key\nReturns the PublicKey for this XOnlyPublicKey.\nCreates a public key from this private key\nPush a new element on the witness, requires an allocation.\nPushes, as a new element on the witness, an ECDSA …\nAdd a single instruction to the script.\nLike push_instruction, but avoids calling reserve to not …\nAdds a single opcode to the script.\nAdds instructions to push some arbitrary data onto the …\nRead the public key from a reader\nRead the public key from a reader\nChecks whether network of this address is as required.\nPre-allocates at least additional_len bytes if needed.\nPre-allocates exactly additional_len bytes if needed.\nScale by witness factor.\nAdds an OP_VERIFY to the script or replaces the last …\nGets the script hash for this address if this is a P2SH …\nReturns 160-bit hash of the script.\nGenerates a script pubkey spending to this address.\nThe script which must be satisfied for the output to be …\nReturns an iterator over lengths of script_pubkeys in the …\nThe script which pushes values on the stack which will …\nReturns the second-to-last element in the witness, if any.\nThe weight of the TxIn when it’s included in a segwit …\nThe sequence number, which suggests to miners which of two …\nSerializes the key as a byte-encoded x coordinate value …\nUser-facing serialization for Script.\nUser-facing serialization for Script.\nSerialize as raw binary data\nSerialize a value as bytes in hex.\nSerialize the PSBT into a writer.\nSignature hash implementation (used in transaction …\nReturns the sighash message to sign an ECDSA input along …\nAttempts to create all the required signatures for this …\nSignature\nReturns a number representing sign of this SignedAmount.\nReturns the total number of bytes that this output …\nReturns the number of bytes this witness contributes to a …\nReturns the number of bytes this varint contributes to a …\nReturns the spending utxo for this PSBT’s input at …\nTweaks an untweaked public key with corresponding public …\nBitcoin Taproot.\nGet Tapscript following BIP341 rules regarding accounting …\nComputes leaf hash of tapscript.\nGets the address data from this address.\nReturns the human-readable assembly representation of the …\nConverts Work to a big-endian byte array.\nConverts Target to a big-endian byte array.\nExpress this Amount as a floating-point value in Bitcoin.\nExpress this SignedAmount as a floating-point value in …\nReturns a copy of the script data.\nSerialize the public key to bytes\nSerializes the public key.\nSerialize the private key to bytes\nComputes the compact value from a Target representation.\nReturns the consensus encoded u32 representation of this …\nReturns the inner 32bit integer value of Sequence.\nConverts a Network to its equivalent bitcoind -chain …\nConverts this witness version to a GF32 field element.\nExpress this Amount as a floating-point value in the given …\nExpress this SignedAmount as a floating-point value in the …\nFormats the script as lower-case hex.\nConverts to kilo weight units rounding down.\nConverts Work to a little-endian byte array.\nConverts Target to a little-endian byte array.\nReturns integer version number representation for a given …\nComputes the P2SH output corresponding to this redeem …\nComputes P2TR output with a given internal key and a …\nComputes the P2WSH output corresponding to this …\nCreates a URI string bitcoin:address optimized to be …\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nReturns the inner hash (sha256, sh256d etc.).\nCreates a relative::LockTime from this Sequence number.\nGets the number of satoshis in this Amount.\nGets the number of satoshis in this SignedAmount.\nReturns raw fee rate.\nConverts to sat/vB rounding up.\nConverts to sat/vB rounding down.\nConverts a TapTweakHash into a Scalar ready for use with …\nConvert to a signed amount.\nSerialize the public key into a SortKey.\nGet a string number of this Amount in the given …\nGet a string number of this SignedAmount in the given …\nGet a formatted string of this Amount in the given …\nGet a formatted string of this SignedAmount in the given …\nConverts this Work to Target.\nConverts EcdsaSighashType to a u32 sighash flag.\nEncodes Opcode as a byte.\nConvert to an unsigned amount.\nConverts to vB rounding up.\nConverts to vB rounding down.\nConvenience method to create an array of byte-arrays from …\nGet WIF encoding of this private key.\nConverts this Target to Work.\nReturns raw weight units.\nCounts the total number of sigops.\nReturns the total block size.\nReturns the total number of bytes that this input …\nReturns the total transaction size.\nVerifies that a tweak produced by XOnlyPublicKey::add_tweak…\nReturns a reference to the input at input_index if it …\nReturns a reference to the output at output_index if it …\nList of transactions contained in the block\nComputes the Txid.\nThe referenced transaction’s txid.\nTransactions making up a partial merkle tree\nUnchecked addition.\nUnchecked addition.\nUnchecked subtraction.\nUnchecked subtraction.\nUnknown global key-value pairs.\nGet the absolute value of this SignedAmount returning …\nThe unsigned transaction, scriptSigs and witnesses for …\nThe value of the output, in satoshis.\nChecks that sig is a valid schnorr signature for msg using …\nChecks that sig is a valid ECDSA signature for msg using …\nChecks that sig is a valid ECDSA signature for msg using …\nReturns the witness program version.\nThe protocol version, is currently expected to be 1 or 2 …\nThe version number of this PSBT. If omitted, the version …\nThe index of the referenced output in its transaction’s …\nReturns the “virtual size” (vsize) of this transaction.\nReturns the weight of the block.\nThe weight of this output.\nReturns the weight of this transaction, as defined by …\nCreates a new empty script with pre-allocated capacity.\nWitness data: an array of byte-arrays. Note that this …\nGets the witness program for this address if this is a …\nComputes the merkle root of transactions hashed for …\nReturns witness version of the script, if any, assuming …\nReturns bitcoin 160-bit hash of the public key for witness …\nReturns bitcoin 160-bit hash of the public key for witness …\nWrite the public key into a writer\nWrite the public key into a writer\nReturns 256-bit hash of the script for P2WSH outputs.\nComputes the segwit version of the transaction id.\nA global map from extended public keys to the used key …\nA Bitcoin address.\nThe data encoded by an Address.\nThe different types of addresses.\nBase58 error.\nBech32 segwit decoding error.\nAddress size more than 520 bytes is not allowed.\nError while generating address from script.\nIndicates whether this NetworkValidation is NetworkChecked …\nInvalid base58 payload data length for legacy address.\nDecoded base58 data was an invalid length.\nInvalid legacy address prefix in base58 data payload.\nInvalid legacy address prefix in decoded base58 data.\nKnown bech32 human-readable parts.\nLegacy address is too long.\nLegacy base58 address was too long, max 50 characters.\nThe main Bitcoin network.\nMarker that address’s network has been successfully …\nMarker that address’s network has not yet been …\nMarker of status of address’s network validation. See …\nAddress’s network differs from required one.\nAddress’s network differs from required one.\nPay to pubkey hash.\nData encoded by a P2PKH address.\nPay to script hash.\nData encoded by a P2SH address.\nError while generating address from a p2sh script.\nPay to taproot.\nPay to witness pubkey hash.\nPay to witness script hash.\nAddress parsing error.\nThe regtest network.\nData encoded by a Segwit address.\nThe test networks, testnet and signet.\nAddress type is either invalid or not supported in …\nTried to parse an unknown HRP.\nUnknown HRP error.\nScript is not a p2pkh, p2sh or witness program.\nA witness program error.\nA witness program error.\nA witness version construction error.\nA witness version conversion/parsing error.\nError code for the address module.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid payload length.\nReturns the invalid prefix.\nReturns the invalid legacy address length.\nThe pubkey hash used to encumber outputs to this address.\nThe script hash used to encumber outputs to this address.\nThe witness program used to encumber outputs to this …\nBase58 error.\nBech32 segwit decoding error.\nAddress size more than 520 bytes is not allowed.\nError while generating address from script.\nInvalid base58 payload data length for legacy address.\nDecoded base58 data was an invalid length.\nInvalid legacy address prefix in base58 data payload.\nInvalid legacy address prefix in decoded base58 data.\nLegacy address is too long.\nLegacy base58 address was too long, max 50 characters.\nAddress’s network differs from required one.\nAddress’s network differs from required one.\nError while generating address from a p2sh script.\nAddress parsing error.\nAddress type is either invalid or not supported in …\nTried to parse an unknown HRP.\nUnknown HRP error.\nScript is not a p2pkh, p2sh or witness program.\nA witness program error.\nA witness program error.\nA witness version construction error.\nA witness version conversion/parsing error.\nAmount\nbits\nBTC\ncBTC\nCalculate the sum over the iterator using checked …\nA set of denominations in which amounts can be expressed.\nA helper/builder that displays amount with specified …\nInput string was too large.\nInvalid character in input.\nuBTC\nmBTC\nmsat\nA digit was expected but not found.\nnBTC\nThe amount is too big or too small.\nAn error during amount parsing.\npBTC\nsatoshi\nSignedAmount\nAmount has higher precision than supported by the type.\nCalculate the sum over the iterator using checked …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nThis module adds serde serialization and deserialization …\nMakes subsequent calls to Display::fmt display …\nThis trait is used only to avoid code duplication and …\nThis trait is only for internal Amount type …\nSerialize and deserialize Amount as JSON numbers …\nSerialize and deserialize Amount as real numbers …\nSerialize and deserialize Option<Amount> as JSON numbers …\nSerialize and deserialize Option<Amount> as real numbers …\nInvalid character while decoding.\nAn error occurred during base58 decoding (with checksum).\nChecksum was not correct.\nFound a invalid ASCII byte while decoding base58 string.\nA UTF-8–encoded, growable string.\nChecked data was too short.\nA contiguous growable array type, written as Vec<T>, short …\nReturns a reference to the underlying allocator.\nMoves all the elements of other into self, leaving other …\nReturns a byte slice of this String’s contents.\nReturns an unsafe mutable pointer to the vector’s …\nExtracts a mutable slice of the entire vector.\nConverts a String into a mutable string slice.\nReturns a mutable reference to the contents of this String.\nReturns a raw pointer to the vector’s buffer, or a …\nExtracts a slice containing the entire vector.\nExtracts a string slice containing the entire String.\nReturns the total number of elements the vector can hold …\nReturns this String’s capacity, in bytes.\nClears the vector, removing all values.\nTruncates this String, removing all contents.\nOverwrites the contents of self with a clone of the …\nClones the contents of source into self.\nDecodes a base58-encoded string into a byte vector.\nDecodes a base58check-encoded string into a byte vector …\nRemoves consecutive repeated elements in the vector …\nRemoves all but the first of consecutive elements in the …\nRemoves all but the first of consecutive elements in the …\nCreates an empty Vec<T>.\nCreates an empty String.\nRemoves the specified range from the vector in bulk, …\nRemoves the specified range from the string in bulk, …\nEncodes data as a base58 string (see also …\nEncodes data as a base58 string including the checksum.\nEncodes a slice as base58, including the checksum, into a …\nError code for the base58 crate.\nClones and appends all elements in a slice to the Vec.\nCopies elements from src range to the end of the vector.\nCopies elements from src range to the end of the string.\nCreates an iterator which uses a closure to determine if …\nReturns the argument unchanged.\nReturns the argument unchanged.\nAllocate a Vec<T> and fill it by cloning s’s items.\nAllocate a Vec<T> and fill it by cloning s’s items.\nAllocate a Vec<T> and fill it by cloning s’s items.\nConverts a CString into a Vec<u8>.\nTurn a VecDeque<T> into a Vec<T>.\nConvert a clone-on-write slice into a vector.\nConvert a boxed slice into a vector by transferring …\nAllocate a Vec<u8> and fill it with a UTF-8 string.\nReturns the argument unchanged.\nAllocate a Vec<T> and fill it by cloning s’s items.\nAllocate a Vec<T> and move s’s items into it.\nConverts a BinaryHeap<T> into a Vec<T>.\nConverts the given String to a vector Vec that holds …\nConverts a &mut str into a String.\nConverts a &String into a String.\nReturns the argument unchanged.\nConverts a &str into a String.\nConverts a clone-on-write string to an owned instance of …\nAllocates an owned String from a single character.\nConverts the given boxed str slice to a String. It is …\nCreates a Vec<T> directly from a pointer, a length, and a …\nCreates a new String from a pointer, a length and a …\nCreates a Vec<T, A> directly from a pointer, a length, a …\nDecode a UTF-16–encoded vector v into a String, …\nDecode a UTF-16–encoded slice v into a String, replacing …\nDecode a UTF-16BE–encoded vector v into a String, …\nDecode a UTF-16BE–encoded slice v into a String, …\nDecode a UTF-16LE–encoded vector v into a String, …\nDecode a UTF-16LE–encoded slice v into a String, …\nConverts a vector of bytes to a String.\nConverts a slice of bytes to a string, including invalid …\nConverts a vector of bytes to a String without checking …\nInserts an element at position index within the vector, …\nInserts a character into this String at a byte position.\nInserts a string slice into this String at a byte position.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts the vector into Box<[T]>.\nConverts this String into a Box<str>.\nConverts a String into a byte vector.\nTakes a Vec<[T; N]> and flattens it into a Vec<T>.\nCreates a consuming iterator, that is, one that moves each …\nDecomposes a Vec<T> into its raw components: …\nDecomposes a String into its raw components: …\nDecomposes a Vec<T> into its raw components: …\nReturns the ASCII byte that is not a valid base58 …\nReturns true if the vector contains no elements.\nReturns true if this String has a length of zero, and false…\nConsumes and leaks the Vec, returning a mutable reference …\nConsumes and leaks the String, returning a mutable …\nReturns the number of elements in the vector, also …\nReturns the length of this String, in bytes, not chars or …\nConstructs a new, empty Vec<T>.\nCreates a new empty String.\nConstructs a new, empty Vec<T, A>.\nRemoves the last element from a vector and returns it, or …\nRemoves the last character from the string buffer and …\nRemoves and returns the last element in a vector if the …\nAppends an element to the back of a collection.\nAppends the given char to the end of this String.\nAppends a given string slice onto the end of this String.\nAppends an element if there is sufficient spare capacity, …\nRemoves and returns the element at position index within …\nRemoves a char from this String at a byte position and …\nRemove all matches of pattern pat in the String.\nRemoves the specified range in the string, and replaces it …\nReserves capacity for at least additional more elements to …\nReserves capacity for at least additional bytes more than …\nReserves the minimum capacity for at least additional more …\nReserves the minimum capacity for at least additional …\nResizes the Vec in-place so that len is equal to new_len.\nResizes the Vec in-place so that len is equal to new_len.\nRetains only the elements specified by the predicate.\nRetains only the characters specified by the predicate.\nRetains only the elements specified by the predicate, …\nForces the length of the vector to new_len.\nShrinks the capacity of the vector with a lower bound.\nShrinks the capacity of this String with a lower bound.\nShrinks the capacity of the vector as much as possible.\nShrinks the capacity of this String to match its length.\nReturns the remaining spare capacity of the vector as a …\nCreates a splicing iterator that replaces the specified …\nReturns vector content as a slice of T, along with the …\nSplits the collection into two at the given index.\nSplits the string into two at the given byte index.\nRemoves an element from the vector and returns it.\nShortens the vector, keeping the first len elements and …\nShortens this String to the specified length.\nTries to reserve capacity for at least additional more …\nTries to reserve capacity for at least additional bytes …\nTries to reserve the minimum capacity for at least …\nTries to reserve the minimum capacity for at least …\nConstructs a new, empty Vec<T> with at least the specified …\nCreates a new empty String with at least the specified …\nConstructs a new, empty Vec<T, A> with at least the …\nConstructs a new, empty Vec<T> with at least the specified …\nCreates a new empty String with at least the specified …\nConstructs a new, empty Vec<T, A> with at least the …\nInvalid character while decoding.\nAn error occurred during base58 decoding (with checksum).\nChecksum was not correct.\nChecksum was not correct.\nFound a invalid ASCII byte while decoding base58 string.\nChecked data was too short.\nThe decode base58 data was too short (require at least 4 …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the incorrect checksum along with the expected …\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid base58 string length (require at least …\nThe config type used by this engine\nErrors that can occur while decoding.\nA DecodeError occurred\nThe decode estimate used by this engine\nErrors that can occur while decoding into a slice.\nErrors that can occur while encoding into a slice.\nAn Engine provides low-level encoding and decoding …\nAn invalid byte was found in the input. The offset and …\nThe last non-padding input symbol’s encoded 6 bits have …\nThe length of the input is invalid. A typical cause of …\nThe nature of the padding was not as configured: absent or …\nThe provided slice is too small.\nThe provided slice may be too small.\nProvides Alphabet and constants for alphabets commonly …\nReturns the config for this engine.\nDecode base64 using the STANDARD engine.\nDecode the input into a new Vec.\nDecode from string reference as octets using the specified …\nDecode the input into the provided output slice.\nDecode from string reference as octets.\nDecode the input into the provided output slice.\nDecode the input into the provided output slice.\nDecode the input into the supplied buffer.\nReturns a conservative estimate of the decoded size of …\nEnables base64’d output anywhere you might use a Display …\nEncode arbitrary octets as base64 using the STANDARD engine…\nEncode arbitrary octets as base64 using the provided Engine…\nEncode arbitrary octets as base64 using the provided Engine…\nEncode arbitrary octets as base64 into a supplied slice.\nEncode arbitrary octets as base64 into a supplied String.\nEncode arbitrary octets as base64 into a supplied slice. …\nEncode arbitrary octets as base64 into a supplied String. …\nCalculate the base64 encoded length for a given input …\nProvides the Engine abstraction and out of the box …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nPreconfigured engines for common use cases.\nImplementations of io::Read to transparently decode base64.\nImplementations of io::Write to transparently handle …\nAn alphabet defines the 64 ASCII characters (symbols) used …\nThe bcrypt alphabet.\nThe alphabet used in BinHex 4.0 files.\nThe crypt(3) alphabet (with . and / as the first two …\nAll bytes must be unique\nThe alphabet used in IMAP-modified UTF-7 (with + and ,).\nAlphabets must be 64 ASCII bytes\nPossible errors when constructing an Alphabet from a str.\n= cannot be used\nThe standard alphabet (with + and /) specified in RFC 4648.\nThe URL-safe alphabet (with - and _) specified in RFC 4648.\nAll bytes must be printable (in the range [32, 126]).\nCreate a &str from the symbols in the Alphabet\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCreate an Alphabet from a string of 64 unique printable …\nA convenience wrapper for base64’ing bytes into a format …\nReturns the argument unchanged.\nCalls U::from(self).\nCreate a Base64Display with the provided engine.\nThe minimal level of configuration that engines must …\nThe config type used by this engine\nThe decode estimate used by an engine implementation. …\nThe decode estimate used by this engine\nMetadata about the result of a decode operation\nControls how pad bytes are handled when decoding.\nAn Engine provides low-level encoding and decoding …\nA general-purpose base64 engine.\nContains configuration parameters for base64 encoding and …\nCanonical padding is allowed, but any fewer padding bytes …\nPadding must be canonical (0, 1, or 2 = as needed to …\nPadding must be absent – for when you want predictable …\nReturns the config for this engine.\nDecode the input into a new Vec.\nDecode the input into the provided output slice.\nDecode the input into the provided output slice.\nDecode the input into the supplied buffer.\nReturns a conservative (err on the side of too big) …\nDelegates to GeneralPurposeConfig::new.\nEncode arbitrary octets as base64 using the provided Engine…\nReturns true if padding should be added after the encoded …\nEncode arbitrary octets as base64 into a supplied slice. …\nEncode arbitrary octets as base64 into a supplied String. …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nProvides the GeneralPurpose engine and associated config …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a GeneralPurpose engine from an Alphabet.\nCreate a new config with padding = true, …\nCreate a new config based on self with an updated …\nCreate a new config based on self with an updated …\nCreate a new config based on self with an updated padding …\nA general-purpose base64 engine.\nContains configuration parameters for base64 encoding and …\nDon’t add padding when encoding, and require no padding …\nInclude padding bytes when encoding, and require that they …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::STANDARD …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nA GeneralPurpose engine using the alphabet::URL_SAFE …\nThe config type used by this engine\nThe decode estimate used by this engine\nAn Engine provides low-level encoding and decoding …\nReturns the config for this engine.\nDecode the input into a new Vec.\nDecode the input into the provided output slice.\nDecode the input into the provided output slice.\nDecode the input into the supplied buffer.\nEncode arbitrary octets as base64 using the provided Engine…\nEncode arbitrary octets as base64 into a supplied slice. …\nEncode arbitrary octets as base64 into a supplied String. …\nA Read implementation that decodes base64 data read from …\nReturns the argument unchanged.\nCalls U::from(self).\nUnwraps this DecoderReader, returning the base reader …\nCreate a new decoder that will read from the provided …\nDecode input from the wrapped reader.\nA Write implementation that base64-encodes data using the …\nA Write implementation that base64 encodes data before …\nAn abstraction around consuming strs produced by base64 …\nConsume the base64 encoded data in buf\nEncode all remaining buffered data and write it, including …\nBecause this is usually treated as OK to call multiple …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a EncoderStringWriter that will append to the …\nCalls U::from(self).\nCalls U::from(self).\nUnwraps this EncoderWriter, returning the base writer it …\nEncode all remaining buffered data, including any trailing …\nCreate a new encoder that will write to the provided …\nCreate a EncoderStringWriter that will encode into a new …\nEncode input and then write to the delegate writer.\nA BlockTransactions structure is used to provide some of …\nA BlockTransactionsRequest structure is used to list …\nA BIP-152 error\nA HeaderAndShortIds structure is used to relay a block …\nThe prefill slice provided was invalid.\nA PrefilledTransaction structure is used in …\nShort transaction IDs are used to represent a transaction …\nA transaction index is requested that is out of range from …\nAn unknown version number was used.\nReturns a reference the underlying bytes.\nConverts the object to a mutable raw pointer.\nConverts the object to a raw pointer.\nThe blockhash of the block which the transactions being …\nThe blockhash of the block which the transactions being …\nCalculate the SipHash24 keys used to calculate short IDs.\nPanics\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a new HeaderAndShortIds from a full block.\nCreates Self from a hex string.\nConstruct a BlockTransactions from a …\nThe header of the block being provided.\nThe index of the transaction in the block.\nThe indexes of the transactions being requested in the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the object, as an array, is empty. Always …\nReturns the length of the object as an array.\nA nonce for use in short transaction ID calculations.\nUsed to provide the coinbase transaction and a select few …\nThe short transaction IDs calculated from the transactions …\nReturns the underlying bytes.\nThe transactions provided.\nThe actual transaction.\nCalculate the short ID with the given (w)txid and using …\nBitwise stream reader.\nBitwise stream writer.\nA block filter, as described by BIP 158.\nReads and interprets a block filter.\nCompiles and writes a block filter.\nErrors for blockfilter.\nFilter hash, as defined in BIP-157\nFilter header, as defined in BIP-157\nGolomb-Rice encoded filter reader.\nGolomb-Rice encoded filter writer.\nIO error reading or writing binary serialization of the …\nMissing UTXO, cannot calculate script filter.\nAdds an arbitrary element to filter.\nAdds data to the filter.\nAdds consumed output scripts of a block to filter.\nAdds output scripts of the block to filter (excluding …\nGolomb encoded filter\nComputes this filter’s ID in a chain of filters (see BIP …\nWrites the block filter.\nWrites the filter to the wrapped writer.\nflush bits not yet written.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if all queries match against this …\nReturns true if all queries match against this …\nReturns true if all queries match against this BlockFilter.\nReturns true if any query matches against this …\nReturns true if any query matches against this …\nReturns true if any query matches against this BlockFilter.\nCreates a new BlockFilterWriter from block.\nCreates a new BlockFilterReader from block_hash.\nCreates a new GcsFilterReader with specific seed to …\nCreates a new GcsFilterWriter wrapping a generic writer, …\nCreates a new BitStreamReader that reads bitwise from a …\nCreates a new BitStreamWriter that writes bitwise to a …\nCreates a new filter from pre-computed data.\nComputes a SCRIPT_FILTER that contains spent and output …\nReads nbit bits, returning the bits in a u64 starting with …\nWrites nbits bits from data.\nBase58 encoding error\nA pk->pk derivation was attempted on a hardened key\nA chain code\nA child number for a derived key\nA BIP-32 derivation path.\nAn iterator over children of a DerivationPath.\nA BIP32 error\nThe old name for xpriv, extended public key.\nThe old name for xpub, extended public key.\nThe old name for xpriv, extended public key (with a …\nThe old name for xpub, extended public key (with a …\nA fingerprint\nHardened key\nHexadecimal decoding error\nTrait that allows possibly failable conversion from a type …\nBase58 decoded data was an invalid length.\nDecoded base58 data was an invalid length.\nA child number was provided that was out of range\nInvalid childnumber format.\nInvalid derivation path format.\nPublicKey hex should be 66 or 130 digits long.\nFull information on the used extended public key: …\nNon-hardened key\nA secp256k1 error occurred\nUnknown version magic bytes\nEncoded extended key data has wrong length\nExtended key identifier as defined in BIP-32.\nExtended private key\nExtended public key\nReturns a reference the underlying bytes.\nReturns a reference the underlying bytes.\nConverts the object to a mutable raw pointer.\nConverts the object to a mutable raw pointer.\nConverts the object to a raw pointer.\nConverts the object to a raw pointer.\nChain code\nChain code\nChain code\nChain code\nChain code\nChain code\nCreate a new DerivationPath that is a child of this one.\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nChild number of the key used to derive from parent (0 for …\nGet an Iterator over the children of this DerivationPath …\nPublic->Public child key derivation\nCompute the scalar tweak added to this key to get a child …\nDecoding extended private key from binary data according …\nDecoding extended public key from binary data according to …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nHow many derivations this key is from the master (which is …\nAttempts to derive an extended private key from a path.\nAttempts to derive an extended public key from a path.\nExtended private key binary encoding according to BIP 32\nExtended public key binary encoding according to BIP 32\nConcatenate self with path and return the resulting new …\nReturns the first four bytes of the identifier\nReturns the first four bytes of the identifier\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a Hardened from an index, returns an error if the …\nCreates Self from a hex string.\nCreates Self from a hex string.\nCreate a Normal from an index, returns an error if the …\nDerives a public key from a private key\nGet an Iterator over the hardened children of this …\nReturns the HASH160 of the public key belonging to the …\nReturns the HASH160 of the chaincode\nReturns the child number that is a single increment from …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert into a DerivationPath that is a child of this one.\nConverts a given type into a DerivationPath with possible …\nConvert an iterator of anything into FallibleIterator by …\nReturns the invalid payload length.\nReturns whether the object, as an array, is empty. Always …\nReturns whether the object, as an array, is empty. Always …\nReturns true if the derivation path is empty\nReturns true if the child number is a Hardened value.\nReturns whether derivation path represents master key …\nReturns true if the child number is a Normal value.\nReturns the length of the object as an array.\nReturns the length of the object as an array.\nReturns length of the derivation path\nReturns derivation path for a master key (i.e. empty …\nThe network kind this key is to be used on\nThe network kind this key is to be used on\nThe network this key is to be used on\nThe network this key is to be used on\nThe network this key is to be used on\nThe network kind this key is to be used on\nConstruct a new master key from a seed value\nGet an Iterator over the unhardened children of this …\nFingerprint of the parent key\nFingerprint of the parent key\nFingerprint of the parent key (0 for master)\nFingerprint of the parent key (0 for master)\nFingerprint of the parent key (0 for master)\nFingerprint of the parent key\nPrivate key\nPrivate key\nPrivate key\nPublic key\nPublic key\nPublic key\nStart a new DerivationPathIterator at the given child.\nReturns the underlying bytes.\nReturns the underlying bytes.\nConstructs BIP340 keypair for Schnorr signatures and …\nConstructs ECDSA compressed private key matching internal …\nConstructs ECDSA compressed public key matching internal …\nReturns the derivation path as a vector of u32 integers. …\nConstructs BIP340 x-only public key for BIP-340 signatures …\nConvert an iterator of Results into FallibleIterator by …\nKey index, within [0, 2^31 - 1]\nKey index, within [0, 2^31 - 1]\nRepresents fee rate.\nRepresents block weight - the weight of a transaction or …\nBitcoin blocks.\nBlockdata constants.\nImplements FeeRate and assoctiated features.\nProvides absolute and relative locktimes.\nBitcoin script opcodes.\nBitcoin scripts.\nBitcoin transactions.\nImplements Weight and associated features.\nWitness\nThe header hash is not below the target.\nThe target field of a block header did not match the …\nAn error when looking up a BIP34 block height.\nBitcoin block.\nA bitcoin block hash.\nBitcoin block header.\nBIP-9 compatible version number that does not signal for …\nThe BIP34 push was negative.\nNo push was present where the BIP34 push was expected.\nThe original Bitcoin Block v1.\nThe number of bytes that the block header contributes to …\nBIP-34 Block v2.\nA hash of the Merkle tree branch or root for transactions.\nThe BIP34 push was larger than 8 bytes.\nThe block does not support BIP34 yet.\nA block validation error.\nBitcoin block version number.\nA hash corresponding to the witness structure commitment …\nA hash corresponding to the Merkle tree root for witness …\nThe target value below which the blockhash must lie.\nReturns the block hash.\nComputes the popular “difficulty” measure for mining.\nComputes the popular “difficulty” measure for mining …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a Version from a signed 32 bit integer value.\nThe block header\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nChecks whether the version number is signalling a soft …\nThe root hash of the merkle tree of transactions in the …\nThe nonce, selected to obtain a low enough blockhash.\nReference to the previous block in the chain.\nComputes the target (range [0, T] inclusive) that a …\nThe timestamp of the block, as claimed by the miner.\nReturns the inner i32 value.\nList of transactions contained in the block\nChecks that the proof-of-work for the block is valid, …\nBlock version, now repurposed for soft fork signalling.\nReturns the total work of the block.\nChainHash for mainnet bitcoin.\nNumber of blocks needed for an output from a coinbase …\nThe uniquely identifying hash of the target blockchain.\nHow many blocks between diffchanges.\nHow much time on average should occur between diffchanges.\nThe maximum allowed number of signature check operations …\nMaximum allowed value for an integer in Script.\nThe maximum allowed script size.\nMainnet (bitcoin) pubkey address prefix.\nTest (tesnet, signet, regtest) pubkey address prefix.\nChainHash for regtest bitcoin.\nMainnet (bitcoin) script address prefix.\nTest (tesnet, signet, regtest) script address prefix.\nChainHash for signet bitcoin.\nHow may blocks between halvings.\nHow many seconds between blocks we expect on average.\nChainHash for testnet bitcoin.\nThe factor that non-witness serialization data is …\nReturns a reference the underlying bytes.\nConverts the object to a mutable raw pointer.\nConverts the object to a raw pointer.\nReturns the argument unchanged.\nConverts genesis block hash into ChainHash.\nCreates Self from a hex string.\nConstructs and returns the genesis block.\nCalls U::from(self).\nReturns whether the object, as an array, is empty. Always …\nReturns the length of the object as an array.\nReturns the underlying bytes.\nReturns the hash of the network genesis block for use as a …\nReturns the hash of the network genesis block for use as a …\nRepresents fee rate.\nProvides type LockTime that implements the logic around …\nProvides type LockTime that implements the logic around …\nA block height lock time value.\nAn error that occurs when converting a u32 to a lock time …\nAn absolute block height, guaranteed to always contain a …\nThe Threshold for deciding whether a lock time value is a …\nAn absolute lock time value, representing either a block …\nThe maximum absolute block height.\nThe maximum absolute block time (Sun Feb 07 2106 06:28:15 …\nThe minimum absolute block height (0), the genesis block.\nThe minimum absolute block time (Tue Nov 05 1985 00:53:20 …\nError returned when parsing block height fails.\nError returned when parsing block time fails.\nThe number of bytes that the locktime contributes to the …\nA UNIX timestamp lock time value.\nA UNIX timestamp, seconds since epoch, guaranteed to …\nAbsolute block height 0, the genesis block.\nIf crate::Transaction::lock_time is set to zero it is …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a new block height.\nConstructs a new block time.\nConstructs a LockTime from an nLockTime value or the …\nConstructs a LockTime from n, expecting n to be a valid …\nCreates a Height from a hex string.\nCreates a Time from a hex string.\nCreates a LockTime from an prefixed hex string.\nConstructs a LockTime from n, expecting n to be a valid …\nCreates a LockTime from an unprefixed hex string.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if this lock time value is a block height.\nReturns true if this lock time value is a block time (UNIX …\nReturns true if satisfaction of other lock time implies …\nReturns true if both lock times use the same unit i.e., …\nReturns true if this timelock constraint is satisfied by …\nConverts this Height to its inner u32 value.\nConverts this Time to its inner u32 value.\nReturns the inner u32 value. This is the value used when …\nA block height lock time value.\nError returned when a sequence number is parsed as a lock …\nA relative lock time lock-by-blockheight value.\nTried to satisfy a lock-by-blocktime lock using a height …\nTried to satisfy a lock-by-blockheight lock using a time …\nA relative lock time value, representing either a block …\nThe maximum relative block height.\nThe maximum relative block time (33,554,432 seconds or …\nThe minimum relative block height (0), can be included in …\nThe minimum relative block time (0), can be included in …\nThe number of bytes that the locktime contributes to the …\nA relative lock time lock-by-blocktime value.\nA 512 second time interval value.\nInput time in seconds was too large to be encoded to a 16 …\nRelative block height 0, can be included in any block.\nRelative block time 0, can be included in any block.\nA relative locktime of 0 is always valid, and is assumed …\nAccessor for the u32 whose “disable” flag was set, …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a Time using time intervals where each interval is …\nConstructs a LockTime from n, expecting n to be a count of …\nConstructs a LockTime from an nSequence value or the …\nCreate a Height using a count of blocks.\nConstructs a LockTime from n, expecting n to be a 16-bit …\nCreate a Time from seconds, converting the seconds into …\nCreate a LockTime from seconds, converting the seconds …\nCreate a Time from seconds, converting the seconds into …\nCreate a LockTime from seconds, converting the seconds …\nConstructs a LockTime from the sequence number of a …\nAttempted to satisfy a lock-by-blocktime lock with this …\nThe inner height value of the lock-by-blockheight lock.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if this lock time value is in units of block …\nReturns true if this lock time value is in units of time.\nReturns true if satisfaction of other lock time implies …\nReturns true if satisfaction of the sequence number …\nReturns true if both lock times use the same unit i.e., …\nReturns true if this [relative::LockTime] is satisfied by …\nReturns true if this [relative::LockTime] is satisfied by …\nReturns true if this [relative::LockTime] is satisfied by …\nCreates a new TimeOverflowError using seconds.\nThe inner time value of the lock-by-blocktime lock.\nAttempted to satisfy a lock-by-blockheight lock with this …\nReturns the u32 value used to encode this locktime in an …\nReturns the u32 value used to encode this locktime in an …\nReturns the u32 value used to encode this locktime in an …\nEncodes the locktime as a sequence number.\nReturns the inner u16 value.\nReturns the inner u16 value.\nBroad categories of opcodes with similar behavior.\nClassification context for the opcode.\nFails the script even if not executed.\nOpcode used in legacy context.\nDoes nothing.\nPush an empty array onto the stack.\nEmpty stack is also FALSE.\nPreviously called OP_NOP2.\nPreviously called OP_NOP3.\nNumber 1 is also TRUE.\nA script Opcode.\nAny opcode not covered above.\nPushes the given number of bytes onto the stack.\nPushes the given number onto the stack.\nFails the script if executed.\nSucceeds the script even if not executed.\nOpcode used in tapscript context.\nEnables wildcard imports to bring into scope all opcodes …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nMap 0 to 0 and everything else to 1, in place.\nIncrement the top stack element in place.\nDecrement the top stack element in place.\nFail the script unconditionally, does not even need to be …\nDrops the top two stack items.\nDuplicates the top two stack items as AB -> ABAB.\nFail the script unconditionally, does not even need to be …\nCopies the two stack items of items two spaces back to the …\nMoves the two stack items four spaces back to the front, …\nSwaps the top two pairs, as ABCD -> CDAB.\nDuplicates the two three stack items as ABC -> ABCABC.\nAbsolute value the top stack item in place.\nPop two stack items and push their sum.\nFail the script unconditionally, does not even need to be …\nPop the top two stack items and push 1 if both are …\nPop the top two stack items and push 1 if either is …\nFail the script unconditionally, does not even need to be …\nPop N, N pubkeys, M, M signatures, a dummy (due to bug in …\nLike the above but return success/failure.\nhttps://en.bitcoin.it/wiki/OP_CHECKSIG pushing 1/0 for …\nOP_CHECKSIGADD post tapscript.\nhttps://en.bitcoin.it/wiki/OP_CHECKSIG returning …\n…\nIgnore this and everything preceding when deciding what to …\n…\nPush the current number of stack items onto the stack.\nFail the script unconditionally, does not even need to be …\nDrops the top stack item.\nDuplicates the top stack item.\nExecute statements if those after the previous OP_IF were …\nPop and execute the next statements if a zero element was …\nPushes 1 if the inputs are exactly equal, 0 otherwise.\nReturns success if the inputs are exactly equal, failure …\nPop one element from the alt stack onto the main stack.\nPop the top two items; push 1 if the second is greater …\nPop the top two items; push 1 if the second is >= the top, …\nPop the top stack item and push its RIPEMD(SHA256) hash.\nPop the top stack item and push its SHA256(SHA256) hash.\nPop and execute the next statements if a nonzero element …\nDuplicate the top stack element unless it is zero.\nSynonym for OP_RETURN.\nFail the script unconditionally, does not even need to be …\nFail the script unconditionally, does not even need to be …\nPop the top two items; push 1 if the second is less than …\nPop the top two items; push 1 if the second is <= the top, …\nFail the script unconditionally, does not even need to be …\nPop the top two items; push the larger.\nPop the top two items; push the smaller.\nFail the script unconditionally, does not even need to be …\nFail the script unconditionally, does not even need to be …\nMultiply the top stack item by -1 in place.\nDrops the second-to-top stack item.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nDoes nothing.\nMap 0 to 1 and everything else to 0, in place.\nPop and execute the next statements if a zero element was …\nPop the top two stack items and push 1 if both are …\nPop the top two stack items and return success if both are …\nPop the top two stack items and push 0 if both are …\nFail the script unconditionally, does not even need to be …\nCopies the second-to-top stack item, as xA -> AxA.\nPop the top stack element as N. Copy the Nth stack element …\nPush an empty array onto the stack.\nPush the next byte as an array onto the stack.\nPush the next 10 bytes as an array onto the stack.\nPush the next 11 bytes as an array onto the stack.\nPush the next 12 bytes as an array onto the stack.\nPush the next 13 bytes as an array onto the stack.\nPush the next 14 bytes as an array onto the stack.\nPush the next 15 bytes as an array onto the stack.\nPush the next 16 bytes as an array onto the stack.\nPush the next 17 bytes as an array onto the stack.\nPush the next 18 bytes as an array onto the stack.\nPush the next 19 bytes as an array onto the stack.\nPush the next 2 bytes as an array onto the stack.\nPush the next 20 bytes as an array onto the stack.\nPush the next 21 bytes as an array onto the stack.\nPush the next 22 bytes as an array onto the stack.\nPush the next 23 bytes as an array onto the stack.\nPush the next 24 bytes as an array onto the stack.\nPush the next 25 bytes as an array onto the stack.\nPush the next 26 bytes as an array onto the stack.\nPush the next 27 bytes as an array onto the stack.\nPush the next 28 bytes as an array onto the stack.\nPush the next 29 bytes as an array onto the stack.\nPush the next 3 bytes as an array onto the stack.\nPush the next 30 bytes as an array onto the stack.\nPush the next 31 bytes as an array onto the stack.\nPush the next 32 bytes as an array onto the stack.\nPush the next 33 bytes as an array onto the stack.\nPush the next 34 bytes as an array onto the stack.\nPush the next 35 bytes as an array onto the stack.\nPush the next 36 bytes as an array onto the stack.\nPush the next 37 bytes as an array onto the stack.\nPush the next 38 bytes as an array onto the stack.\nPush the next 39 bytes as an array onto the stack.\nPush the next 4 bytes as an array onto the stack.\nPush the next 40 bytes as an array onto the stack.\nPush the next 41 bytes as an array onto the stack.\nPush the next 42 bytes as an array onto the stack.\nPush the next 43 bytes as an array onto the stack.\nPush the next 44 bytes as an array onto the stack.\nPush the next 45 bytes as an array onto the stack.\nPush the next 46 bytes as an array onto the stack.\nPush the next 47 bytes as an array onto the stack.\nPush the next 48 bytes as an array onto the stack.\nPush the next 49 bytes as an array onto the stack.\nPush the next 5 bytes as an array onto the stack.\nPush the next 50 bytes as an array onto the stack.\nPush the next 51 bytes as an array onto the stack.\nPush the next 52 bytes as an array onto the stack.\nPush the next 53 bytes as an array onto the stack.\nPush the next 54 bytes as an array onto the stack.\nPush the next 55 bytes as an array onto the stack.\nPush the next 56 bytes as an array onto the stack.\nPush the next 57 bytes as an array onto the stack.\nPush the next 58 bytes as an array onto the stack.\nPush the next 59 bytes as an array onto the stack.\nPush the next 6 bytes as an array onto the stack.\nPush the next 60 bytes as an array onto the stack.\nPush the next 61 bytes as an array onto the stack.\nPush the next 62 bytes as an array onto the stack.\nPush the next 63 bytes as an array onto the stack.\nPush the next 64 bytes as an array onto the stack.\nPush the next 65 bytes as an array onto the stack.\nPush the next 66 bytes as an array onto the stack.\nPush the next 67 bytes as an array onto the stack.\nPush the next 68 bytes as an array onto the stack.\nPush the next 69 bytes as an array onto the stack.\nPush the next 7 bytes as an array onto the stack.\nPush the next 70 bytes as an array onto the stack.\nPush the next 71 bytes as an array onto the stack.\nPush the next 72 bytes as an array onto the stack.\nPush the next 73 bytes as an array onto the stack.\nPush the next 74 bytes as an array onto the stack.\nPush the next 75 bytes as an array onto the stack.\nPush the next 8 bytes as an array onto the stack.\nPush the next 9 bytes as an array onto the stack.\nRead the next byte as N; push the next N bytes as an array …\nRead the next 2 bytes as N; push the next N bytes as an …\nRead the next 4 bytes as N; push the next N bytes as an …\nPush the array 0x01 onto the stack.\nPush the array 0x0a onto the stack.\nPush the array 0x0b onto the stack.\nPush the array 0x0c onto the stack.\nPush the array 0x0d onto the stack.\nPush the array 0x0e onto the stack.\nPush the array 0x0f onto the stack.\nPush the array 0x10 onto the stack.\nPush the array 0x02 onto the stack.\nPush the array 0x03 onto the stack.\nPush the array 0x04 onto the stack.\nPush the array 0x05 onto the stack.\nPush the array 0x06 onto the stack.\nPush the array 0x07 onto the stack.\nPush the array 0x08 onto the stack.\nPush the array 0x09 onto the stack.\nPush the array 0x81 onto the stack.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nFail the script immediately. (Must be executed.).\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nSynonym for OP_RETURN.\nFail the script unconditionally, does not even need to be …\nPop the top stack item and push its RIPEMD160 hash.\nPop the top stack element as N. Move the Nth stack element …\nRotate the top three stack items, as [top next1 next2] -> […\nFail the script unconditionally, does not even need to be …\nPop the top stack item and push its SHA1 hash.\nPop the top stack item and push its SHA256 hash.\nPushes the length of the top stack item onto the stack.\nPop two stack items and push the second minus the top.\nFail the script unconditionally, does not even need to be …\nSwap the top two stack items.\nPop one element from the main stack onto the alt stack.\nCopy the top stack item to before the second item, as [top …\nSynonym for OP_RETURN.\nFail the script unconditionally, does not even need to be …\nIf the top value is zero or the stack is empty, fail; …\nFail the script unconditionally, does not even need to be …\nPop the top three items; if the top is >= the second and < …\nFail the script unconditionally, does not even need to be …\nAn Object which can be used to construct a script piece by …\nIterator over bytes of a script\nSome opcode expected a parameter but it was missing or …\nWays that a script might fail. Not everything is split up …\nA “parsed opcode” which allows iterating over a Script …\nIterator over script instructions with their positions.\nIterator over a script returning parsed opcodes.\nSomething did a non-minimal push; for more information see …\nTried to read an array off the stack as a number when it …\nSome non-push opcode.\nByte slices that can be in Bitcoin script.\nPush a bunch of data.\nOwned, growable counterpart to PushBytes.\nError returned on attempt to create too large PushBytes.\nReports information about failed conversion into PushBytes.\nBitcoin script slice.\nAn owned, growable script.\nA hash of Bitcoin Script bytecode.\nCan not serialize the spending transaction.\nCan not find the spent output.\nSegWit version of a Bitcoin Script bytecode hash.\nReturns script bytes\nReturns the underlying bytes.\nReturns the underlying mutbale bytes.\nExtracts mutable PushBytes slice\nExtracts PushBytes slice\nReturns the internal script\nViews the remaining script as a slice.\nViews the remaining script as a slice.\nReturns the number of bytes the buffer can contain without …\nRemove all bytes from buffer without affecting capacity.\nCreates an empty PushBytes.\nTry appending a slice to PushBytesBuf\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nHow many bytes the input had.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts the Builder into script bytes\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nConverts the Builder into ScriptBuf.\nChecks whether the script is the empty script.\nReturns true if the buffer contains zero bytes.\nReturns true if the buffer contains zero bytes.\nReturns the length in bytes of the script.\nReturns the number of bytes in buffer.\nReturns the number of bytes in buffer.\nCreates a new empty script.\nCreates a new empty PushBytesBuf.\nReturns the opcode if the instruction is not a data push.\nRemove the last byte from buffer if any.\nTry pushing a single byte.\nReturns the pushed bytes if the instruction is a data push.\nAdds instructions to push an integer onto the stack.\nAdds instructions to push a public key onto the stack.\nAdds instructions to push an absolute lock time onto the …\nAdds a single opcode to the script.\nAdds instructions to push a sequence number onto the stack.\nAdds instructions to push some arbitrary data onto the …\nAdds an OP_VERIFY to the script or replaces the last …\nAdds instructions to push an XOnly public key onto the …\nDecodes a boolean.\nDecodes an integer in script(minimal CScriptNum) format.\nDecodes an integer in script format without non-minimal …\nRemove the byte at index and return it.\nReserve capacity for additional_capacity bytes.\nReturns the number interpretted by the script parser if it …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nRemove bytes from buffer past len.\nCreates a new empty PushBytesBuf with reserved capacity.\nThe segregated witness program as defined by BIP141.\nThe segregated witness version byte as defined by BIP141.\nEncodes an integer in script(minimal CScriptNum) format.\nWitness program error.\nThe witness program must be between 2 and 40 bytes in …\nA v0 witness program must be either of length 20 or 32.\nThe maximum byte size of a segregated witness program.\nThe minimum byte size of a segregated witness program.\nThe segregated witness program.\nReturns the argument unchanged.\nCalls U::from(self).\nCannot create a witness version from non-zero data push.\nError parsing WitnessVersion from a string.\nString contained an invalid witness version number.\nCannot not convert OP to a witness version.\nError attempting to create a WitnessVersion from an …\nError attempting to create a WitnessVersion from an …\nUnable to parse integer from string.\nInitial version of witness program. Used for P2WPKH and …\nVersion of witness program used for Taproot P2TR outputs.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nFuture (unsupported) version of witness program.\nVersion of the segregated witness program.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid non-witness version integer.\nError in general format.\nError attempting to do an out of bounds access on a vector.\nWeight prediction of an individual input.\nError attempting to do an out of bounds access on the …\nThe original Bitcoin transaction version (pre-BIP-68).\nA reference to a transaction output.\nError attempting to do an out of bounds access on the …\nInput weight prediction corresponding to spending of a …\nInput weight prediction corresponding to spending of a …\nInput weight prediction corresponding to spending of …\nInput weight prediction corresponding to spending of …\nInput weight prediction corresponding to spending of …\nAn error in parsing an OutPoint.\nBitcoin transaction input sequence number.\nThe second Bitcoin transaction version (post-BIP-68).\nSize exceeds max.\nBitcoin transaction.\nBitcoin transaction input.\nBitcoin transaction output.\nA bitcoin transaction hash/transaction ID.\nError in TXID part.\nThe transaction version.\nError in vout part.\nVout part is not strictly numeric without leading zeroes.\nA bitcoin witness transaction ID.\nComputes the value of an output accounting for the cost of …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nComputes the prediction for a single input in const …\nInput weight prediction corresponding to spending of a …\nInput weight prediction corresponding to spending of …\nAttempted index access.\nList of transaction inputs.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns true if this transaction version number is …\nLength of the vector where access was attempted.\nBlock height or timestamp. Transaction cannot be included …\nComputes the prediction for a single input.\nCreates a non-standard transaction version.\nList of transaction outputs.\nPredicts the weight of a to-be-constructed transaction.\nPredicts the weight of a to-be-constructed transaction in …\nThe reference to the previous output that is being used as …\nThe script which must be satisfied for the output to be …\nThe script which pushes values on the stack which will …\nThe sequence number, which suggests to miners which of two …\nThe referenced transaction’s txid.\nThe value of the output, in satoshis.\nThe protocol version, is currently expected to be 1 or 2 …\nThe index of the referenced output in its transaction’s …\nTallies the total weight added to a transaction by an …\nWitness data: an array of byte-arrays. Note that this …\nThe factor that non-witness serialization data is …\nRepresents block weight - the weight of a transaction or …\nAn iterator returning individual witness elements.\nThe Witness is the data used to unlock bitcoin since the …\nReturns the argument unchanged.\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nThe mainnet parameters (alias for Params::MAINNET).\nInvalid consensus encoding.\nData which can be encoded in a consensus-consistent way.\nError when consensus decoding from an [IterReader].\nData which can be encoded in a consensus-consistent way.\nThe mainnet parameters.\nOther decoding error.\nParameters that influence chain consensus.\nThe regtest parameters.\nExtensions of Read to decode data as per Bitcoin consensus.\nThe signet parameters.\nThe testnet parameters.\nAttempted to decode an object from an iterator that …\nExtensions of Write to encode data as per Bitcoin …\nDetermines whether minimal difficulty may be used for …\nTime when BIP16 becomes active.\nBlock height at which BIP34 becomes active.\nBlock height at which BIP65 becomes active.\nBlock height at which BIP66 becomes active.\nDecode an object with a well-defined format.\nDecode Self from a size-limited reader.\nEncodes an object with a well-defined format.\nDeserializes an object from a vector, will error if said …\nDeserializes an object from a vector, but will not report …\nCalculates the number of blocks between difficulty …\nOutputs a boolean.\nOutputs a 16-bit signed integer.\nOutputs a 32-bit signed integer.\nOutputs a 64-bit signed integer.\nOutputs an 8-bit signed integer.\nOutputs a byte slice.\nOutputs a 16-bit unsigned integer.\nOutputs a 32-bit unsigned integer.\nOutputs a 64-bit unsigned integer.\nOutputs an 8-bit unsigned integer.\nBitcoin consensus-encodable types.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nThe maximum attainable target value for these params.\nNumber of blocks with the same set of rules.\nNetwork for which parameters are valid.\nCreates parameters set for the given network. /// …\nDetermines whether retargeting is disabled for this …\nBitcoin consensus parameters.\nProof of work limit value. It contains the lowest possible …\nExpected amount of time to mine one block.\nDifficulty recalculation interval.\nReads a boolean.\nReads a 16-bit signed integer.\nReads a 32-bit signed integer.\nReads a 64-bit signed integer.\nReads an 8-bit signed integer.\nReads a byte slice.\nReads a 16-bit unsigned integer.\nReads a 32-bit unsigned integer.\nReads a 64-bit unsigned integer.\nReads an 8-bit unsigned integer.\nMinimum blocks including miner confirmation of the total …\nSerde serialization via consensus encoding\nEncodes an object into a vector.\nData and a 4-byte checksum.\nData which can be encoded in a consensus-consistent way.\nDecoding error.\nData which can be encoded in a consensus-consistent way.\nEncoding error.\nHex deserialization error.\nChecksum was invalid.\nAnd I/O error.\nMaximum size, in bytes, of a vector we are allowed to …\nVarInt was encoded in a non-minimal way.\nPurported hex string had odd length.\nTried to allocate an oversized vector.\nParsing error.\nExtensions of Read to decode data as per Bitcoin consensus.\nUnsupported Segwit flag.\nA variable-length unsigned integer.\nExtensions of Write to encode data as per Bitcoin …\nReturns the checksum of the data.\nDecode an object with a well-defined format.\nDecode Self from a size-limited reader.\nEncodes an object with a well-defined format.\nReturns a reference to the raw data without the checksum.\nDeserializes an object from a vector, will error if said …\nDeserialize any decodable type from a hex string, will …\nDeserializes an object from a vector, but will not report …\nOutputs a boolean.\nOutputs a 16-bit signed integer.\nOutputs a 32-bit signed integer.\nOutputs a 64-bit signed integer.\nOutputs an 8-bit signed integer.\nOutputs a byte slice.\nOutputs a 16-bit unsigned integer.\nOutputs a 32-bit unsigned integer.\nOutputs a 64-bit unsigned integer.\nOutputs an 8-bit unsigned integer.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the raw data without the checksum.\nCreates a new CheckedData computing the checksum of given …\nReads a boolean.\nReads a 16-bit signed integer.\nReads a 32-bit signed integer.\nReads a 64-bit signed integer.\nReads an 8-bit signed integer.\nReads a byte slice.\nReads a 16-bit unsigned integer.\nReads a 32-bit unsigned integer.\nReads a 64-bit unsigned integer.\nReads an 8-bit unsigned integer.\nEncodes an object into a vector.\nEncodes an object into a hex-encoded string.\nThe invalid checksum.\nThe expected checksum.\nThe maximum capacity.\nThe capacity requested.\nThe mainnet parameters.\nParameters that influence chain consensus.\nThe regtest parameters.\nThe signet parameters.\nThe testnet parameters.\nDetermines whether minimal difficulty may be used for …\nTime when BIP16 becomes active.\nBlock height at which BIP34 becomes active.\nBlock height at which BIP65 becomes active.\nBlock height at which BIP66 becomes active.\nThe maximum attainable target value for these params.\nNumber of blocks with the same set of rules.\nNetwork for which parameters are valid.\nDetermines whether retargeting is disabled for this …\nProof of work limit value. It contains the lowest possible …\nExpected amount of time to mine one block.\nDifficulty recalculation interval.\nMinimum blocks including miner confirmation of the total …\nProvides an instance of string-to-byte decoder.\nProvides an instance of byte-to-string encoder.\nError returned when decoding fails.\nThe decoder state.\nTransforms given bytes and writes to the writer.\nThe encoder state.\nHex-encoding strategy\nError returned when decoder can’t be created.\nConverts error into a type implementing serde::de::Error\nHelper for #[serde(with = "")].\nDeserializes the value as consensus-encoded\nTransform the provided slice and write to the writer.\nWrite data in buffer (if any) to the writer.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs the decoder from string.\nImplements hex encoding.\nCalls U::from(self).\nCalls U::from(self).\nPerforms the conversion.\nSerializes the value as consensus-encoded\nMarker for upper/lower case type-level flags (“…\nError returned when a hex string contains invalid …\nError returned when a hex string decoder can’t be …\nHex decoder state.\nHex byte encoder.\nMarker for using lower-case hex encoding.\nMarker for using upper-case hex encoding.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nSignature was empty.\nAn ECDSA signature-related error.\nHex decoding error.\nA secp256k1 error.\nHolds signature serialized in-line (not in Vec).\nNon-standard sighash type.\nAn ECDSA signature with the corresponding hash type.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nDeserializes from slice following the standardness rules …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns an iterator over bytes of the signature.\nSerializes an ECDSA signature (inner secp256k1 signature …\nSerializes an ECDSA signature (inner secp256k1 signature …\nConstructs an ECDSA Bitcoin signature for …\nThe corresponding hash type.\nThe underlying ECDSA Signature.\nSerializes an ECDSA signature (inner secp256k1 signature …\nWrites this serialized signature to a writer.\nHex string contains prefix.\nError when hex string contains a prefix (e.g. 0x).\nHex string is missing prefix.\nError when hex string is missing a prefix (e.g. 0x).\nError parsing integer from hex string.\nError parsing integer from string.\nError with rich context returned when a string can’t be …\nError returned when parsing integer from an supposedly …\nError returned when parsing integer from an supposedly …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nA bitcoin block hash.\nFilter hash, as defined in BIP-157\nFilter header, as defined in BIP-157\nA hash of the Merkle tree branch or root for transactions.\nA bitcoin transaction hash/transaction ID.\nA hash corresponding to the witness structure commitment …\nA hash corresponding to the Merkle tree root for witness …\nA bitcoin witness transaction ID.\nLength of the hash’s internal block size, in bytes.\nThe byte array that represents the hash internally.\nFlag indicating whether user-visible serializations of …\nA hashing engine which bytes can be serialized into. It is …\nAttempted to create a hash from an invalid length slice.\nTrait which applies to hashes of all types.\nA hashing engine which bytes can be serialized into.\nA hash computed from a RFC 2104 HMAC. Parameterized by the …\nPair of underlying hash engines, used for the inner and …\nLength of the hash, in bytes.\nByte array representing the internal state of the hash …\nReturns an all zero hash.\nReturns a reference to the underlying byte array.\nAdds slicing traits implementations to a given type $ty\nUseful comparison functions.\nConstructs a new engine.\nConstructs a hash from the underlying byte array.\nProduces a hash from the current state of a given engine.\nCopies a byte slice into a hash object.\nHashes some bytes.\nHASH160 (SHA256 then RIPEMD160) implementation.\nHashes all the byte slices retrieved from the iterator …\nCreates a new newtype around a Hash type.\nAdds hexadecimal formatting implementation of a trait $imp …\nHash-based Message Authentication Code (HMAC).\nAdd data to the hash engine.\nOutputs the midstate of the hash engine. This function …\nReturn the number of bytes already …\nRIPEMD160 implementation.\nImplements Serialize and Deserialize for a type $t which …\nMacros for serde trait implementations, and supporting …\nSHA1 implementation.\nSHA256 implementation.\nSHA256d implementation (double SHA256).\nSHA256t implementation (tagged SHA256).\nMacro used to define a newtype tagged hash.\nSHA384 implementation.\nSHA512 implementation.\nSHA512_256 implementation.\nSipHash 2-4 implementation.\nReturns the underlying byte array.\nCompare two slices for equality in fixed time. Panics if …\nOutput of the Bitcoin HASH160 hash function. …\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nIterator over bytes which encodes the bytes and yields hex …\nPossible case of hex.\nThe type providing fmt::Display implementation.\nExtension trait for types that can be displayed as hex.\nError type returned while parsing hex string.\nTrait for objects that can be deserialized from hex …\nConvenience alias for HexToBytesIter<HexDigitsIter<'a>>.\nHex decoding error.\nHex decoding error.\nIterator yielding bytes decoded from an iterator of pairs …\nNon-hexadecimal character.\nNon-hexadecimal character.\nInvalid hex character.\nTried to parse fixed-length hash from a string with the …\nProduce lower-case chars ([0-9a-f]).\nPurported hex string had odd length.\nPurported hex string had odd length.\nProduce upper-case chars ([0-9A-F]).\nAppends hex-encoded content to an existing String.\nDisplay Self as a continuous sequence of ASCII hex chars.\nImplements a buffered encoder.\nHelpers for displaying bytes as hex strings.\nError code for the hex-conservative crate.\nFormat known-length array as hex.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nProduces an object from a hex string.\nConstructs a custom hex decoding iterator from another …\nHints how much bytes to reserve when creating a String.\nAdds core::fmt trait implementations to type $ty.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nReturns the invalid character byte.\nReturns the odd length of the input string.\nConstructs a new HexToBytesIter from a string slice.\nConstructs a new BytesToHexIter from a byte iterator.\nHex encoding and decoding.\nRe-exports of the common crate traits.\nQuick and dirty macro for parsing hex in tests.\nCreate a hex-encoded string.\nCreate a lower-hex-encoded string.\nCreate an upper-hex-encoded string.\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nFormats error.\nHex-encodes bytes into the provided buffer.\nReturns the written bytes as a hex str.\nResets the buffer to become empty.\nReturns the argument unchanged.\nCalls U::from(self).\nReturns true if no more bytes can be written into the …\nCreates an empty BufEncoder.\nEncodes byte as hex in given case and appends it to the …\nEncodes bytes as hex in given case and appends them to the …\nEncodes as many bytes as fit into the buffer as hex and …\nHow many bytes can be written to this buffer.\nThe type providing fmt::Display implementation.\nDisplays byte array as hex.\nDisplays byte slice as hex.\nExtension trait for types that can be displayed as hex.\nAppends hex-encoded content to an existing String.\nDisplay Self as a continuous sequence of ASCII hex chars.\nFormat known-length array as hex.\nReturns the argument unchanged.\nReturns the argument unchanged.\nHints how much bytes to reserve when creating a String.\nAdds core::fmt trait implementations to type $ty.\nCalls U::from(self).\nCalls U::from(self).\nCreate a hex-encoded string.\nCreate a lower-hex-encoded string.\nCreate an upper-hex-encoded string.\nHex decoding error.\nHex decoding error.\nNon-hexadecimal character.\nNon-hexadecimal character.\nInvalid hex character.\nTried to parse fixed-length hash from a string with the …\nTried to parse fixed-length hash from a string with the …\nPurported hex string had odd length.\nPurported hex string had odd length.\nThe expected length.\nReturns the argument unchanged.\nCalls U::from(self).\nThe invalid length.\nError type returned while parsing hex string.\nTrait for objects that can be deserialized from hex …\nHex decoding error.\nHex decoding error.\nNon-hexadecimal character.\nNon-hexadecimal character.\nTried to parse fixed-length hash from a string with the …\nPurported hex string had odd length.\nProduces an object from a hex string.\nThe type providing fmt::Display implementation.\nExtension trait for types that can be displayed as hex.\nError type returned while parsing hex string.\nTrait for objects that can be deserialized from hex …\nAppends hex-encoded content to an existing String.\nDisplay Self as a continuous sequence of ASCII hex chars.\nProduces an object from a hex string.\nHints how much bytes to reserve when creating a String.\nCreate a hex-encoded string.\nCreate a lower-hex-encoded string.\nCreate an upper-hex-encoded string.\nA hash computed from a RFC 2104 HMAC. Parameterized by the …\nPair of underlying hash engines, used for the inner and …\nPair of underlying hash midstates which represent the …\nReturns the argument unchanged.\nMidstate of the inner hash engine\nCalls U::from(self).\nMidstate of the outer hash engine\nOutput of the RIPEMD160 hash function.\nEngine to compute RIPEMD160 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nA data structure that can be deserialized from any data …\nA data format that can deserialize any data structure …\nThe error type that can be returned if some error occurs …\nThe error type when some error occurs during serialization.\nThe output type produced by this Serializer during …\nA data structure that can be serialized into any data …\nType returned from serialize_map for serializing the …\nType returned from serialize_seq for serializing the …\nType returned from serialize_struct for serializing the …\nType returned from serialize_struct_variant for …\nType returned from serialize_tuple for serializing the …\nType returned from serialize_tuple_struct for serializing …\nType returned from serialize_tuple_variant for serializing …\nA data format that can serialize any data structure …\nCollect an iterator as a map.\nCollect an iterator as a sequence.\nSerialize a string produced by an implementation of Display…\nGeneric data structure deserialization framework.\nDeserialize this value from the given Serde deserializer.\nRequire the Deserializer to figure out how to drive the …\nHint that the Deserialize type is expecting a bool value.\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a char value.\nHint that the Deserialize type is expecting an enum value …\nHint that the Deserialize type is expecting a f32 value.\nHint that the Deserialize type is expecting a f64 value.\nHint that the Deserialize type is expecting an i128 value.\nHint that the Deserialize type is expecting an i16 value.\nHint that the Deserialize type is expecting an i32 value.\nHint that the Deserialize type is expecting an i64 value.\nHint that the Deserialize type is expecting an i8 value.\nHint that the Deserialize type is expecting the name of a …\nHint that the Deserialize type needs to deserialize a …\nHint that the Deserialize type is expecting a map of …\nHint that the Deserialize type is expecting a newtype …\nHint that the Deserialize type is expecting an optional …\nHint that the Deserialize type is expecting a sequence of …\nHint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a struct with …\nHint that the Deserialize type is expecting a sequence of …\nHint that the Deserialize type is expecting a tuple struct …\nHint that the Deserialize type is expecting an u128 value.\nHint that the Deserialize type is expecting a u16 value.\nHint that the Deserialize type is expecting a u32 value.\nHint that the Deserialize type is expecting a u64 value.\nHint that the Deserialize type is expecting a u8 value.\nHint that the Deserialize type is expecting a unit value.\nHint that the Deserialize type is expecting a unit struct …\nHelper macro when implementing the Deserializer part of a …\nDetermine whether Deserialize implementations should …\nDetermine whether Serialize implementations should …\nGeneric data structure serialization framework.\nSerialize this value into the given Serde serializer.\nSerialize a bool value.\nSerialize a chunk of raw byte data.\nSerialize a character.\nSerialize an f32 value.\nSerialize an f64 value.\nSerialize an i128 value.\nSerialize an i16 value.\nSerialize an i32 value.\nSerialize an i64 value.\nSerialize an i8 value.\nBegin to serialize a map. This call must be followed by …\nSerialize a newtype struct like struct Millimeters(u8).\nSerialize a newtype variant like E::N in enum E { N(u8) }.\nSerialize a None value.\nBegin to serialize a variably sized sequence. This call …\nSerialize a Some(T) value.\nSerialize a &str.\nBegin to serialize a struct like …\nBegin to serialize a struct variant like E::S in …\nBegin to serialize a statically sized sequence whose …\nBegin to serialize a tuple struct like …\nBegin to serialize a tuple variant like E::T in …\nSerialize a u128 value.\nSerialize a u16 value.\nSerialize a u32 value.\nSerialize a u64 value.\nSerialize a u8 value.\nSerialize a () value.\nSerialize a unit struct like struct Unit or PhantomData<T>.\nSerialize a unit variant like E::A in enum E { A, B }.\nThe input contained a boolean value that was not expected.\nThe input contained a &[u8] or Vec<u8> that was not …\nThe input contained a char that was not expected.\nA data structure that can be deserialized from any data …\nA data structure that can be deserialized without …\nDeserializeSeed is the stateful form of the Deserialize …\nA data format that can deserialize any data structure …\nThe type of the deserializer being converted into.\nThe input contained an enum that was not expected.\nProvides a Visitor access to the data of an enum in the …\nThe Error trait allows Deserialize implementations to …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nThe error type that can be returned if some error occurs …\nExpected represents an explanation of what data a Visitor …\nThe input contained a floating point f32 or f64 that was …\nAn efficient way of discarding data from a deserializer.\nConverts an existing value into a Deserializer from which …\nThe input contained a map that was not expected.\nProvides a Visitor access to each entry of a map in the …\nThe input contained a newtype struct that was not expected.\nThe input contained a newtype variant that was not …\nThe input contained an Option<T> that was not expected.\nA message stating what uncategorized thing the input …\nThe input contained a sequence that was not expected.\nProvides a Visitor access to each element of a sequence in …\nThe input contained a signed integer i8, i16, i32 or i64 …\nError is a trait representing the basic expectations for …\nThe input contained a &str or String that was not expected.\nThe input contained a struct variant that was not expected.\nThe input contained a tuple variant that was not expected.\nUnexpected represents an unexpected invocation of any one …\nThe input contained a unit () that was not expected.\nThe input contained a unit variant that was not expected.\nThe input contained an unsigned integer u8, u16, u32 or u64…\nThe type produced by using this seed.\nThe value produced by this visitor.\nThe Visitor that will be used to deserialize the content …\nVariantAccess is a visitor that is created by the …\nThis trait represents a visitor that walks through a …\nRaised when there is general error when deserializing a …\nEquivalent to the more common Deserialize::deserialize …\nDeserialize this value from the given Serde deserializer.\nRequire the Deserializer to figure out how to drive the …\nHint that the Deserialize type is expecting a bool value.\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a byte array …\nHint that the Deserialize type is expecting a char value.\nHint that the Deserialize type is expecting an enum value …\nHint that the Deserialize type is expecting a f32 value.\nHint that the Deserialize type is expecting a f64 value.\nHint that the Deserialize type is expecting an i128 value.\nHint that the Deserialize type is expecting an i16 value.\nHint that the Deserialize type is expecting an i32 value.\nHint that the Deserialize type is expecting an i64 value.\nHint that the Deserialize type is expecting an i8 value.\nHint that the Deserialize type is expecting the name of a …\nHint that the Deserialize type needs to deserialize a …\nHint that the Deserialize type is expecting a map of …\nHint that the Deserialize type is expecting a newtype …\nHint that the Deserialize type is expecting an optional …\nHint that the Deserialize type is expecting a sequence of …") \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-1-.js b/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-1-.js index 3c26b28a40..ff7a3e501e 100644 --- a/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-1-.js +++ b/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-1-.js @@ -1 +1 @@ -searchState.loadedDescShard("bdk_chain", 1, "Hint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a struct with …\nHint that the Deserialize type is expecting a sequence of …\nHint that the Deserialize type is expecting a tuple struct …\nHint that the Deserialize type is expecting an u128 value.\nHint that the Deserialize type is expecting a u16 value.\nHint that the Deserialize type is expecting a u32 value.\nHint that the Deserialize type is expecting a u64 value.\nHint that the Deserialize type is expecting a u8 value.\nHint that the Deserialize type is expecting a unit value.\nHint that the Deserialize type is expecting a unit struct …\nRaised when a Deserialize struct type received more than …\nFormat a message stating what data this Visitor expects to …\nFormat an explanation of what data was being expected. …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nConvert this value into a deserializer.\nRaised when deserializing a sequence or map and the input …\nRaised when a Deserialize receives a type different from …\nRaised when a Deserialize receives a value of the right …\nDetermine whether Deserialize implementations should …\nRaised when a Deserialize struct type expected to receive …\nCalled when deserializing a variant with a single value.\nCalled when deserializing a variant with a single value.\nThis returns Ok(Some(value)) for the next value in the …\nThis returns Ok(Some(value)) for the next value in the …\nThis returns Ok(Some((key, value))) for the next …\nThis returns Ok(Some((key, value))) for the next …\nThis returns Ok(Some(key)) for the next key in the map, or …\nThis returns Ok(Some(key)) for the next key in the map, or …\nThis returns a Ok(value) for the next value in the map.\nThis returns a Ok(value) for the next value in the map.\nProvides type based access to context intended for error …\nReturns the number of elements remaining in the sequence, …\nReturns the number of entries remaining in the map, if …\nThe lower-level source of this error, if any.\nCalled when deserializing a struct-like variant.\nCalled when deserializing a tuple-like variant.\nCalled when deserializing a variant with no values.\nRaised when a Deserialize struct type received a field …\nRaised when a Deserialize enum type received a variant …\nBuilding blocks for deserializing basic values using the …\nvariant is called to identify which variant to deserialize.\nvariant is called to identify which variant to deserialize.\nThe input contains a boolean.\nThe input contains a byte array that lives at least as …\nThe input contains a string that lives at least as long as …\nThe input contains a byte array and ownership of the byte …\nThe input contains a byte array. The lifetime of the byte …\nThe input contains a char.\nThe input contains an enum.\nThe input contains an f32.\nThe input contains an f64.\nThe input contains a i128.\nThe input contains an i16.\nThe input contains an i32.\nThe input contains an i64.\nThe input contains an i8.\nThe input contains a key-value map.\nThe input contains a newtype struct.\nThe input contains an optional that is absent.\nThe input contains a sequence of elements.\nThe input contains an optional that is present.\nThe input contains a string. The lifetime of the string is …\nThe input contains a string and ownership of the string is …\nThe input contains a u128.\nThe input contains a u16.\nThe input contains a u32.\nThe input contains a u64.\nThe input contains a u8.\nThe input contains a unit ().\nA deserializer holding a bool.\nA deserializer holding a &[u8] with a lifetime tied to …\nA deserializer holding a &str with a lifetime tied to …\nA deserializer holding a &[u8]. Always calls …\nA deserializer holding a char.\nA deserializer holding a Cow<str>.\nA deserializer holding an EnumAccess.\nA minimal representation of all possible errors that can …\nA deserializer holding an f32.\nA deserializer holding an f64.\nA deserializer holding an i128.\nA deserializer holding an i16.\nA deserializer holding an i32.\nA deserializer holding an i64.\nA deserializer holding an i8.\nA deserializer holding an isize.\nA deserializer holding a MapAccess.\nA deserializer that iterates over a map.\nA deserializer holding a SeqAccess.\nA deserializer that iterates over a sequence.\nA deserializer holding a &str.\nA deserializer holding a String.\nA deserializer holding a u128.\nA deserializer holding a u16.\nA deserializer holding a u32.\nA deserializer holding a u64.\nA deserializer holding a u8.\nA deserializer holding a ().\nA deserializer holding a usize.\nCheck for remaining elements after passing a …\nCheck for remaining elements after passing a …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new borrowed deserializer from the given string.\nCreate a new deserializer from the given bytes.\nCreate a new borrowed deserializer from the given borrowed …\nConstruct a new MapDeserializer<I, E>.\nConstruct a new SeqDeserializer<I, E>.\nConstruct a new SeqAccessDeserializer<A>.\nConstruct a new MapAccessDeserializer<A>.\nConstruct a new EnumAccessDeserializer<A>.\nTrait used by Serialize implementations to generically …\nThe error type when some error occurs during serialization.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nHelper type for implementing a Serializer that does not …\nThe output type produced by this Serializer during …\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nA data structure that can be serialized into any data …\nReturned from Serializer::serialize_map.\nType returned from serialize_map for serializing the …\nReturned from Serializer::serialize_seq.\nType returned from serialize_seq for serializing the …\nReturned from Serializer::serialize_struct.\nType returned from serialize_struct for serializing the …\nReturned from Serializer::serialize_struct_variant.\nType returned from serialize_struct_variant for …\nReturned from Serializer::serialize_tuple.\nType returned from serialize_tuple for serializing the …\nReturned from Serializer::serialize_tuple_struct.\nType returned from serialize_tuple_struct for serializing …\nReturned from Serializer::serialize_tuple_variant.\nType returned from serialize_tuple_variant for serializing …\nA data format that can serialize any data structure …\nError is a trait representing the basic expectations for …\nCollect an iterator as a map.\nCollect an iterator as a sequence.\nSerialize a string produced by an implementation of Display…\nUsed when a Serialize implementation encounters any error …\nAttempts to downcast the box to a concrete type.\nAttempts to downcast the box to a concrete type.\nAttempts to downcast the box to a concrete type.\nReturns some mutable reference to the inner value if it is …\nForwards to the method defined on the type dyn Error.\nForwards to the method defined on the type dyn Error.\nForwards to the method defined on the type dyn Error.\nReturns some reference to the inner value if it is of type …\nForwards to the method defined on the type dyn Error.\nFinish serializing a sequence.\nFinish serializing a tuple.\nFinish serializing a tuple struct.\nFinish serializing a tuple variant.\nFinish serializing a map.\nFinish serializing a struct.\nFinish serializing a struct variant.\nReturns the argument unchanged.\nCalls U::from(self).\nForwards to the method defined on the type dyn Error.\nForwards to the method defined on the type dyn Error.\nReturns true if the inner type is the same as T.\nDetermine whether Serialize implementations should …\nProvides type based access to context intended for error …\nSerialize this value into the given Serde serializer.\nSerialize a bool value.\nSerialize a chunk of raw byte data.\nSerialize a character.\nSerialize a sequence element.\nSerialize a tuple element.\nSerialize a map entry consisting of a key and a value.\nSerialize an f32 value.\nSerialize an f64 value.\nSerialize a tuple struct field.\nSerialize a tuple variant field.\nSerialize a struct field.\nSerialize a struct variant field.\nSerialize an i128 value.\nSerialize an i16 value.\nSerialize an i32 value.\nSerialize an i64 value.\nSerialize an i8 value.\nSerialize a map key.\nBegin to serialize a map. This call must be followed by …\nSerialize a newtype struct like struct Millimeters(u8).\nSerialize a newtype variant like E::N in enum E { N(u8) }.\nSerialize a None value.\nBegin to serialize a variably sized sequence. This call …\nSerialize a Some(T) value.\nSerialize a &str.\nBegin to serialize a struct like …\nBegin to serialize a struct variant like E::S in …\nBegin to serialize a statically sized sequence whose …\nBegin to serialize a tuple struct like …\nBegin to serialize a tuple variant like E::T in …\nSerialize a u128 value.\nSerialize a u16 value.\nSerialize a u32 value.\nSerialize a u64 value.\nSerialize a u8 value.\nSerialize a () value.\nSerialize a unit struct like struct Unit or PhantomData<T>.\nSerialize a unit variant like E::A in enum E { A, B }.\nSerialize a map value.\nIndicate that a struct field has been skipped.\nIndicate that a struct variant field has been skipped.\nThe lower-level source of this error, if any.\nReturns an iterator starting with the current error and …\nFunctions used by serde impls of all hashes.\nSize, in bits, of the hash.\nDefault serialization/deserialization methods.\nDo serde deserialization.\nHelper function to turn a deserialized slice into the …\nDo serde serialization.\nOutput of the SHA1 hash function.\nEngine to compute SHA1 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SHA256 hash function.\nEngine to compute SHA256 hash function.\nOutput of the SHA256 hash function.\nComputes hash from bytes in const context.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new Midstate from the inner value.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCreate a new HashEngine from a Midstate.\nCopies a byte slice into the Midstate object.\nIterate the sha256 algorithm to turn a sha256 hash into a …\nCreates midstate for tagged hashes.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nUnwraps the Midstate and returns the underlying byte array.\nOutput of the SHA256d hash function.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nOutput of the SHA256t hash function.\nTrait representing a tag that can be used as a context for …\nReturns a hash engine that is pre-tagged and is ready to …\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nOutput of the SHA384 hash function.\nEngine to compute SHA384 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SHA512 hash function.\nEngine to compute SHA512 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SHA512/256 hash function.\nEngine to compute SHA512/256 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SipHash24 hash function.\nEngine to compute the SipHash24 hash function.\nInternal state of the HashEngine.\nReturns the (little endian) 64-bit integer representation …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nProduces a hash as u64 from the current state of a given …\nCreates a hash from its (little endian) 64-bit integer …\nHashes the given data directly to u64 with an engine with …\nHashes the given data with an engine with the provided …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nRetrieves the keys of this engine.\nCreates a new SipHash24 engine.\nCreates a new SipHash24 engine with keys.\nA socket address could not be bound because the address is …\nA nonexistent interface was requested or the requested …\nAn entity already exists, often a file.\nThe operation failed because a pipe was closed.\nA trait describing an input stream that uses an internal …\nThe connection was aborted (terminated) by the remote …\nThe connection was refused by the remote server.\nThe connection was reset by the remote server.\nWraps an in memory reader providing the position function.\nContains the error value\nThe io crate error type.\nA minimal subset of std::io::ErrorKind which is used for …\nThis operation was interrupted.\nData not valid for the operation were encountered.\nA parameter was incorrect.\nThe network operation failed because it was not connected …\nAn entity was not found, often a file.\nContains the success value\nA custom error that does not fall under any other I/O …\nThe operation lacked the necessary privileges to complete.\nA generic trait describing an input stream. See …\nResult type returned by functions in this crate.\nA sink to which all writes succeed. See std::io::Sink for …\nReader adapter which limits the bytes read from an …\nThe I/O operation’s timeout expired, causing it to be …\nAn error returned when an operation could not be completed …\nThe operation needs to block to complete, but the blocking …\nA generic trait describing an output stream. See …\nAn error returned when an operation could not be completed …\nMarks the buffered data up to amount as consumed.\nReturns data read from this reader, filling the internal …\nFlushes this output stream, ensuring that all …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns a reference to this error.\nBecause we cannot provide a blanket implementation of …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the inner buffer.\nReturns the error kind for this error.\nCreates a Cursor by wrapping inner.\nCreates a new I/O error.\nReturns the position read up to thus far.\nReads bytes from source into buf.\nReads bytes from source until buf is full.\nReads all bytes until EOF from the underlying reader into …\nAttempts to read up to limit bytes from the reader, …\nReturns a sink to which all writes succeed. See …\nCreates an adapter which will read at most limit bytes.\nWrites buf into this writer, returning how many bytes were …\nAttempts to write an entire buffer into this writer.\nA base58 decoding error.\nAn always-compressed Bitcoin ECDSA public key\nError originated while parsing string.\nEven parity.\nError returned while generating key from slice.\nError generated from WIF key format.\nhex to array conversion error.\nBase58 decoded data contained an invalid address version …\nInvalid address version in decoded base58 data.\nBase58 decoded data was an invalid length.\nDecoded base58 data was an invalid length.\nHex decoding error.\nPublicKey hex should be 66 or 130 digits long.\nInvalid key prefix error.\nInvalid Length of the slice.\nOpaque data structure that holds a keypair consisting of a …\nOdd parity.\nRepresents the parity passed between FFI function calls.\nError returned when parsing a CompressedPublicKey from a …\nError returned while constructing public key from string.\nA Bitcoin ECDSA private key\nA hash of a public key.\nA Bitcoin ECDSA public key\nThe secp256k1 engine, used to execute all signature …\nA Secp256k1 error.\nA secp256k1 error.\nSecp256k1 Error.\nAn opaque return type for PublicKey::to_sort_key\nA trait for tweaking BIP340 key types (x-only public keys …\nTweaked key type with optional auxiliary information\nTweaked key type\nTweaked BIP-340 key pair\nTweaked BIP-340 X-coord-only public key\nSegwit public keys must always be compressed.\nUntweaked BIP-340 key pair\nUntweaked BIP-340 X-coord-only public key\nMarker trait for indicating that an instance of Secp256k1 …\nSegWit version of a public key hash.\nAn x-only public key, used for verification of Taproot …\nTweaks a keypair by first converting the public key to an …\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw const pointer suitable for use with FFI …\nLike cmp::Cmp but faster and with no guarantees across …\nWhether this public key should be serialized as compressed\nWhether this private key should be serialized as compressed\nGetter for the raw pointer to the underlying secp256k1 …\nDirectly converts an UntweakedPublicKey to a …\nCreates a new TweakedPublicKey from a XOnlyPublicKey. No …\nCreates a new TweakedKeypair from a Keypair. No tweak is …\nFormats the explicit byte value of the secret key kept …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a Parity from a signed integer.\nReturns the TweakedPublicKey for keypair.\nCreates a context from a raw context.\nCreates a context from a raw context that can only be used …\nCreates a context from a raw context that can only be used …\nCreates a Keypair directly from a secret key slice.\nCreates a Keypair directly from a secret key string.\nCreates a Keypair directly from a Secp256k1 secret key.\nConstructs a Parity from a byte.\nLets you create a context in a generic manner …\nGenerates a random keypair. Convenience function for …\nThe actual ECDSA key\nThe actual ECDSA key\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid version.\nReturns the invalid payload length.\nThe network kind on which this key should be used\nCreates a new Secp256k1 context with all capabilities.\nGenerates a new random secret key.\nAttempts to erase the secret within the underlying array.\nUses the ffi secp256k1_context_preallocated_size to check …\nUses the ffi secp256k1_context_preallocated_size to check …\nReturns the required memory for a preallocated context …\nUses the ffi secp256k1_context_preallocated_size to check …\nLets you create a context with a preallocated buffer in a …\nCreates a new Secp256k1 context with all capabilities.\nCreates a new Secp256k1 context that can only be used for …\nCreates a new Secp256k1 context that can only be used for …\nReturns the PublicKey for this Keypair.\nReturns the TweakedPublicKey and its Parity for this …\n(Re)randomizes the Secp256k1 context for extra sidechannel …\nDetermines the public key for which sig is a valid …\nReturns the secret bytes for this key pair.\nReturns the SecretKey for this Keypair.\n(Re)randomizes the Secp256k1 context for extra sidechannel …\nSerialize the key as a byte-encoded pair of values. In …\nConstructs a signature for msg using the secret key sk and …\nConstructs a signature for msg using the secret key sk, …\nConstructs a signature for msg using the secret key sk, …\nConstructs a signature for msg using the secret key sk and …\nConstructs a signature for msg using the secret key sk and …\nConstructs a signature for msg using the secret key sk and …\nCreates a schnorr signature internally using the …\nCreates a schnorr signature without using any auxiliary …\nCreates a schnorr signature using the given auxiliary …\nCreates a schnorr signature using the given random number …\nCreates a new Secp256k1 context that can only be used for …\nTweaks an untweaked key with corresponding public key …\nTweaks private and public keys within an untweaked Keypair …\nConverts parity into an integer value.\nReturns the underlying public key.\nReturns the underlying key pair.\nConverts parity into an integer (byte) value.\nCreates a new Secp256k1 context that can only be used for …\nChecks that sig is a valid ECDSA signature for msg using …\nVerifies a schnorr signature.\nReturns the XOnlyPublicKey (and it’s Parity) for this …\nOverflowed the bits array\nOverflowed the hashes array\nThe left and right branches should never be identical\nData structure that represents a block header paired to a …\nAn error when verifying the merkle block.\nMerkle root in the header doesn’t match to the root …\nPartial merkle tree contains no transactions.\nNot all bits were consumed\nNot all hashes were consumed\nThere must be at least one bit per node in the partial …\nData structure that represents a partial merkle tree.\nThere are too many hashes\nThere are too many transactions.\nReturns the node-is-parent-of-matched-txid bits of the …\nCalculates the merkle root of an iterator of hashes.\nCalculates the merkle root of a list of hashes, inline (in …\nExtract the matching txid’s represented by this partial …\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a partial merkle tree The txids are the …\nReturns the transaction ids and internal hashes of the …\nThe block header\nCalls U::from(self).\nCalls U::from(self).\nReturns the total number of transactions in the block.\nTransactions making up a partial merkle tree\nMainnet Bitcoin.\nThe Bitcoin mainnet network.\nThe cryptocurrency network to act on.\nWhat kind of network we are on.\nAn error in parsing network string.\nBitcoin’s regtest network.\nBitcoin’s signet network.\nSome kind of testnet network.\nBitcoin’s testnet network.\nError in parsing network from chain hash.\nModule for serialization/deserialization of network …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nA message which can be sent on the Bitcoin network\nBitcoin mainnet network magic bytes.\nBLOOM means the node is capable and willing to handle …\nCOMPACT_FILTERS means the node will service basic block …\nGETUTXO means the node is capable of responding to the …\nNetwork magic bytes to identify the cryptocurrency network …\nNETWORK means that the node is capable of serving the …\nNETWORK_LIMITED means the same as NODE_NETWORK with the …\nNONE means no services supported.\nP2P_V2 indicates that the node supports the P2P v2 …\nVersion of the protocol as appearing in network message …\nAn error in parsing magic bytes.\nBitcoin regtest network magic bytes.\nBitcoin signet network magic bytes.\nFlags to indicate which network services a node supports.\nBitcoin testnet network magic bytes.\nError in creating a Network from Magic bytes.\nWITNESS indicates that a node can be asked for blocks and …\nAdd ServiceFlags together.\nBitcoin network addresses.\nNetwork byte-order ipv6 address, or ipv4-mapped ipv6 …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate network magic from bytes.\nReturns the magic bytes for the network defined by params.\nCheck whether ServiceFlags are included in this one.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nBitcoin network messages.\nBitcoin blockdata network messages.\nBitcoin Connection Bloom filtering network messages.\nBIP152 Compact Blocks network messages\nBitcoin Client Side Block Filtering network messages.\nBitcoin network-related network messages.\nCreate an address message for a socket\nNetwork port\nRemove ServiceFlags from this.\nServices provided by the peer whose address this is\nExtract socket address from an Address message. This will …\nGet network magic bytes.\nGets the integer representation of this ServiceFlags.\nSupported networks for use in BIP155 addrv2 message\nAddress received from BIP155 addrv2 message\nA message which can be sent on the Bitcoin network\nCJDNS\nI2P\nIPV4\nIPV6\nTORV2\nTORV3\nUnknown\nNetwork ID + Network Address\nNetwork byte-order ipv6 address, or ipv4-mapped ipv6 …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nNetwork port\nNetwork port, 0 if not applicable\nServices provided by the peer whose address this is\nService bits\nExtract socket address from an AddrV2Message message. This …\nTime that this node was last seen as connected to the …\naddr\naddrv2\nalert\nblock\nBIP152 blocktxn\nBIP157 cfcheckpt\nBIP157 cfheaders\nBIP157 cfilter\nBIP152 cmpctblock\nSerializer for command string\nError returned when a command string is invalid.\nfeefilter\nBIP 37 filteradd\nBIP 37 filterclear\nBIP 37 filterload\ngetaddr\nBIP152 getblocktxn\ngetblocks\nBIP157 getcfcheckpt\nBIP157 getcfheaders\nBIP157 getcfilters\ngetdata\ngetheaders\nheaders\ninv\nThe maximum number of super::message_blockdata::Inventory …\nMaximum size, in bytes, of an encoded message This by …\nmempool\nmerkleblock\nA Network message payload. Proper documentation is …\nnotfound\nping\npong\nA Network message\nreject\nsendaddrv2\nBIP152 sendcmpct\nsendheaders\ntx\nAny other message.\nverack\nversion\nwtxidrelay\nReturn the message command as a static string reference.\nReturn the message command as a static string reference.\nReturn the CommandString for the message command.\nReturn the CommandString for the message command.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nMagic bytes to identify the network these messages are …\nCreates a RawNetworkMessage\nThe actual message data\nConverts &'static str to CommandString\nThe command of this message.\nThe payload of this message.\nBlock\nCompact Block\nError — these inventories can be ignored\nThe getblocks message\nThe getheaders message\nAn inventory item.\nTransaction\nUnknown inventory type\nWitness Transaction by Wtxid\nWitness Block\nWitness Transaction\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nLocator hashes — ordered newest to oldest. The remote …\nLocator hashes — ordered newest to oldest. The remote …\nReturn the item value represented as a SHA256-d hash.\nConstruct a new getblocks message\nConstruct a new getheaders message\nReferences the block to stop at, or zero to just fetch the …\nReferences the header to stop at, or zero to just fetch …\nThe protocol version\nThe protocol version\nThe hash of the inventory item\nThe inventory item type.\nAlways update the filter with outpoints.\nBloom filter update flags\nfilteradd message updates the current filter with new data\nfilterload message sets the current bloom filter\nNever update the filter with outpoints.\nOnly update the filter with outpoints if it is P2PK or P2MS\nThe data element to add to the current filter.\nThe filter itself\nControls how matched items are added to the filter\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nThe number of hash functions to use\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nA random value\nblocktxn message\ncmpctblock message\ngetblocktxn message\nsendcmpct message\nThe Compact Block.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nRequest to be send compact blocks.\nThe requested block transactions.\nThe block transactions request.\nCompact Blocks protocol version number.\ncfcheckpt message\ncfheaders message\ncfilter message\ngetcfcheckpt message\ngetcfheaders message\ngetcfilters message\nBlock hash of the Bitcoin block for which the filter is …\nThe serialized compact filter for this block\nThe filter hashes for each block in the requested range\nThe filter headers at intervals of 1,000\nFilter type for which headers are requested\nByte identifying the type of filter being returned\nByte identifying the type of filter being returned\nFilter type for which headers are requested\nFilter type for which headers are requested\nFilter type for which headers are requested\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nThe filter header preceding the first block in the …\nThe height of the first block in the requested range\nThe height of the first block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\ncheckpoint\nduplicate message\nan output is below dust limit\ninsufficient fee\ninvalid message\nmalformed message\nnonstandard transaction\nobsolete message\nReject message might be sent by peers rejecting one of our …\nmessage rejection reason as a code\nSome simple messages The version message\nreason of rejection as code\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nreference to rejected item\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nmessage type rejected\nConstructs a new version message with relay set to false\nA random nonce used to detect loops in the network\nreason of rejectection\nThe network address of the peer receiving the message\nWhether the receiving peer should relay messages to the …\nThe network address of the peer sending the message\nA bitmask describing the services supported by this node\nThe height of the maximum-work blockchain that the peer is …\nThe time at which the version message was sent\nA string describing the peer’s software\nThe P2P network protocol version\nError with rich context returned when a string can’t be …\nReturns the argument unchanged.\nReturns the input that was attempted to be parsed.\nCalls U::from(self).\nThe number of bytes equivalent per signature operation. …\nThe minimum incremental feerate (despite the name), in …\nDefault number of hours for an unconfirmed transaction to …\nMinimum feerate, in sats per virtual kilobyte, for a …\nThe minimum feerate, in sats per kilo-virtualbyte, for …\nMaximum number of sigops in a standard tx.\nMaximum weight of a transaction for it to be relayed by …\nMinimum non-witness size for a standard transaction (1 …\nThe virtual transaction size, as computed by default by …\nEncoding of 256-bit target as 32-bit float.\nA 256 bit integer representing target.\nA 256 bit integer representing work.\nThe FeeRate is too high\nAn output of type: pay-to-pubkey or pay-to-pubkey-hash.\nError in PSBT Base64 encoding.\nRequest a private key using BIP-32 fingerprint and …\nA bip32 error.\nConflicting data during combine procedure: global extended …\nSerialization error in bitcoin consensus-encoded structures\nKeys within key-value map should never be duplicated.\nKeys used to sign an ECDSA input.\nThe Elliptic Curve Digital Signature Algorithm (see …\nWays that a Partially Signed Transaction might fail.\nAn error occurred while getting the key.\nThis error is returned when extracting a Transaction from …\nInteger overflow in fee calculation\nTrait to get a private key from a key request, key is then …\nErrors when getting a key.\nInput index out of bounds.\nInput index out of bounds (actual index, maximum index …\nA key-value map for an input of the corresponding index in …\nThe index is out of bounds for the psbt.inputs vector.\nParsing error indicating invalid control block\nParsing error indicating invalid ECDSA signatures\nInvalid hash when parsing slice.\nKnown keys must be according to spec.\nParsing error indicating invalid leaf version\nMagic bytes for a PSBT must be the ASCII for “psbt” …\nThe pre-image must hash to the corresponding psbt hash\nNon-proprietary key type found when proprietary key was …\nParsing error indicating invalid public keys\nParsing error indicating invalid secp256k1 public keys\nThe separator for a PSBT must be 0xff.\nInvalid Sighash type.\nParsing error indicating invalid taproot signatures\nParsing error indicating invalid xonly public keys\nI/O error.\nUnable to find key.\nData required to call GetKey to get the private key to …\nSigning algorithm and key type does not match.\nMissing input utxo.\nOne or more of the inputs lacks value information …\nMissing Redeem script.\nMissing spending utxo.\nMissing both the witness and non-witness utxo.\nMissing witness script.\nA PSBT must have an unsigned transaction.\nNegative fee\nSignals that there are no more key-value pairs in a …\nUnable to parse as a standard sighash type.\nAttempted to ECDSA sign an non-ECDSA input.\nThe GetKey operation is not supported for this key request.\nThe scriptPubkey is not a P2WPKH script.\nA key-value map for an output of the corresponding index …\nThe various output types supported by the Bitcoin network.\nSighash computation error (p2wpkh input).\nPSBT data is not consumed entirely\nA Partially Signed Transaction.\nError in internal PSBT data structure.\nError encountered during PSBT decoding from Base64 string.\nA Signature hash type for the corresponding input. As of …\nReturned when output index is out of bounds in relation to …\nRequest a private key using the associated public key.\nKeys used to sign a Taproot input.\nThe Schnorr signature algorithm (see wikipedia).\nSighash computation error (segwit v0 input).\nInput value is less than Output Value, and the Transaction …\nA pay-to-script-hash output excluding wrapped segwit …\nA nested segwit output, pay-to-witness-pubkey-hash nested …\nA nested segwit output, pay-to-witness-script-hash nested …\nErrors encountered while calculating the sighash message.\nSigning algorithms supported by the Bitcoin network.\nMap of input index -> the error encountered while …\nA list of keys used to sign an input.\nMap of input index -> signing key for that input (see …\nTaproot tree deserilaization error\nParsing error indicating a taproot error\nSighash computation error (taproot input).\nA taproot output (P2TR).\nThe index is out of bounds for the psbt.unsigned_tx.input …\nAttempting to combine with a PSBT describing a different …\nUnable to determine the output type.\nThe scriptSigs for the unsigned transaction must be empty.\nThe scriptWitnesses for the unsigned transaction must be …\nSigning request currently unsupported.\nError related to PSBT version\nA pay-to-witness-pubkey-hash output (P2WPKH).\nAttempt to sign an input with the wrong signing algorithm.\nA pay-to-witness-script-hash output (P2WSH).\nError related to an xpub key\nA map from public keys needed to spend this output to their\nA map from public keys needed to sign this input to their …\nCombines this Output with other Output (as described by …\nCombines this Input with other Input (as described by BIP …\nReturns the EcdsaSighashType if the PsbtSighashType can be …\nObtains the EcdsaSighashType for this input if one is …\nThe finalized, fully-constructed scriptSig with signatures …\nThe finalized, fully-constructed scriptWitness with …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a PsbtSighashType from a raw u32.\nAttempts to get the private key for key_request.\nHSAH160 hash to preimage map.\nHAS256 hash to preimage map.\nThe corresponding key-value map for each input in the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nThe non-witness transaction this input spends from. Should …\nThe corresponding key-value map for each output in the …\nA map from public keys to their corresponding signature as …\nProprietary key-value pairs for this output.\nGlobal proprietary key-value pairs.\nProprietary key-value pairs for this input.\nRaw PSBT key-value pairs.\nThe redeem script for this output.\nThe redeem script for this input.\nRIPEMD160 hash to preimage map.\nPSBT serialization.\nSHA256 hash to preimage map.\nThe sighash type to be used for this input. Signatures for …\nThe signing algorithm used to sign this output type.\nThe internal pubkey.\nTaproot Internal key.\nMap of tap root x only keys to origin info and leaf hashes …\nMap of tap root x only keys to origin info and leaf hashes …\nSerialized taproot signature with sighash type for key …\nTaproot Merkle root.\nMap of <xonlypubkey>|<leafhash> with signature.\nMap of Control blocks to Script version pair.\nTaproot Output tree.\nReturns the TapSighashType if the PsbtSighashType can be …\nObtains the TapSighashType for this input if one is …\nConverts PsbtSighashType to a raw u32 sighash flag.\nUnknown key-value pairs for this output.\nUnknown global key-value pairs.\nUnknown key-value pairs for this input.\nThe unsigned transaction, scriptSigs and witnesses for …\nThe version number of this PSBT. If omitted, the version …\nThe witness script for this output.\nThe witness script for this input.\nThe transaction output this input spends from. Should only …\nA global map from extended public keys to the used key …\nActual\nExpected\nHash value\nHash-type\nPre-image\nThe FeeRate\nThe original Psbt is returned untouched.\nThe extracted Transaction (use this to ignore the error)\nThe extracted Transaction (use this to ignore the error)\nAttempted index access.\nAttempted index access.\nLength of the PBST inputs vector.\nLength of the PBST’s unsigned transaction input vector.\nA PSBT key in its raw byte form.\nA PSBT key-value pair in its raw byte form. …\nProprietary keys (i.e. keys starting with 0xFC byte) with …\nDefault implementation for proprietary key subtyping\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nAdditional key bytes (like serialized public key data etc)\nThe key of this key-value pair.\nThe key itself in raw byte form. …\nProprietary type prefix used for grouping together keys …\nCustom proprietary subtype\nConstructs full Key corresponding to this proprietary key …\nConstructs a ProprietaryKey from a Key.\nThe type of this PSBT key.\nThe value data of this key-value pair in raw byte form. …\nRepresents the set of all capabilities.\nRepresents the set of all capabilities (preallocated …\nA trait for all kinds of contexts that lets you define the …\nA constant description of the context.\nThe main error type for this library.\nEven parity.\nFlags for the ffi.\nSignature failed verification.\nBad EllSwift value\nBad sized message (“messages” are actually fixed-sized …\nError returned when conversion from an integer to Parity …\nThe only valid parity values are 0 or 1.\nBad public key.\nBad set of public keys.\nBad recovery id.\nBad secret key.\nBad shared secret.\nBad signature.\nTried to add/multiply by an invalid tweak.\nOpaque data structure that holds a keypair consisting of a …\nMaximum valid value: curve_order - 1\nA (hashed) message input to an ECDSA signature.\nDidn’t pass enough memory to context creation with …\nScalar representing 1\nOdd parity.\nRepresents the parity passed between FFI function calls.\nTrait marking that a particular context object internally …\nPublic key - used to verify ECDSA signatures and to do …\nPositive 256-bit integer guaranteed to be less than the …\nThe secp256k1 engine, used to execute all signature …\nSecret key - a 256-bit key used to create ECDSA and …\nRepresents the set of capabilities needed for signing.\nRepresents the set of capabilities needed for signing …\nMarker trait for indicating that an instance of Secp256k1 …\nTrait describing something that promises to be a 32-byte …\nMarker trait for indicating that an instance of Secp256k1 …\nRepresents the set of capabilities needed for verification.\nRepresents the set of capabilities needed for verification …\nAn x-only public key, used for verification of Taproot …\nScalar representing 0\nTweaks a PublicKey by adding tweak * G modulo the curve …\nTweaks a SecretKey by adding tweak modulo the curve order.\nObtains a const pointer suitable for use with FFI …\nObtains a mutable pointer suitable for use with FFI …\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw const pointer suitable for use with FFI …\nGets a reference to the underlying array.\nGets a reference to the underlying array\nLike cmp::Cmp but faster and with no guarantees across …\nAdds a second key to this one, returning the sum.\nAdds the keys in the provided slice together, returning …\nConstants related to the API and the underlying curve.\nA function to deallocate the memory when the context is …\nFormats the explicit byte value of the secret key kept …\nSupport for shared secret computations.\nStructs and functionality related to the ECDSA signature …\nThis module provides an implementation of ElligatorSwift …\nThis implementation is designed to be constant time to …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConverts a 32-byte hash directly to a secret key without …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConverts a 32-byte hash directly to a message without …\nReturns the argument unchanged.\nReturns the argument unchanged.\nTries to deserialize from big endian bytes\nCreates a Message from a digest.\nCreates a Message from a 32 byte slice digest.\nCreates a new public key from an ElligatorSwift.\nCreates a new secret key using data from BIP-340 Keypair.\nCreates a new compressed public key using data from …\nTries to deserialize from little endian bytes\nCreates a new public key from a SecretKey.\nConverts a SECRET_KEY_SIZE-byte slice to a secret key.\nCreates a public key directly from a slice.\nCreates a Message from a 32 byte slice digest.\nCreates a PublicKey using the key material from pk …\nDeprecated reexport of the bitcoin-hashes crate.\nImplement methods and traits for types that contain an …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts the object into a 32-byte array\nReturns the Keypair for this SecretKey.\nTweaks a SecretKey by multiplying by tweak modulo the …\nTweaks a PublicKey by multiplying by tweak modulo the …\nNegates the secret key.\nNegates the public key.\nGenerates a new random secret key.\nAttempts to erase the contents of the underlying array.\nAttempts to erase the contents of the underlying array.\nReturns the PublicKey for this SecretKey.\nGenerates a random scalar\nGenerates a random scalar using supplied RNG\nProvides Scalar and related types.\nSupport for schnorr signatures.\nReturns the secret key as a byte value.\nSerializes the key as a byte-encoded pair of values. In …\nSerializes the key as a byte-encoded pair of values, in …\nSerializes to big endian bytes\nSerializes to little endian bytes\nChecks that sig is a valid ECDSA signature for msg using …\nReturns the XOnlyPublicKey (and it’s Parity) for this …\nReturns the XOnlyPublicKey (and it’s Parity) for this …\nThe maximum size of a compact signature.\nThe order of the secp256k1 curve.\nThe size of a full ElligatorSwift encoding.\nThe Prime for the secp256k1 field element.\nThe X coordinate of the generator.\nThe Y coordinate of the generator.\nThe size of a key pair.\nThe maximum size of a signature.\nThe size (in bytes) of a message.\nThe value one as big-endian array of bytes.\nThe size (in bytes) of a serialized public key.\nThe size of a schnorr public key.\nThe size of a schnorr signature.\nThe size (in bytes) of a secret key.\nThe size (in bytes) of an serialized uncompressed public …\nThe value zero as an array of bytes.\nEnables two parties to create a shared secret without …\nFormats the explicit byte value of the shared secret kept …\nReturns the argument unchanged.\nCreates a shared secret from bytes array.\nCreates a shared secret from bytes slice.\nCalls U::from(self).\nCreates a new shared secret from a pubkey and secret key.\nAttempts to erase the contents of the underlying array.\nReturns the shared secret as a byte value.\nCreates a shared point from public key and secret key.\nAn ECDSA signature with a recovery ID for pubkey recovery.\nA tag used for recovering the public key from a compact …\nA DER serialized Signature\nAn ECDSA signature\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw pointer suitable for use with FFI functions.\nObtains a raw pointer suitable for use with FFI functions\nGet the capacity of the underlying data buffer.\nLike cmp::Cmp but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConverts a compact-encoded byte slice to a signature. This …\nConverts a 64-byte compact-encoded byte slice to a …\nConverts a DER-encoded byte slice to a signature\nConverts a “lax DER”-encoded byte slice to a …\nAllows library users to create valid recovery IDs from i32.\nCreate a SerializedSignature from a Signature. (this DER …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCheck if the space is zero.\nGet the len of the used data.\nNormalizes a signature to a “low S” form. In ECDSA, …\nSerializes the recoverable signature in compact format.\nSerializes the signature in compact format\nSerializes the signature in DER format\nImplements SerializedSignature and related types.\nAllows library users to convert recovery IDs to i32.\nConvert the serialized signature into the Signature struct.\nConverts a recoverable signature to a non-recoverable one …\nOwned iterator over the bytes of SerializedSignature\nA DER serialized Signature\nReturns the remaining bytes as a slice.\nReturns the argument unchanged.\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nWe are the initiator of the ECDH\nWe are the responder of the ECDH\nElligatorSwift is an encoding of a uniformly chosen point …\nRepresents which party we are in the ECDH, A is the …\nThe result of ElligatorSwift::shared_secret, which is a …\nReturns the secret bytes as a reference to an array.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates an ElligatorSwift object from a 64-byte array.\nComputes the ElligatorSwift encoding for a valid public key\nCreates the Elligator Swift encoding from a secret key, …\nCreates shared secret from bytes.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new ElligatorSwift object from a 64-byte array.\nComputes a shared secret only known by Alice and Bob. This …\nComputes a shared secret, just like shared_secret, but …\nReturns the 64-byte array representation of this …\nReturns the secret bytes as an array.\nA trait for producing pointers that will always be valid …\nA Secp256k1 context, containing various precomputed values …\nHash function to use to post-process an ECDH point to get …\nLibrary-internal representation of a ElligatorSwift …\nA hash function used by ellswift_ecdh to hash the final …\nA nonce generation function. Ordinary users of the library …\nNo value.\nNo value.\nNo value.\nNo value.\nLibrary-internal representation of a Secp256k1 public key\nFlag for keys to indicate compressed serialization format\nFlag for keys to indicate uncompressed serialization format\nFlag for context to enable no precomputation\nFlag for context to enable signing precomputation\nFlag for context to enable verification precomputation\nSame as secp256k1_nonce function with the exception of …\nData structure that contains additional arguments for …\nLibrary-internal representation of a Secp256k1 signature\nSome value of type T.\nSome value of type T.\nSome value of type T.\nSome value of type T.\nGets a reference to the underlying array\nGets a reference to the underlying array\nGets a reference to the underlying array\nGets a reference to the underlying array\nGets a reference to the underlying array\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a new public key usable for the FFI interface from …\nCreate a new signature usable for the FFI interface from …\nCreate a new x-only public key usable for the FFI …\nCreate a new keypair usable for the FFI interface from raw …\nImplement methods and traits for types that contain an …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new SchnorrSigExtraParams properly initialized.\nCreates an “uninitialized” FFI public key which is …\nCreates an “uninitialized” FFI signature which is …\nCreates an “uninitialized” FFI x-only public key which …\nCreates an “uninitialized” FFI keypair which is zeroed …\nAttempts to erase the contents of the underlying array.\nDoes a best attempt at secure erasure using Rust …\nFFI of the recovery module\nA reimplementation of the C function …\nThis function is an override for the C function, this is …\nThis function is an override for the C function, this is …\nA reimplementation of the C function …\nA reimplementation of the C function …\nDefault ECDH hash function\nDefault ECDH hash function for BIP324 key establishment\nReturns the underlying FFI opaque representation of the …\nReturns the underlying FFI opaque representation of the …\nReturns the underlying FFI opaque representation of the …\nReturns the underlying FFI opaque representation of the …\nLibrary-internal representation of a Secp256k1 signature + …\nGets a reference to the underlying array\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nCalls U::from(self).\nCreate a new (zeroed) signature usable for the FFI …\nA type that is as aligned as the biggest alignment for …\nA static zeroed out AlignedType for use in static …\nThis might not match C’s c_char exactly. The way we use …\nEquivalent to C’s void type when used as a pointer.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nLength of the hash’s internal block size, in bytes.\nThe byte array that represents the hash internally.\nFlag indicating whether user-visible serializations of …\nA hashing engine which bytes can be serialized into. It is …\nAttempted to create a hash from an invalid length slice.\nTrait which applies to hashes of all types.\nA hashing engine which bytes can be serialized into.\nA hash computed from a RFC 2104 HMAC. Parameterized by the …\nPair of underlying hash engines, used for the inner and …\nLength of the hash, in bytes.\nByte array representing the internal state of the hash …\nReturns an all zero hash.\nReturns a reference to the underlying byte array.\nAdds slicing traits implementations to a given type $ty\nConstructs a new engine.\nReturns the expected slice length.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a hash from the underlying byte array.\nProduces a hash from the current state of a given engine.\nA special constructor giving direct access to the …\nCopies a byte slice into a hash object.\nHashes some bytes.\nHashes all the byte slices retrieved from the iterator …\nCreates a new newtype around a Hash type.\nAdds hexadecimal formatting implementation of a trait $imp …\nAdd data to the hash engine.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid slice length.\nOutputs the midstate of the hash engine. This function …\nReturn the number of bytes already …\nConstructs a new keyed HMAC from key.\nImplements Serialize and Deserialize for a type $t which …\nMacro used to define a newtype tagged hash.\nReturns the underlying byte array.\nCodes at or above this point can be used by users to …\nA marker trait used to indicate that an RngCore or …\nError type of random number generators\nTypes which may be filled with random data\nCodes below this point represent OS Errors (i.e. positive …\nAn automatically-implemented extension trait on RngCore …\nThe core of a random number generator.\nSeed type, which is restricted to types …\nA random number generator that can be explicitly seeded.\nRetrieve the error code, if any.\nGenerating random samples from probability distributions\nFill any type implementing Fill with random data\nFill dest with random data.\nReturns the argument unchanged.\nCreates a new instance of the RNG seeded via getrandom.\nCreate a new PRNG seeded from another Rng.\nCreate a new PRNG using the given seed.\nReturn a random value supporting the Standard distribution.\nReturn a bool with a probability p of being true.\nGenerate a random value in the given range.\nReturn a bool with a probability of numerator/denominator …\nReference the inner error (std only)\nCalls U::from(self).\nConstruct from any type supporting std::error::Error\nReturn the next random u32.\nReturn the next random u64.\nConvenience re-export of common members\nGenerates a random value using the thread-local random …\nExtract the raw OS error code (if this error came from the …\nRandom number generators and adapters\nSample a new value, using the given distribution.\nCreate an iterator that generates values using the given …\nCreate a new PRNG using a u64 seed.\nSequence-related functionality\nUnwrap the inner error (std only)\nRetrieve the lazily-initialized thread-local random number …\nFill self with random data\nFill any type implementing Fill with random data\nFill dest entirely with random data.\nAll items in the provided weight collection are zero.\nSample a u8, uniformly distributed over ASCII letters and …\nThe Bernoulli distribution.\nError type returned from Bernoulli::new.\nAn iterator that generates random values of T with …\nA distribution of values of type S derived from the …\nString sampler\nTypes (distributions) that can be used to create a random …\np < 0 or p > 1.\nA weight is either less than zero, greater than the …\nThe provided weight collection contains no items.\nA distribution to sample floating point numbers uniformly …\nA distribution to sample floating point numbers uniformly …\nA distribution to sample items uniformly from a slice.\nA generic random value distribution, implemented for many …\nToo many weights are provided (length greater than u32::MAX…\nSample values uniformly between two bounds.\nError type returned from WeightedIndex::new.\nA distribution using weighted sampling of discrete items\nAppend len random chars to string\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new Bernoulli with the probability of success …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nCreate a distribution of values of ‘S’ by mapping the …\nConstruct a new Bernoulli with the given probability of …\nCreate a new Slice instance which samples uniformly from …\nCreates a new a WeightedIndex Distribution using the values\nCreate a new Uniform instance which samples uniformly from …\nCreate a new Uniform instance which samples uniformly from …\nGenerate a random value of T, using rng as the source of …\nCreate an iterator that generates random values of T, …\nGenerate a String of len random chars\nConvert an iterator of Results into FallibleIterator by …\nA distribution uniformly sampling numbers within a given …\nUpdate a subset of weights, without changing the number of …\nWeighted index sampling\nHelper trait similar to Borrow but implemented only for …\nRange that supports generating a single sample efficiently.\nHelper trait for creating objects using the correct …\nThe UniformSampler implementation supporting type X.\nSample values uniformly between two bounds.\nThe back-end implementing UniformSampler for char.\nThe back-end implementing UniformSampler for Duration.\nThe back-end implementing UniformSampler for …\nThe back-end implementing UniformSampler for integer types.\nHelper trait handling actual uniform sampling.\nThe type sampled by this implementation.\nImmutably borrows from an owned value. See Borrow::borrow\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCheck whether the range is empty.\nConstruct self, with inclusive lower bound and exclusive …\nConstruct self, with inclusive bounds [low, high].\nSample a value.\nGenerate a sample from the given range.\nSample a single value uniformly from a range with …\nSample a single value uniformly from a range with …\nAll items in the provided weight collection are zero.\nA weight is either less than zero, greater than the …\nThe provided weight collection contains no items.\nToo many weights are provided (length greater than u32::MAX…\nError type returned from WeightedIndex::new.\nA distribution using weighted sampling of discrete items\nReturns the argument unchanged.\nCalls U::from(self).\nA marker trait used to indicate that an RngCore or …\nTypes (distributions) that can be used to create a random …\nThe element type.\nExtension trait on iterators, providing random sampling …\nAn automatically-implemented extension trait on RngCore …\nThe core of a random number generator.\nSeed type, which is restricted to types …\nA random number generator that can be explicitly seeded.\nExtension trait on slices, providing random mutation and …\nThe standard RNG. The PRNG algorithm in StdRng is chosen …\nA reference to the thread-local generator\nReturns a reference to one random element of the slice, or …\nChoose one element at random from the iterator.\nChooses amount elements from the slice at random, without …\nCollects amount values at random from the iterator into a …\nCollects values at random from the iterator into a …\nSimilar to choose_multiple, but where the likelihood of …\nReturns a mutable reference to one random element of the …\nChoose one element at random from the iterator.\nSimilar to choose, but where the likelihood of each …\nSimilar to choose_mut, but where the likelihood of each …\nFill any type implementing Fill with random data\nFill dest with random data.\nCreates a new instance of the RNG seeded via getrandom.\nCreate a new PRNG seeded from another Rng.\nCreate a new PRNG using the given seed.\nReturn a random value supporting the Standard distribution.\nReturn a bool with a probability p of being true.\nGenerate a random value in the given range.\nReturn a bool with a probability of numerator/denominator …\nCreate a distribution of values of ‘S’ by mapping the …\nReturn the next random u32.\nReturn the next random u64.\nShuffle a slice in place, but exit early.\nGenerates a random value using the thread-local random …\nGenerate a random value of T, using rng as the source of …\nSample a new value, using the given distribution.\nCreate an iterator that generates random values of T, …\nCreate an iterator that generates values using the given …\nCreate a new PRNG using a u64 seed.\nShuffle a mutable slice in place.\nRetrieve the lazily-initialized thread-local random number …\nFill any type implementing Fill with random data\nFill dest entirely with random data.\nA random number generator that retrieves randomness from …\nThe standard RNG. The PRNG algorithm in StdRng is chosen …\nA reference to the thread-local generator\nWrappers / adapters forming RNGs\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nMock random number generator\nReadRng error type\nAn RNG that reads random bytes straight from any type …\nA wrapper around any PRNG that implements BlockRngCore, …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new ReadRng from a Read.\nCreate a new ReseedingRng from an existing PRNG, combined …\nReseed the internal PRNG.\nA simple implementation of RngCore for testing purposes.\nReturns the argument unchanged.\nCalls U::from(self).\nCreate a StepRng, yielding an arithmetic sequence starting …\nThe element type.\nExtension trait on iterators, providing random sampling …\nAn iterator over multiple slice elements.\nExtension trait on slices, providing random mutation and …\nReturns a reference to one random element of the slice, or …\nChoose one element at random from the iterator.\nChooses amount elements from the slice at random, without …\nCollects amount values at random from the iterator into a …\nCollects values at random from the iterator into a …\nSimilar to choose_multiple, but where the likelihood of …\nReturns a mutable reference to one random element of the …\nChoose one element at random from the iterator.\nSimilar to choose, but where the likelihood of each …\nSimilar to choose_mut, but where the likelihood of each …\nReturns the argument unchanged.\nLow-level API for sampling indices\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nShuffle a slice in place, but exit early.\nShuffle a mutable slice in place.\nConvert an iterator of Results into FallibleIterator by …\nA vector of indices.\nReturn type of IndexVec::into_iter.\nReturn type of IndexVec::iter.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturn the value at the given index.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nConvert into an iterator over the indices as a sequence of …\nReturn result as a Vec<usize>. Conversion may or may not …\nReturns true if the length is 0.\nIterate over the indices as a sequence of usize values\nReturns the number of indices\nRandomly sample exactly amount distinct indices from …\nRandomly sample exactly amount distinct indices from …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nError returned when the value of scalar is invalid - …\nPositive 256-bit integer guaranteed to be less than the …\nReturns the argument unchanged.\nCalls U::from(self).\nRepresents a schnorr signature.\nGets a reference to the underlying array\nReturns the argument unchanged.\nCreates a Signature directly from a slice.\nCalls U::from(self).\nReturns a signature as a byte array.\nWhen SIGHASH_ANYONECANPAY is not provided, or when the …\n0x1: Sign all outputs.\n0x1: Sign all outputs.\n0x81: Sign all outputs but only this input.\n0x81: Sign all outputs but only this input.\nThe Annex struct is a slice wrapper enforcing first byte …\nAnnex must be at least one byte long and the first bytes …\n0x0: Used when not explicitly specified, defaults to …\nHashtype of an input’s signature, encoded in the last …\nThe annex is empty.\nResult of SighashCache::legacy_encode_signing_data_to.\nIncorrect prefix byte in the annex.\nIndex out of bounds when accessing transaction input …\nInvalid index when accessing a Prevouts::All kind.\nInvalid index when accessing a Prevouts::One kind.\nInvalid Sighash type.\nInteger is not a consensus valid sighash type.\nCan happen only when using *_encode_signing_* methods with …\nHash of a transaction according to the legacy signature …\nThis type is consensus valid but an input including it …\n0x2: Sign no outputs — anyone can choose the destination.\n0x2: Sign no outputs — anyone can choose the destination.\n0x82: Sign no outputs and only this input.\n0x82: Sign no outputs and only this input.\nScript is not a witness program for a p2wpkh output.\nOne variant allows provision of the single prevout needed. …\nError computing a P2WPKH sighash.\nContains outputs of previous transactions. In the case …\nPrevouts index error.\nPrevouts index related errors.\nPrevouts kind error.\nA single prevout was been provided but all prevouts are …\nPrevouts size error.\nThe number of supplied prevouts differs from the number of …\nInformation related to the script path spending.\nHash of a transaction according to the segwit version 0 …\nError computing the sighash.\nAn argument to the called sighash function was invalid.\nEfficiently calculates signature hash message for legacy, …\nInput data is an instance of SIGHASH_SINGLE bug\nError returned for failure during parsing one of the …\nError returned when writing signing data fails.\n0x3: Sign the output whose index matches this input’s …\n0x3: Sign the output whose index matches this input’s …\nUsing SIGHASH_SINGLE requires an output at the same index …\nUsing SIGHASH_SINGLE requires an output at the same index …\n0x83: Sign one output and only this input (see Single for …\n0x83: Sign one output and only this input (see Single for …\nTaproot-tagged hash with tag "TapSighash".\nThe tag used for TapSighash\nHashtype of an input’s signature, encoded in the last …\nError computing a taproot sighash.\nOperation performed normally.\nReturns the Annex bytes data (including first byte 0x50).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nInput index.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDestroys the cache and recovers the stored transaction.\nChecks for SIGHASH_SINGLE bug returning error if the …\nComputes the leaf hash for this ScriptPath.\nEncodes the legacy signing data from which a signature …\nComputes a legacy signature hash for a given input index …\nMaps a Result<T, E> to Result<T, F> by applying a function …\nConstructs a new SighashCache from an unsigned transaction.\nCreates a new ScriptPath structure.\nCreates a new Annex struct checking the first byte is 0x50.\nLength of the output vector.\nComputes the BIP143 sighash to spend a p2wpkh transaction …\nComputes the BIP143 sighash to spend a p2wsh transaction …\nEncodes the BIP143 signing data for any flag type into a …\nEncodes the BIP341 signing data for any flag type into a …\nComputes the BIP341 sighash for a key spend.\nComputes the BIP341 sighash for a script spend.\nComputes the BIP341 sighash for any flag type.\nReturns the reference to the cached transaction.\nThe unrecognized string we attempted to parse.\nCreates a new ScriptPath structure using default leaf …\nAllows modification of witnesses.\nThe prefix for signed messages using Bitcoin’s message …\nInvalid base64 encoding.\nThe signature is invalidly constructed.\nSignature is expected to be 65 bytes.\nA signature on a Bitcoin Signed Message.\nAn error used for dealing with Bitcoin Signed Messages.\nUnsupported Address Type\nWhether or not this signature was created with a …\nReturns the argument unchanged.\nReturns the argument unchanged.\nConvert a signature from base64 encoding.\nCreate from a byte slice.\nCalls U::from(self).\nCalls U::from(self).\nVerify that the signature signs the message and was signed …\nCreate a new MessageSignature.\nAttempt to recover a public key from the signature and the …\nSerialize to bytes.\nThe inner recoverable signature.\nHash message for signature using Bitcoin’s message …\nConvert to base64 encoding.\nControl block data structure used in Tapscript …\nCalled finalize on a empty tree.\nEmpty tap tree.\nFuture leaf version.\nInner type representing future (non-tapscript) leaf …\nHidden Node with the given leaf hash\nError happening when TapTree is constructed from a NodeInfo\nIndicates an attempt to construct a tap tree from a …\nIndicates an attempt to construct a tap tree from a …\nError happening when TapTree is constructed from a …\nInvalid control block size.\nInvalid taproot internal key.\nInvalid taproot internal key.\nProof size must be a multiple of 32.\nMerkle tree depth must not be more than 128.\nMerkle tree depth must not be more than 128.\nInvalid taproot signature size\nThe last bit of tapleaf version must be zero.\nStore information about taproot leaf node.\nIterator for a taproot script tree, operating in DFS order …\nThe leaf version for tapleafs.\nRepresents the node information in taproot tree. In …\nNodes must be added specified in DFS walk order.\nIndicates an attempt to construct a tap tree from a …\nTwo nodes at depth 0 are not allowed.\nA known script\nScript leaf node in a taproot tree along with the merkle …\nIterator for a taproot script tree, operating in DFS order …\nA secp256k1 error.\nAn error constructing a taproot::Signature from a byte …\nInvalid signature hash type.\nA BIP340-341 serialized taproot signature with the …\nTaproot annex prefix.\nTapscript control base size.\nMaximum depth of a taproot tree script spend path.\nTapscript control max size.\nSize of a taproot control node.\nTapleaf mask for getting the leaf version from first byte …\nTapscript leaf version.\nThe tag used for TapNodeHash\nLeaf node in a taproot tree. Can be either hidden or known.\nTaproot-tagged hash with tag "TapLeaf".\nThe tag used for TapLeafHash\nTagged hash used in taproot trees.\nBIP-342 tapscript.\nTaproot Tree representing a complete binary tree without …\nTaproot-tagged hash with tag "TapTweak".\nThe tag used for TapTweakHash\nBuilder for building taproot iteratively. Users can …\nDetailed error type for taproot builder.\nDetailed error type for taproot utilities.\nThe merkle proof for inclusion of a tree in a taptree hash.\nRepresents taproot spending information.\nAdds a hidden/omitted node at depth to the builder. Errors …\nAdds a leaf script at depth to the builder with default …\nAdds a leaf script at depth to the builder with script …\nObtains the hidden leaf hash if the leaf is hidden.\nReturns a reference to the slice of hashes.\nObtains a reference to script and version if the leaf is …\nReturns a reference to the slice of hashes.\nCombines two NodeInfo to create a new parent.\nConstructs a ControlBlock for particular script with the …\nDecodes bytes from control block.\nDecodes bytes representing a ControlBlock.\nReturns the depth of this script leaf in the tap tree.\nSerializes to a writer.\nSerializes to a writer.\nCreates a TaprootSpendInfo with the given internal key.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a LeafVersion from consensus byte representation.\nObtains a script leaf from the leaf node if the leaf is …\nComputes the TaprootSpendInfo from internal_key and node.\nDeserialize from slice\nChecks if the builder has hidden nodes.\nReturns the internal key for this TaprootSpendInfo.\nThe internal key.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts error into the original incomplete TaprootBuilder …\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nReturns the inner list of hashes.\nConverts error into the original incomplete NodeInfo …\nGets the inner NodeInfo of this tree root.\nReturns the list of hashes stored in a Vec.\nChecks if this merkle proof is empty.\nChecks if the builder has finalized building a tree.\nReturns a reference to the leaf of this ScriptLeaf.\nComputes a leaf hash for this ScriptLeaf if the leaf is …\nCreates an iterator over all leaves (including hidden …\nReturns leaf version of the script if the leaf is known.\nThe tapleaf version.\nReturns the number of nodes in this merkle proof.\nContains TaprootMerkleBranch and its associated types.\nReturns reference to the merkle proof (hashing partners) …\nObtains a reference to the merkle proof of the leaf.\nThe merkle proof of a script associated with this leaf.\nReturns the merkle root for this TaprootSpendInfo.\nCreates a new instance of TaprootBuilder.\nCreates an new ScriptLeaf from hash and no merkle branch.\nCreates a new NodeInfo with omitted/hidden info.\nCreates a new key spend with internal_key and merkle_root. …\nCreates a new leaf NodeInfo with given ScriptBuf and …\nCreates an new ScriptLeaf from script and ver and no …\nReturns the root TapNodeHash of this node info.\nComputes the TapNodeHash for this ScriptLeaf. This returns …\nGets the reference to inner NodeInfo of this tree root.\nReturns the output key (the key used in script pubkey) for …\nReturns the parity of the output key. See also …\nThe parity of the output key (NOT THE INTERNAL KEY WHICH …\nReturns the root TapNodeHash of this tree.\nReturns reference to the leaf script if the leaf is known.\nObtains a reference to the script inside the leaf.\nReturns [TapTreeIter<'_>] iterator for a taproot script …\nReturns a reference to the internal script map.\nSerializes the signature (without heap allocation)\nSerializes self as bytes.\nSerializes the control block.\nSerializes the signature to writer.\nImplements SerializedSignature and related types.\nThe corresponding hash type.\nThe underlying schnorr signature.\nReturns the size of control block. Faster and more …\nReturns the TapTweakHash for this TaprootSpendInfo i.e., …\nReturns the consensus representation of this …\nReturns the consensus representation of this LeafVersion.\nSerialize Signature\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nCreates a merkle proof from list of hashes.\nCreates a merkle proof from list of hashes.\nCreates a merkle proof from list of hashes.\nConstructs TapTree from a NodeInfo if it is complete …\nConstructs TapTree from a TaprootBuilder if it is complete …\nConverts the builder into a NodeInfo if the builder is a …\nConverts the builder into a TapTree if the builder is a …\nVerifies that a control block is correct proof for a given …\nObtains the version of the script leaf.\nCreates a new instance of TaprootBuilder with a capacity …\nCreates a new TaprootSpendInfo from a list of scripts …\nCreates a new TaprootSpendInfo from a list of scripts …\nIterator over node hashes within Taproot merkle branch.\nThe merkle proof for inclusion of a tree in a taptree hash.\nReturns the remaining items of this iterator as a mutable …\nReturns the remaining items of this iterator as a slice.\nReturns the argument unchanged.\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nOwned iterator over the bytes of SerializedSignature\nA serialized Taproot Signature\nReturns the remaining bytes as a slice.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a SerializedSignature from a Signature. (this …\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nGet the len of the used data.\nConvert the serialized signature into the Signature struct.\nConvert an iterator of Results into FallibleIterator by …\nWrites this serialized signature to a writer.\nRepresents changes to an IndexedTxGraph.\nThe IndexedTxGraph combines a TxGraph and an Indexer …\nBatch insert all transactions of the given block of height.\nBatch insert all transactions of the given block of height…\nApplies the ChangeSet to the IndexedTxGraph.\nApply an update directly.\nApply the given update with an optional seen_at timestamp.\nBatch insert transactions, filtering out those that are …\nBatch insert unconfirmed transactions, filtering out those …\nBatch insert unconfirmed transactions.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet a reference of the internal transaction graph.\nTransaction index.\nIndexer changeset.\nDetermines the ChangeSet between self and an empty …\nInsert an anchor for a given transaction.\nInsert a unix timestamp of when a transaction is seen in …\nInsert and index a transaction into the graph.\nInsert a floating txout of given outpoint.\nCalls U::from(self).\nCalls U::from(self).\nConstruct a new IndexedTxGraph with a given index.\nTxGraph changeset.\nThe resultant “changeset” when new transaction data is …\nUtilities for indexing transaction data.\nApply changeset to itself.\nScans a transaction for relevant outpoints, which are …\nScan and index the given outpoint and txout.\nDetermines the ChangeSet between self and an empty Indexer.\nDetermines whether the transaction should be included in …\nKeychainTxOutIndex controls how script pubkeys are …\nSpkTxOutIndex is an index storing TxOuts that have a …\nRepresents updates to the derivation index of a …\nThe default lookahead for a KeychainTxOutIndex\nThe descriptor has already been assigned to a keychain so …\nTrait to extend FullScanRequestBuilder.\nError returned from KeychainTxOutIndex::insert_descriptor\nThe keychain is already assigned to a descriptor so you can…\nKeychainTxOutIndex controls how script pubkeys are …\nName for table that stores last revealed indices per …\nSchema name for the changeset.\nTrait to extend SyncRequestBuilder.\nGet unbounded spk iterators for all keychains.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct KeychainTxOutIndex from sqlite database and …\nGets the descriptor associated with the keychain. Returns …\nReturns the keychain and keychain index associated with …\nInitialize sqlite tables for persisting KeychainTxOutIndex.\nReturn a reference to the internal SpkTxOutIndex.\nInsert a descriptor with a keychain associated to it.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the changeset are empty.\nReturns whether the spk under the keychain’s index has …\nIterate over all OutPoints that have TxOuts with script …\nIterate over OutPoints that have script pubkeys derived …\nReturn all keychains and their corresponding descriptors.\nContains for each descriptor_id the last revealed index of …\nGet the last derivation index revealed for keychain. …\nGet the last derivation index that is revealed for each …\nReturns the highest derivation index of the keychain where …\nReturns the highest derivation index of each keychain that …\nGet the lookahead setting.\nStore lookahead scripts until target_index (inclusive).\nMarks the script pubkey at index as used even though the …\nMerge another ChangeSet into self.\nComputes the net value that this transaction gives to the …\nConstruct a KeychainTxOutIndex with the given lookahead.\nGet the next derivation index for keychain. The next index …\nGets the next unused script pubkey in the keychain. I.e., …\nGet the set of indexed outpoints, corresponding to tracked …\nPersist changeset to the sqlite database.\nAttempts to reveal the next script pubkey for keychain.\nReveals script pubkeys of the keychain’s descriptor up …\nConvenience method to call Self::reveal_to_target on …\nIterate over revealed spks of the given keychain with …\nIterate over revealed spks of keychains in range\nAdd Scripts that are revealed by the indexer of the given …\nComputes the total value transfer effect tx has on the …\nReturn the script that exists under the given keychain’s …\nAdd spk iterators for each keychain tracked in indexer.\nReturn the TxOut of outpoint if it has been indexed, and …\nIterate over known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nGet an unbounded spk iterator over a given keychain. …\nUndoes the effect of mark_used. Returns whether the index …\nIterate over revealed, but unused, spks of the given …\nIterate over revealed, but unused, spks of all keychains.\nAdd Scripts that are revealed by the indexer but currently …\nThe descriptor you have attempted to reassign\nThe keychain that the descriptor is already assigned to\nThe descriptor that the keychain is already assigned to\nThe keychain that you have attempted to reassign\nAn index storing TxOuts that have a script pubkey that …\nThe script pubkeys that are being tracked by the index.\nReturns the argument unchanged.\nReturns the index associated with the script pubkey.\nAdds a script pubkey to scan for. Returns false and does …\nCalls U::from(self).\nWhether any of the inputs of this transaction spend a …\nReturns whether the script pubkey at index has been used …\nMarks the script pubkey at index as used even though it …\nComputes the net value transfer effect of tx on the script …\nGet a reference to the set of indexed outpoints.\nIterates over all the outputs with script pubkeys in an …\nScans a transaction’s outputs for matching script …\nScan a single TxOut for a matching script pubkey and …\nComputes the total value transfer effect tx has on the …\nReturns the script that has been inserted at the index.\nReturns the txout and script pubkey index of the TxOut at …\nIterate over all known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nUndoes the effect of mark_used. Returns whether the index …\nIterates over all unused script pubkeys in an index range.\nRepresents a failure when trying to insert/remove a …\nThe error type for LocalChain::apply_header_connected_to.\nName of sqlite table that stores blocks of LocalChain.\nOccurs when the update cannot connect with the original …\nOccurs when an update does not have a common checkpoint …\nThe ChangeSet represents changes to LocalChain.\nA checkpoint is a node of a reference-counted linked list …\nIterates over checkpoints backwards.\nOccurs when connected_to block conflicts with either the …\nThis is a local implementation of ChainOracle.\nAn error which occurs when a LocalChain is constructed …\nSchema name for the changeset.\nApply the given changeset.\nUpdate the chain with a given Header connecting it with …\nUpdate the chain with a given Header at height which you …\nApplies the given update to the chain.\nChanges to the LocalChain blocks.\nRemoves blocks from (and inclusive of) the given block_id.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a LocalChain from a BTreeMap of height to …\nConstruct a LocalChain from an initial changeset.\nConstruct LocalChain from genesis hash.\nConstruct a LocalChain from sqlite database.\nConstruct a LocalChain from a given checkpoint tip.\nGet the genesis hash.\nGet checkpoint at given height (if it exists).\nThe checkpoint’s height.\nInitialize sqlite tables for persisting …\nDerives an initial ChangeSet, meaning that it can be …\nInsert a BlockId.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate over checkpoints in descending height order.\nThe original checkpoint’s block hash which cannot be …\nPersist changeset to the sqlite database.\nIterate checkpoints over a height range.\nGet the highest checkpoint.\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nTable name for schemas.\nRuns logic that initializes/migrates the table schemas.\nData required to perform a spk-based blockchain client …\nBuilds a FullScanRequest.\nData returned from a spk-based blockchain client full scan.\nOutpoint sync item.\nScript pubkey sync item.\nAn item reported to the inspect closure of SyncRequest.\nThe progress of SyncRequest.\nData required to perform a spk-based blockchain client …\nBuilds a SyncRequest.\nData returned from a spk-based blockchain client sync.\nTxid sync item.\nBuild the SyncRequest.\nBuild the FullScanRequest.\nStart building a SyncRequest.\nStart building a FullScanRequest.\nSet the initial chain tip for the sync request.\nGet the chain tip CheckPoint of this request (if any).\nSet the initial chain tip for the full scan request.\nGet the chain tip CheckPoint of this request (if any).\nChanges to the chain discovered during the scan.\nChanges to the chain discovered during the scan.\nTotal consumed items of the request.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nSet the closure that will inspect every sync item visited.\nSet the closure that will inspect every sync item visited.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate over OutPoints contained in this request.\nIterate over ScriptBufs contained in this request.\nIterate over indexed ScriptBufs contained in this request …\nIterate over Txids contained in this request.\nList all keychains contained in this request.\nLast active indices for the corresponding keychains (K). …\nAdvances the sync request and returns the next OutPoint.\nAdvances the sync request and returns the next ScriptBuf.\nAdvances the full scan request and returns the next …\nAdvances the sync request and returns the next Txid.\nAdd OutPoints that will be synced against.\nOutpoints consumed by the request.\nOutpoints remaining in the request.\nGet the SyncProgress of this request.\nTotal remaining items of the request.\nAdd Scripts that will be synced against.\nScript pubkeys consumed by the request.\nSet the spk iterator for a given keychain.\nScript pubkeys remaining in the request.\nAdd Scripts coupled with associated indexes that will be …\nTotal items, consumed and remaining, of the request.\nTotal outpoints, consumed and remaining, of the request.\nTotal script pubkeys, consumed and remaining, of the …\nTotal txids, consumed and remaining, of the request.\nRelevant transaction data discovered during the scan.\nRelevant transaction data discovered during the scan.\nAdd Txids that will be synced against.\nTxids consumed by the request.\nTxids remaining in the request.\nName of table that stores Anchors.\nErrors returned by TxGraph::calculate_fee.\nA transaction that is included in the chain, or is still …\nThe ChangeSet represents changes to a TxGraph.\nMissing TxOut for one or more of the inputs of the tx\nWhen the transaction is invalid according to the graph it …\nSchema name for tx_graph::ChangeSet.\nName of table that stores floating txouts.\nName of table that stores full transactions and last_seen …\nAn iterator that traverses ancestors of a given root …\nAn iterator that traverses transaction descendants.\nA graph of transactions and spends.\nA transaction node in the TxGraph.\nData object used to communicate updates about relevant …\nGet all transaction anchors known by TxGraph.\nIterate over all tx outputs known by TxGraph.\nIterates over the heights of that the new transaction …\nTransaction anchors. Anchors tells us a position in the …\nThe blocks that the transaction is “anchored” in.\nAdded anchors.\nApplies ChangeSet to TxGraph.\nExtends this graph with the given update.\nExtends this graph with the given update alongside an …\nGet the total balance of outpoints that are in chain of …\nBatch insert unconfirmed transactions.\nCalculates the fee of a given transaction. Returns …\nHow the transaction is observed as (confirmed or …\nGiven a transaction, return an iterator of txids that …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nIterate over floating txouts known by TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a TxGraph from an sqlite database.\nIterate over all full transactions in the graph.\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nGet a transaction by txid. This only returns Some for full …\nGet a transaction node by txid. This only returns Some for …\nObtains a single tx output (if any) at the specified …\nInitialize sqlite tables.\nDetermines the ChangeSet between self and an empty TxGraph.\nInserts the given anchor into TxGraph.\nInserts the given seen_at for txid into TxGraph.\nInserts the given transaction into TxGraph.\nInserts the given TxOut at OutPoint.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nWhether the graph has any transactions or outputs in it.\nAdded last-seen unix timestamps of transactions.\nThe last-seen unix timestamp of the transaction as …\nList graph transactions that are in chain with chain_tip.\nTransform the TxGraph to have Anchors of another type.\nTransform the ChangeSet to have Anchors of another type.\nConstruct a new TxGraph from a list of transactions.\nThe transactions spending from this output.\nPersist changeset to the sqlite database.\nSeen at times for transactions. This records when a …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nGet the total balance of outpoints that are in chain of …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nList graph transactions that are in chain with chain_tip.\nA partial or full representation of the transaction.\nThe transaction node (as part of the graph).\nReturns known outputs of a given txid.\nIterates over the transactions spending from txid.\nTxid of the transaction.\nIterates over all outpoints contained within ChangeSet.\nFloating txouts. These are TxOuts that exist but the whole …\nAdded txouts.\nFull transactions. These are transactions that were …\nAdded transactions.\nIterate over graph transactions with no anchors or …\nCreates an iterator that filters and maps ancestor …\nCreates an iterator that both filters and maps conflicting …\nCreates an iterator that filters and maps descendants from …") \ No newline at end of file +searchState.loadedDescShard("bdk_chain", 1, "Hint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a string value …\nHint that the Deserialize type is expecting a struct with …\nHint that the Deserialize type is expecting a sequence of …\nHint that the Deserialize type is expecting a tuple struct …\nHint that the Deserialize type is expecting an u128 value.\nHint that the Deserialize type is expecting a u16 value.\nHint that the Deserialize type is expecting a u32 value.\nHint that the Deserialize type is expecting a u64 value.\nHint that the Deserialize type is expecting a u8 value.\nHint that the Deserialize type is expecting a unit value.\nHint that the Deserialize type is expecting a unit struct …\nRaised when a Deserialize struct type received more than …\nFormat a message stating what data this Visitor expects to …\nFormat an explanation of what data was being expected. …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nConvert this value into a deserializer.\nRaised when deserializing a sequence or map and the input …\nRaised when a Deserialize receives a type different from …\nRaised when a Deserialize receives a value of the right …\nDetermine whether Deserialize implementations should …\nRaised when a Deserialize struct type expected to receive …\nCalled when deserializing a variant with a single value.\nCalled when deserializing a variant with a single value.\nThis returns Ok(Some(value)) for the next value in the …\nThis returns Ok(Some(value)) for the next value in the …\nThis returns Ok(Some((key, value))) for the next …\nThis returns Ok(Some((key, value))) for the next …\nThis returns Ok(Some(key)) for the next key in the map, or …\nThis returns Ok(Some(key)) for the next key in the map, or …\nThis returns a Ok(value) for the next value in the map.\nThis returns a Ok(value) for the next value in the map.\nProvides type based access to context intended for error …\nReturns the number of elements remaining in the sequence, …\nReturns the number of entries remaining in the map, if …\nThe lower-level source of this error, if any.\nCalled when deserializing a struct-like variant.\nCalled when deserializing a tuple-like variant.\nCalled when deserializing a variant with no values.\nRaised when a Deserialize struct type received a field …\nRaised when a Deserialize enum type received a variant …\nBuilding blocks for deserializing basic values using the …\nvariant is called to identify which variant to deserialize.\nvariant is called to identify which variant to deserialize.\nThe input contains a boolean.\nThe input contains a byte array that lives at least as …\nThe input contains a string that lives at least as long as …\nThe input contains a byte array and ownership of the byte …\nThe input contains a byte array. The lifetime of the byte …\nThe input contains a char.\nThe input contains an enum.\nThe input contains an f32.\nThe input contains an f64.\nThe input contains a i128.\nThe input contains an i16.\nThe input contains an i32.\nThe input contains an i64.\nThe input contains an i8.\nThe input contains a key-value map.\nThe input contains a newtype struct.\nThe input contains an optional that is absent.\nThe input contains a sequence of elements.\nThe input contains an optional that is present.\nThe input contains a string. The lifetime of the string is …\nThe input contains a string and ownership of the string is …\nThe input contains a u128.\nThe input contains a u16.\nThe input contains a u32.\nThe input contains a u64.\nThe input contains a u8.\nThe input contains a unit ().\nA deserializer holding a bool.\nA deserializer holding a &[u8] with a lifetime tied to …\nA deserializer holding a &str with a lifetime tied to …\nA deserializer holding a &[u8]. Always calls …\nA deserializer holding a char.\nA deserializer holding a Cow<str>.\nA deserializer holding an EnumAccess.\nA minimal representation of all possible errors that can …\nA deserializer holding an f32.\nA deserializer holding an f64.\nA deserializer holding an i128.\nA deserializer holding an i16.\nA deserializer holding an i32.\nA deserializer holding an i64.\nA deserializer holding an i8.\nA deserializer holding an isize.\nA deserializer holding a MapAccess.\nA deserializer that iterates over a map.\nA deserializer holding a SeqAccess.\nA deserializer that iterates over a sequence.\nA deserializer holding a &str.\nA deserializer holding a String.\nA deserializer holding a u128.\nA deserializer holding a u16.\nA deserializer holding a u32.\nA deserializer holding a u64.\nA deserializer holding a u8.\nA deserializer holding a ().\nA deserializer holding a usize.\nCheck for remaining elements after passing a …\nCheck for remaining elements after passing a …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new borrowed deserializer from the given string.\nCreate a new deserializer from the given bytes.\nCreate a new borrowed deserializer from the given borrowed …\nConstruct a new MapDeserializer<I, E>.\nConstruct a new SeqDeserializer<I, E>.\nConstruct a new SeqAccessDeserializer<A>.\nConstruct a new MapAccessDeserializer<A>.\nConstruct a new EnumAccessDeserializer<A>.\nTrait used by Serialize implementations to generically …\nThe error type when some error occurs during serialization.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nMust match the Error type of our Serializer.\nHelper type for implementing a Serializer that does not …\nThe output type produced by this Serializer during …\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nMust match the Ok type of our Serializer.\nA data structure that can be serialized into any data …\nReturned from Serializer::serialize_map.\nType returned from serialize_map for serializing the …\nReturned from Serializer::serialize_seq.\nType returned from serialize_seq for serializing the …\nReturned from Serializer::serialize_struct.\nType returned from serialize_struct for serializing the …\nReturned from Serializer::serialize_struct_variant.\nType returned from serialize_struct_variant for …\nReturned from Serializer::serialize_tuple.\nType returned from serialize_tuple for serializing the …\nReturned from Serializer::serialize_tuple_struct.\nType returned from serialize_tuple_struct for serializing …\nReturned from Serializer::serialize_tuple_variant.\nType returned from serialize_tuple_variant for serializing …\nA data format that can serialize any data structure …\nError is a trait representing the basic expectations for …\nCollect an iterator as a map.\nCollect an iterator as a sequence.\nSerialize a string produced by an implementation of Display…\nUsed when a Serialize implementation encounters any error …\nAttempts to downcast the box to a concrete type.\nAttempts to downcast the box to a concrete type.\nAttempts to downcast the box to a concrete type.\nReturns some mutable reference to the inner value if it is …\nForwards to the method defined on the type dyn Error.\nForwards to the method defined on the type dyn Error.\nForwards to the method defined on the type dyn Error.\nForwards to the method defined on the type dyn Error.\nReturns some reference to the inner value if it is of type …\nFinish serializing a sequence.\nFinish serializing a tuple.\nFinish serializing a tuple struct.\nFinish serializing a tuple variant.\nFinish serializing a map.\nFinish serializing a struct.\nFinish serializing a struct variant.\nReturns the argument unchanged.\nCalls U::from(self).\nForwards to the method defined on the type dyn Error.\nReturns true if the inner type is the same as T.\nForwards to the method defined on the type dyn Error.\nDetermine whether Serialize implementations should …\nProvides type based access to context intended for error …\nSerialize this value into the given Serde serializer.\nSerialize a bool value.\nSerialize a chunk of raw byte data.\nSerialize a character.\nSerialize a sequence element.\nSerialize a tuple element.\nSerialize a map entry consisting of a key and a value.\nSerialize an f32 value.\nSerialize an f64 value.\nSerialize a tuple struct field.\nSerialize a tuple variant field.\nSerialize a struct field.\nSerialize a struct variant field.\nSerialize an i128 value.\nSerialize an i16 value.\nSerialize an i32 value.\nSerialize an i64 value.\nSerialize an i8 value.\nSerialize a map key.\nBegin to serialize a map. This call must be followed by …\nSerialize a newtype struct like struct Millimeters(u8).\nSerialize a newtype variant like E::N in enum E { N(u8) }.\nSerialize a None value.\nBegin to serialize a variably sized sequence. This call …\nSerialize a Some(T) value.\nSerialize a &str.\nBegin to serialize a struct like …\nBegin to serialize a struct variant like E::S in …\nBegin to serialize a statically sized sequence whose …\nBegin to serialize a tuple struct like …\nBegin to serialize a tuple variant like E::T in …\nSerialize a u128 value.\nSerialize a u16 value.\nSerialize a u32 value.\nSerialize a u64 value.\nSerialize a u8 value.\nSerialize a () value.\nSerialize a unit struct like struct Unit or PhantomData<T>.\nSerialize a unit variant like E::A in enum E { A, B }.\nSerialize a map value.\nIndicate that a struct field has been skipped.\nIndicate that a struct variant field has been skipped.\nThe lower-level source of this error, if any.\nReturns an iterator starting with the current error and …\nFunctions used by serde impls of all hashes.\nSize, in bits, of the hash.\nDefault serialization/deserialization methods.\nDo serde deserialization.\nHelper function to turn a deserialized slice into the …\nDo serde serialization.\nOutput of the SHA1 hash function.\nEngine to compute SHA1 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SHA256 hash function.\nEngine to compute SHA256 hash function.\nOutput of the SHA256 hash function.\nComputes hash from bytes in const context.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new Midstate from the inner value.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCreate a new HashEngine from a Midstate.\nCopies a byte slice into the Midstate object.\nIterate the sha256 algorithm to turn a sha256 hash into a …\nCreates midstate for tagged hashes.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nUnwraps the Midstate and returns the underlying byte array.\nOutput of the SHA256d hash function.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nOutput of the SHA256t hash function.\nTrait representing a tag that can be used as a context for …\nReturns a hash engine that is pre-tagged and is ready to …\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nOutput of the SHA384 hash function.\nEngine to compute SHA384 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SHA512 hash function.\nEngine to compute SHA512 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SHA512/256 hash function.\nEngine to compute SHA512/256 hash function.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nCalls U::from(self).\nCalls U::from(self).\nOutput of the SipHash24 hash function.\nEngine to compute the SipHash24 hash function.\nInternal state of the HashEngine.\nReturns the (little endian) 64-bit integer representation …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nZero cost conversion between a fixed length byte array …\nZero cost conversion between a fixed length byte array …\nProduces a hash as u64 from the current state of a given …\nCreates a hash from its (little endian) 64-bit integer …\nHashes the given data directly to u64 with an engine with …\nHashes the given data with an engine with the provided …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nRetrieves the keys of this engine.\nCreates a new SipHash24 engine.\nCreates a new SipHash24 engine with keys.\nA socket address could not be bound because the address is …\nA nonexistent interface was requested or the requested …\nAn entity already exists, often a file.\nThe operation failed because a pipe was closed.\nA trait describing an input stream that uses an internal …\nThe connection was aborted (terminated) by the remote …\nThe connection was refused by the remote server.\nThe connection was reset by the remote server.\nWraps an in memory reader providing the position function.\nContains the error value\nThe io crate error type.\nA minimal subset of std::io::ErrorKind which is used for …\nThis operation was interrupted.\nData not valid for the operation were encountered.\nA parameter was incorrect.\nThe network operation failed because it was not connected …\nAn entity was not found, often a file.\nContains the success value\nA custom error that does not fall under any other I/O …\nThe operation lacked the necessary privileges to complete.\nA generic trait describing an input stream. See …\nResult type returned by functions in this crate.\nA sink to which all writes succeed. See std::io::Sink for …\nReader adapter which limits the bytes read from an …\nThe I/O operation’s timeout expired, causing it to be …\nAn error returned when an operation could not be completed …\nThe operation needs to block to complete, but the blocking …\nA generic trait describing an output stream. See …\nAn error returned when an operation could not be completed …\nMarks the buffered data up to amount as consumed.\nReturns data read from this reader, filling the internal …\nFlushes this output stream, ensuring that all …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns a reference to this error.\nBecause we cannot provide a blanket implementation of …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the inner buffer.\nReturns the error kind for this error.\nCreates a Cursor by wrapping inner.\nCreates a new I/O error.\nReturns the position read up to thus far.\nReads bytes from source into buf.\nReads bytes from source until buf is full.\nReads all bytes until EOF from the underlying reader into …\nAttempts to read up to limit bytes from the reader, …\nReturns a sink to which all writes succeed. See …\nCreates an adapter which will read at most limit bytes.\nWrites buf into this writer, returning how many bytes were …\nAttempts to write an entire buffer into this writer.\nA base58 decoding error.\nAn always-compressed Bitcoin ECDSA public key\nError originated while parsing string.\nEven parity.\nError returned while generating key from slice.\nError generated from WIF key format.\nhex to array conversion error.\nBase58 decoded data contained an invalid address version …\nInvalid address version in decoded base58 data.\nBase58 decoded data was an invalid length.\nDecoded base58 data was an invalid length.\nHex decoding error.\nPublicKey hex should be 66 or 130 digits long.\nInvalid key prefix error.\nInvalid Length of the slice.\nOpaque data structure that holds a keypair consisting of a …\nOdd parity.\nRepresents the parity passed between FFI function calls.\nError returned when parsing a CompressedPublicKey from a …\nError returned while constructing public key from string.\nA Bitcoin ECDSA private key\nA hash of a public key.\nA Bitcoin ECDSA public key\nThe secp256k1 engine, used to execute all signature …\nA Secp256k1 error.\nA secp256k1 error.\nSecp256k1 Error.\nAn opaque return type for PublicKey::to_sort_key\nA trait for tweaking BIP340 key types (x-only public keys …\nTweaked key type with optional auxiliary information\nTweaked key type\nTweaked BIP-340 key pair\nTweaked BIP-340 X-coord-only public key\nSegwit public keys must always be compressed.\nUntweaked BIP-340 key pair\nUntweaked BIP-340 X-coord-only public key\nMarker trait for indicating that an instance of Secp256k1 …\nSegWit version of a public key hash.\nAn x-only public key, used for verification of Taproot …\nTweaks a keypair by first converting the public key to an …\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw const pointer suitable for use with FFI …\nLike cmp::Cmp but faster and with no guarantees across …\nWhether this public key should be serialized as compressed\nWhether this private key should be serialized as compressed\nGetter for the raw pointer to the underlying secp256k1 …\nDirectly converts an UntweakedPublicKey to a …\nCreates a new TweakedPublicKey from a XOnlyPublicKey. No …\nCreates a new TweakedKeypair from a Keypair. No tweak is …\nFormats the explicit byte value of the secret key kept …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a Parity from a signed integer.\nReturns the TweakedPublicKey for keypair.\nCreates a context from a raw context.\nCreates a context from a raw context that can only be used …\nCreates a context from a raw context that can only be used …\nCreates a Keypair directly from a secret key slice.\nCreates a Keypair directly from a secret key string.\nCreates a Keypair directly from a Secp256k1 secret key.\nConstructs a Parity from a byte.\nLets you create a context in a generic manner …\nGenerates a random keypair. Convenience function for …\nThe actual ECDSA key\nThe actual ECDSA key\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid version.\nReturns the invalid payload length.\nThe network kind on which this key should be used\nCreates a new Secp256k1 context with all capabilities.\nGenerates a new random secret key.\nAttempts to erase the secret within the underlying array.\nUses the ffi secp256k1_context_preallocated_size to check …\nUses the ffi secp256k1_context_preallocated_size to check …\nReturns the required memory for a preallocated context …\nUses the ffi secp256k1_context_preallocated_size to check …\nLets you create a context with a preallocated buffer in a …\nCreates a new Secp256k1 context with all capabilities.\nCreates a new Secp256k1 context that can only be used for …\nCreates a new Secp256k1 context that can only be used for …\nReturns the PublicKey for this Keypair.\nReturns the TweakedPublicKey and its Parity for this …\n(Re)randomizes the Secp256k1 context for extra sidechannel …\nDetermines the public key for which sig is a valid …\nReturns the secret bytes for this key pair.\nReturns the SecretKey for this Keypair.\n(Re)randomizes the Secp256k1 context for extra sidechannel …\nSerialize the key as a byte-encoded pair of values. In …\nConstructs a signature for msg using the secret key sk and …\nConstructs a signature for msg using the secret key sk, …\nConstructs a signature for msg using the secret key sk, …\nConstructs a signature for msg using the secret key sk and …\nConstructs a signature for msg using the secret key sk and …\nConstructs a signature for msg using the secret key sk and …\nCreates a schnorr signature internally using the …\nCreates a schnorr signature without using any auxiliary …\nCreates a schnorr signature using the given auxiliary …\nCreates a schnorr signature using the given random number …\nCreates a new Secp256k1 context that can only be used for …\nTweaks an untweaked key with corresponding public key …\nTweaks private and public keys within an untweaked Keypair …\nConverts parity into an integer value.\nReturns the underlying public key.\nReturns the underlying key pair.\nConverts parity into an integer (byte) value.\nCreates a new Secp256k1 context that can only be used for …\nChecks that sig is a valid ECDSA signature for msg using …\nVerifies a schnorr signature.\nReturns the XOnlyPublicKey (and it’s Parity) for this …\nOverflowed the bits array\nOverflowed the hashes array\nThe left and right branches should never be identical\nData structure that represents a block header paired to a …\nAn error when verifying the merkle block.\nMerkle root in the header doesn’t match to the root …\nPartial merkle tree contains no transactions.\nNot all bits were consumed\nNot all hashes were consumed\nThere must be at least one bit per node in the partial …\nData structure that represents a partial merkle tree.\nThere are too many hashes\nThere are too many transactions.\nReturns the node-is-parent-of-matched-txid bits of the …\nCalculates the merkle root of an iterator of hashes.\nCalculates the merkle root of a list of hashes, inline (in …\nExtract the matching txid’s represented by this partial …\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a partial merkle tree The txids are the …\nReturns the transaction ids and internal hashes of the …\nThe block header\nCalls U::from(self).\nCalls U::from(self).\nReturns the total number of transactions in the block.\nTransactions making up a partial merkle tree\nMainnet Bitcoin.\nThe Bitcoin mainnet network.\nThe cryptocurrency network to act on.\nWhat kind of network we are on.\nAn error in parsing network string.\nBitcoin’s regtest network.\nBitcoin’s signet network.\nSome kind of testnet network.\nBitcoin’s testnet network.\nError in parsing network from chain hash.\nModule for serialization/deserialization of network …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nA message which can be sent on the Bitcoin network\nBitcoin mainnet network magic bytes.\nBLOOM means the node is capable and willing to handle …\nCOMPACT_FILTERS means the node will service basic block …\nGETUTXO means the node is capable of responding to the …\nNetwork magic bytes to identify the cryptocurrency network …\nNETWORK means that the node is capable of serving the …\nNETWORK_LIMITED means the same as NODE_NETWORK with the …\nNONE means no services supported.\nP2P_V2 indicates that the node supports the P2P v2 …\nVersion of the protocol as appearing in network message …\nAn error in parsing magic bytes.\nBitcoin regtest network magic bytes.\nBitcoin signet network magic bytes.\nFlags to indicate which network services a node supports.\nBitcoin testnet network magic bytes.\nError in creating a Network from Magic bytes.\nWITNESS indicates that a node can be asked for blocks and …\nAdd ServiceFlags together.\nBitcoin network addresses.\nNetwork byte-order ipv6 address, or ipv4-mapped ipv6 …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate network magic from bytes.\nReturns the magic bytes for the network defined by params.\nCheck whether ServiceFlags are included in this one.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nBitcoin network messages.\nBitcoin blockdata network messages.\nBitcoin Connection Bloom filtering network messages.\nBIP152 Compact Blocks network messages\nBitcoin Client Side Block Filtering network messages.\nBitcoin network-related network messages.\nCreate an address message for a socket\nNetwork port\nRemove ServiceFlags from this.\nServices provided by the peer whose address this is\nExtract socket address from an Address message. This will …\nGet network magic bytes.\nGets the integer representation of this ServiceFlags.\nSupported networks for use in BIP155 addrv2 message\nAddress received from BIP155 addrv2 message\nA message which can be sent on the Bitcoin network\nCJDNS\nI2P\nIPV4\nIPV6\nTORV2\nTORV3\nUnknown\nNetwork ID + Network Address\nNetwork byte-order ipv6 address, or ipv4-mapped ipv6 …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nNetwork port\nNetwork port, 0 if not applicable\nServices provided by the peer whose address this is\nService bits\nExtract socket address from an AddrV2Message message. This …\nTime that this node was last seen as connected to the …\naddr\naddrv2\nalert\nblock\nBIP152 blocktxn\nBIP157 cfcheckpt\nBIP157 cfheaders\nBIP157 cfilter\nBIP152 cmpctblock\nSerializer for command string\nError returned when a command string is invalid.\nfeefilter\nBIP 37 filteradd\nBIP 37 filterclear\nBIP 37 filterload\ngetaddr\nBIP152 getblocktxn\ngetblocks\nBIP157 getcfcheckpt\nBIP157 getcfheaders\nBIP157 getcfilters\ngetdata\ngetheaders\nheaders\ninv\nThe maximum number of super::message_blockdata::Inventory …\nMaximum size, in bytes, of an encoded message This by …\nmempool\nmerkleblock\nA Network message payload. Proper documentation is …\nnotfound\nping\npong\nA Network message\nreject\nsendaddrv2\nBIP152 sendcmpct\nsendheaders\ntx\nAny other message.\nverack\nversion\nwtxidrelay\nReturn the message command as a static string reference.\nReturn the message command as a static string reference.\nReturn the CommandString for the message command.\nReturn the CommandString for the message command.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nMagic bytes to identify the network these messages are …\nCreates a RawNetworkMessage\nThe actual message data\nConverts &'static str to CommandString\nThe command of this message.\nThe payload of this message.\nBlock\nCompact Block\nError — these inventories can be ignored\nThe getblocks message\nThe getheaders message\nAn inventory item.\nTransaction\nUnknown inventory type\nWitness Transaction by Wtxid\nWitness Block\nWitness Transaction\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nLocator hashes — ordered newest to oldest. The remote …\nLocator hashes — ordered newest to oldest. The remote …\nReturn the item value represented as a SHA256-d hash.\nConstruct a new getblocks message\nConstruct a new getheaders message\nReferences the block to stop at, or zero to just fetch the …\nReferences the header to stop at, or zero to just fetch …\nThe protocol version\nThe protocol version\nThe hash of the inventory item\nThe inventory item type.\nAlways update the filter with outpoints.\nBloom filter update flags\nfilteradd message updates the current filter with new data\nfilterload message sets the current bloom filter\nNever update the filter with outpoints.\nOnly update the filter with outpoints if it is P2PK or P2MS\nThe data element to add to the current filter.\nThe filter itself\nControls how matched items are added to the filter\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nThe number of hash functions to use\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nA random value\nblocktxn message\ncmpctblock message\ngetblocktxn message\nsendcmpct message\nThe Compact Block.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nRequest to be send compact blocks.\nThe requested block transactions.\nThe block transactions request.\nCompact Blocks protocol version number.\ncfcheckpt message\ncfheaders message\ncfilter message\ngetcfcheckpt message\ngetcfheaders message\ngetcfilters message\nBlock hash of the Bitcoin block for which the filter is …\nThe serialized compact filter for this block\nThe filter hashes for each block in the requested range\nThe filter headers at intervals of 1,000\nFilter type for which headers are requested\nByte identifying the type of filter being returned\nByte identifying the type of filter being returned\nFilter type for which headers are requested\nFilter type for which headers are requested\nFilter type for which headers are requested\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nThe filter header preceding the first block in the …\nThe height of the first block in the requested range\nThe height of the first block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\nThe hash of the last block in the requested range\ncheckpoint\nduplicate message\nan output is below dust limit\ninsufficient fee\ninvalid message\nmalformed message\nnonstandard transaction\nobsolete message\nReject message might be sent by peers rejecting one of our …\nmessage rejection reason as a code\nSome simple messages The version message\nreason of rejection as code\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nreference to rejected item\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nmessage type rejected\nConstructs a new version message with relay set to false\nA random nonce used to detect loops in the network\nreason of rejectection\nThe network address of the peer receiving the message\nWhether the receiving peer should relay messages to the …\nThe network address of the peer sending the message\nA bitmask describing the services supported by this node\nThe height of the maximum-work blockchain that the peer is …\nThe time at which the version message was sent\nA string describing the peer’s software\nThe P2P network protocol version\nError with rich context returned when a string can’t be …\nReturns the argument unchanged.\nReturns the input that was attempted to be parsed.\nCalls U::from(self).\nThe number of bytes equivalent per signature operation. …\nThe minimum incremental feerate (despite the name), in …\nDefault number of hours for an unconfirmed transaction to …\nMinimum feerate, in sats per virtual kilobyte, for a …\nThe minimum feerate, in sats per kilo-virtualbyte, for …\nMaximum number of sigops in a standard tx.\nMaximum weight of a transaction for it to be relayed by …\nMinimum non-witness size for a standard transaction (1 …\nThe virtual transaction size, as computed by default by …\nEncoding of 256-bit target as 32-bit float.\nA 256 bit integer representing target.\nA 256 bit integer representing work.\nThe FeeRate is too high\nAn output of type: pay-to-pubkey or pay-to-pubkey-hash.\nError in PSBT Base64 encoding.\nRequest a private key using BIP-32 fingerprint and …\nA bip32 error.\nConflicting data during combine procedure: global extended …\nSerialization error in bitcoin consensus-encoded structures\nKeys within key-value map should never be duplicated.\nKeys used to sign an ECDSA input.\nThe Elliptic Curve Digital Signature Algorithm (see …\nWays that a Partially Signed Transaction might fail.\nAn error occurred while getting the key.\nThis error is returned when extracting a Transaction from …\nInteger overflow in fee calculation\nTrait to get a private key from a key request, key is then …\nErrors when getting a key.\nInput index out of bounds.\nInput index out of bounds (actual index, maximum index …\nA key-value map for an input of the corresponding index in …\nThe index is out of bounds for the psbt.inputs vector.\nParsing error indicating invalid control block\nParsing error indicating invalid ECDSA signatures\nInvalid hash when parsing slice.\nKnown keys must be according to spec.\nParsing error indicating invalid leaf version\nMagic bytes for a PSBT must be the ASCII for “psbt” …\nThe pre-image must hash to the corresponding psbt hash\nNon-proprietary key type found when proprietary key was …\nParsing error indicating invalid public keys\nParsing error indicating invalid secp256k1 public keys\nThe separator for a PSBT must be 0xff.\nInvalid Sighash type.\nParsing error indicating invalid taproot signatures\nParsing error indicating invalid xonly public keys\nI/O error.\nUnable to find key.\nData required to call GetKey to get the private key to …\nSigning algorithm and key type does not match.\nMissing input utxo.\nOne or more of the inputs lacks value information …\nMissing Redeem script.\nMissing spending utxo.\nMissing both the witness and non-witness utxo.\nMissing witness script.\nA PSBT must have an unsigned transaction.\nNegative fee\nSignals that there are no more key-value pairs in a …\nUnable to parse as a standard sighash type.\nAttempted to ECDSA sign an non-ECDSA input.\nThe GetKey operation is not supported for this key request.\nThe scriptPubkey is not a P2WPKH script.\nA key-value map for an output of the corresponding index …\nThe various output types supported by the Bitcoin network.\nSighash computation error (p2wpkh input).\nPSBT data is not consumed entirely\nA Partially Signed Transaction.\nError in internal PSBT data structure.\nError encountered during PSBT decoding from Base64 string.\nA Signature hash type for the corresponding input. As of …\nReturned when output index is out of bounds in relation to …\nRequest a private key using the associated public key.\nKeys used to sign a Taproot input.\nThe Schnorr signature algorithm (see wikipedia).\nSighash computation error (segwit v0 input).\nInput value is less than Output Value, and the Transaction …\nA pay-to-script-hash output excluding wrapped segwit …\nA nested segwit output, pay-to-witness-pubkey-hash nested …\nA nested segwit output, pay-to-witness-script-hash nested …\nErrors encountered while calculating the sighash message.\nSigning algorithms supported by the Bitcoin network.\nMap of input index -> the error encountered while …\nA list of keys used to sign an input.\nMap of input index -> signing key for that input (see …\nTaproot tree deserilaization error\nParsing error indicating a taproot error\nSighash computation error (taproot input).\nA taproot output (P2TR).\nThe index is out of bounds for the psbt.unsigned_tx.input …\nAttempting to combine with a PSBT describing a different …\nUnable to determine the output type.\nThe scriptSigs for the unsigned transaction must be empty.\nThe scriptWitnesses for the unsigned transaction must be …\nSigning request currently unsupported.\nError related to PSBT version\nA pay-to-witness-pubkey-hash output (P2WPKH).\nAttempt to sign an input with the wrong signing algorithm.\nA pay-to-witness-script-hash output (P2WSH).\nError related to an xpub key\nA map from public keys needed to spend this output to their\nA map from public keys needed to sign this input to their …\nCombines this Output with other Output (as described by …\nCombines this Input with other Input (as described by BIP …\nReturns the EcdsaSighashType if the PsbtSighashType can be …\nObtains the EcdsaSighashType for this input if one is …\nThe finalized, fully-constructed scriptSig with signatures …\nThe finalized, fully-constructed scriptWitness with …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a PsbtSighashType from a raw u32.\nAttempts to get the private key for key_request.\nHSAH160 hash to preimage map.\nHAS256 hash to preimage map.\nThe corresponding key-value map for each input in the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nThe non-witness transaction this input spends from. Should …\nThe corresponding key-value map for each output in the …\nA map from public keys to their corresponding signature as …\nProprietary key-value pairs for this output.\nGlobal proprietary key-value pairs.\nProprietary key-value pairs for this input.\nRaw PSBT key-value pairs.\nThe redeem script for this output.\nThe redeem script for this input.\nRIPEMD160 hash to preimage map.\nPSBT serialization.\nSHA256 hash to preimage map.\nThe sighash type to be used for this input. Signatures for …\nThe signing algorithm used to sign this output type.\nThe internal pubkey.\nTaproot Internal key.\nMap of tap root x only keys to origin info and leaf hashes …\nMap of tap root x only keys to origin info and leaf hashes …\nSerialized taproot signature with sighash type for key …\nTaproot Merkle root.\nMap of <xonlypubkey>|<leafhash> with signature.\nMap of Control blocks to Script version pair.\nTaproot Output tree.\nReturns the TapSighashType if the PsbtSighashType can be …\nObtains the TapSighashType for this input if one is …\nConverts PsbtSighashType to a raw u32 sighash flag.\nUnknown key-value pairs for this output.\nUnknown global key-value pairs.\nUnknown key-value pairs for this input.\nThe unsigned transaction, scriptSigs and witnesses for …\nThe version number of this PSBT. If omitted, the version …\nThe witness script for this output.\nThe witness script for this input.\nThe transaction output this input spends from. Should only …\nA global map from extended public keys to the used key …\nActual\nExpected\nHash value\nHash-type\nPre-image\nThe FeeRate\nThe original Psbt is returned untouched.\nThe extracted Transaction (use this to ignore the error)\nThe extracted Transaction (use this to ignore the error)\nAttempted index access.\nAttempted index access.\nLength of the PBST inputs vector.\nLength of the PBST’s unsigned transaction input vector.\nA PSBT key in its raw byte form.\nA PSBT key-value pair in its raw byte form. …\nProprietary keys (i.e. keys starting with 0xFC byte) with …\nDefault implementation for proprietary key subtyping\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nAdditional key bytes (like serialized public key data etc)\nThe key of this key-value pair.\nThe key itself in raw byte form. …\nProprietary type prefix used for grouping together keys …\nCustom proprietary subtype\nConstructs full Key corresponding to this proprietary key …\nConstructs a ProprietaryKey from a Key.\nThe type of this PSBT key.\nThe value data of this key-value pair in raw byte form. …\nRepresents the set of all capabilities.\nRepresents the set of all capabilities (preallocated …\nA trait for all kinds of contexts that lets you define the …\nA constant description of the context.\nThe main error type for this library.\nEven parity.\nFlags for the ffi.\nSignature failed verification.\nBad EllSwift value\nBad sized message (“messages” are actually fixed-sized …\nError returned when conversion from an integer to Parity …\nThe only valid parity values are 0 or 1.\nBad public key.\nBad set of public keys.\nBad recovery id.\nBad secret key.\nBad shared secret.\nBad signature.\nTried to add/multiply by an invalid tweak.\nOpaque data structure that holds a keypair consisting of a …\nMaximum valid value: curve_order - 1\nA (hashed) message input to an ECDSA signature.\nDidn’t pass enough memory to context creation with …\nScalar representing 1\nOdd parity.\nRepresents the parity passed between FFI function calls.\nTrait marking that a particular context object internally …\nPublic key - used to verify ECDSA signatures and to do …\nPositive 256-bit integer guaranteed to be less than the …\nThe secp256k1 engine, used to execute all signature …\nSecret key - a 256-bit key used to create ECDSA and …\nRepresents the set of capabilities needed for signing.\nRepresents the set of capabilities needed for signing …\nMarker trait for indicating that an instance of Secp256k1 …\nTrait describing something that promises to be a 32-byte …\nMarker trait for indicating that an instance of Secp256k1 …\nRepresents the set of capabilities needed for verification.\nRepresents the set of capabilities needed for verification …\nAn x-only public key, used for verification of Taproot …\nScalar representing 0\nTweaks a PublicKey by adding tweak * G modulo the curve …\nTweaks a SecretKey by adding tweak modulo the curve order.\nObtains a const pointer suitable for use with FFI …\nObtains a mutable pointer suitable for use with FFI …\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw const pointer suitable for use with FFI …\nGets a reference to the underlying array.\nGets a reference to the underlying array\nLike cmp::Cmp but faster and with no guarantees across …\nAdds a second key to this one, returning the sum.\nAdds the keys in the provided slice together, returning …\nConstants related to the API and the underlying curve.\nA function to deallocate the memory when the context is …\nFormats the explicit byte value of the secret key kept …\nSupport for shared secret computations.\nStructs and functionality related to the ECDSA signature …\nThis module provides an implementation of ElligatorSwift …\nThis implementation is designed to be constant time to …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConverts a 32-byte hash directly to a secret key without …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConverts a 32-byte hash directly to a message without …\nReturns the argument unchanged.\nTries to deserialize from big endian bytes\nCreates a Message from a digest.\nCreates a Message from a 32 byte slice digest.\nCreates a new public key from an ElligatorSwift.\nCreates a new secret key using data from BIP-340 Keypair.\nCreates a new compressed public key using data from …\nTries to deserialize from little endian bytes\nCreates a new public key from a SecretKey.\nConverts a SECRET_KEY_SIZE-byte slice to a secret key.\nCreates a public key directly from a slice.\nCreates a Message from a 32 byte slice digest.\nCreates a PublicKey using the key material from pk …\nDeprecated reexport of the bitcoin-hashes crate.\nImplement methods and traits for types that contain an …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts the object into a 32-byte array\nReturns the Keypair for this SecretKey.\nTweaks a SecretKey by multiplying by tweak modulo the …\nTweaks a PublicKey by multiplying by tweak modulo the …\nNegates the secret key.\nNegates the public key.\nGenerates a new random secret key.\nAttempts to erase the contents of the underlying array.\nAttempts to erase the contents of the underlying array.\nReturns the PublicKey for this SecretKey.\nGenerates a random scalar\nGenerates a random scalar using supplied RNG\nProvides Scalar and related types.\nSupport for schnorr signatures.\nReturns the secret key as a byte value.\nSerializes the key as a byte-encoded pair of values. In …\nSerializes the key as a byte-encoded pair of values, in …\nSerializes to big endian bytes\nSerializes to little endian bytes\nChecks that sig is a valid ECDSA signature for msg using …\nReturns the XOnlyPublicKey (and it’s Parity) for this …\nReturns the XOnlyPublicKey (and it’s Parity) for this …\nThe maximum size of a compact signature.\nThe order of the secp256k1 curve.\nThe size of a full ElligatorSwift encoding.\nThe Prime for the secp256k1 field element.\nThe X coordinate of the generator.\nThe Y coordinate of the generator.\nThe size of a key pair.\nThe maximum size of a signature.\nThe size (in bytes) of a message.\nThe value one as big-endian array of bytes.\nThe size (in bytes) of a serialized public key.\nThe size of a schnorr public key.\nThe size of a schnorr signature.\nThe size (in bytes) of a secret key.\nThe size (in bytes) of an serialized uncompressed public …\nThe value zero as an array of bytes.\nEnables two parties to create a shared secret without …\nFormats the explicit byte value of the shared secret kept …\nReturns the argument unchanged.\nCreates a shared secret from bytes array.\nCreates a shared secret from bytes slice.\nCalls U::from(self).\nCreates a new shared secret from a pubkey and secret key.\nAttempts to erase the contents of the underlying array.\nReturns the shared secret as a byte value.\nCreates a shared point from public key and secret key.\nAn ECDSA signature with a recovery ID for pubkey recovery.\nA tag used for recovering the public key from a compact …\nA DER serialized Signature\nAn ECDSA signature\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw mutable pointer suitable for use with FFI …\nObtains a raw pointer suitable for use with FFI functions.\nObtains a raw pointer suitable for use with FFI functions\nGet the capacity of the underlying data buffer.\nLike cmp::Cmp but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConverts a compact-encoded byte slice to a signature. This …\nConverts a 64-byte compact-encoded byte slice to a …\nConverts a DER-encoded byte slice to a signature\nConverts a “lax DER”-encoded byte slice to a …\nAllows library users to create valid recovery IDs from i32.\nCreate a SerializedSignature from a Signature. (this DER …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCheck if the space is zero.\nGet the len of the used data.\nNormalizes a signature to a “low S” form. In ECDSA, …\nSerializes the recoverable signature in compact format.\nSerializes the signature in compact format\nSerializes the signature in DER format\nImplements SerializedSignature and related types.\nAllows library users to convert recovery IDs to i32.\nConvert the serialized signature into the Signature struct.\nConverts a recoverable signature to a non-recoverable one …\nOwned iterator over the bytes of SerializedSignature\nA DER serialized Signature\nReturns the remaining bytes as a slice.\nReturns the argument unchanged.\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nWe are the initiator of the ECDH\nWe are the responder of the ECDH\nElligatorSwift is an encoding of a uniformly chosen point …\nRepresents which party we are in the ECDH, A is the …\nThe result of ElligatorSwift::shared_secret, which is a …\nReturns the secret bytes as a reference to an array.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates an ElligatorSwift object from a 64-byte array.\nComputes the ElligatorSwift encoding for a valid public key\nCreates the Elligator Swift encoding from a secret key, …\nCreates shared secret from bytes.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new ElligatorSwift object from a 64-byte array.\nComputes a shared secret only known by Alice and Bob. This …\nComputes a shared secret, just like shared_secret, but …\nReturns the 64-byte array representation of this …\nReturns the secret bytes as an array.\nA trait for producing pointers that will always be valid …\nA Secp256k1 context, containing various precomputed values …\nHash function to use to post-process an ECDH point to get …\nLibrary-internal representation of a ElligatorSwift …\nA hash function used by ellswift_ecdh to hash the final …\nA nonce generation function. Ordinary users of the library …\nNo value.\nNo value.\nNo value.\nNo value.\nLibrary-internal representation of a Secp256k1 public key\nFlag for keys to indicate compressed serialization format\nFlag for keys to indicate uncompressed serialization format\nFlag for context to enable no precomputation\nFlag for context to enable signing precomputation\nFlag for context to enable verification precomputation\nSame as secp256k1_nonce function with the exception of …\nData structure that contains additional arguments for …\nLibrary-internal representation of a Secp256k1 signature\nSome value of type T.\nSome value of type T.\nSome value of type T.\nSome value of type T.\nGets a reference to the underlying array\nGets a reference to the underlying array\nGets a reference to the underlying array\nGets a reference to the underlying array\nGets a reference to the underlying array\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a new public key usable for the FFI interface from …\nCreate a new signature usable for the FFI interface from …\nCreate a new x-only public key usable for the FFI …\nCreate a new keypair usable for the FFI interface from raw …\nImplement methods and traits for types that contain an …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new SchnorrSigExtraParams properly initialized.\nCreates an “uninitialized” FFI public key which is …\nCreates an “uninitialized” FFI signature which is …\nCreates an “uninitialized” FFI x-only public key which …\nCreates an “uninitialized” FFI keypair which is zeroed …\nAttempts to erase the contents of the underlying array.\nDoes a best attempt at secure erasure using Rust …\nFFI of the recovery module\nA reimplementation of the C function …\nThis function is an override for the C function, this is …\nThis function is an override for the C function, this is …\nA reimplementation of the C function …\nA reimplementation of the C function …\nDefault ECDH hash function\nDefault ECDH hash function for BIP324 key establishment\nReturns the underlying FFI opaque representation of the …\nReturns the underlying FFI opaque representation of the …\nReturns the underlying FFI opaque representation of the …\nReturns the underlying FFI opaque representation of the …\nLibrary-internal representation of a Secp256k1 signature + …\nGets a reference to the underlying array\nLike cmp::Ord but faster and with no guarantees across …\nLike cmp::Eq but faster and with no guarantees across …\nReturns the argument unchanged.\nCalls U::from(self).\nCreate a new (zeroed) signature usable for the FFI …\nA type that is as aligned as the biggest alignment for …\nA static zeroed out AlignedType for use in static …\nThis might not match C’s c_char exactly. The way we use …\nEquivalent to C’s void type when used as a pointer.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nLength of the hash’s internal block size, in bytes.\nThe byte array that represents the hash internally.\nFlag indicating whether user-visible serializations of …\nA hashing engine which bytes can be serialized into. It is …\nAttempted to create a hash from an invalid length slice.\nTrait which applies to hashes of all types.\nA hashing engine which bytes can be serialized into.\nA hash computed from a RFC 2104 HMAC. Parameterized by the …\nPair of underlying hash engines, used for the inner and …\nLength of the hash, in bytes.\nByte array representing the internal state of the hash …\nReturns an all zero hash.\nReturns a reference to the underlying byte array.\nAdds slicing traits implementations to a given type $ty\nConstructs a new engine.\nReturns the expected slice length.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a hash from the underlying byte array.\nProduces a hash from the current state of a given engine.\nA special constructor giving direct access to the …\nCopies a byte slice into a hash object.\nHashes some bytes.\nHashes all the byte slices retrieved from the iterator …\nCreates a new newtype around a Hash type.\nAdds hexadecimal formatting implementation of a trait $imp …\nAdd data to the hash engine.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the invalid slice length.\nOutputs the midstate of the hash engine. This function …\nReturn the number of bytes already …\nConstructs a new keyed HMAC from key.\nImplements Serialize and Deserialize for a type $t which …\nMacro used to define a newtype tagged hash.\nReturns the underlying byte array.\nCodes at or above this point can be used by users to …\nA marker trait used to indicate that an RngCore or …\nError type of random number generators\nTypes which may be filled with random data\nCodes below this point represent OS Errors (i.e. positive …\nAn automatically-implemented extension trait on RngCore …\nThe core of a random number generator.\nSeed type, which is restricted to types …\nA random number generator that can be explicitly seeded.\nRetrieve the error code, if any.\nGenerating random samples from probability distributions\nFill any type implementing Fill with random data\nFill dest with random data.\nReturns the argument unchanged.\nCreates a new instance of the RNG seeded via getrandom.\nCreate a new PRNG seeded from another Rng.\nCreate a new PRNG using the given seed.\nReturn a random value supporting the Standard distribution.\nReturn a bool with a probability p of being true.\nGenerate a random value in the given range.\nReturn a bool with a probability of numerator/denominator …\nReference the inner error (std only)\nCalls U::from(self).\nConstruct from any type supporting std::error::Error\nReturn the next random u32.\nReturn the next random u64.\nConvenience re-export of common members\nGenerates a random value using the thread-local random …\nExtract the raw OS error code (if this error came from the …\nRandom number generators and adapters\nSample a new value, using the given distribution.\nCreate an iterator that generates values using the given …\nCreate a new PRNG using a u64 seed.\nSequence-related functionality\nUnwrap the inner error (std only)\nRetrieve the lazily-initialized thread-local random number …\nFill self with random data\nFill any type implementing Fill with random data\nFill dest entirely with random data.\nAll items in the provided weight collection are zero.\nSample a u8, uniformly distributed over ASCII letters and …\nThe Bernoulli distribution.\nError type returned from Bernoulli::new.\nAn iterator that generates random values of T with …\nA distribution of values of type S derived from the …\nString sampler\nTypes (distributions) that can be used to create a random …\np < 0 or p > 1.\nA weight is either less than zero, greater than the …\nThe provided weight collection contains no items.\nA distribution to sample floating point numbers uniformly …\nA distribution to sample floating point numbers uniformly …\nA distribution to sample items uniformly from a slice.\nA generic random value distribution, implemented for many …\nToo many weights are provided (length greater than u32::MAX…\nSample values uniformly between two bounds.\nError type returned from WeightedIndex::new.\nA distribution using weighted sampling of discrete items\nAppend len random chars to string\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new Bernoulli with the probability of success …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nCreate a distribution of values of ‘S’ by mapping the …\nConstruct a new Bernoulli with the given probability of …\nCreate a new Slice instance which samples uniformly from …\nCreates a new a WeightedIndex Distribution using the values\nCreate a new Uniform instance which samples uniformly from …\nCreate a new Uniform instance which samples uniformly from …\nGenerate a random value of T, using rng as the source of …\nCreate an iterator that generates random values of T, …\nGenerate a String of len random chars\nConvert an iterator of Results into FallibleIterator by …\nA distribution uniformly sampling numbers within a given …\nUpdate a subset of weights, without changing the number of …\nWeighted index sampling\nHelper trait similar to Borrow but implemented only for …\nRange that supports generating a single sample efficiently.\nHelper trait for creating objects using the correct …\nThe UniformSampler implementation supporting type X.\nSample values uniformly between two bounds.\nThe back-end implementing UniformSampler for char.\nThe back-end implementing UniformSampler for Duration.\nThe back-end implementing UniformSampler for …\nThe back-end implementing UniformSampler for integer types.\nHelper trait handling actual uniform sampling.\nThe type sampled by this implementation.\nImmutably borrows from an owned value. See Borrow::borrow\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCheck whether the range is empty.\nConstruct self, with inclusive lower bound and exclusive …\nConstruct self, with inclusive bounds [low, high].\nSample a value.\nGenerate a sample from the given range.\nSample a single value uniformly from a range with …\nSample a single value uniformly from a range with …\nAll items in the provided weight collection are zero.\nA weight is either less than zero, greater than the …\nThe provided weight collection contains no items.\nToo many weights are provided (length greater than u32::MAX…\nError type returned from WeightedIndex::new.\nA distribution using weighted sampling of discrete items\nReturns the argument unchanged.\nCalls U::from(self).\nA marker trait used to indicate that an RngCore or …\nTypes (distributions) that can be used to create a random …\nThe element type.\nExtension trait on iterators, providing random sampling …\nAn automatically-implemented extension trait on RngCore …\nThe core of a random number generator.\nSeed type, which is restricted to types …\nA random number generator that can be explicitly seeded.\nExtension trait on slices, providing random mutation and …\nThe standard RNG. The PRNG algorithm in StdRng is chosen …\nA reference to the thread-local generator\nReturns a reference to one random element of the slice, or …\nChoose one element at random from the iterator.\nChooses amount elements from the slice at random, without …\nCollects amount values at random from the iterator into a …\nCollects values at random from the iterator into a …\nSimilar to choose_multiple, but where the likelihood of …\nReturns a mutable reference to one random element of the …\nChoose one element at random from the iterator.\nSimilar to choose, but where the likelihood of each …\nSimilar to choose_mut, but where the likelihood of each …\nFill any type implementing Fill with random data\nFill dest with random data.\nCreates a new instance of the RNG seeded via getrandom.\nCreate a new PRNG seeded from another Rng.\nCreate a new PRNG using the given seed.\nReturn a random value supporting the Standard distribution.\nReturn a bool with a probability p of being true.\nGenerate a random value in the given range.\nReturn a bool with a probability of numerator/denominator …\nCreate a distribution of values of ‘S’ by mapping the …\nReturn the next random u32.\nReturn the next random u64.\nShuffle a slice in place, but exit early.\nGenerates a random value using the thread-local random …\nGenerate a random value of T, using rng as the source of …\nSample a new value, using the given distribution.\nCreate an iterator that generates random values of T, …\nCreate an iterator that generates values using the given …\nCreate a new PRNG using a u64 seed.\nShuffle a mutable slice in place.\nRetrieve the lazily-initialized thread-local random number …\nFill any type implementing Fill with random data\nFill dest entirely with random data.\nA random number generator that retrieves randomness from …\nThe standard RNG. The PRNG algorithm in StdRng is chosen …\nA reference to the thread-local generator\nWrappers / adapters forming RNGs\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nMock random number generator\nReadRng error type\nAn RNG that reads random bytes straight from any type …\nA wrapper around any PRNG that implements BlockRngCore, …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCreate a new ReadRng from a Read.\nCreate a new ReseedingRng from an existing PRNG, combined …\nReseed the internal PRNG.\nA simple implementation of RngCore for testing purposes.\nReturns the argument unchanged.\nCalls U::from(self).\nCreate a StepRng, yielding an arithmetic sequence starting …\nThe element type.\nExtension trait on iterators, providing random sampling …\nAn iterator over multiple slice elements.\nExtension trait on slices, providing random mutation and …\nReturns a reference to one random element of the slice, or …\nChoose one element at random from the iterator.\nChooses amount elements from the slice at random, without …\nCollects amount values at random from the iterator into a …\nCollects values at random from the iterator into a …\nSimilar to choose_multiple, but where the likelihood of …\nReturns a mutable reference to one random element of the …\nChoose one element at random from the iterator.\nSimilar to choose, but where the likelihood of each …\nSimilar to choose_mut, but where the likelihood of each …\nReturns the argument unchanged.\nLow-level API for sampling indices\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nShuffle a slice in place, but exit early.\nShuffle a mutable slice in place.\nConvert an iterator of Results into FallibleIterator by …\nA vector of indices.\nReturn type of IndexVec::into_iter.\nReturn type of IndexVec::iter.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturn the value at the given index.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nConvert into an iterator over the indices as a sequence of …\nReturn result as a Vec<usize>. Conversion may or may not …\nReturns true if the length is 0.\nIterate over the indices as a sequence of usize values\nReturns the number of indices\nRandomly sample exactly amount distinct indices from …\nRandomly sample exactly amount distinct indices from …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nError returned when the value of scalar is invalid - …\nPositive 256-bit integer guaranteed to be less than the …\nReturns the argument unchanged.\nCalls U::from(self).\nRepresents a schnorr signature.\nGets a reference to the underlying array\nReturns the argument unchanged.\nCreates a Signature directly from a slice.\nCalls U::from(self).\nReturns a signature as a byte array.\nWhen SIGHASH_ANYONECANPAY is not provided, or when the …\n0x1: Sign all outputs.\n0x1: Sign all outputs.\n0x81: Sign all outputs but only this input.\n0x81: Sign all outputs but only this input.\nThe Annex struct is a slice wrapper enforcing first byte …\nAnnex must be at least one byte long and the first bytes …\n0x0: Used when not explicitly specified, defaults to …\nHashtype of an input’s signature, encoded in the last …\nThe annex is empty.\nResult of SighashCache::legacy_encode_signing_data_to.\nIncorrect prefix byte in the annex.\nIndex out of bounds when accessing transaction input …\nInvalid index when accessing a Prevouts::All kind.\nInvalid index when accessing a Prevouts::One kind.\nInvalid Sighash type.\nInteger is not a consensus valid sighash type.\nCan happen only when using *_encode_signing_* methods with …\nHash of a transaction according to the legacy signature …\nThis type is consensus valid but an input including it …\n0x2: Sign no outputs — anyone can choose the destination.\n0x2: Sign no outputs — anyone can choose the destination.\n0x82: Sign no outputs and only this input.\n0x82: Sign no outputs and only this input.\nScript is not a witness program for a p2wpkh output.\nOne variant allows provision of the single prevout needed. …\nError computing a P2WPKH sighash.\nContains outputs of previous transactions. In the case …\nPrevouts index error.\nPrevouts index related errors.\nPrevouts kind error.\nA single prevout was been provided but all prevouts are …\nPrevouts size error.\nThe number of supplied prevouts differs from the number of …\nInformation related to the script path spending.\nHash of a transaction according to the segwit version 0 …\nError computing the sighash.\nAn argument to the called sighash function was invalid.\nEfficiently calculates signature hash message for legacy, …\nInput data is an instance of SIGHASH_SINGLE bug\nError returned for failure during parsing one of the …\nError returned when writing signing data fails.\n0x3: Sign the output whose index matches this input’s …\n0x3: Sign the output whose index matches this input’s …\nUsing SIGHASH_SINGLE requires an output at the same index …\nUsing SIGHASH_SINGLE requires an output at the same index …\n0x83: Sign one output and only this input (see Single for …\n0x83: Sign one output and only this input (see Single for …\nTaproot-tagged hash with tag "TapSighash".\nThe tag used for TapSighash\nHashtype of an input’s signature, encoded in the last …\nError computing a taproot sighash.\nOperation performed normally.\nReturns the Annex bytes data (including first byte 0x50).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nInput index.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDestroys the cache and recovers the stored transaction.\nChecks for SIGHASH_SINGLE bug returning error if the …\nComputes the leaf hash for this ScriptPath.\nEncodes the legacy signing data from which a signature …\nComputes a legacy signature hash for a given input index …\nMaps a Result<T, E> to Result<T, F> by applying a function …\nConstructs a new SighashCache from an unsigned transaction.\nCreates a new ScriptPath structure.\nCreates a new Annex struct checking the first byte is 0x50.\nLength of the output vector.\nComputes the BIP143 sighash to spend a p2wpkh transaction …\nComputes the BIP143 sighash to spend a p2wsh transaction …\nEncodes the BIP143 signing data for any flag type into a …\nEncodes the BIP341 signing data for any flag type into a …\nComputes the BIP341 sighash for a key spend.\nComputes the BIP341 sighash for a script spend.\nComputes the BIP341 sighash for any flag type.\nReturns the reference to the cached transaction.\nThe unrecognized string we attempted to parse.\nCreates a new ScriptPath structure using default leaf …\nAllows modification of witnesses.\nThe prefix for signed messages using Bitcoin’s message …\nInvalid base64 encoding.\nThe signature is invalidly constructed.\nSignature is expected to be 65 bytes.\nA signature on a Bitcoin Signed Message.\nAn error used for dealing with Bitcoin Signed Messages.\nUnsupported Address Type\nWhether or not this signature was created with a …\nReturns the argument unchanged.\nReturns the argument unchanged.\nConvert a signature from base64 encoding.\nCreate from a byte slice.\nCalls U::from(self).\nCalls U::from(self).\nVerify that the signature signs the message and was signed …\nCreate a new MessageSignature.\nAttempt to recover a public key from the signature and the …\nSerialize to bytes.\nThe inner recoverable signature.\nHash message for signature using Bitcoin’s message …\nConvert to base64 encoding.\nControl block data structure used in Tapscript …\nCalled finalize on a empty tree.\nEmpty tap tree.\nFuture leaf version.\nInner type representing future (non-tapscript) leaf …\nHidden Node with the given leaf hash\nError happening when TapTree is constructed from a NodeInfo\nIndicates an attempt to construct a tap tree from a …\nIndicates an attempt to construct a tap tree from a …\nError happening when TapTree is constructed from a …\nInvalid control block size.\nInvalid taproot internal key.\nInvalid taproot internal key.\nProof size must be a multiple of 32.\nMerkle tree depth must not be more than 128.\nMerkle tree depth must not be more than 128.\nInvalid taproot signature size\nThe last bit of tapleaf version must be zero.\nStore information about taproot leaf node.\nIterator for a taproot script tree, operating in DFS order …\nThe leaf version for tapleafs.\nRepresents the node information in taproot tree. In …\nNodes must be added specified in DFS walk order.\nIndicates an attempt to construct a tap tree from a …\nTwo nodes at depth 0 are not allowed.\nA known script\nScript leaf node in a taproot tree along with the merkle …\nIterator for a taproot script tree, operating in DFS order …\nA secp256k1 error.\nAn error constructing a taproot::Signature from a byte …\nInvalid signature hash type.\nA BIP340-341 serialized taproot signature with the …\nTaproot annex prefix.\nTapscript control base size.\nMaximum depth of a taproot tree script spend path.\nTapscript control max size.\nSize of a taproot control node.\nTapleaf mask for getting the leaf version from first byte …\nTapscript leaf version.\nThe tag used for TapNodeHash\nLeaf node in a taproot tree. Can be either hidden or known.\nTaproot-tagged hash with tag "TapLeaf".\nThe tag used for TapLeafHash\nTagged hash used in taproot trees.\nBIP-342 tapscript.\nTaproot Tree representing a complete binary tree without …\nTaproot-tagged hash with tag "TapTweak".\nThe tag used for TapTweakHash\nBuilder for building taproot iteratively. Users can …\nDetailed error type for taproot builder.\nDetailed error type for taproot utilities.\nThe merkle proof for inclusion of a tree in a taptree hash.\nRepresents taproot spending information.\nAdds a hidden/omitted node at depth to the builder. Errors …\nAdds a leaf script at depth to the builder with default …\nAdds a leaf script at depth to the builder with script …\nObtains the hidden leaf hash if the leaf is hidden.\nReturns a reference to the slice of hashes.\nObtains a reference to script and version if the leaf is …\nReturns a reference to the slice of hashes.\nCombines two NodeInfo to create a new parent.\nConstructs a ControlBlock for particular script with the …\nDecodes bytes from control block.\nDecodes bytes representing a ControlBlock.\nReturns the depth of this script leaf in the tap tree.\nSerializes to a writer.\nSerializes to a writer.\nCreates a TaprootSpendInfo with the given internal key.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreates a LeafVersion from consensus byte representation.\nObtains a script leaf from the leaf node if the leaf is …\nComputes the TaprootSpendInfo from internal_key and node.\nDeserialize from slice\nChecks if the builder has hidden nodes.\nReturns the internal key for this TaprootSpendInfo.\nThe internal key.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConverts error into the original incomplete TaprootBuilder …\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nReturns the inner list of hashes.\nConverts error into the original incomplete NodeInfo …\nGets the inner NodeInfo of this tree root.\nReturns the list of hashes stored in a Vec.\nChecks if this merkle proof is empty.\nChecks if the builder has finalized building a tree.\nReturns a reference to the leaf of this ScriptLeaf.\nComputes a leaf hash for this ScriptLeaf if the leaf is …\nCreates an iterator over all leaves (including hidden …\nReturns leaf version of the script if the leaf is known.\nThe tapleaf version.\nReturns the number of nodes in this merkle proof.\nContains TaprootMerkleBranch and its associated types.\nReturns reference to the merkle proof (hashing partners) …\nObtains a reference to the merkle proof of the leaf.\nThe merkle proof of a script associated with this leaf.\nReturns the merkle root for this TaprootSpendInfo.\nCreates a new instance of TaprootBuilder.\nCreates an new ScriptLeaf from hash and no merkle branch.\nCreates a new NodeInfo with omitted/hidden info.\nCreates a new key spend with internal_key and merkle_root. …\nCreates a new leaf NodeInfo with given ScriptBuf and …\nCreates an new ScriptLeaf from script and ver and no …\nReturns the root TapNodeHash of this node info.\nComputes the TapNodeHash for this ScriptLeaf. This returns …\nGets the reference to inner NodeInfo of this tree root.\nReturns the output key (the key used in script pubkey) for …\nReturns the parity of the output key. See also …\nThe parity of the output key (NOT THE INTERNAL KEY WHICH …\nReturns the root TapNodeHash of this tree.\nReturns reference to the leaf script if the leaf is known.\nObtains a reference to the script inside the leaf.\nReturns [TapTreeIter<'_>] iterator for a taproot script …\nReturns a reference to the internal script map.\nSerializes the signature (without heap allocation)\nSerializes self as bytes.\nSerializes the control block.\nSerializes the signature to writer.\nImplements SerializedSignature and related types.\nThe corresponding hash type.\nThe underlying schnorr signature.\nReturns the size of control block. Faster and more …\nReturns the TapTweakHash for this TaprootSpendInfo i.e., …\nReturns the consensus representation of this …\nReturns the consensus representation of this LeafVersion.\nSerialize Signature\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nCreates a merkle proof from list of hashes.\nCreates a merkle proof from list of hashes.\nCreates a merkle proof from list of hashes.\nConstructs TapTree from a NodeInfo if it is complete …\nConstructs TapTree from a TaprootBuilder if it is complete …\nConverts the builder into a NodeInfo if the builder is a …\nConverts the builder into a TapTree if the builder is a …\nVerifies that a control block is correct proof for a given …\nObtains the version of the script leaf.\nCreates a new instance of TaprootBuilder with a capacity …\nCreates a new TaprootSpendInfo from a list of scripts …\nCreates a new TaprootSpendInfo from a list of scripts …\nIterator over node hashes within Taproot merkle branch.\nThe merkle proof for inclusion of a tree in a taptree hash.\nReturns the remaining items of this iterator as a mutable …\nReturns the remaining items of this iterator as a slice.\nReturns the argument unchanged.\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nOwned iterator over the bytes of SerializedSignature\nA serialized Taproot Signature\nReturns the remaining bytes as a slice.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCreate a SerializedSignature from a Signature. (this …\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nGet the len of the used data.\nConvert the serialized signature into the Signature struct.\nConvert an iterator of Results into FallibleIterator by …\nWrites this serialized signature to a writer.\nRepresents changes to an IndexedTxGraph.\nThe IndexedTxGraph combines a TxGraph and an Indexer …\nBatch insert all transactions of the given block of height.\nBatch insert all transactions of the given block of height…\nApplies the ChangeSet to the IndexedTxGraph.\nApply an update directly.\nApply the given update with an optional seen_at timestamp.\nBatch insert transactions, filtering out those that are …\nBatch insert unconfirmed transactions, filtering out those …\nBatch insert unconfirmed transactions.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet a reference of the internal transaction graph.\nTransaction index.\nIndexer changeset.\nDetermines the ChangeSet between self and an empty …\nInsert an anchor for a given transaction.\nInsert a unix timestamp of when a transaction is seen in …\nInsert and index a transaction into the graph.\nInsert a floating txout of given outpoint.\nCalls U::from(self).\nCalls U::from(self).\nConstruct a new IndexedTxGraph with a given index.\nTxGraph changeset.\nThe resultant “changeset” when new transaction data is …\nUtilities for indexing transaction data.\nApply changeset to itself.\nScans a transaction for relevant outpoints, which are …\nScan and index the given outpoint and txout.\nDetermines the ChangeSet between self and an empty Indexer.\nDetermines whether the transaction should be included in …\nKeychainTxOutIndex controls how script pubkeys are …\nSpkTxOutIndex is an index storing TxOuts that have a …\nRepresents updates to the derivation index of a …\nThe default lookahead for a KeychainTxOutIndex\nThe descriptor has already been assigned to a keychain so …\nTrait to extend FullScanRequestBuilder.\nError returned from KeychainTxOutIndex::insert_descriptor\nThe keychain is already assigned to a descriptor so you can…\nKeychainTxOutIndex controls how script pubkeys are …\nName for table that stores last revealed indices per …\nSchema name for the changeset.\nTrait to extend SyncRequestBuilder.\nGet unbounded spk iterators for all keychains.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct KeychainTxOutIndex from sqlite database and …\nGets the descriptor associated with the keychain. Returns …\nReturns the keychain and keychain index associated with …\nInitialize sqlite tables for persisting KeychainTxOutIndex.\nReturn a reference to the internal SpkTxOutIndex.\nInsert a descriptor with a keychain associated to it.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the changeset are empty.\nReturns whether the spk under the keychain’s index has …\nIterate over all OutPoints that have TxOuts with script …\nIterate over OutPoints that have script pubkeys derived …\nReturn all keychains and their corresponding descriptors.\nContains for each descriptor_id the last revealed index of …\nGet the last derivation index revealed for keychain. …\nGet the last derivation index that is revealed for each …\nReturns the highest derivation index of the keychain where …\nReturns the highest derivation index of each keychain that …\nGet the lookahead setting.\nStore lookahead scripts until target_index (inclusive).\nMarks the script pubkey at index as used even though the …\nMerge another ChangeSet into self.\nComputes the net value that this transaction gives to the …\nConstruct a KeychainTxOutIndex with the given lookahead.\nGet the next derivation index for keychain. The next index …\nGets the next unused script pubkey in the keychain. I.e., …\nGet the set of indexed outpoints, corresponding to tracked …\nPersist changeset to the sqlite database.\nAttempts to reveal the next script pubkey for keychain.\nReveals script pubkeys of the keychain’s descriptor up …\nConvenience method to call Self::reveal_to_target on …\nIterate over revealed spks of the given keychain with …\nIterate over revealed spks of keychains in range\nAdd Scripts that are revealed by the indexer of the given …\nComputes the total value transfer effect tx has on the …\nReturn the script that exists under the given keychain’s …\nAdd spk iterators for each keychain tracked in indexer.\nReturn the TxOut of outpoint if it has been indexed, and …\nIterate over known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nGet an unbounded spk iterator over a given keychain. …\nUndoes the effect of mark_used. Returns whether the index …\nIterate over revealed, but unused, spks of the given …\nIterate over revealed, but unused, spks of all keychains.\nAdd Scripts that are revealed by the indexer but currently …\nThe descriptor you have attempted to reassign\nThe keychain that the descriptor is already assigned to\nThe descriptor that the keychain is already assigned to\nThe keychain that you have attempted to reassign\nAn index storing TxOuts that have a script pubkey that …\nThe script pubkeys that are being tracked by the index.\nReturns the argument unchanged.\nReturns the index associated with the script pubkey.\nAdds a script pubkey to scan for. Returns false and does …\nCalls U::from(self).\nWhether any of the inputs of this transaction spend a …\nReturns whether the script pubkey at index has been used …\nMarks the script pubkey at index as used even though it …\nComputes the net value transfer effect of tx on the script …\nGet a reference to the set of indexed outpoints.\nIterates over all the outputs with script pubkeys in an …\nScans a transaction’s outputs for matching script …\nScan a single TxOut for a matching script pubkey and …\nComputes the total value transfer effect tx has on the …\nReturns the script that has been inserted at the index.\nReturns the txout and script pubkey index of the TxOut at …\nIterate over all known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nUndoes the effect of mark_used. Returns whether the index …\nIterates over all unused script pubkeys in an index range.\nRepresents a failure when trying to insert/remove a …\nThe error type for LocalChain::apply_header_connected_to.\nName of sqlite table that stores blocks of LocalChain.\nOccurs when the update cannot connect with the original …\nOccurs when an update does not have a common checkpoint …\nThe ChangeSet represents changes to LocalChain.\nA checkpoint is a node of a reference-counted linked list …\nIterates over checkpoints backwards.\nOccurs when connected_to block conflicts with either the …\nThis is a local implementation of ChainOracle.\nAn error which occurs when a LocalChain is constructed …\nSchema name for the changeset.\nApply the given changeset.\nUpdate the chain with a given Header connecting it with …\nUpdate the chain with a given Header at height which you …\nApplies the given update to the chain.\nChanges to the LocalChain blocks.\nRemoves blocks from (and inclusive of) the given block_id.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstructs a LocalChain from a BTreeMap of height to …\nConstruct a LocalChain from an initial changeset.\nConstruct LocalChain from genesis hash.\nConstruct a LocalChain from sqlite database.\nConstruct a LocalChain from a given checkpoint tip.\nGet the genesis hash.\nGet checkpoint at given height (if it exists).\nThe checkpoint’s height.\nInitialize sqlite tables for persisting …\nDerives an initial ChangeSet, meaning that it can be …\nInsert a BlockId.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate over checkpoints in descending height order.\nThe original checkpoint’s block hash which cannot be …\nPersist changeset to the sqlite database.\nIterate checkpoints over a height range.\nGet the highest checkpoint.\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nTable name for schemas.\nRuns logic that initializes/migrates the table schemas.\nData required to perform a spk-based blockchain client …\nBuilds a FullScanRequest.\nData returned from a spk-based blockchain client full scan.\nOutpoint sync item.\nScript pubkey sync item.\nAn item reported to the inspect closure of SyncRequest.\nThe progress of SyncRequest.\nData required to perform a spk-based blockchain client …\nBuilds a SyncRequest.\nData returned from a spk-based blockchain client sync.\nTxid sync item.\nBuild the SyncRequest.\nBuild the FullScanRequest.\nStart building a SyncRequest.\nStart building a FullScanRequest.\nSet the initial chain tip for the sync request.\nGet the chain tip CheckPoint of this request (if any).\nSet the initial chain tip for the full scan request.\nGet the chain tip CheckPoint of this request (if any).\nChanges to the chain discovered during the scan.\nChanges to the chain discovered during the scan.\nTotal consumed items of the request.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nSet the closure that will inspect every sync item visited.\nSet the closure that will inspect every sync item visited.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate over OutPoints contained in this request.\nIterate over ScriptBufs contained in this request.\nIterate over indexed ScriptBufs contained in this request …\nIterate over Txids contained in this request.\nList all keychains contained in this request.\nLast active indices for the corresponding keychains (K). …\nAdvances the sync request and returns the next OutPoint.\nAdvances the sync request and returns the next ScriptBuf.\nAdvances the full scan request and returns the next …\nAdvances the sync request and returns the next Txid.\nAdd OutPoints that will be synced against.\nOutpoints consumed by the request.\nOutpoints remaining in the request.\nGet the SyncProgress of this request.\nTotal remaining items of the request.\nAdd Scripts that will be synced against.\nScript pubkeys consumed by the request.\nSet the spk iterator for a given keychain.\nScript pubkeys remaining in the request.\nAdd Scripts coupled with associated indexes that will be …\nTotal items, consumed and remaining, of the request.\nTotal outpoints, consumed and remaining, of the request.\nTotal script pubkeys, consumed and remaining, of the …\nTotal txids, consumed and remaining, of the request.\nRelevant transaction data discovered during the scan.\nRelevant transaction data discovered during the scan.\nAdd Txids that will be synced against.\nTxids consumed by the request.\nTxids remaining in the request.\nName of table that stores Anchors.\nErrors returned by TxGraph::calculate_fee.\nA transaction that is included in the chain, or is still …\nThe ChangeSet represents changes to a TxGraph.\nMissing TxOut for one or more of the inputs of the tx\nWhen the transaction is invalid according to the graph it …\nSchema name for tx_graph::ChangeSet.\nName of table that stores floating txouts.\nName of table that stores full transactions and last_seen …\nAn iterator that traverses ancestors of a given root …\nAn iterator that traverses transaction descendants.\nA graph of transactions and spends.\nA transaction node in the TxGraph.\nData object used to communicate updates about relevant …\nGet all transaction anchors known by TxGraph.\nIterate over all tx outputs known by TxGraph.\nIterates over the heights of that the new transaction …\nTransaction anchors. Anchors tells us a position in the …\nThe blocks that the transaction is “anchored” in.\nAdded anchors.\nApplies ChangeSet to TxGraph.\nExtends this graph with the given update.\nExtends this graph with the given update alongside an …\nGet the total balance of outpoints that are in chain of …\nBatch insert unconfirmed transactions.\nCalculates the fee of a given transaction. Returns …\nHow the transaction is observed as (confirmed or …\nGiven a transaction, return an iterator of txids that …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nIterate over floating txouts known by TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a TxGraph from an sqlite database.\nIterate over all full transactions in the graph.\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nGet a transaction by txid. This only returns Some for full …\nGet a transaction node by txid. This only returns Some for …\nObtains a single tx output (if any) at the specified …\nInitialize sqlite tables.\nDetermines the ChangeSet between self and an empty TxGraph.\nInserts the given anchor into TxGraph.\nInserts the given seen_at for txid into TxGraph.\nInserts the given transaction into TxGraph.\nInserts the given TxOut at OutPoint.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nConvert an iterator of anything into FallibleIterator by …\nConvert an iterator of anything into FallibleIterator by …\nWhether the graph has any transactions or outputs in it.\nAdded last-seen unix timestamps of transactions.\nThe last-seen unix timestamp of the transaction as …\nList graph transactions that are in chain with chain_tip.\nTransform the TxGraph to have Anchors of another type.\nTransform the ChangeSet to have Anchors of another type.\nConstruct a new TxGraph from a list of transactions.\nThe transactions spending from this output.\nPersist changeset to the sqlite database.\nSeen at times for transactions. This records when a …\nConvert an iterator of Results into FallibleIterator by …\nConvert an iterator of Results into FallibleIterator by …\nGet the total balance of outpoints that are in chain of …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nList graph transactions that are in chain with chain_tip.\nA partial or full representation of the transaction.\nThe transaction node (as part of the graph).\nReturns known outputs of a given txid.\nIterates over the transactions spending from txid.\nTxid of the transaction.\nIterates over all outpoints contained within ChangeSet.\nFloating txouts. These are TxOuts that exist but the whole …\nAdded txouts.\nFull transactions. These are transactions that were …\nAdded transactions.\nIterate over graph transactions with no anchors or …\nCreates an iterator that filters and maps ancestor …\nCreates an iterator that both filters and maps conflicting …\nCreates an iterator that filters and maps descendants from …") \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/settings.html b/docs-rs/bdk/nightly/latest/settings.html index b09211728f..7c96d06f34 100644 --- a/docs-rs/bdk/nightly/latest/settings.html +++ b/docs-rs/bdk/nightly/latest/settings.html @@ -1 +1 @@ -Settings

    Rustdoc settings

    Back
    \ No newline at end of file +Settings

    Rustdoc settings

    Back
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/src-files.js b/docs-rs/bdk/nightly/latest/src-files.js index c642931c49..4da7540574 100644 --- a/docs-rs/bdk/nightly/latest/src-files.js +++ b/docs-rs/bdk/nightly/latest/src-files.js @@ -5,7 +5,7 @@ var srcIndex = new Map(JSON.parse('[\ ["bdk_electrum",["",[],["bdk_electrum_client.rs","lib.rs"]]],\ ["bdk_esplora",["",[],["async_ext.rs","blocking_ext.rs","lib.rs"]]],\ ["bdk_file_store",["",[],["entry_iter.rs","lib.rs","store.rs"]]],\ -["bdk_testenv",["",[],["lib.rs"]]],\ +["bdk_testenv",["",[],["lib.rs","utils.rs"]]],\ ["bdk_wallet",["",[["descriptor",[],["checksum.rs","dsl.rs","error.rs","mod.rs","policy.rs","template.rs"]],["keys",[],["mod.rs"]],["psbt",[],["mod.rs"]],["wallet",[],["changeset.rs","coin_selection.rs","error.rs","export.rs","mod.rs","params.rs","persisted.rs","signer.rs","tx_builder.rs","utils.rs"]]],["lib.rs","types.rs"]]],\ ["example_bitcoind_rpc_polling",["",[],["main.rs"]]],\ ["example_cli",["",[],["lib.rs"]]],\ diff --git a/docs-rs/bdk/nightly/latest/src/bdk_testenv/lib.rs.html b/docs-rs/bdk/nightly/latest/src/bdk_testenv/lib.rs.html index fff7a1eff0..b0e298bcb9 100644 --- a/docs-rs/bdk/nightly/latest/src/bdk_testenv/lib.rs.html +++ b/docs-rs/bdk/nightly/latest/src/bdk_testenv/lib.rs.html @@ -348,7 +348,11 @@ 348 349 350 -
    use bdk_chain::{
    +351
    +352
    +
    pub mod utils;
    +
    +use bdk_chain::{
         bitcoin::{
             address::NetworkChecked, block::Header, hash_types::TxMerkleNode, hashes::Hash,
             secp256k1::rand::random, transaction, Address, Amount, Block, BlockHash, CompactTarget,
    diff --git a/docs-rs/bdk/nightly/latest/src/bdk_testenv/utils.rs.html b/docs-rs/bdk/nightly/latest/src/bdk_testenv/utils.rs.html
    new file mode 100644
    index 0000000000..a12142c598
    --- /dev/null
    +++ b/docs-rs/bdk/nightly/latest/src/bdk_testenv/utils.rs.html
    @@ -0,0 +1,181 @@
    +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
    +
    use bdk_chain::bitcoin;
    +
    +#[allow(unused_macros)]
    +#[macro_export]
    +macro_rules! block_id {
    +    ($height:expr, $hash:literal) => {{
    +        bdk_chain::BlockId {
    +            height: $height,
    +            hash: bitcoin::hashes::Hash::hash($hash.as_bytes()),
    +        }
    +    }};
    +}
    +
    +#[allow(unused_macros)]
    +#[macro_export]
    +macro_rules! hash {
    +    ($index:literal) => {{
    +        bitcoin::hashes::Hash::hash($index.as_bytes())
    +    }};
    +}
    +
    +#[allow(unused_macros)]
    +#[macro_export]
    +macro_rules! local_chain {
    +    [ $(($height:expr, $hash:expr)), * ] => {{
    +        #[allow(unused_mut)]
    +        bdk_chain::local_chain::LocalChain::from_blocks([$(($height, $hash).into()),*].into_iter().collect())
    +            .expect("chain must have genesis block")
    +    }};
    +}
    +
    +#[allow(unused_macros)]
    +#[macro_export]
    +macro_rules! chain_update {
    +    [ $(($height:expr, $hash:expr)), * ] => {{
    +        #[allow(unused_mut)]
    +        bdk_chain::local_chain::LocalChain::from_blocks([$(($height, $hash).into()),*].into_iter().collect())
    +            .expect("chain must have genesis block")
    +            .tip()
    +    }};
    +}
    +
    +#[allow(unused_macros)]
    +#[macro_export]
    +macro_rules! changeset {
    +    (checkpoints: $($tail:tt)*) => { changeset!(index: TxHeight, checkpoints: $($tail)*) };
    +    (
    +        index: $ind:ty,
    +        checkpoints: [ $(( $height:expr, $cp_to:expr )),* ]
    +        $(,txids: [ $(( $txid:expr, $tx_to:expr )),* ])?
    +    ) => {{
    +        use bdk_chain::collections::BTreeMap;
    +
    +        #[allow(unused_mut)]
    +        bdk_chain::sparse_chain::ChangeSet::<$ind> {
    +            checkpoints: {
    +                let mut changes = BTreeMap::default();
    +                $(changes.insert($height, $cp_to);)*
    +                changes
    +            },
    +            txids: {
    +                let mut changes = BTreeMap::default();
    +                $($(changes.insert($txid, $tx_to.map(|h: TxHeight| h.into()));)*)?
    +                changes
    +            }
    +        }
    +    }};
    +}
    +
    +#[allow(unused)]
    +pub fn new_tx(lt: u32) -> bitcoin::Transaction {
    +    bitcoin::Transaction {
    +        version: bitcoin::transaction::Version::non_standard(0x00),
    +        lock_time: bitcoin::absolute::LockTime::from_consensus(lt),
    +        input: vec![],
    +        output: vec![],
    +    }
    +}
    +
    +#[allow(unused)]
    +pub const DESCRIPTORS: [&str; 7] = [
    +    "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/0/*)",
    +    "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/*)",
    +    "wpkh([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/0/*)",
    +    "tr(tprv8ZgxMBicQKsPd3krDUsBAmtnRsK3rb8u5yi1zhQgMhF1tR8MW7xfE4rnrbbsrbPR52e7rKapu6ztw1jXveJSCGHEriUGZV7mCe88duLp5pj/86'/1'/0'/0/*)",
    +    "tr(tprv8ZgxMBicQKsPd3krDUsBAmtnRsK3rb8u5yi1zhQgMhF1tR8MW7xfE4rnrbbsrbPR52e7rKapu6ztw1jXveJSCGHEriUGZV7mCe88duLp5pj/86'/1'/0'/1/*)",
    +    "wpkh(xprv9s21ZrQH143K4EXURwMHuLS469fFzZyXk7UUpdKfQwhoHcAiYTakpe8pMU2RiEdvrU9McyuE7YDoKcXkoAwEGoK53WBDnKKv2zZbb9BzttX/1/0/*)",
    +    // non-wildcard
    +    "wpkh([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/0)",
    +];
    +
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/trait.impl/bdk_core/merge/trait.Merge.js b/docs-rs/bdk/nightly/latest/trait.impl/bdk_core/merge/trait.Merge.js index df9b9d716d..e127ff98c0 100644 --- a/docs-rs/bdk/nightly/latest/trait.impl/bdk_core/merge/trait.Merge.js +++ b/docs-rs/bdk/nightly/latest/trait.impl/bdk_core/merge/trait.Merge.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_chain":[["impl Merge for ChangeSet"],["impl Merge for ChangeSet"],["impl<A: Anchor, IA: Merge> Merge for ChangeSet<A, IA>"],["impl<A: Ord> Merge for ChangeSet<A>"]], "bdk_core":[], -"bdk_wallet":[["impl Merge for ChangeSet"]], -"example_cli":[["impl Merge for ChangeSet"]] +"bdk_wallet":[["impl Merge for ChangeSet"]], +"example_cli":[["impl Merge for ChangeSet"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js b/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js index 1ee19459e5..a54eb9a2cf 100644 --- a/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js +++ b/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js @@ -1,4 +1,4 @@ (function() {var implementors = { "bdk_chain":[["impl AsRef<[u8; 32]> for DescriptorId"],["impl AsRef<[u8]> for DescriptorId"],["impl<A> AsRef<TxGraph<A>> for TxGraph<A>"],["impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>"]], -"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationBlockTime>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]] +"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationBlockTime>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js b/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js index a2a274f3ea..675eda5ed8 100644 --- a/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js +++ b/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js @@ -2,6 +2,6 @@ "bdk_chain":[["impl From<ChainPosition<ConfirmationBlockTime>> for ConfirmationTime"],["impl From<Hash> for DescriptorId"],["impl From<DescriptorId> for Hash"],["impl<'b> From<TxPosInBlock<'b>> for BlockId"],["impl<'b> From<TxPosInBlock<'b>> for ConfirmationBlockTime"],["impl<A> From<ChangeSet> for ChangeSet<A, ChangeSet>"],["impl<A> From<TxGraph<A>> for TxUpdate<A>"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<A: Ord + Clone> From<TxUpdate<A>> for TxGraph<A>"],["impl<B: IntoIterator<Item = (u32, Option<BlockHash>)>> From<B> for ChangeSet"],["impl<T> From<T> for AnchorImpl<T>"],["impl<T> From<T> for Impl<T>"]], "bdk_core":[["impl From<(&u32, &BlockHash)> for BlockId"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<BlockId> for (u32, BlockHash)"],["impl<I> From<SyncRequestBuilder<I>> for SyncRequest<I>"],["impl<K> From<FullScanRequestBuilder<K>> for FullScanRequest<K>"]], "bdk_file_store":[["impl From<Error> for FileError"],["impl From<Error> for IterError"]], -"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<LoadMismatch> for LoadError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<KeyError> for Error"],["impl From<bool> for Satisfaction"],["impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet<ConfirmationBlockTime>> for ChangeSet"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<SyncResult> for Update"],["impl From<InsufficientFunds> for CreateTxError"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for CreateTxError"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Fingerprint> for SignerId"],["impl From<Hash> for SignerId"],["impl From<HexToBytesError> for Error"],["impl From<ParsePublicKeyError> for Error"],["impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>"],["impl<E> From<LoadMismatch> for LoadWithPersistError<E>"]], +"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<LoadMismatch> for LoadError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<KeyError> for Error"],["impl From<bool> for Satisfaction"],["impl From<InsufficientFunds> for CreateTxError"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet> for ChangeSet"],["impl From<ChangeSet<ConfirmationBlockTime>> for ChangeSet"],["impl From<ChangeSet<ConfirmationBlockTime, ChangeSet>> for ChangeSet"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for CreateTxError"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Fingerprint> for SignerId"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<Hash> for SignerId"],["impl From<HexToBytesError> for Error"],["impl From<ParsePublicKeyError> for Error"],["impl From<SyncResult> for Update"],["impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>"],["impl<E> From<LoadMismatch> for LoadWithPersistError<E>"]], "example_bitcoind_rpc_polling":[["impl From<RpcArgs> for Auth"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js b/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js index 11832e604d..d1e7c55ab6 100644 --- a/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js +++ b/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js @@ -1,4 +1,4 @@ (function() {var type_impls = { -"bdk_chain":[["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V> Merge for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn merge(&mut self, other: BTreeMap<K, V>)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"]], -"bdk_wallet":[["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl IntoAssets for BTreeMap<DescriptorPublicKey, DescriptorSecretKey>

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    ","IntoAssets","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Merge for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn merge(&mut self, other: BTreeMap<K, V>)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"]] +"bdk_chain":[["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    §

    impl<K, V> Merge for BTreeMap<K, V>
    where\n K: Ord,

    §

    fn merge(&mut self, other: BTreeMap<K, V>)

    Merge another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_chain::bitcoin::psbt::SigningKeysMap","bdk_chain::bitcoin::psbt::SigningErrors"]], +"bdk_wallet":[["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl IntoAssets for BTreeMap<DescriptorPublicKey, DescriptorSecretKey>

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    ","IntoAssets","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl<K, V> Merge for BTreeMap<K, V>
    where\n K: Ord,

    §

    fn merge(&mut self, other: BTreeMap<K, V>)

    Merge another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js b/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js index 78182e9876..cb7ae2fca6 100644 --- a/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js +++ b/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"example_cli":[["
    source§

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    ","AsRef>","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> Debug for IndexedTxGraph<A, I>
    where\n A: Debug,\n I: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> Default for IndexedTxGraph<A, I>
    where\n I: Default,

    source§

    fn default() -> IndexedTxGraph<A, I>

    Returns the “default value” for a type. Read more
    ","Default","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n <I as Indexer>::ChangeSet: Default + Merge,\n A: for<'b> Anchor + for<'b> From<TxPosInBlock<'b>>,\n I: Indexer,

    Methods are available if the anchor (A) can be created from TxPosInBlock.

    \n
    source

    pub fn apply_block_relevant(\n &mut self,\n block: &Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height, filtering out those that are\nirrelevant.

    \n

    Each inserted transaction’s anchor will be constructed using TxPosInBlock.

    \n

    Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n
    source

    pub fn apply_block(\n &mut self,\n block: Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height.

    \n

    Each inserted transaction’s anchor will be constructed using TxPosInBlock.

    \n

    To only insert relevant transactions, use apply_block_relevant instead.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>

    source

    pub fn new(index: I) -> IndexedTxGraph<A, I>

    Construct a new IndexedTxGraph with a given index.

    \n
    source

    pub fn graph(&self) -> &TxGraph<A>

    Get a reference of the internal transaction graph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,

    source

    pub fn apply_changeset(\n &mut self,\n changeset: ChangeSet<A, <I as Indexer>::ChangeSet>\n)

    Applies the ChangeSet to the IndexedTxGraph.

    \n
    source

    pub fn initial_changeset(&self) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Determines the ChangeSet between self and an empty IndexedTxGraph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Merge,

    source

    pub fn apply_update(\n &mut self,\n update: TxUpdate<A>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply an update directly.

    \n

    update is a tx_graph::TxUpdate<A> and the resultant changes is returned as ChangeSet.

    \n
    source

    pub fn apply_update_at(\n &mut self,\n update: TxUpdate<A>,\n seen_at: Option<u64>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply the given update with an optional seen_at timestamp.

    \n

    seen_at represents when the update is seen (in unix seconds). It is used to determine the\nlast_seens for all transactions in the update which have no corresponding anchor(s). The\nlast_seen value is used internally to determine precedence of conflicting unconfirmed\ntransactions (where the transaction with the lower last_seen value is omitted from the\ncanonical history).

    \n

    Not setting a seen_at value means unconfirmed transactions introduced by this update will\nnot be part of the canonical history of transactions.

    \n

    Use apply_update to have the seen_at value automatically\nset to the current time.

    \n
    source

    pub fn insert_txout(\n &mut self,\n outpoint: OutPoint,\n txout: TxOut\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a floating txout of given outpoint.

    \n
    source

    pub fn insert_tx<T>(&mut self, tx: T) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Insert and index a transaction into the graph.

    \n
    source

    pub fn insert_anchor(\n &mut self,\n txid: Txid,\n anchor: A\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert an anchor for a given transaction.

    \n
    source

    pub fn insert_seen_at(\n &mut self,\n txid: Txid,\n seen_at: u64\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a unix timestamp of when a transaction is seen in the mempool.

    \n

    This is used for transaction conflict resolution in TxGraph where the transaction with\nthe later last-seen is prioritized.

    \n
    source

    pub fn batch_insert_relevant<T>(\n &mut self,\n txs: impl IntoIterator<Item = (T, impl IntoIterator<Item = A>)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Batch insert transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the Indexer::is_tx_relevant implementation of I. Irrelevant\ntransactions in txs will be ignored. txs do not need to be in topological order.

    \n
    source

    pub fn batch_insert_relevant_unconfirmed<T>(\n &mut self,\n unconfirmed_txs: impl IntoIterator<Item = (T, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Batch insert unconfirmed transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

    \n
    source

    pub fn batch_insert_unconfirmed<T>(\n &mut self,\n txs: impl IntoIterator<Item = (T, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Batch insert unconfirmed transactions.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

    \n

    To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

    \n
    ",0,"example_cli::KeychainTxGraph"]] +"example_cli":[["
    §

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    §

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    ","AsRef>","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> Debug for IndexedTxGraph<A, I>
    where\n A: Debug,\n I: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> Default for IndexedTxGraph<A, I>
    where\n I: Default,

    §

    fn default() -> IndexedTxGraph<A, I>

    Returns the “default value” for a type. Read more
    ","Default","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>

    pub fn new(index: I) -> IndexedTxGraph<A, I>

    Construct a new [IndexedTxGraph] with a given index.

    \n

    pub fn graph(&self) -> &TxGraph<A>

    Get a reference of the internal transaction graph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n <I as Indexer>::ChangeSet: Default + Merge,\n A: for<'b> Anchor + for<'b> From<TxPosInBlock<'b>>,\n I: Indexer,

    Methods are available if the anchor (A) can be created from [TxPosInBlock].

    \n

    pub fn apply_block_relevant(\n &mut self,\n block: &Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height, filtering out those that are\nirrelevant.

    \n

    Each inserted transaction’s anchor will be constructed using [TxPosInBlock].

    \n

    Relevancy is determined by the internal [Indexer::is_tx_relevant] implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    pub fn apply_block(\n &mut self,\n block: Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height.

    \n

    Each inserted transaction’s anchor will be constructed using [TxPosInBlock].

    \n

    To only insert relevant transactions, use apply_block_relevant instead.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,

    pub fn apply_changeset(\n &mut self,\n changeset: ChangeSet<A, <I as Indexer>::ChangeSet>\n)

    Applies the [ChangeSet] to the [IndexedTxGraph].

    \n

    pub fn initial_changeset(&self) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Determines the [ChangeSet] between self and an empty [IndexedTxGraph].

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Merge,

    pub fn apply_update(\n &mut self,\n update: TxUpdate<A>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply an update directly.

    \n

    update is a [tx_graph::TxUpdate<A>] and the resultant changes is returned as [ChangeSet].

    \n

    pub fn apply_update_at(\n &mut self,\n update: TxUpdate<A>,\n seen_at: Option<u64>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply the given update with an optional seen_at timestamp.

    \n

    seen_at represents when the update is seen (in unix seconds). It is used to determine the\nlast_seens for all transactions in the update which have no corresponding anchor(s). The\nlast_seen value is used internally to determine precedence of conflicting unconfirmed\ntransactions (where the transaction with the lower last_seen value is omitted from the\ncanonical history).

    \n

    Not setting a seen_at value means unconfirmed transactions introduced by this update will\nnot be part of the canonical history of transactions.

    \n

    Use apply_update to have the seen_at value automatically\nset to the current time.

    \n

    pub fn insert_txout(\n &mut self,\n outpoint: OutPoint,\n txout: TxOut\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a floating txout of given outpoint.

    \n

    pub fn insert_tx<T>(&mut self, tx: T) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Insert and index a transaction into the graph.

    \n

    pub fn insert_anchor(\n &mut self,\n txid: Txid,\n anchor: A\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert an anchor for a given transaction.

    \n

    pub fn insert_seen_at(\n &mut self,\n txid: Txid,\n seen_at: u64\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a unix timestamp of when a transaction is seen in the mempool.

    \n

    This is used for transaction conflict resolution in [TxGraph] where the transaction with\nthe later last-seen is prioritized.

    \n

    pub fn batch_insert_relevant<T>(\n &mut self,\n txs: impl IntoIterator<Item = (T, impl IntoIterator<Item = A>)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Batch insert transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the [Indexer::is_tx_relevant] implementation of I. Irrelevant\ntransactions in txs will be ignored. txs do not need to be in topological order.

    \n

    pub fn batch_insert_relevant_unconfirmed<T>(\n &mut self,\n unconfirmed_txs: impl IntoIterator<Item = (T, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Batch insert unconfirmed transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the internal [Indexer::is_tx_relevant] implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in [TxGraph] (refer to [TxGraph::insert_seen_at] for details).

    \n

    pub fn batch_insert_unconfirmed<T>(\n &mut self,\n txs: impl IntoIterator<Item = (T, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>
    where\n T: Into<Arc<Transaction>>,

    Batch insert unconfirmed transactions.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in [TxGraph] (refer to [TxGraph::insert_seen_at] for details).

    \n

    To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

    \n
    ",0,"example_cli::KeychainTxGraph"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/tx_graph/struct.CanonicalTx.js b/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/tx_graph/struct.CanonicalTx.js index 5d2242f6b7..81c6733b76 100644 --- a/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/tx_graph/struct.CanonicalTx.js +++ b/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/tx_graph/struct.CanonicalTx.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    source§

    impl<'a, T, A> Clone for CanonicalTx<'a, T, A>
    where\n T: Clone,\n A: Clone,

    source§

    fn clone(&self) -> CanonicalTx<'a, T, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::wallet::WalletTx"],["
    source§

    impl<'a, T, A> Debug for CanonicalTx<'a, T, A>
    where\n T: Debug,\n A: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::WalletTx"],["
    source§

    impl<'a, T, A> Ord for CanonicalTx<'a, T, A>
    where\n T: Ord,\n A: Ord,

    source§

    fn cmp(&self, other: &CanonicalTx<'a, T, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::wallet::WalletTx"],["
    source§

    impl<'a, T, A> PartialEq for CanonicalTx<'a, T, A>
    where\n T: PartialEq,\n A: PartialEq,

    source§

    fn eq(&self, other: &CanonicalTx<'a, T, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::wallet::WalletTx"],["
    source§

    impl<'a, T, A> PartialOrd for CanonicalTx<'a, T, A>
    where\n T: PartialOrd,\n A: PartialOrd,

    source§

    fn partial_cmp(&self, other: &CanonicalTx<'a, T, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::wallet::WalletTx"],["
    source§

    impl<'a, T, A> Eq for CanonicalTx<'a, T, A>
    where\n T: Eq,\n A: Eq,

    ","Eq","bdk_wallet::wallet::WalletTx"],["
    source§

    impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>

    ","StructuralPartialEq","bdk_wallet::wallet::WalletTx"]] +"bdk_wallet":[["
    §

    impl<'a, T, A> Clone for CanonicalTx<'a, T, A>
    where\n T: Clone,\n A: Clone,

    §

    fn clone(&self) -> CanonicalTx<'a, T, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::wallet::WalletTx"],["
    §

    impl<'a, T, A> Debug for CanonicalTx<'a, T, A>
    where\n T: Debug,\n A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::WalletTx"],["
    §

    impl<'a, T, A> Ord for CanonicalTx<'a, T, A>
    where\n T: Ord,\n A: Ord,

    §

    fn cmp(&self, other: &CanonicalTx<'a, T, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::wallet::WalletTx"],["
    §

    impl<'a, T, A> PartialEq for CanonicalTx<'a, T, A>
    where\n T: PartialEq,\n A: PartialEq,

    §

    fn eq(&self, other: &CanonicalTx<'a, T, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::wallet::WalletTx"],["
    §

    impl<'a, T, A> PartialOrd for CanonicalTx<'a, T, A>
    where\n T: PartialOrd,\n A: PartialOrd,

    §

    fn partial_cmp(&self, other: &CanonicalTx<'a, T, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::wallet::WalletTx"],["
    §

    impl<'a, T, A> Eq for CanonicalTx<'a, T, A>
    where\n T: Eq,\n A: Eq,

    ","Eq","bdk_wallet::wallet::WalletTx"],["
    §

    impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>

    ","StructuralPartialEq","bdk_wallet::wallet::WalletTx"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js b/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js index 12a23be779..bb5b4503e5 100644 --- a/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js +++ b/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    §

    impl<Pk> Clone for Descriptor<Pk>
    where\n Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Debug for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n
    §Examples
    \n
    use miniscript::descriptor::{Descriptor, DescriptorPublicKey};\nuse miniscript::bitcoin::secp256k1;\nuse std::str::FromStr;\n\n// test from bip 86\nlet secp = secp256k1::Secp256k1::verification_only();\nlet descriptor = Descriptor::<DescriptorPublicKey>::from_str(\"tr(xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\")\n    .expect(\"Valid ranged descriptor\");\nlet result = descriptor.at_derivation_index(0).unwrap().derived_descriptor(&secp).expect(\"Non-hardened derivation\");\nassert_eq!(result.to_string(), \"tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym\");
    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn plan<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a non-malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n

    pub fn plan_mall<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DescriptorPublicKey>

    pub fn is_deriveable(&self) -> bool

    👎Deprecated: use has_wildcards instead

    Whether or not the descriptor has any wildcards

    \n

    pub fn has_wildcard(&self) -> bool

    Whether or not the descriptor has any wildcards i.e. /*.

    \n

    pub fn at_derivation_index(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    Replaces all wildcards (i.e. /*) in the descriptor with a particular derivation index,\nturning it into a definite descriptor.

    \n
    §Errors
    \n
      \n
    • If index ≥ 2^31
    • \n
    \n

    pub fn derive(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    👎Deprecated: use at_derivation_index instead

    Deprecated name for Self::at_derivation_index.

    \n

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>,\n index: u32\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n

    This is a shorthand for:

    \n\n
        .expect(\"Valid ranged descriptor\");\nlet derived_descriptor = descriptor.at_derivation_index(index).unwrap().derived_descriptor(&secp).unwrap();
    \n

    and is only here really here for backwards compatibility.\nSee at_derivation_index and [derived_descriptor] for more documentation.

    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n

    pub fn parse_descriptor<C>(\n secp: &Secp256k1<C>,\n s: &str\n) -> Result<(Descriptor<DescriptorPublicKey>, BTreeMap<DescriptorPublicKey, DescriptorSecretKey>), Error>
    where\n C: Signing,

    Parse a descriptor that may contain secret keys

    \n

    Internally turns every secret key found into the corresponding public key and then returns a\na descriptor that only contains public keys and a map to lookup the secret key given a public key.

    \n

    pub fn to_string_with_secret(\n &self,\n key_map: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>\n) -> String

    Serialize a descriptor to string with its secret keys

    \n

    pub fn find_derivation_index_for_spk<C>(\n &self,\n secp: &Secp256k1<C>,\n script_pubkey: &Script,\n range: Range<u32>\n) -> Result<Option<(u32, Descriptor<PublicKey>)>, ConversionError>
    where\n C: Verification,

    Utility method for deriving the descriptor at each index in a range to find one matching\nscript_pubkey.

    \n

    If it finds a match then it returns the index it was derived at and the concrete\ndescriptor at that index. If the descriptor is non-derivable then it will simply check the\nscript pubkey against the descriptor and return it if it matches (in this case the index\nreturned will be meaningless).

    \n

    pub fn is_multipath(&self) -> bool

    Whether this descriptor contains a key that has multiple derivation paths.

    \n

    pub fn into_single_descriptors(\n self\n) -> Result<Vec<Descriptor<DescriptorPublicKey>>, Error>

    Get as many descriptors as different paths in this descriptor.

    \n

    For multipath descriptors it will return as many descriptors as there is\n“parallel” paths. For regular descriptors it will just return itself.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey + ToPublicKey,

    pub fn address(&self, network: Network) -> Result<Address, Error>

    Computes the Bitcoin address of the descriptor, if one exists

    \n

    Some descriptors like pk() don’t have an address.

    \n
    §Errors
    \n

    For raw/bare descriptors that don’t have an address.

    \n

    pub fn script_pubkey(&self) -> ScriptBuf

    Computes the scriptpubkey of the descriptor.

    \n

    pub fn unsigned_script_sig(&self) -> ScriptBuf

    Computes the scriptSig that will be in place for an unsigned input\nspending an output with this descriptor. For pre-segwit descriptors,\nwhich use the scriptSig for signatures, this returns the empty script.

    \n

    This is used in Segwit transactions to produce an unsigned transaction\nwhose txid will not change during signing (since only the witness data\nwill change).

    \n

    pub fn explicit_script(&self) -> Result<ScriptBuf, Error>

    Computes the the underlying script before any hashing is done. For\nBare, Pkh and Wpkh this is the scriptPubkey; for ShWpkh and Sh\nthis is the redeemScript; for the others it is the witness script.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn script_code(&self) -> Result<ScriptBuf, Error>

    Computes the scriptCode of a transaction output.

    \n

    The scriptCode is the Script of the previous transaction output being\nserialized in the sighash when evaluating a CHECKSIG & co. OP code.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn get_satisfaction<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn get_satisfaction_mall<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns a possilbly mallable satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn satisfy<S>(&self, txin: &mut TxIn, satisfier: S) -> Result<(), Error>
    where\n S: Satisfier<Pk>,

    Attempts to produce a non-malleable satisfying witness and scriptSig to spend an\noutput controlled by the given descriptor; add the data to a given\nTxIn output.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    pub fn new_pk(pk: Pk) -> Descriptor<Pk>

    Create a new pk descriptor

    \n

    pub fn new_pkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new PkH descriptor

    \n

    pub fn new_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new Wpkh descriptor\nWill return Err if uncompressed key is used

    \n

    pub fn new_sh_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wpkh from Pk.\nErrors when uncompressed keys are supplied

    \n

    pub fn new_sh(ms: Miniscript<Pk, Legacy>) -> Result<Descriptor<Pk>, Error>

    Create a new sh for a given redeem script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new wsh descriptor from witness script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_sh_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh descriptor with witness script\nErrors when miniscript exceeds resource limits under wsh context\nor does not type check at the top level

    \n

    pub fn new_bare(ms: Miniscript<Pk, BareCtx>) -> Result<Descriptor<Pk>, Error>

    Create a new bare descriptor from witness script\nErrors when miniscript exceeds resource limits under bare context\nor does not type check at the top level

    \n

    pub fn new_sh_with_wpkh(wpkh: Wpkh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wpkh descriptor

    \n

    pub fn new_sh_with_wsh(wsh: Wsh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wsh descriptor

    \n

    pub fn new_sh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh sortedmulti descriptor with threshold k\nand Vec of pks.\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_sh_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh sortedmulti descriptor from threshold\nk and Vec of pks\nErrors when miniscript exceeds resource limits under segwit context

    \n

    pub fn new_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new wsh sorted multi descriptor\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_tr(\n key: Pk,\n script: Option<TapTree<Pk>>\n) -> Result<Descriptor<Pk>, Error>

    Create new tr descriptor\nErrors when miniscript exceeds resource limits under Tap context

    \n

    pub fn desc_type(&self) -> DescriptorType

    Get the [DescriptorType] of Descriptor

    \n

    pub fn sanity_check(&self) -> Result<(), Error>

    Checks whether the descriptor is safe.

    \n

    Checks whether all the spend paths in the descriptor are possible on the\nbitcoin network under the current standardness and consensus rules. Also\nchecks whether the descriptor requires signatures on all spend paths and\nwhether the script is malleable.

    \n

    In general, all the guarantees of miniscript hold only for safe scripts.\nThe signer may not be able to find satisfactions even if one exists.

    \n

    pub fn max_weight_to_satisfy(&self) -> Result<Weight, Error>

    Computes an upper bound on the difference between a non-satisfied\nTxIn’s segwit_weight and a satisfied TxIn’s segwit_weight

    \n

    Since this method uses segwit_weight instead of legacy_weight,\nif you want to include only legacy inputs in your transaction,\nyou should remove 1WU from each input’s max_weight_to_satisfy\nfor a more accurate estimate.

    \n

    In other words, for segwit inputs or legacy inputs included in\nsegwit transactions, the following will hold for each input if\nthat input was satisfied with the largest possible witness:

    \n\n
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].segwit_weight() - TxIn::default().segwit_weight()\n    );\n}
    \n

    Instead, for legacy transactions, the following will hold for each input\nif that input was satisfied with the largest possible witness:

    \n\n
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].legacy_weight() - TxIn::default().legacy_weight()\n    );\n}
    \n

    Assumes all ECDSA signatures are 73 bytes, including push opcode and\nsighash suffix.\nAssumes all Schnorr signatures are 66 bytes, including push opcode and\nsighash suffix.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n

    pub fn max_satisfaction_weight(&self) -> Result<usize, Error>

    👎Deprecated since 10.0.0: Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476.

    Computes an upper bound on the weight of a satisfying witness to the\ntransaction.

    \n

    Assumes all ec-signatures are 73 bytes, including push opcode and\nsighash suffix. Includes the weight of the VarInts encoding the\nscriptSig and witness stack length.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    source§

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable.\nPanics if the descriptor wildcard is hardened.
    source§

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the\ndescriptor at index 0.
    ","DescriptorExt","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<Descriptor<Pk>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Display for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Display","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl ExtractPolicy for Descriptor<DescriptorPublicKey>

    source§

    fn extract_policy(\n &self,\n signers: &SignersContainer,\n build_sat: BuildSatisfaction<'_>,\n secp: &Secp256k1<All>\n) -> Result<Option<Policy>, Error>

    Extract the spending policy
    ","ExtractPolicy","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> ForEachKey<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn for_each_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for every key
    §

    fn for_any_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,\n Pk: 'a,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for any key
    ","ForEachKey","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    ","FromStr","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    \n
    ","FromTree","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Hash for Descriptor<Pk>
    where\n Pk: Hash + MiniscriptKey,

    §

    fn hash<__H>(&self, state: &mut __H)
    where\n __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Liftable<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn lift(&self) -> Result<Policy<Pk>, Error>

    Converts this object into an abstract policy.
    ","Liftable","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Ord for Descriptor<Pk>
    where\n Pk: Ord + MiniscriptKey,

    §

    fn cmp(&self, other: &Descriptor<Pk>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialEq for Descriptor<Pk>
    where\n Pk: PartialEq + MiniscriptKey,

    §

    fn eq(&self, other: &Descriptor<Pk>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialOrd for Descriptor<Pk>
    where\n Pk: PartialOrd + MiniscriptKey,

    §

    fn partial_cmp(&self, other: &Descriptor<Pk>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<'de, Pk> Serialize for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<P, Q> TranslatePk<P, Q> for Descriptor<P>
    where\n P: MiniscriptKey,\n Q: MiniscriptKey,

    §

    fn translate_pk<T, E>(\n &self,\n t: &mut T\n) -> Result<<Descriptor<P> as TranslatePk<P, Q>>::Output, TranslateErr<E>>
    where\n T: Translator<P, Q, E>,

    Converts a descriptor using abstract keys to one using specific keys.

    \n
    §

    type Output = Descriptor<Q>

    The associated output type. This must be Self<Q>.
    ","TranslatePk","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Eq for Descriptor<Pk>
    where\n Pk: Eq + MiniscriptKey,

    ","Eq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> StructuralPartialEq for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    ","StructuralPartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"]] +"bdk_wallet":[["
    §

    impl<Pk> Clone for Descriptor<Pk>
    where\n Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Debug for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n
    §Examples
    \n
    use miniscript::descriptor::{Descriptor, DescriptorPublicKey};\nuse miniscript::bitcoin::secp256k1;\nuse std::str::FromStr;\n\n// test from bip 86\nlet secp = secp256k1::Secp256k1::verification_only();\nlet descriptor = Descriptor::<DescriptorPublicKey>::from_str(\"tr(xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\")\n    .expect(\"Valid ranged descriptor\");\nlet result = descriptor.at_derivation_index(0).unwrap().derived_descriptor(&secp).expect(\"Non-hardened derivation\");\nassert_eq!(result.to_string(), \"tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym\");
    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn plan<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a non-malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n

    pub fn plan_mall<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DescriptorPublicKey>

    pub fn is_deriveable(&self) -> bool

    👎Deprecated: use has_wildcards instead

    Whether or not the descriptor has any wildcards

    \n

    pub fn has_wildcard(&self) -> bool

    Whether or not the descriptor has any wildcards i.e. /*.

    \n

    pub fn at_derivation_index(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    Replaces all wildcards (i.e. /*) in the descriptor with a particular derivation index,\nturning it into a definite descriptor.

    \n
    §Errors
    \n
      \n
    • If index ≥ 2^31
    • \n
    \n

    pub fn derive(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    👎Deprecated: use at_derivation_index instead

    Deprecated name for Self::at_derivation_index.

    \n

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>,\n index: u32\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n

    This is a shorthand for:

    \n\n
        .expect(\"Valid ranged descriptor\");\nlet derived_descriptor = descriptor.at_derivation_index(index).unwrap().derived_descriptor(&secp).unwrap();
    \n

    and is only here really here for backwards compatibility.\nSee at_derivation_index and [derived_descriptor] for more documentation.

    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n

    pub fn parse_descriptor<C>(\n secp: &Secp256k1<C>,\n s: &str\n) -> Result<(Descriptor<DescriptorPublicKey>, BTreeMap<DescriptorPublicKey, DescriptorSecretKey>), Error>
    where\n C: Signing,

    Parse a descriptor that may contain secret keys

    \n

    Internally turns every secret key found into the corresponding public key and then returns a\na descriptor that only contains public keys and a map to lookup the secret key given a public key.

    \n

    pub fn to_string_with_secret(\n &self,\n key_map: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>\n) -> String

    Serialize a descriptor to string with its secret keys

    \n

    pub fn find_derivation_index_for_spk<C>(\n &self,\n secp: &Secp256k1<C>,\n script_pubkey: &Script,\n range: Range<u32>\n) -> Result<Option<(u32, Descriptor<PublicKey>)>, ConversionError>
    where\n C: Verification,

    Utility method for deriving the descriptor at each index in a range to find one matching\nscript_pubkey.

    \n

    If it finds a match then it returns the index it was derived at and the concrete\ndescriptor at that index. If the descriptor is non-derivable then it will simply check the\nscript pubkey against the descriptor and return it if it matches (in this case the index\nreturned will be meaningless).

    \n

    pub fn is_multipath(&self) -> bool

    Whether this descriptor contains a key that has multiple derivation paths.

    \n

    pub fn into_single_descriptors(\n self\n) -> Result<Vec<Descriptor<DescriptorPublicKey>>, Error>

    Get as many descriptors as different paths in this descriptor.

    \n

    For multipath descriptors it will return as many descriptors as there is\n“parallel” paths. For regular descriptors it will just return itself.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey + ToPublicKey,

    pub fn address(&self, network: Network) -> Result<Address, Error>

    Computes the Bitcoin address of the descriptor, if one exists

    \n

    Some descriptors like pk() don’t have an address.

    \n
    §Errors
    \n

    For raw/bare descriptors that don’t have an address.

    \n

    pub fn script_pubkey(&self) -> ScriptBuf

    Computes the scriptpubkey of the descriptor.

    \n

    pub fn unsigned_script_sig(&self) -> ScriptBuf

    Computes the scriptSig that will be in place for an unsigned input\nspending an output with this descriptor. For pre-segwit descriptors,\nwhich use the scriptSig for signatures, this returns the empty script.

    \n

    This is used in Segwit transactions to produce an unsigned transaction\nwhose txid will not change during signing (since only the witness data\nwill change).

    \n

    pub fn explicit_script(&self) -> Result<ScriptBuf, Error>

    Computes the the underlying script before any hashing is done. For\nBare, Pkh and Wpkh this is the scriptPubkey; for ShWpkh and Sh\nthis is the redeemScript; for the others it is the witness script.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn script_code(&self) -> Result<ScriptBuf, Error>

    Computes the scriptCode of a transaction output.

    \n

    The scriptCode is the Script of the previous transaction output being\nserialized in the sighash when evaluating a CHECKSIG & co. OP code.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn get_satisfaction<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn get_satisfaction_mall<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns a possilbly mallable satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn satisfy<S>(&self, txin: &mut TxIn, satisfier: S) -> Result<(), Error>
    where\n S: Satisfier<Pk>,

    Attempts to produce a non-malleable satisfying witness and scriptSig to spend an\noutput controlled by the given descriptor; add the data to a given\nTxIn output.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    pub fn new_pk(pk: Pk) -> Descriptor<Pk>

    Create a new pk descriptor

    \n

    pub fn new_pkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new PkH descriptor

    \n

    pub fn new_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new Wpkh descriptor\nWill return Err if uncompressed key is used

    \n

    pub fn new_sh_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wpkh from Pk.\nErrors when uncompressed keys are supplied

    \n

    pub fn new_sh(ms: Miniscript<Pk, Legacy>) -> Result<Descriptor<Pk>, Error>

    Create a new sh for a given redeem script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new wsh descriptor from witness script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_sh_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh descriptor with witness script\nErrors when miniscript exceeds resource limits under wsh context\nor does not type check at the top level

    \n

    pub fn new_bare(ms: Miniscript<Pk, BareCtx>) -> Result<Descriptor<Pk>, Error>

    Create a new bare descriptor from witness script\nErrors when miniscript exceeds resource limits under bare context\nor does not type check at the top level

    \n

    pub fn new_sh_with_wpkh(wpkh: Wpkh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wpkh descriptor

    \n

    pub fn new_sh_with_wsh(wsh: Wsh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wsh descriptor

    \n

    pub fn new_sh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh sortedmulti descriptor with threshold k\nand Vec of pks.\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_sh_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh sortedmulti descriptor from threshold\nk and Vec of pks\nErrors when miniscript exceeds resource limits under segwit context

    \n

    pub fn new_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new wsh sorted multi descriptor\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_tr(\n key: Pk,\n script: Option<TapTree<Pk>>\n) -> Result<Descriptor<Pk>, Error>

    Create new tr descriptor\nErrors when miniscript exceeds resource limits under Tap context

    \n

    pub fn desc_type(&self) -> DescriptorType

    Get the [DescriptorType] of Descriptor

    \n

    pub fn sanity_check(&self) -> Result<(), Error>

    Checks whether the descriptor is safe.

    \n

    Checks whether all the spend paths in the descriptor are possible on the\nbitcoin network under the current standardness and consensus rules. Also\nchecks whether the descriptor requires signatures on all spend paths and\nwhether the script is malleable.

    \n

    In general, all the guarantees of miniscript hold only for safe scripts.\nThe signer may not be able to find satisfactions even if one exists.

    \n

    pub fn max_weight_to_satisfy(&self) -> Result<Weight, Error>

    Computes an upper bound on the difference between a non-satisfied\nTxIn’s segwit_weight and a satisfied TxIn’s segwit_weight

    \n

    Since this method uses segwit_weight instead of legacy_weight,\nif you want to include only legacy inputs in your transaction,\nyou should remove 1WU from each input’s max_weight_to_satisfy\nfor a more accurate estimate.

    \n

    In other words, for segwit inputs or legacy inputs included in\nsegwit transactions, the following will hold for each input if\nthat input was satisfied with the largest possible witness:

    \n\n
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].segwit_weight() - TxIn::default().segwit_weight()\n    );\n}
    \n

    Instead, for legacy transactions, the following will hold for each input\nif that input was satisfied with the largest possible witness:

    \n\n
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].legacy_weight() - TxIn::default().legacy_weight()\n    );\n}
    \n

    Assumes all ECDSA signatures are 73 bytes, including push opcode and\nsighash suffix.\nAssumes all Schnorr signatures are 66 bytes, including push opcode and\nsighash suffix.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n

    pub fn max_satisfaction_weight(&self) -> Result<usize, Error>

    👎Deprecated since 10.0.0: Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476.

    Computes an upper bound on the weight of a satisfying witness to the\ntransaction.

    \n

    Assumes all ec-signatures are 73 bytes, including push opcode and\nsighash suffix. Includes the weight of the VarInts encoding the\nscriptSig and witness stack length.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    §

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable.\nPanics if the descriptor wildcard is hardened.
    §

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor ID, calculated as the sha256 hash of the spk derived from the\ndescriptor at index 0.
    ","DescriptorExt","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<Descriptor<Pk>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Display for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Display","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl ExtractPolicy for Descriptor<DescriptorPublicKey>

    source§

    fn extract_policy(\n &self,\n signers: &SignersContainer,\n build_sat: BuildSatisfaction<'_>,\n secp: &Secp256k1<All>\n) -> Result<Option<Policy>, Error>

    Extract the spending policy
    ","ExtractPolicy","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> ForEachKey<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn for_each_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for every key
    §

    fn for_any_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,\n Pk: 'a,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for any key
    ","ForEachKey","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    ","FromStr","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    \n
    ","FromTree","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Hash for Descriptor<Pk>
    where\n Pk: Hash + MiniscriptKey,

    §

    fn hash<__H>(&self, state: &mut __H)
    where\n __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Liftable<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn lift(&self) -> Result<Policy<Pk>, Error>

    Converts this object into an abstract policy.
    ","Liftable","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Ord for Descriptor<Pk>
    where\n Pk: Ord + MiniscriptKey,

    §

    fn cmp(&self, other: &Descriptor<Pk>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialEq for Descriptor<Pk>
    where\n Pk: PartialEq + MiniscriptKey,

    §

    fn eq(&self, other: &Descriptor<Pk>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialOrd for Descriptor<Pk>
    where\n Pk: PartialOrd + MiniscriptKey,

    §

    fn partial_cmp(&self, other: &Descriptor<Pk>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<'de, Pk> Serialize for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<P, Q> TranslatePk<P, Q> for Descriptor<P>
    where\n P: MiniscriptKey,\n Q: MiniscriptKey,

    §

    fn translate_pk<T, E>(\n &self,\n t: &mut T\n) -> Result<<Descriptor<P> as TranslatePk<P, Q>>::Output, TranslateErr<E>>
    where\n T: Translator<P, Q, E>,

    Converts a descriptor using abstract keys to one using specific keys.

    \n
    §

    type Output = Descriptor<Q>

    The associated output type. This must be Self<Q>.
    ","TranslatePk","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Eq for Descriptor<Pk>
    where\n Pk: Eq + MiniscriptKey,

    ","Eq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> StructuralPartialEq for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    ","StructuralPartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js b/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js index 45d5507808..f0ee7d6a6d 100644 --- a/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js +++ b/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js @@ -1,5 +1,5 @@ (function() {var type_impls = { -"bdk_chain":[["
    §

    impl<T0, T1> Decodable for (T0, T1)
    where\n T0: Decodable,\n T1: Decodable,

    §

    fn consensus_decode<R>(r: &mut R) -> Result<(T0, T1), Error>
    where\n R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where\n R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    ","Decodable","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    source§

    impl<'de, T0, T1> Deserialize<'de> for (T0, T1)
    where\n T0: Deserialize<'de>,\n T1: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<(T0, T1), <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    §

    impl<T0, T1> Encodable for (T0, T1)
    where\n T0: Encodable,\n T1: Encodable,

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where\n W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    ","Encodable","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    1.56.0 · source§

    impl<A, B, ExtendA, ExtendB> Extend<(A, B)> for (ExtendA, ExtendB)
    where\n ExtendA: Extend<A>,\n ExtendB: Extend<B>,

    source§

    fn extend<T>(&mut self, into_iter: T)
    where\n T: IntoIterator<Item = (A, B)>,

    Allows to extend a tuple of collections that also implement Extend.

    \n

    See also: Iterator::unzip

    \n
    §Examples
    \n
    let mut tuple = (vec![0], vec![1]);\ntuple.extend([(2, 3), (4, 5), (6, 7)]);\nassert_eq!(tuple.0, [0, 2, 4, 6]);\nassert_eq!(tuple.1, [1, 3, 5, 7]);\n\n// also allows for arbitrarily nested tuples as elements\nlet mut nested_tuple = (vec![1], (vec![2], vec![3]));\nnested_tuple.extend([(4, (5, 6)), (7, (8, 9))]);\n\nlet (a, (b, c)) = nested_tuple;\nassert_eq!(a, [1, 4, 7]);\nassert_eq!(b, [2, 5, 8]);\nassert_eq!(c, [3, 6, 9]);
    \n
    source§

    fn extend_one(&mut self, item: (A, B))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(A, B)>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    1.71.0 · source§

    impl<T> From<[T; 2]> for (T, T)

    source§

    fn from(array: [T; 2]) -> (T, T)

    Converts to this type from the input type.
    ","From<[T; 2]>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> (u32, BlockHash)

    Converts to this type from the input type.
    ","From","bdk_chain::Indexed"],["
    1.79.0 · source§

    impl<A, B, AE, BE> FromIterator<(AE, BE)> for (A, B)
    where\n A: Default + Extend<AE>,\n B: Default + Extend<BE>,

    This implementation turns an iterator of tuples into a tuple of types which implement\nDefault and Extend.

    \n

    This is similar to Iterator::unzip, but is also composable with other FromIterator\nimplementations:

    \n\n
    let string = \"1,2,123,4\";\n\nlet (numbers, lengths): (Vec<_>, Vec<_>) = string\n    .split(',')\n    .map(|s| s.parse().map(|n: u32| (n, s.len())))\n    .collect::<Result<_, _>>()?;\n\nassert_eq!(numbers, [1, 2, 123, 4]);\nassert_eq!(lengths, [1, 1, 3, 1]);
    \n
    source§

    fn from_iter<I>(iter: I) -> (A, B)
    where\n I: IntoIterator<Item = (AE, BE)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(AE, BE)>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    source§

    impl<T0, T1> Merge for (T0, T1)
    where\n T0: Merge,\n T1: Merge,

    source§

    fn merge(&mut self, _other: (T0, T1))

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    source§

    impl<T0, T1> Serialize for (T0, T1)
    where\n T0: Serialize,\n T1: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    §

    impl<'a, O, P> TryFrom<&'a Row<'a>> for (O, P)
    where\n O: FromSql,\n P: FromSql,

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from(row: &'a Row<'a>) -> Result<(O, P), Error>

    Performs the conversion.
    ","TryFrom<&'a Row<'a>>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"]], +"bdk_chain":[["
    §

    impl<T0, T1> Decodable for (T0, T1)
    where\n T0: Decodable,\n T1: Decodable,

    §

    fn consensus_decode<R>(r: &mut R) -> Result<(T0, T1), Error>
    where\n R: BufRead + ?Sized,

    Decode an object with a well-defined format. Read more
    §

    fn consensus_decode_from_finite_reader<R>(reader: &mut R) -> Result<Self, Error>
    where\n R: BufRead + ?Sized,

    Decode Self from a size-limited reader. Read more
    ","Decodable","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    source§

    impl<'de, T0, T1> Deserialize<'de> for (T0, T1)
    where\n T0: Deserialize<'de>,\n T1: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<(T0, T1), <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    §

    impl<T0, T1> Encodable for (T0, T1)
    where\n T0: Encodable,\n T1: Encodable,

    §

    fn consensus_encode<W>(&self, w: &mut W) -> Result<usize, Error>
    where\n W: Write + ?Sized,

    Encodes an object with a well-defined format. Read more
    ","Encodable","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    1.56.0 · source§

    impl<A, B, ExtendA, ExtendB> Extend<(A, B)> for (ExtendA, ExtendB)
    where\n ExtendA: Extend<A>,\n ExtendB: Extend<B>,

    source§

    fn extend<T>(&mut self, into_iter: T)
    where\n T: IntoIterator<Item = (A, B)>,

    Allows to extend a tuple of collections that also implement Extend.

    \n

    See also: Iterator::unzip

    \n
    §Examples
    \n
    let mut tuple = (vec![0], vec![1]);\ntuple.extend([(2, 3), (4, 5), (6, 7)]);\nassert_eq!(tuple.0, [0, 2, 4, 6]);\nassert_eq!(tuple.1, [1, 3, 5, 7]);\n\n// also allows for arbitrarily nested tuples as elements\nlet mut nested_tuple = (vec![1], (vec![2], vec![3]));\nnested_tuple.extend([(4, (5, 6)), (7, (8, 9))]);\n\nlet (a, (b, c)) = nested_tuple;\nassert_eq!(a, [1, 4, 7]);\nassert_eq!(b, [2, 5, 8]);\nassert_eq!(c, [3, 6, 9]);
    \n
    source§

    fn extend_one(&mut self, item: (A, B))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(A, B)>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    1.71.0 · source§

    impl<T> From<[T; 2]> for (T, T)

    source§

    fn from(array: [T; 2]) -> (T, T)

    Converts to this type from the input type.
    ","From<[T; 2]>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    §

    impl From<BlockId> for (u32, BlockHash)

    §

    fn from(block_id: BlockId) -> (u32, BlockHash)

    Converts to this type from the input type.
    ","From","bdk_chain::Indexed"],["
    1.79.0 · source§

    impl<A, B, AE, BE> FromIterator<(AE, BE)> for (A, B)
    where\n A: Default + Extend<AE>,\n B: Default + Extend<BE>,

    This implementation turns an iterator of tuples into a tuple of types which implement\nDefault and Extend.

    \n

    This is similar to Iterator::unzip, but is also composable with other FromIterator\nimplementations:

    \n\n
    let string = \"1,2,123,4\";\n\nlet (numbers, lengths): (Vec<_>, Vec<_>) = string\n    .split(',')\n    .map(|s| s.parse().map(|n: u32| (n, s.len())))\n    .collect::<Result<_, _>>()?;\n\nassert_eq!(numbers, [1, 2, 123, 4]);\nassert_eq!(lengths, [1, 1, 3, 1]);
    \n
    source§

    fn from_iter<I>(iter: I) -> (A, B)
    where\n I: IntoIterator<Item = (AE, BE)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(AE, BE)>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    §

    impl<T0, T1> Merge for (T0, T1)
    where\n T0: Merge,\n T1: Merge,

    §

    fn merge(&mut self, _other: (T0, T1))

    Merge another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    §

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    source§

    impl<T0, T1> Serialize for (T0, T1)
    where\n T0: Serialize,\n T1: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"],["
    §

    impl<'a, O, P> TryFrom<&'a Row<'a>> for (O, P)
    where\n O: FromSql,\n P: FromSql,

    §

    type Error = Error

    The type returned in the event of a conversion error.
    §

    fn try_from(row: &'a Row<'a>) -> Result<(O, P), Error>

    Performs the conversion.
    ","TryFrom<&'a Row<'a>>","bdk_chain::Indexed","bdk_chain::KeychainIndexed","bdk_chain::bitcoin::bip32::KeySource"]], "bdk_core":[["
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> Self

    Converts to this type from the input type.
    ","From","bdk_core::Indexed"],["
    source§

    impl<T0, T1> Merge for (T0, T1)
    where\n T0: Merge,\n T1: Merge,

    source§

    fn merge(&mut self, _other: Self)

    Merge another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    fn take(&mut self) -> Option<Self>

    Take the value, replacing it with the default value.
    ","Merge","bdk_core::Indexed","bdk_core::KeychainIndexed"]], "bdk_wallet":[], "example_cli":[] diff --git a/examples/index.html b/examples/index.html index 5368a14280..b5d9c26cf1 100644 --- a/examples/index.html +++ b/examples/index.html @@ -29,7 +29,7 @@ - + @@ -53,7 +53,7 @@ Blog
    GitHub - (opens new window)

    # Examples

    Click the links below and learn from community-built example projects.

    # BDK-CLI (opens new window)

    A command line interface to experiment with the bitcoindevkit.

    # DevkitWallet (opens new window)

    A demo app for the bitcoindevkit on Android using bdk-kotlin.

    # Padawan Wallet (opens new window)

    A testnet-only bitcoin wallet full of tutorials on how to use bitcoin wallets.

    # BDKSwiftExampleWallet (opens new window)

    An example iOS app using bdk-swift.

    # Tatooine (opens new window)

    Tatooine is a small bitcoin testnet faucet built with Ktor, a Kotlin asynchronous framework for creating microservices and web applications.

    # SEBA Bank Proof of reserves (opens new window)

    The bdk library aims to be the core building block for Bitcoin wallets of any kind. The bdk-reserves library provides an implementation of proof-of-reserves for bdk.

    # Stackmate (opens new window)

    A multi-purpose Bitcoin Wallet.

    # Spotbit (opens new window)

    Spotbit's purpose is to allow users to access price feeds in a customisable way that preserves privacy and mitigate the reliance on a single source of data.

    - + diff --git a/foundation/about/index.html b/foundation/about/index.html index aa9f8c09a3..fbfaa32fb7 100644 --- a/foundation/about/index.html +++ b/foundation/about/index.html @@ -29,7 +29,7 @@ - + @@ -78,6 +78,6 @@
    - + diff --git a/foundation/grantees/index.html b/foundation/grantees/index.html index 58c347e0d5..b889e5a58a 100644 --- a/foundation/grantees/index.html +++ b/foundation/grantees/index.html @@ -29,7 +29,7 @@ - + @@ -82,6 +82,6 @@
    - + diff --git a/foundation/grants/index.html b/foundation/grants/index.html index 9b06f97bb1..bf47293a60 100644 --- a/foundation/grants/index.html +++ b/foundation/grants/index.html @@ -29,7 +29,7 @@ - + @@ -78,6 +78,6 @@
    - + diff --git a/foundation/index.html b/foundation/index.html index 45723e9359..3750839fdb 100644 --- a/foundation/index.html +++ b/foundation/index.html @@ -29,7 +29,7 @@ - + @@ -74,6 +74,6 @@
    - + diff --git a/foundation/supporters/index.html b/foundation/supporters/index.html index 79e2d64f1a..4f026d9170 100644 --- a/foundation/supporters/index.html +++ b/foundation/supporters/index.html @@ -29,7 +29,7 @@ - + @@ -113,6 +113,6 @@
    - + diff --git a/getting-started/index.html b/getting-started/index.html index 4c4deda4d3..2bedeaad38 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -31,7 +31,7 @@ - + @@ -105,7 +105,7 @@ wallet.get_descriptor_for_keychain(KeychainKind::External).to_string(), wallet.get_descriptor_for_keychain(KeychainKind::Internal).to_string()); } -

    More information about each component used in the code can be found in BDK Documentation (opens new window).

    More information about each component used in the code can be found in BDK Documentation (opens new window).

    Last Updated: 10/14/2024, 7:07:10 PM
    - + diff --git a/index.html b/index.html index 9e00a273ca..b115681ed1 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@ - + @@ -80,6 +80,6 @@
    - + diff --git a/sitemap.xml b/sitemap.xml index d0e867dd8f..b6a3b4c0d3 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://bitcoindevkit.org/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/_2023-q4-update/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/_2024-q2-update/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/_2024-q1-update/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/_2024-q3-rfp-rust-maintainer/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bitcoin-core-rpc-demo/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bdk-cli-basics-multisig-2of3/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bdk-core-pt1/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bdk-cli-basics/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bdk-rn-making-of/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bindings-scope/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/bdk-with-tor/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/compact-filters-demo/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/descriptor-based-paper-wallet/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/descriptors-in-the-wild/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/exploring-bdk-flutter/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/exploring-bdk-rn/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-1/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-2/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-3/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/getting-started-with-rust-hwi/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2020/12/hello-world/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/hidden-power-of-bitcoin/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/release-v0.3.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2020/12/release-v0.2.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/improving-coin-selection-in-bdk/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/02/release-v0.4.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/03/release-v0.5.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/miniscript-vulnerability/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/04/release-v0.6.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/06/release-v0.8.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/07/release-v0.9.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/road-to-bdk-1/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/2021/05/release-v0.7.0/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/spending-policy-demo/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/using-bdk-with-hardware-wallets/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/why-bindings/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/all/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/custodial/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/desktop/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/exchange/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/hardware/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/infrastructure/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/mobile/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/adoption/web/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/concept/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/compiler/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/installation/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/introduction/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/playground/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/regtest/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/case-studies/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/bdk-cli/interface/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/descriptors/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/foundation/about/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/examples/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/foundation/grantees/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/foundation/grants/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/foundation/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/foundation/supporters/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/getting-started/2024-10-02T16:25:37.000Zdailyhttps://bitcoindevkit.org/blog/dailyhttps://bitcoindevkit.org/blog/tags/dailyhttps://bitcoindevkit.org/blog/author/dailyhttps://bitcoindevkit.org/blog/tags/BDK/dailyhttps://bitcoindevkit.org/blog/tags/project/dailyhttps://bitcoindevkit.org/blog/tags/grants/dailyhttps://bitcoindevkit.org/blog/tags/tutorial/dailyhttps://bitcoindevkit.org/blog/tags/Bitcoin%20Core/dailyhttps://bitcoindevkit.org/blog/tags/RPC/dailyhttps://bitcoindevkit.org/blog/tags/Wallet/dailyhttps://bitcoindevkit.org/blog/tags/bdk-cli/dailyhttps://bitcoindevkit.org/blog/tags/multi-sig/dailyhttps://bitcoindevkit.org/blog/tags/architecture/dailyhttps://bitcoindevkit.org/blog/tags/basics/dailyhttps://bitcoindevkit.org/blog/tags/novice/dailyhttps://bitcoindevkit.org/blog/tags/BDK-RN/dailyhttps://bitcoindevkit.org/blog/tags/Development/dailyhttps://bitcoindevkit.org/blog/tags/Architecture/dailyhttps://bitcoindevkit.org/blog/tags/bindings/dailyhttps://bitcoindevkit.org/blog/tags/tor/dailyhttps://bitcoindevkit.org/blog/tags/wallet/dailyhttps://bitcoindevkit.org/blog/tags/blockchain/dailyhttps://bitcoindevkit.org/blog/tags/compact_filters/dailyhttps://bitcoindevkit.org/blog/tags/BIP157/dailyhttps://bitcoindevkit.org/blog/tags/Neutrino/dailyhttps://bitcoindevkit.org/blog/tags/guide/dailyhttps://bitcoindevkit.org/blog/tags/descriptor/dailyhttps://bitcoindevkit.org/blog/tags/paper%20wallets/dailyhttps://bitcoindevkit.org/blog/tags/bitcoin/dailyhttps://bitcoindevkit.org/blog/tags/React%20Native/dailyhttps://bitcoindevkit.org/blog/tags/Flutter/dailyhttps://bitcoindevkit.org/blog/tags/iOS/dailyhttps://bitcoindevkit.org/blog/tags/Android/dailyhttps://bitcoindevkit.org/blog/tags/mobile/dailyhttps://bitcoindevkit.org/blog/tags/bdk-rn/dailyhttps://bitcoindevkit.org/blog/tags/bdk/dailyhttps://bitcoindevkit.org/blog/tags/fee/dailyhttps://bitcoindevkit.org/blog/tags/machine%20learning/dailyhttps://bitcoindevkit.org/blog/tags/taproot/dailyhttps://bitcoindevkit.org/blog/tags/miniscript/dailyhttps://bitcoindevkit.org/blog/tags/Hardware%20Wallets/dailyhttps://bitcoindevkit.org/blog/tags/getting%20started/dailyhttps://bitcoindevkit.org/blog/tags/rust/dailyhttps://bitcoindevkit.org/blog/tags/bitcoin-cli/dailyhttps://bitcoindevkit.org/blog/tags/release/dailyhttps://bitcoindevkit.org/blog/tags/coin%20selection/dailyhttps://bitcoindevkit.org/blog/tags/development/dailyhttps://bitcoindevkit.org/blog/tags/summer%20of%20bitcoin/dailyhttps://bitcoindevkit.org/blog/tags/security/dailyhttps://bitcoindevkit.org/blog/author/Steve%20Myers/dailyhttps://bitcoindevkit.org/blog/author/Daniela%20Brozzoni/dailyhttps://bitcoindevkit.org/blog/author/thunderbiscuit/dailyhttps://bitcoindevkit.org/blog/author/Rajarshi%20Maitra/dailyhttps://bitcoindevkit.org/blog/author/waterst0ne/dailyhttps://bitcoindevkit.org/blog/author/Lloyd%20Fournier/dailyhttps://bitcoindevkit.org/blog/author/Bitcoin%20Zavior/dailyhttps://bitcoindevkit.org/blog/author/rorp/dailyhttps://bitcoindevkit.org/blog/author/Riccardo%20Casatta/dailyhttps://bitcoindevkit.org/blog/author/Gabriele%20Domenichini/dailyhttps://bitcoindevkit.org/blog/author/Alekos%20Filini/dailyhttps://bitcoindevkit.org/blog/author/Wszdexdrf/dailyhttps://bitcoindevkit.org/blog/author/Sandipan%20Dey/dailyhttps://bitcoindevkit.org/blog/author/C%C3%A9sar%20Alvarez%20Vallero/dailyhttps://bitcoindevkit.org/blog/page/2/dailyhttps://bitcoindevkit.org/blog/page/3/dailyhttps://bitcoindevkit.org/blog/page/4/dailyhttps://bitcoindevkit.org/blog/tags/BDK/page/2/dailyhttps://bitcoindevkit.org/blog/author/Alekos%20Filini/page/2/daily \ No newline at end of file +https://bitcoindevkit.org/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/_2023-q4-update/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/_2024-q2-update/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/_2024-q1-update/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/_2024-q3-rfp-rust-maintainer/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bdk-cli-basics/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bitcoin-core-rpc-demo/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bdk-cli-basics-multisig-2of3/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bdk-core-pt1/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bdk-rn-making-of/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bdk-with-tor/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/compact-filters-demo/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/descriptor-based-paper-wallet/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/bindings-scope/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/descriptors-in-the-wild/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/exploring-bdk-flutter/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-2/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-1/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/exploring-bdk-rn/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-3/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/getting-started-with-rust-hwi/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2020/12/hello-world/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/hidden-power-of-bitcoin/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/improving-coin-selection-in-bdk/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/miniscript-vulnerability/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2020/12/release-v0.2.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/01/release-v0.3.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/02/release-v0.4.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/03/release-v0.5.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/04/release-v0.6.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/05/release-v0.7.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/06/release-v0.8.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/2021/07/release-v0.9.0/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/road-to-bdk-1/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/spending-policy-demo/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/all/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/using-bdk-with-hardware-wallets/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/why-bindings/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/custodial/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/desktop/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/exchange/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/hardware/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/infrastructure/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/mobile/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/adoption/web/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/compiler/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/concept/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/installation/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/introduction/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/playground/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/interface/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/case-studies/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/bdk-cli/regtest/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/descriptors/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/examples/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/foundation/about/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/foundation/grantees/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/foundation/grants/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/foundation/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/foundation/supporters/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/getting-started/2024-10-14T19:07:10.000Zdailyhttps://bitcoindevkit.org/blog/dailyhttps://bitcoindevkit.org/blog/tags/dailyhttps://bitcoindevkit.org/blog/author/dailyhttps://bitcoindevkit.org/blog/tags/BDK/dailyhttps://bitcoindevkit.org/blog/tags/project/dailyhttps://bitcoindevkit.org/blog/tags/grants/dailyhttps://bitcoindevkit.org/blog/tags/bdk-cli/dailyhttps://bitcoindevkit.org/blog/tags/basics/dailyhttps://bitcoindevkit.org/blog/tags/novice/dailyhttps://bitcoindevkit.org/blog/tags/tutorial/dailyhttps://bitcoindevkit.org/blog/tags/Bitcoin%20Core/dailyhttps://bitcoindevkit.org/blog/tags/RPC/dailyhttps://bitcoindevkit.org/blog/tags/Wallet/dailyhttps://bitcoindevkit.org/blog/tags/multi-sig/dailyhttps://bitcoindevkit.org/blog/tags/architecture/dailyhttps://bitcoindevkit.org/blog/tags/BDK-RN/dailyhttps://bitcoindevkit.org/blog/tags/Development/dailyhttps://bitcoindevkit.org/blog/tags/Architecture/dailyhttps://bitcoindevkit.org/blog/tags/tor/dailyhttps://bitcoindevkit.org/blog/tags/wallet/dailyhttps://bitcoindevkit.org/blog/tags/blockchain/dailyhttps://bitcoindevkit.org/blog/tags/compact_filters/dailyhttps://bitcoindevkit.org/blog/tags/BIP157/dailyhttps://bitcoindevkit.org/blog/tags/Neutrino/dailyhttps://bitcoindevkit.org/blog/tags/guide/dailyhttps://bitcoindevkit.org/blog/tags/descriptor/dailyhttps://bitcoindevkit.org/blog/tags/paper%20wallets/dailyhttps://bitcoindevkit.org/blog/tags/bindings/dailyhttps://bitcoindevkit.org/blog/tags/bitcoin/dailyhttps://bitcoindevkit.org/blog/tags/React%20Native/dailyhttps://bitcoindevkit.org/blog/tags/Flutter/dailyhttps://bitcoindevkit.org/blog/tags/iOS/dailyhttps://bitcoindevkit.org/blog/tags/Android/dailyhttps://bitcoindevkit.org/blog/tags/mobile/dailyhttps://bitcoindevkit.org/blog/tags/bdk-rn/dailyhttps://bitcoindevkit.org/blog/tags/bdk/dailyhttps://bitcoindevkit.org/blog/tags/fee/dailyhttps://bitcoindevkit.org/blog/tags/machine%20learning/dailyhttps://bitcoindevkit.org/blog/tags/taproot/dailyhttps://bitcoindevkit.org/blog/tags/miniscript/dailyhttps://bitcoindevkit.org/blog/tags/Hardware%20Wallets/dailyhttps://bitcoindevkit.org/blog/tags/getting%20started/dailyhttps://bitcoindevkit.org/blog/tags/rust/dailyhttps://bitcoindevkit.org/blog/tags/bitcoin-cli/dailyhttps://bitcoindevkit.org/blog/tags/coin%20selection/dailyhttps://bitcoindevkit.org/blog/tags/development/dailyhttps://bitcoindevkit.org/blog/tags/summer%20of%20bitcoin/dailyhttps://bitcoindevkit.org/blog/tags/security/dailyhttps://bitcoindevkit.org/blog/tags/release/dailyhttps://bitcoindevkit.org/blog/author/Steve%20Myers/dailyhttps://bitcoindevkit.org/blog/author/Daniela%20Brozzoni/dailyhttps://bitcoindevkit.org/blog/author/thunderbiscuit/dailyhttps://bitcoindevkit.org/blog/author/waterst0ne/dailyhttps://bitcoindevkit.org/blog/author/Rajarshi%20Maitra/dailyhttps://bitcoindevkit.org/blog/author/Lloyd%20Fournier/dailyhttps://bitcoindevkit.org/blog/author/Bitcoin%20Zavior/dailyhttps://bitcoindevkit.org/blog/author/rorp/dailyhttps://bitcoindevkit.org/blog/author/Riccardo%20Casatta/dailyhttps://bitcoindevkit.org/blog/author/Gabriele%20Domenichini/dailyhttps://bitcoindevkit.org/blog/author/Alekos%20Filini/dailyhttps://bitcoindevkit.org/blog/author/Wszdexdrf/dailyhttps://bitcoindevkit.org/blog/author/Sandipan%20Dey/dailyhttps://bitcoindevkit.org/blog/author/C%C3%A9sar%20Alvarez%20Vallero/dailyhttps://bitcoindevkit.org/blog/page/2/dailyhttps://bitcoindevkit.org/blog/page/3/dailyhttps://bitcoindevkit.org/blog/page/4/dailyhttps://bitcoindevkit.org/blog/tags/BDK/page/2/dailyhttps://bitcoindevkit.org/blog/author/Alekos%20Filini/page/2/daily \ No newline at end of file