From 8988a19d0af7855d3ae09681442f24062f4ceec9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 Oct 2023 16:25:16 +0000 Subject: [PATCH] deploy: 73cc64d8786737373f09d8b73ac95a5a44a05716 --- 404.html | 6 +- .../js/{app.c69552aa.js => app.044b738e.js} | 2 +- bdk-cli/compiler/index.html | 6 +- bdk-cli/concept/index.html | 6 +- bdk-cli/index.html | 6 +- bdk-cli/installation/index.html | 6 +- bdk-cli/interface/index.html | 6 +- bdk-cli/introduction/index.html | 6 +- bdk-cli/playground/index.html | 6 +- bdk-cli/regtest/index.html | 6 +- blog/2020/12/hello-world/index.html | 6 +- blog/2020/12/release-v0.2.0/index.html | 6 +- .../index.html | 6 +- .../index.html | 6 +- .../index.html | 6 +- blog/2021/01/release-v0.3.0/index.html | 6 +- blog/2021/02/release-v0.4.0/index.html | 6 +- blog/2021/03/release-v0.5.0/index.html | 6 +- blog/2021/04/release-v0.6.0/index.html | 6 +- blog/2021/05/release-v0.7.0/index.html | 6 +- blog/2021/06/release-v0.8.0/index.html | 6 +- blog/2021/07/release-v0.9.0/index.html | 6 +- .../index.html | 6 +- .../index.html | 6 +- blog/author/Alekos Filini/index.html | 4 +- blog/author/Alekos Filini/page/2/index.html | 4 +- blog/author/Bitcoin Zavior/index.html | 4 +- .../C\303\251sar Alvarez Vallero/index.html" | 4 +- blog/author/Gabriele Domenichini/index.html | 4 +- blog/author/Lloyd Fournier/index.html | 4 +- blog/author/Rajarshi Maitra/index.html | 4 +- blog/author/Riccardo Casatta/index.html | 4 +- blog/author/Sandipan Dey/index.html | 4 +- blog/author/Steve Myers/index.html | 4 +- blog/author/Wszdexdrf/index.html | 4 +- blog/author/danielabrozzoni/index.html | 4 +- blog/author/index.html | 4 +- blog/author/rorp/index.html | 4 +- blog/author/thunderbiscuit/index.html | 4 +- blog/author/waterst0ne/index.html | 4 +- blog/author/waterstone/index.html | 4 +- blog/bdk-core-pt1/index.html | 6 +- blog/bdk-rn-making-of/index.html | 6 +- blog/bindings-scope/index.html | 6 +- blog/getting-started-with-rust-hwi/index.html | 6 +- .../index.html | 6 +- blog/index.html | 4 +- blog/miniscript-vulnerability/index.html | 6 +- blog/page/2/index.html | 4 +- blog/road-to-bdk-1/index.html | 6 +- blog/tags/Android/index.html | 4 +- blog/tags/Architecture/index.html | 4 +- blog/tags/BDK-RN/index.html | 4 +- blog/tags/BDK/index.html | 4 +- blog/tags/BIP157/index.html | 4 +- blog/tags/Bitcoin Core/index.html | 4 +- blog/tags/Development/index.html | 4 +- blog/tags/Flutter/index.html | 4 +- blog/tags/Hardware Wallets/index.html | 4 +- blog/tags/Neutrino/index.html | 4 +- blog/tags/RPC/index.html | 4 +- blog/tags/React Native/index.html | 4 +- blog/tags/Wallet/index.html | 4 +- blog/tags/architecture/index.html | 4 +- blog/tags/basics/index.html | 4 +- blog/tags/bdk-cli/index.html | 4 +- blog/tags/bdk-rn/index.html | 4 +- blog/tags/bdk/index.html | 4 +- blog/tags/bindings/index.html | 4 +- blog/tags/bitcoin-cli/index.html | 4 +- blog/tags/bitcoin/index.html | 4 +- blog/tags/blockchain/index.html | 4 +- blog/tags/coin selection/index.html | 4 +- blog/tags/compact_filters/index.html | 4 +- blog/tags/descriptor/index.html | 4 +- blog/tags/development/index.html | 4 +- blog/tags/fee/index.html | 4 +- blog/tags/getting started/index.html | 4 +- blog/tags/guide/index.html | 4 +- blog/tags/iOS/index.html | 4 +- blog/tags/index.html | 4 +- blog/tags/machine learning/index.html | 4 +- blog/tags/miniscript/index.html | 4 +- blog/tags/mobile/index.html | 4 +- blog/tags/multi-sig/index.html | 4 +- blog/tags/novice/index.html | 4 +- blog/tags/paper wallets/index.html | 4 +- blog/tags/release/index.html | 4 +- blog/tags/rust/index.html | 4 +- blog/tags/security/index.html | 4 +- blog/tags/summer of bitcoin/index.html | 4 +- blog/tags/taproot/index.html | 4 +- blog/tags/tor/index.html | 4 +- blog/tags/tutorial/index.html | 4 +- blog/tags/wallet/index.html | 4 +- case-studies/index.html | 4 +- descriptors/index.html | 6 +- .../bdk/descriptor/enum.Descriptor.html | 4 +- docs-rs/bdk/nightly/latest/bdk/index.html | 2 +- .../nightly/latest/bdk/struct.LocalUtxo.html | 4 +- .../latest/bdk/wallet/struct.Balance.html | 10 +- .../latest/bdk/wallet/struct.ChangeSet.html | 10 +- .../latest/bdk/wallet/struct.Update.html | 12 +- .../latest/bdk/wallet/struct.Wallet.html | 42 +- .../wallet/tx_builder/struct.TxBuilder.html | 2 +- docs-rs/bdk/nightly/latest/bdk_chain/all.html | 2 +- .../latest/bdk_chain/trait.Append.html | 2 +- .../tx_graph/enum.CalculateFeeError.html | 6 +- .../latest/bdk_chain/tx_graph/index.html | 4 +- .../bdk_chain/tx_graph/sidebar-items.js | 2 +- .../tx_graph/struct.CanonicalTx.html | 8 +- .../bdk_chain/tx_graph/struct.ChangeSet.html | 14 +- .../tx_graph/struct.TxAncestors.html | 43 ++ .../tx_graph/struct.TxDescendants.html | 4 +- .../bdk_chain/tx_graph/struct.TxGraph.html | 102 ++-- .../bdk_chain/tx_graph/struct.TxNode.html | 8 +- .../nightly/latest/bdk_electrum/index.html | 8 +- .../bdk_electrum/struct.ElectrumUpdate.html | 4 +- .../bdk_electrum/struct.RelevantTxids.html | 12 +- .../bdk_electrum/trait.ElectrumExt.html | 14 +- .../bdk_esplora/trait.EsploraAsyncExt.html | 20 +- .../latest/bdk_esplora/trait.EsploraExt.html | 20 +- .../nightly/latest/bdk_file_store/index.html | 2 +- .../latest/bdk_file_store/struct.Store.html | 4 +- .../latest/example_cli/fn.create_tx.html | 2 +- .../example_cli/fn.handle_commands.html | 2 +- .../nightly/latest/example_cli/fn.init.html | 2 +- .../latest/example_cli/fn.planned_utxos.html | 2 +- .../example_cli/fn.run_address_cmd.html | 2 +- .../example_cli/fn.run_balance_cmd.html | 2 +- .../latest/example_cli/fn.run_send_cmd.html | 2 +- .../latest/example_cli/fn.run_txo_cmd.html | 2 +- .../latest/example_cli/type.Database.html | 2 +- .../example_cli/type.KeychainChangeSet.html | 2 +- .../example_cli/type.KeychainTxGraph.html | 2 +- .../example_electrum/type.ChangeSet.html | 2 +- .../example_esplora/type.ChangeSet.html | 2 +- docs-rs/bdk/nightly/latest/help.html | 2 +- .../bdk_chain/persist/trait.PersistBackend.js | 2 +- .../bdk_chain/tx_data_traits/trait.Append.js | 2 +- .../implementors/core/convert/trait.AsRef.js | 2 +- .../implementors/core/convert/trait.From.js | 2 +- .../iter/traits/iterator/trait.Iterator.js | 2 +- .../implementors/core/marker/trait.Freeze.js | 2 +- .../implementors/core/marker/trait.Send.js | 2 +- .../implementors/core/marker/trait.Sync.js | 2 +- .../implementors/core/marker/trait.Unpin.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- docs-rs/bdk/nightly/latest/search-index.js | 2 +- docs-rs/bdk/nightly/latest/settings.html | 2 +- .../latest/src/bdk_chain/tx_graph.rs.html | 458 ++++++++++++++++-- examples/index.html | 6 +- getting-started/index.html | 6 +- index.html | 4 +- supporters/index.html | 6 +- tutorials/Bitcoin_Core_RPC_Demo/index.html | 6 +- .../bdk-cli_basics_multisig_2of3/index.html | 6 +- tutorials/bdk_cli_basics/index.html | 6 +- tutorials/bdk_with_tor/index.html | 6 +- tutorials/compact_filters_demo/index.html | 6 +- .../descriptor_based_paper_wallet/index.html | 6 +- tutorials/descriptors_in_the_wild/index.html | 6 +- tutorials/exploring_bdk_flutter/index.html | 6 +- tutorials/exploring_bdk_rn/index.html | 6 +- tutorials/hidden-power-of-bitcoin/index.html | 6 +- tutorials/spending_policy_demo/index.html | 6 +- .../index.html | 6 +- 168 files changed, 938 insertions(+), 481 deletions(-) rename assets/js/{app.c69552aa.js => app.044b738e.js} (98%) create mode 100644 docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html diff --git a/404.html b/404.html index 3d018654ea..55cfdd0465 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + @@ -47,7 +47,7 @@ GitHub (opens new window) GitHub - (opens new window)

404 - Not Found

How did we get here?
+ (opens new window)

404 - Not Found

That's a Four-Oh-Four.
Take me home.
- + diff --git a/assets/js/app.c69552aa.js b/assets/js/app.044b738e.js similarity index 98% rename from assets/js/app.c69552aa.js rename to assets/js/app.044b738e.js index 2a99a263c9..231a1aa5d8 100644 --- a/assets/js/app.c69552aa.js +++ b/assets/js/app.044b738e.js @@ -13,4 +13,4 @@ * (c) 2014-2022 Evan You * Released under the MIT License. */ -var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function c(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function l(t){return"function"==typeof t}function p(t){return null!==t&&"object"==typeof t}var u=Object.prototype.toString;function d(t){return"[object Object]"===u.call(t)}function g(t){return"[object RegExp]"===u.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function m(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function f(t){return null==t?"":Array.isArray(t)||d(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function v(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var k=Object.prototype.hasOwnProperty;function _(t,e){return k.call(t,e)}function x(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var D=/-(\w)/g,B=x((function(t){return t.replace(D,(function(t,e){return e?e.toUpperCase():""}))})),P=x((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),K=/\B([A-Z])/g,S=x((function(t){return t.replace(K,"-$1").toLowerCase()}));var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function C(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function O(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,J=Z&&Z.indexOf("edge/")>0;Z&&Z.indexOf("android");var Q=Z&&/iphone|ipad|ipod|ios/.test(Z);Z&&/chrome\/\d+/.test(Z),Z&&/phantomjs/.test(Z);var tt,et=Z&&Z.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"==typeof t&&/native code/.test(t.toString())}var st,lt="undefined"!=typeof Symbol&&ct(Symbol)&&"undefined"!=typeof Reflect&&ct(Reflect.ownKeys);st="undefined"!=typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var pt=null;function ut(t){void 0===t&&(t=null),t||pt&&pt._scope.off(),pt=t,t&&t._scope.on()}var dt=function(){function t(t,e,n,r,o,i,a,c){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),gt=function(t){void 0===t&&(t="");var e=new dt;return e.text=t,e.isComment=!0,e};function ht(t){return new dt(void 0,void 0,void 0,String(t))}function mt(t){var e=new dt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var ft=0,vt=[],bt=function(){function t(){this._pending=!1,this.id=ft++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,vt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Zt((l=t(l,"".concat(n||"","_").concat(r)))[0])&&Zt(u)&&(d[p]=ht(u.text+l[0].text),l.shift()),d.push.apply(d,l)):s(l)?Zt(u)?d[p]=ht(u.text+l):""!==l&&d.push(ht(l)):Zt(l)&&Zt(u)?d[p]=ht(u.text+l.text):(c(e._isVList)&&a(l.tag)&&i(l.key)&&a(n)&&(l.key="__vlist".concat(n,"_").concat(r,"__")),d.push(l)));return d}(t):void 0}function Zt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Xt(t,e){var n,r,i,c,s=null;if(o(t)||"string"==typeof t)for(s=new Array(t.length),n=0,r=t.length;n0,c=e?!!e.$stable:!a,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(c&&o&&o!==r&&s===o.$key&&!a&&!o.$hasNormal)return o;for(var l in i={},e)e[l]&&"$"!==l[0]&&(i[l]=me(t,n,l,e[l]))}else i={};for(var p in n)p in i||(i[p]=fe(n,p));return e&&Object.isExtensible(e)&&(e._normalized=i),H(i,"$stable",c),H(i,"$key",s),H(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=pt;ut(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Gt(n))&&n[0];return ut(e),n&&(!i||1===n.length&&i.isComment&&!ge(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function fe(t,e){return function(){return t[e]}}function ve(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};H(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||we(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:T(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return It(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ye(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ye(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function we(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var ke=null;function _e(t,e){return(t.__esModule||lt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),p(t)?e.extend(t):t}function xe(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(sn=function(){return ln.now()})}var pn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function un(){var t,e;for(cn=sn(),on=!0,tn.sort(pn),an=0;anan&&tn[n].id>t.id;)n--;tn.splice(n+1,0,t)}else tn.push(t);rn||(rn=!0,Re(un))}}function gn(t,e){if(t){for(var n=Object.create(null),r=lt?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!_(o,"default"))a=!1;else if(""===a||a===S(t)){var s=Fn(String,o.type);(s<0||c-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!g(t)&&t.test(e)}function Xn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var c=a.name;c&&!e(c)&&Yn(n,i,r,o)}}}function Yn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}Vn.prototype._init=function(t){var e=this;e._uid=Wn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Lt(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Tn(Hn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ge(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=ue(e._renderChildren,o),t.$scopedSlots=n?he(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return De(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return De(t,e,n,r,o,!0)};var i=n&&n.data;Ot(t,"$attrs",i&&i.attrs||r,null,!0),Ot(t,"$listeners",e._parentListeners||r,null,!0)}(e),Qe(e,"beforeCreate",void 0,!1),function(t){var e=gn(t.$options.inject,t);e&&(Kt(!1),Object.keys(e).forEach((function(n){Ot(t,n,e[n])})),Kt(!0))}(e),Rn(e),function(t){var e=t.$options.provide;if(e){var n=l(e)?e.call(t):e;if(!p(n))return;for(var r=zt(t),o=lt?Reflect.ownKeys(n):Object.keys(n),i=0;i1?C(n):n;for(var r=C(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Yn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Yn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Xn(t,(function(t){return Zn(e,t)}))})),this.$watch("exclude",(function(e){Xn(t,(function(t){return!Zn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=xe(t),n=e&&e.componentOptions;if(n){var r=Gn(n),o=this.include,i=this.exclude;if(o&&(!r||!Zn(o,r))||i&&r&&Zn(i,r))return e;var a=this.cache,c=this.keys,s=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[s]?(e.componentInstance=a[s].componentInstance,w(c,s),c.push(s)):(this.vnodeToCache=e,this.keyToCache=s),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return z}};Object.defineProperty(t,"config",e),t.util={warn:_n,extend:O,mergeOptions:Tn,defineReactive:Ot},t.set=At,t.delete=Et,t.nextTick=Re,t.observable=function(t){return Ct(t),t},t.options=Object.create(null),N.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,O(t.options.components,Qn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=C(arguments,1);return n.unshift(this),l(t.install)?t.install.apply(t,n):l(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Tn(this.options,t),this}}(t),qn(t),function(t){N.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&d(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&l(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Vn),Object.defineProperty(Vn.prototype,"$isServer",{get:it}),Object.defineProperty(Vn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Vn,"FunctionalRenderContext",{value:hn}),Vn.version="2.7.14";var tr=b("style,class"),er=b("input,textarea,option,select,progress"),nr=b("contenteditable,draggable,spellcheck"),rr=b("events,caret,typing,plaintext-only"),or=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ir="http://www.w3.org/1999/xlink",ar=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},cr=function(t){return ar(t)?t.slice(6,t.length):""},sr=function(t){return null==t||!1===t};function lr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=pr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=pr(e,n.data));return function(t,e){if(a(t)||a(e))return ur(t,dr(e));return""}(e.staticClass,e.class)}function pr(t,e){return{staticClass:ur(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function ur(t,e){return t?e?t+" "+e:t:e||""}function dr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?jr(t,e,n):or(e)?sr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):nr(e)?t.setAttribute(e,function(t,e){return sr(e)||"false"===e?"false":"contenteditable"===t&&rr(e)?e:"true"}(e,n)):ar(e)?sr(n)?t.removeAttributeNS(ir,cr(e)):t.setAttributeNS(ir,e,n):jr(t,e,n)}function jr(t,e,n){if(sr(n))t.removeAttribute(e);else{if(X&&!Y&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Mr={create:$r,update:$r};function Rr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var c=lr(e),s=n._transitionClasses;a(s)&&(c=ur(c,dr(s))),c!==n._prevClass&&(n.setAttribute("class",c),n._prevClass=c)}}var Ir,Nr={create:Rr,update:Rr};function Lr(t,e,n){var r=Ir;return function o(){var i=e.apply(null,arguments);null!==i&&Wr(t,o,n,r)}}var zr=Ce&&!(et&&Number(et[1])<=53);function Ur(t,e,n,r){if(zr){var o=cn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Ir.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function Wr(t,e,n,r){(r||Ir).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Ir=e.elm||t.elm,function(t){if(a(t.__r)){var e=X?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Ht(n,r,Ur,Wr,Lr,e.context),Ir=void 0}}var Vr,qr={create:Hr,update:Hr,destroy:function(t){return Hr(t,xr)}};function Gr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,s=t.data.domProps||{},l=e.data.domProps||{};for(n in(a(l.__ob__)||c(l._v_attr_proxy))&&(l=e.data.domProps=O({},l)),s)n in l||(o[n]="");for(n in l){if(r=l[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===s[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var p=i(r)?"":String(r);Zr(o,p)&&(o.value=p)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Vr=Vr||document.createElement("div")).innerHTML="".concat(r,"");for(var u=Vr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;u.firstChild;)o.appendChild(u.firstChild)}else if(r!==s[n])try{o[n]=r}catch(t){}}}}function Zr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return v(n)!==v(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Xr={create:Gr,update:Gr},Yr=x((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Jr(t){var e=Qr(t.style);return t.staticStyle?O(t.staticStyle,e):e}function Qr(t){return Array.isArray(t)?A(t):"string"==typeof t?Yr(t):t}var to,eo=/^--/,no=/\s*!important$/,ro=function(t,e,n){if(eo.test(e))t.style.setProperty(e,n);else if(no.test(n))t.style.setProperty(S(e),n.replace(no,""),"important");else{var r=io(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(so).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function po(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(so).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function uo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&O(e,go(t.name||"v")),O(e,t),e}return"string"==typeof t?go(t):void 0}}var go=x((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ho=G&&!Y,mo="transition",fo="transitionend",vo="animation",bo="animationend";ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",fo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(vo="WebkitAnimation",bo="webkitAnimationEnd"));var yo=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function wo(t){yo((function(){yo(t)}))}function ko(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),lo(t,e))}function _o(t,e){t._transitionClasses&&w(t._transitionClasses,e),po(t,e)}function xo(t,e,n){var r=Bo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var c="transition"===o?fo:bo,s=0,l=function(){t.removeEventListener(c,p),n()},p=function(e){e.target===t&&++s>=a&&l()};setTimeout((function(){s0&&(n="transition",p=a,u=i.length):"animation"===e?l>0&&(n="animation",p=l,u=s.length):u=(n=(p=Math.max(a,l))>0?a>l?"transition":"animation":null)?"transition"===n?i.length:s.length:0,{type:n,timeout:p,propCount:u,hasTransform:"transition"===n&&Do.test(r[mo+"Property"])}}function Po(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&So(e)}var Eo=function(t){var e,n,r={},l=t.modules,p=t.nodeOps;for(e=0;eh?w(t,i(n[v+1])?null:n[v+1].elm,n,g,v,r):g>v&&_(e,u,h)}(u,m,v,n,l):a(v)?(a(t.text)&&p.setTextContent(u,""),w(u,null,v,0,v.length-1,n)):a(m)?_(m,0,m.length-1):a(t.text)&&p.setTextContent(u,""):t.text!==e.text&&p.setTextContent(u,e.text),a(h)&&a(g=h.hook)&&a(g=g.postpatch)&&g(t,e)}}}function P(t,e,n){if(c(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(j(Ro(a),r))return void(t.selectedIndex!==c&&(t.selectedIndex=c));o||(t.selectedIndex=-1)}}function Mo(t,e){return e.every((function(e){return!j(e,t)}))}function Ro(t){return"_value"in t?t._value:t.value}function Io(t){t.target.composing=!0}function No(t){t.target.composing&&(t.target.composing=!1,Lo(t.target,"input"))}function Lo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zo(t){return!t.componentInstance||t.data&&t.data.transition?t:zo(t.componentInstance._vnode)}var Uo={model:$o,show:{bind:function(t,e,n){var r=e.value,o=(n=zo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,So(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zo(n)).data&&n.data.transition?(n.data.show=!0,r?So(n,(function(){t.style.display=t.__vOriginalDisplay})):To(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Wo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ho(xe(e.children)):t}function Vo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[B(r)]=o[r];return e}function qo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Go=function(t){return t.tag||ge(t)},Zo=function(t){return"show"===t.name},Xo={name:"transition",props:Wo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Go)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return qo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var c=(i.data||(i.data={})).transition=Vo(this),l=this._vnode,p=Ho(l);if(i.data.directives&&i.data.directives.some(Zo)&&(i.data.show=!0),p&&p.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,p)&&!ge(p)&&(!p.componentInstance||!p.componentInstance._vnode.isComment)){var u=p.data.transition=O({},c);if("out-in"===r)return this._leaving=!0,Vt(u,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),qo(t,o);if("in-out"===r){if(ge(i))return l;var d,g=function(){d()};Vt(c,"afterEnter",g),Vt(c,"enterCancelled",g),Vt(u,"delayLeave",(function(t){d=t}))}}return o}}},Yo=O({tag:String,moveClass:String},Wo);function Jo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qo(t){t.data.newPos=t.elm.getBoundingClientRect()}function ti(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Yo.mode;var ei={Transition:Xo,TransitionGroup:{props:Yo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Xe(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Vo(this),c=0;c-1?vr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:vr[t]=/HTMLUnknownElement/.test(e.toString())},O(Vn.options.directives,Uo),O(Vn.options.components,ei),Vn.prototype.__patch__=G?Eo:E,Vn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=gt),Qe(t,"beforeMount"),r=function(){t._update(t._render(),n)},new We(t,r,E,{before:function(){t._isMounted&&!t._isDestroyed&&Qe(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",p=s.path?_i(s.path,l,n||o.append):l,u=function(t,e,n){void 0===e&&(e={});var r,o=n||li;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(si):si(a)}return r}(s.query,o.query,r&&r.options.parseQuery),d=o.hash||s.hash;return d&&"#"!==d.charAt(0)&&(d="#"+d),{_normalized:!0,path:p,query:u,hash:d}}var Ui,Wi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,c=o.href,s={},l=n.options.linkActiveClass,p=n.options.linkExactActiveClass,u=null==l?"router-link-active":l,d=null==p?"router-link-exact-active":p,g=null==this.activeClass?u:this.activeClass,h=null==this.exactActiveClass?d:this.exactActiveClass,m=a.redirectedFrom?di(null,zi(a.redirectedFrom),null,n):a;s[h]=vi(r,m,this.exactPath),s[g]=this.exact||this.exactPath?s[h]:function(t,e){return 0===t.path.replace(ui,"/").indexOf(e.path.replace(ui,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,m);var f=s[h]?this.ariaCurrentValue:null,v=function(t){Vi(t)&&(e.replace?n.replace(i,Wi):n.push(i,Wi))},b={click:Vi};Array.isArray(this.event)?this.event.forEach((function(t){b[t]=v})):b[this.event]=v;var y={class:s},w=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:a,navigate:v,isActive:s[g],isExactActive:s[h]});if(w){if(1===w.length)return w[0];if(w.length>1||!w.length)return 0===w.length?t():t("span",{},w)}if("a"===this.tag)y.on=b,y.attrs={href:c,"aria-current":f};else{var k=function t(e){var n;if(e)for(var r=0;r-1&&(c.params[d]=n.params[d]);return c.path=Li(p.path,c.params),s(p,c,a)}if(c.path){c.params={};for(var g=0;g-1}function xa(t,e){return _a(t)&&t._isRouter&&(null==e||t.type===e)}function Da(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Ba(t){return function(e,n,r){var o=!1,i=0,a=null;Pa(t,(function(t,e,n,c){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var s,l=Ta((function(e){var o;((o=e).__esModule||Sa&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Ui.extend(e),n.components[c]=e,--i<=0&&r()})),p=Ta((function(t){var e="Failed to resolve async component "+c+": "+t;a||(a=_a(t)?t:new Error(e),r(a))}));try{s=t(l,p)}catch(t){p(t)}if(s)if("function"==typeof s.then)s.then(l,p);else{var u=s.component;u&&"function"==typeof u.then&&u.then(l,p)}}})),o||r()}}function Pa(t,e){return Ka(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ka(t){return Array.prototype.concat.apply([],t)}var Sa="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ta(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Ca=function(t,e){this.router=t,this.base=function(t){if(!t)if(qi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=hi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Oa(t,e,n,r){var o=Pa(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Ui.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ka(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}Ca.prototype.listen=function(t){this.cb=t},Ca.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ca.prototype.onError=function(t){this.errorCbs.push(t)},Ca.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(xa(t,va.redirected)&&i===hi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ca.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,c=function(t){!xa(t)&&_a(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},s=t.matched.length-1,l=o.matched.length-1;if(vi(t,o)&&s===l&&t.matched[s]===o.matched[l])return this.ensureURL(),t.hash&&ia(this.router,o,t,!1),c(((a=wa(i=o,t,va.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var p=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=ha&&n;r&&this.listeners.push(oa());var o=function(){var n=t.current,o=$a(t.base);t.current===hi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ia(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(xi(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){fa(xi(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if($a(this.base)!==this.current.fullPath){var e=xi(this.base+this.current.fullPath);t?ma(e):fa(e)}},e.prototype.getCurrentLocation=function(){return $a(this.base)},e}(Ca);function $a(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(xi(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Fa=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=$a(t);if(!/^\/#/.test(e))return window.location.replace(xi(t+"/#"+e)),!0}(this.base)||ja()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=ha&&e;n&&this.listeners.push(oa());var r=function(){var e=t.current;ja()&&t.transitionTo(Ma(),(function(r){n&&ia(t.router,r,e,!0),ha||Na(r.fullPath)}))},o=ha?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ia(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ma()!==e&&(t?Ia(e):Na(e))},e.prototype.getCurrentLocation=function(){return Ma()},e}(Ca);function ja(){var t=Ma();return"/"===t.charAt(0)||(Na("/"+t),!1)}function Ma(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ra(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Ia(t){ha?ma(Ra(t)):window.location.hash=t}function Na(t){ha?fa(Ra(t)):window.location.replace(Ra(t))}var La=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){xa(t,va.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ca),za=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Xi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ha&&!1!==t.fallback,this.fallback&&(e="hash"),qi||(e="abstract"),this.mode=e,e){case"history":this.history=new Ea(this,t.base);break;case"hash":this.history=new Fa(this,t.base,this.fallback);break;case"abstract":this.history=new La(this,t.base);break;default:0}},Ua={currentRoute:{configurable:!0}};za.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Ua.currentRoute.get=function(){return this.history&&this.history.current},za.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Ea||n instanceof Fa){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;ha&&o&&"fullPath"in t&&ia(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},za.prototype.beforeEach=function(t){return Ha(this.beforeHooks,t)},za.prototype.beforeResolve=function(t){return Ha(this.resolveHooks,t)},za.prototype.afterEach=function(t){return Ha(this.afterHooks,t)},za.prototype.onReady=function(t,e){this.history.onReady(t,e)},za.prototype.onError=function(t){this.history.onError(t)},za.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},za.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},za.prototype.go=function(t){this.history.go(t)},za.prototype.back=function(){this.go(-1)},za.prototype.forward=function(){this.go(1)},za.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},za.prototype.resolve=function(t,e,n){var r=zi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?xi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},za.prototype.getRoutes=function(){return this.matcher.getRoutes()},za.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},za.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(za.prototype,Ua);var Wa=za;function Ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}za.install=function t(e){if(!t.installed||Ui!==e){t.installed=!0,Ui=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",wi),e.component("RouterLink",Hi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},za.version="3.6.5",za.isNavigationFailure=xa,za.NavigationFailureType=va,za.START_LOCATION=hi,qi&&window.Vue&&window.Vue.use(za);n(53);n(46),n(106);var Va={NotFound:()=>Promise.all([n.e(0),n.e(1),n.e(18)]).then(n.bind(null,355)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(9)]).then(n.bind(null,354)),DirectoryPagination:()=>Promise.all([n.e(0),n.e(1),n.e(5)]).then(n.bind(null,356)),FrontmatterKey:()=>Promise.all([n.e(0),n.e(1),n.e(17)]).then(n.bind(null,357)),FrontmatterPagination:()=>Promise.all([n.e(0),n.e(1),n.e(6)]).then(n.bind(null,358)),IndexPost:()=>Promise.all([n.e(0),n.e(1),n.e(7)]).then(n.bind(null,280)),Post:()=>Promise.all([n.e(0),n.e(1),n.e(8)]).then(n.bind(null,359))},qa={"v-330a32a2":()=>n.e(20).then(n.bind(null,364)),"v-2cebe183":()=>n.e(16).then(n.bind(null,365)),"v-3eaa044d":()=>n.e(12).then(n.bind(null,366)),"v-3875825f":()=>n.e(21).then(n.bind(null,367)),"v-015729b9":()=>n.e(22).then(n.bind(null,368)),"v-2c605799":()=>n.e(23).then(n.bind(null,369)),"v-57698579":()=>n.e(24).then(n.bind(null,370)),"v-9145467a":()=>n.e(25).then(n.bind(null,371)),"v-2cf72b39":()=>n.e(26).then(n.bind(null,372)),"v-11d64359":()=>n.e(27).then(n.bind(null,373)),"v-d0375c8e":()=>n.e(28).then(n.bind(null,374)),"v-10852eea":()=>n.e(29).then(n.bind(null,375)),"v-edd5570e":()=>n.e(30).then(n.bind(null,376)),"v-05df4999":()=>n.e(31).then(n.bind(null,377)),"v-faad828e":()=>n.e(32).then(n.bind(null,378)),"v-0119984e":()=>n.e(33).then(n.bind(null,379)),"v-7c3d28f9":()=>n.e(34).then(n.bind(null,380)),"v-0df1c3ce":()=>n.e(35).then(n.bind(null,381)),"v-75d11339":()=>n.e(36).then(n.bind(null,382)),"v-1ac9ef4e":()=>n.e(37).then(n.bind(null,383)),"v-55969f39":()=>n.e(38).then(n.bind(null,384)),"v-009133c8":()=>n.e(39).then(n.bind(null,385)),"v-7a315e41":()=>n.e(40).then(n.bind(null,386)),"v-f611a14e":()=>n.e(41).then(n.bind(null,387)),"v-3acb6e6a":()=>n.e(42).then(n.bind(null,388)),"v-496cb7f9":()=>n.e(43).then(n.bind(null,360)),"v-0b3b65ea":()=>n.e(44).then(n.bind(null,389)),"v-a76bccee":()=>n.e(45).then(n.bind(null,390)),"v-05d01c19":()=>n.e(46).then(n.bind(null,391)),"v-11bf335e":()=>n.e(47).then(n.bind(null,392)),"v-a9236c10":()=>n.e(48).then(n.bind(null,393)),"v-29f9f21c":()=>n.e(49).then(n.bind(null,394)),"v-4bcdac39":()=>n.e(50).then(n.bind(null,395)),"v-5245a0b2":()=>n.e(51).then(n.bind(null,396)),"v-283d4479":()=>n.e(52).then(n.bind(null,397)),"v-e4749186":()=>n.e(53).then(n.bind(null,398)),"v-317756bd":()=>n.e(54).then(n.bind(null,399)),"v-e8e842ee":()=>n.e(55).then(n.bind(null,400)),"v-c6331d2a":()=>n.e(56).then(n.bind(null,401)),"v-4432e00e":()=>n.e(57).then(n.bind(null,402)),"v-48a004ce":()=>n.e(58).then(n.bind(null,403)),"v-2220834e":()=>n.e(10).then(n.bind(null,404)),"v-61999ca2":()=>n.e(11).then(n.bind(null,405)),"v-b29a7bce":()=>n.e(59).then(n.bind(null,406)),"v-1a26d7ce":()=>n.e(60).then(n.bind(null,407)),"v-4883b547":()=>n.e(61).then(n.bind(null,408)),"v-35b03e19":()=>n.e(62).then(n.bind(null,409))};function Ga(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Za=/-(\w)/g,Xa=Ga(t=>t.replace(Za,(t,e)=>e?e.toUpperCase():"")),Ya=/\B([A-Z])/g,Ja=Ga(t=>t.replace(Ya,"-$1").toLowerCase()),Qa=Ga(t=>t.charAt(0).toUpperCase()+t.slice(1));function tc(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Qa(Xa(e))):t(Qa(e))||t(Ja(e))}const ec=Object.assign({},Va,qa),nc=t=>ec[t],rc=t=>qa[t],oc=t=>Va[t],ic=t=>Vn.component(t);function ac(t){return tc(rc,t)}function cc(t){return tc(oc,t)}function sc(t){return tc(nc,t)}function lc(t){return tc(ic,t)}function pc(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!lc(t)&&sc(t)){const e=await sc(t)();Vn.component(t,e.default)}}))}function uc(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var dc=n(92),gc=n.n(dc),hc=n(93),mc=n.n(hc),fc={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${mc()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bc(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=yc(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return gc()([{name:"description",content:this.$description}],t,this.siteMeta,wc)},updateCanonicalLink(){vc(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bc(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){yc(null,this.currentMetaTags),vc()}};function vc(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bc(t=""){return t?``:""}function yc(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function wc(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var kc=n(94),_c={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(kc)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},xc=n(22),Dc=n.n(xc),Bc={mounted(){Dc.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Vn.component(t.name)||Dc.a.start(),n()}),this.$router.afterEach(()=>{Dc.a.done(),this.isSidebarOpen=!1})}},Pc={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let t={};return t[this.options.align]="7.5px",t},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard(t){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let t=document.createElement("textarea");document.body.appendChild(t),t.value=this.code,t.select(),document.execCommand("Copy"),t.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let t=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${t.r}, ${t.g}, ${t.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Kc=(n(240),n(7)),Sc=Object(Kc.a)(Pc,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"code-copy"},[e("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[e("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),e("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),e("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Tc=(n(241),{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(t=>{if(t.classList.contains("code-copy-added"))return;let e=new(Vn.extend(Sc));e.options={align:"bottom",color:"#8F979E",backgroundTransition:!1,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!0},e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)})},100)}}}),Cc=(n(242),Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==B?-1!==y.indexOf(e)&&m({target:e}):h()},i=function(){if(!k&&D.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(_-t)>x.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},c=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(B.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Cc({},x.container,t.container)),t.template){var n=Ac(t.template)?t.template:document.querySelector(t.template);e.template=n}return x=Cc({},x,e),y.forEach((function(t){t.dispatchEvent(Mc("medium-zoom:update",{detail:{zoom:P}}))})),P},s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Cc({},x,e))},l=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,$c(e))}),[]):y;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(Mc("medium-zoom:detach",{detail:{zoom:P}}))})),y=y.filter((function(t){return-1===r.indexOf(t)})),P},u=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return y.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),w.push({type:"medium-zoom:"+t,listener:e,options:n}),P},d=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return y.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),w=w.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),P},g=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(x.container)if(x.container instanceof Object)e=(t=Cc({},t,x.container)).width-t.left-t.right-2*x.margin,n=t.height-t.top-t.bottom-2*x.margin;else{var r=(Ac(x.container)?x.container:document.querySelector(x.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,c=r.top;t=Cc({},t,{width:o,height:i,left:a,top:c})}e=e||t.width-2*x.margin,n=n||t.height-2*x.margin;var s=D.zoomedHd||D.original,l=Ec(s)?e:s.naturalWidth||e,p=Ec(s)?n:s.naturalHeight||n,u=s.getBoundingClientRect(),d=u.top,g=u.left,h=u.width,m=u.height,f=Math.min(l,e)/h,v=Math.min(p,n)/m,b=Math.min(f,v),y="scale("+b+") translate3d("+((e-h)/2-g+x.margin+t.left)/b+"px, "+((n-m)/2-d+x.margin+t.top)/b+"px, 0)";D.zoomed.style.transform=y,D.zoomedHd&&(D.zoomedHd.style.transform=y)};return new r((function(t){if(e&&-1===y.indexOf(e))t(P);else{if(D.zoomed)t(P);else{if(e)D.original=e;else{if(!(y.length>0))return void t(P);var r=y;D.original=r[0]}if(D.original.dispatchEvent(Mc("medium-zoom:open",{detail:{zoom:P}})),_=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,k=!0,D.zoomed=jc(D.original),document.body.appendChild(B),x.template){var o=Ac(x.template)?x.template:document.querySelector(x.template);D.template=document.createElement("div"),D.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(D.template)}if(document.body.appendChild(D.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),D.original.classList.add("medium-zoom-image--hidden"),D.zoomed.classList.add("medium-zoom-image--opened"),D.zoomed.addEventListener("click",h),D.zoomed.addEventListener("transitionend",(function e(){k=!1,D.zoomed.removeEventListener("transitionend",e),D.original.dispatchEvent(Mc("medium-zoom:opened",{detail:{zoom:P}})),t(P)})),D.original.getAttribute("data-zoom-src")){D.zoomedHd=D.zoomed.cloneNode(),D.zoomedHd.removeAttribute("srcset"),D.zoomedHd.removeAttribute("sizes"),D.zoomedHd.src=D.zoomed.getAttribute("data-zoom-src"),D.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+D.zoomedHd.src),D.zoomedHd=null,n()};var i=setInterval((function(){D.zoomedHd.complete&&(clearInterval(i),D.zoomedHd.classList.add("medium-zoom-image--opened"),D.zoomedHd.addEventListener("click",h),document.body.appendChild(D.zoomedHd),n())}),10)}else if(D.original.hasAttribute("srcset")){D.zoomedHd=D.zoomed.cloneNode(),D.zoomedHd.removeAttribute("sizes"),D.zoomedHd.removeAttribute("loading");var a=D.zoomedHd.addEventListener("load",(function(){D.zoomedHd.removeEventListener("load",a),D.zoomedHd.classList.add("medium-zoom-image--opened"),D.zoomedHd.addEventListener("click",h),document.body.appendChild(D.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!k&&D.original){k=!0,document.body.classList.remove("medium-zoom--opened"),D.zoomed.style.transform="",D.zoomedHd&&(D.zoomedHd.style.transform=""),D.template&&(D.template.style.transition="opacity 150ms",D.template.style.opacity=0),D.original.dispatchEvent(Mc("medium-zoom:close",{detail:{zoom:P}})),D.zoomed.addEventListener("transitionend",(function e(){D.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(D.zoomed),D.zoomedHd&&document.body.removeChild(D.zoomedHd),document.body.removeChild(B),D.zoomed.classList.remove("medium-zoom-image--opened"),D.template&&document.body.removeChild(D.template),k=!1,D.zoomed.removeEventListener("transitionend",e),D.original.dispatchEvent(Mc("medium-zoom:closed",{detail:{zoom:P}})),D.original=null,D.zoomed=null,D.zoomedHd=null,D.template=null,t(P)}))}else t(P)}))},m=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return D.original?h():g({target:e})},f=function(){return x},v=function(){return y},b=function(){return D.original},y=[],w=[],k=!1,_=0,x=n,D={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?x=e:(e||"string"==typeof e)&&l(e),x=Cc({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},x);var B=Fc(x.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var P={open:g,close:h,toggle:m,update:c,clone:s,attach:l,detach:p,on:u,off:d,getOptions:f,getImages:v,getZoomedImage:b};return P},Ic=[fc,_c,Bc,Tc,{data:()=>({zoom:null}),mounted(){this.updateZoom()},updated(){this.updateZoom()},methods:{updateZoom(){setTimeout(()=>{this.zoom&&this.zoom.detach(),this.zoom=Rc(".theme-default-content :not(a) > img",void 0)},1e3)}}}],Nc={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return uc("layout",t),Vn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Lc=Object(Kc.a)(Nc,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Lc,"mixins",Ic);const zc=[{name:"v-330a32a2",path:"/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-330a32a2").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-2cebe183",path:"/blog/bdk-core-pt1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-2cebe183").then(n)}},{path:"/blog/bdk-core-pt1/index.html",redirect:"/blog/bdk-core-pt1/"},{path:"/_blog/bdk_core_pt1.html",redirect:"/blog/bdk-core-pt1/"},{name:"v-3eaa044d",path:"/blog/bdk-rn-making-of/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-3eaa044d").then(n)}},{path:"/blog/bdk-rn-making-of/index.html",redirect:"/blog/bdk-rn-making-of/"},{path:"/_blog/bdk_rn_making_of.html",redirect:"/blog/bdk-rn-making-of/"},{name:"v-3875825f",path:"/blog/bindings-scope/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-3875825f").then(n)}},{path:"/blog/bindings-scope/index.html",redirect:"/blog/bindings-scope/"},{path:"/_blog/bindings-scope.html",redirect:"/blog/bindings-scope/"},{name:"v-015729b9",path:"/blog/2021/01/fee-estimation-for-light-clients-part-1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-015729b9").then(n)}},{path:"/blog/2021/01/fee-estimation-for-light-clients-part-1/index.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{path:"/_blog/fee_estimation_for_light_clients_part_1.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{name:"v-2c605799",path:"/blog/2021/01/fee-estimation-for-light-clients-part-2/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-2c605799").then(n)}},{path:"/blog/2021/01/fee-estimation-for-light-clients-part-2/index.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{path:"/_blog/fee_estimation_for_light_clients_part_2.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{name:"v-57698579",path:"/blog/2021/01/fee-estimation-for-light-clients-part-3/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-57698579").then(n)}},{path:"/blog/2021/01/fee-estimation-for-light-clients-part-3/index.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{path:"/_blog/fee_estimation_for_light_clients_part_3.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{name:"v-9145467a",path:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-9145467a").then(n)}},{path:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/index.html",redirect:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{path:"/_blog/first_bdk_taproot_tx.html",redirect:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{name:"v-2cf72b39",path:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-2cf72b39").then(n)}},{path:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/index.html",redirect:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{path:"/_blog/first_bdk_taproot_tx_part_2.html",redirect:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{name:"v-11d64359",path:"/blog/getting-started-with-rust-hwi/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-11d64359").then(n)}},{path:"/blog/getting-started-with-rust-hwi/index.html",redirect:"/blog/getting-started-with-rust-hwi/"},{path:"/_blog/getting_started_with_rust_hwi.html",redirect:"/blog/getting-started-with-rust-hwi/"},{name:"v-d0375c8e",path:"/blog/improving-coin-selection-in-bdk/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-d0375c8e").then(n)}},{path:"/blog/improving-coin-selection-in-bdk/index.html",redirect:"/blog/improving-coin-selection-in-bdk/"},{path:"/_blog/improving_coin_selection_in_BDK.html",redirect:"/blog/improving-coin-selection-in-bdk/"},{name:"v-10852eea",path:"/blog/miniscript-vulnerability/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-10852eea").then(n)}},{path:"/blog/miniscript-vulnerability/index.html",redirect:"/blog/miniscript-vulnerability/"},{path:"/_blog/miniscript_vulnerability.html",redirect:"/blog/miniscript-vulnerability/"},{name:"v-edd5570e",path:"/blog/2020/12/release-v0.2.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-edd5570e").then(n)}},{path:"/blog/2020/12/release-v0.2.0/index.html",redirect:"/blog/2020/12/release-v0.2.0/"},{path:"/_blog/release-0.2.0.html",redirect:"/blog/2020/12/release-v0.2.0/"},{name:"v-05df4999",path:"/blog/2021/01/release-v0.3.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-05df4999").then(n)}},{path:"/blog/2021/01/release-v0.3.0/index.html",redirect:"/blog/2021/01/release-v0.3.0/"},{path:"/_blog/release-0.3.0.html",redirect:"/blog/2021/01/release-v0.3.0/"},{name:"v-faad828e",path:"/blog/2021/02/release-v0.4.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-faad828e").then(n)}},{path:"/blog/2021/02/release-v0.4.0/index.html",redirect:"/blog/2021/02/release-v0.4.0/"},{path:"/_blog/release-0.4.0.html",redirect:"/blog/2021/02/release-v0.4.0/"},{name:"v-0119984e",path:"/blog/2021/03/release-v0.5.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-0119984e").then(n)}},{path:"/blog/2021/03/release-v0.5.0/index.html",redirect:"/blog/2021/03/release-v0.5.0/"},{path:"/_blog/release-0.5.0.html",redirect:"/blog/2021/03/release-v0.5.0/"},{name:"v-7c3d28f9",path:"/blog/2021/04/release-v0.6.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-7c3d28f9").then(n)}},{path:"/blog/2021/04/release-v0.6.0/index.html",redirect:"/blog/2021/04/release-v0.6.0/"},{path:"/_blog/release-0.6.0.html",redirect:"/blog/2021/04/release-v0.6.0/"},{name:"v-0df1c3ce",path:"/blog/2021/05/release-v0.7.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-0df1c3ce").then(n)}},{path:"/blog/2021/05/release-v0.7.0/index.html",redirect:"/blog/2021/05/release-v0.7.0/"},{path:"/_blog/release-0.7.0.html",redirect:"/blog/2021/05/release-v0.7.0/"},{name:"v-75d11339",path:"/blog/2021/06/release-v0.8.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-75d11339").then(n)}},{path:"/blog/2021/06/release-v0.8.0/index.html",redirect:"/blog/2021/06/release-v0.8.0/"},{path:"/_blog/release-0.8.0.html",redirect:"/blog/2021/06/release-v0.8.0/"},{name:"v-1ac9ef4e",path:"/blog/2021/07/release-v0.9.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-1ac9ef4e").then(n)}},{path:"/blog/2021/07/release-v0.9.0/index.html",redirect:"/blog/2021/07/release-v0.9.0/"},{path:"/_blog/release-0.9.0.html",redirect:"/blog/2021/07/release-v0.9.0/"},{name:"v-55969f39",path:"/blog/road-to-bdk-1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-55969f39").then(n)}},{path:"/blog/road-to-bdk-1/index.html",redirect:"/blog/road-to-bdk-1/"},{path:"/_blog/road_to_bdk_1.html",redirect:"/blog/road-to-bdk-1/"},{name:"v-009133c8",path:"/bdk-cli/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-009133c8").then(n)}},{path:"/bdk-cli/index.html",redirect:"/bdk-cli/"},{name:"v-7a315e41",path:"/bdk-cli/compiler/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-7a315e41").then(n)}},{path:"/bdk-cli/compiler/index.html",redirect:"/bdk-cli/compiler/"},{path:"/bdk-cli/compiler.html",redirect:"/bdk-cli/compiler/"},{name:"v-f611a14e",path:"/bdk-cli/concept/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-f611a14e").then(n)}},{path:"/bdk-cli/concept/index.html",redirect:"/bdk-cli/concept/"},{path:"/bdk-cli/concept.html",redirect:"/bdk-cli/concept/"},{name:"v-3acb6e6a",path:"/bdk-cli/installation/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-3acb6e6a").then(n)}},{path:"/bdk-cli/installation/index.html",redirect:"/bdk-cli/installation/"},{path:"/bdk-cli/installation.html",redirect:"/bdk-cli/installation/"},{name:"v-496cb7f9",path:"/bdk-cli/interface/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-496cb7f9").then(n)}},{path:"/bdk-cli/interface/index.html",redirect:"/bdk-cli/interface/"},{path:"/bdk-cli/interface.html",redirect:"/bdk-cli/interface/"},{name:"v-0b3b65ea",path:"/bdk-cli/introduction/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-0b3b65ea").then(n)}},{path:"/bdk-cli/introduction/index.html",redirect:"/bdk-cli/introduction/"},{path:"/bdk-cli/introduction.html",redirect:"/bdk-cli/introduction/"},{name:"v-a76bccee",path:"/bdk-cli/playground/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-a76bccee").then(n)}},{path:"/bdk-cli/playground/index.html",redirect:"/bdk-cli/playground/"},{path:"/bdk-cli/playground.html",redirect:"/bdk-cli/playground/"},{name:"v-05d01c19",path:"/bdk-cli/regtest/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-05d01c19").then(n)}},{path:"/bdk-cli/regtest/index.html",redirect:"/bdk-cli/regtest/"},{path:"/bdk-cli/regtest.html",redirect:"/bdk-cli/regtest/"},{name:"v-11bf335e",path:"/case-studies/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-11bf335e").then(n)}},{path:"/case-studies/index.html",redirect:"/case-studies/"},{path:"/case-studies.html",redirect:"/case-studies/"},{name:"v-a9236c10",path:"/descriptors/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-a9236c10").then(n)}},{path:"/descriptors/index.html",redirect:"/descriptors/"},{name:"v-29f9f21c",path:"/examples/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-29f9f21c").then(n)}},{path:"/examples/index.html",redirect:"/examples/"},{name:"v-4bcdac39",path:"/getting-started/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-4bcdac39").then(n)}},{path:"/getting-started/index.html",redirect:"/getting-started/"},{path:"/getting-started.html",redirect:"/getting-started/"},{name:"v-5245a0b2",path:"/supporters/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-5245a0b2").then(n)}},{path:"/supporters/index.html",redirect:"/supporters/"},{name:"v-283d4479",path:"/tutorials/Bitcoin_Core_RPC_Demo/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-283d4479").then(n)}},{path:"/tutorials/Bitcoin_Core_RPC_Demo/index.html",redirect:"/tutorials/Bitcoin_Core_RPC_Demo/"},{path:"/tutorials/Bitcoin_Core_RPC_Demo.html",redirect:"/tutorials/Bitcoin_Core_RPC_Demo/"},{name:"v-e4749186",path:"/tutorials/bdk-cli_basics_multisig_2of3/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-e4749186").then(n)}},{path:"/tutorials/bdk-cli_basics_multisig_2of3/index.html",redirect:"/tutorials/bdk-cli_basics_multisig_2of3/"},{path:"/tutorials/bdk-cli_basics_multisig_2of3.html",redirect:"/tutorials/bdk-cli_basics_multisig_2of3/"},{name:"v-317756bd",path:"/tutorials/bdk_cli_basics/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-317756bd").then(n)}},{path:"/tutorials/bdk_cli_basics/index.html",redirect:"/tutorials/bdk_cli_basics/"},{path:"/tutorials/bdk_cli_basics.html",redirect:"/tutorials/bdk_cli_basics/"},{name:"v-e8e842ee",path:"/tutorials/bdk_with_tor/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-e8e842ee").then(n)}},{path:"/tutorials/bdk_with_tor/index.html",redirect:"/tutorials/bdk_with_tor/"},{path:"/tutorials/bdk_with_tor.html",redirect:"/tutorials/bdk_with_tor/"},{name:"v-c6331d2a",path:"/tutorials/compact_filters_demo/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-c6331d2a").then(n)}},{path:"/tutorials/compact_filters_demo/index.html",redirect:"/tutorials/compact_filters_demo/"},{path:"/tutorials/compact_filters_demo.html",redirect:"/tutorials/compact_filters_demo/"},{name:"v-4432e00e",path:"/tutorials/descriptor_based_paper_wallet/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-4432e00e").then(n)}},{path:"/tutorials/descriptor_based_paper_wallet/index.html",redirect:"/tutorials/descriptor_based_paper_wallet/"},{path:"/tutorials/descriptor_based_paper_wallet.html",redirect:"/tutorials/descriptor_based_paper_wallet/"},{name:"v-48a004ce",path:"/tutorials/descriptors_in_the_wild/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-48a004ce").then(n)}},{path:"/tutorials/descriptors_in_the_wild/index.html",redirect:"/tutorials/descriptors_in_the_wild/"},{path:"/tutorials/descriptors_in_the_wild.html",redirect:"/tutorials/descriptors_in_the_wild/"},{name:"v-2220834e",path:"/tutorials/exploring_bdk_flutter/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-2220834e").then(n)}},{path:"/tutorials/exploring_bdk_flutter/index.html",redirect:"/tutorials/exploring_bdk_flutter/"},{path:"/tutorials/exploring_bdk_flutter.html",redirect:"/tutorials/exploring_bdk_flutter/"},{name:"v-61999ca2",path:"/tutorials/exploring_bdk_rn/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-61999ca2").then(n)}},{path:"/tutorials/exploring_bdk_rn/index.html",redirect:"/tutorials/exploring_bdk_rn/"},{path:"/tutorials/exploring_bdk_rn.html",redirect:"/tutorials/exploring_bdk_rn/"},{name:"v-b29a7bce",path:"/blog/2020/12/hello-world/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-b29a7bce").then(n)}},{path:"/blog/2020/12/hello-world/index.html",redirect:"/blog/2020/12/hello-world/"},{path:"/tutorials/hello-world.html",redirect:"/blog/2020/12/hello-world/"},{name:"v-1a26d7ce",path:"/tutorials/hidden-power-of-bitcoin/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-1a26d7ce").then(n)}},{path:"/tutorials/hidden-power-of-bitcoin/index.html",redirect:"/tutorials/hidden-power-of-bitcoin/"},{path:"/tutorials/hidden-power-of-bitcoin.html",redirect:"/tutorials/hidden-power-of-bitcoin/"},{name:"v-4883b547",path:"/tutorials/spending_policy_demo/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-4883b547").then(n)}},{path:"/tutorials/spending_policy_demo/index.html",redirect:"/tutorials/spending_policy_demo/"},{path:"/tutorials/spending_policy_demo.html",redirect:"/tutorials/spending_policy_demo/"},{name:"v-35b03e19",path:"/tutorials/using_bdk_with_hardware_wallets/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-35b03e19").then(n)}},{path:"/tutorials/using_bdk_with_hardware_wallets/index.html",redirect:"/tutorials/using_bdk_with_hardware_wallets/"},{path:"/tutorials/using_bdk_with_hardware_wallets.html",redirect:"/tutorials/using_bdk_with_hardware_wallets/"},{name:"v-424df898",path:"/blog/",component:Lc,beforeEnter:(t,e,n)=>{pc("IndexPost","v-424df898").then(n)},meta:{pid:"blog",id:"blog"}},{path:"/blog/index.html",redirect:"/blog/"},{name:"v-619df59e",path:"/blog/tags/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterKey","v-619df59e").then(n)},meta:{pid:"tags",id:"tags"}},{path:"/blog/tags/index.html",redirect:"/blog/tags/"},{name:"v-b0968728",path:"/blog/author/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterKey","v-b0968728").then(n)},meta:{pid:"author",id:"author"}},{path:"/blog/author/index.html",redirect:"/blog/author/"},{name:"v-c4494744",path:"/blog/tags/architecture/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-c4494744").then(n)},meta:{pid:"tags",id:"architecture"}},{path:"/blog/tags/architecture/index.html",redirect:"/blog/tags/architecture/"},{name:"v-876cfade",path:"/blog/tags/BDK-RN/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-876cfade").then(n)},meta:{pid:"tags",id:"BDK-RN"}},{path:"/blog/tags/BDK-RN/index.html",redirect:"/blog/tags/BDK-RN/"},{name:"v-3acc51dc",path:"/blog/tags/Development/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3acc51dc").then(n)},meta:{pid:"tags",id:"Development"}},{path:"/blog/tags/Development/index.html",redirect:"/blog/tags/Development/"},{name:"v-650ae784",path:"/blog/tags/Architecture/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-650ae784").then(n)},meta:{pid:"tags",id:"Architecture"}},{path:"/blog/tags/Architecture/index.html",redirect:"/blog/tags/Architecture/"},{name:"v-5f2600b8",path:"/blog/tags/BDK/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f2600b8").then(n)},meta:{pid:"tags",id:"BDK"}},{path:"/blog/tags/BDK/index.html",redirect:"/blog/tags/BDK/"},{name:"v-1296a8fa",path:"/blog/tags/bindings/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-1296a8fa").then(n)},meta:{pid:"tags",id:"bindings"}},{path:"/blog/tags/bindings/index.html",redirect:"/blog/tags/bindings/"},{name:"v-5f0447f2",path:"/blog/tags/fee/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f0447f2").then(n)},meta:{pid:"tags",id:"fee"}},{path:"/blog/tags/fee/index.html",redirect:"/blog/tags/fee/"},{name:"v-e2317b12",path:"/blog/tags/machine learning/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-e2317b12").then(n)},meta:{pid:"tags",id:"machine learning"}},{path:"/blog/tags/machine learning/index.html",redirect:"/blog/tags/machine learning/"},{name:"v-57f3a168",path:"/blog/tags/taproot/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-57f3a168").then(n)},meta:{pid:"tags",id:"taproot"}},{path:"/blog/tags/taproot/index.html",redirect:"/blog/tags/taproot/"},{name:"v-ef7c3fa2",path:"/blog/tags/miniscript/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-ef7c3fa2").then(n)},meta:{pid:"tags",id:"miniscript"}},{path:"/blog/tags/miniscript/index.html",redirect:"/blog/tags/miniscript/"},{name:"v-640144b2",path:"/blog/tags/Hardware Wallets/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-640144b2").then(n)},meta:{pid:"tags",id:"Hardware Wallets"}},{path:"/blog/tags/Hardware Wallets/index.html",redirect:"/blog/tags/Hardware Wallets/"},{name:"v-74edfe92",path:"/blog/tags/coin selection/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-74edfe92").then(n)},meta:{pid:"tags",id:"coin selection"}},{path:"/blog/tags/coin selection/index.html",redirect:"/blog/tags/coin selection/"},{name:"v-4e62fa1c",path:"/blog/tags/development/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4e62fa1c").then(n)},meta:{pid:"tags",id:"development"}},{path:"/blog/tags/development/index.html",redirect:"/blog/tags/development/"},{name:"v-0159a747",path:"/blog/tags/summer of bitcoin/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-0159a747").then(n)},meta:{pid:"tags",id:"summer of bitcoin"}},{path:"/blog/tags/summer of bitcoin/index.html",redirect:"/blog/tags/summer of bitcoin/"},{name:"v-0755ed11",path:"/blog/tags/security/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-0755ed11").then(n)},meta:{pid:"tags",id:"security"}},{path:"/blog/tags/security/index.html",redirect:"/blog/tags/security/"},{name:"v-3fee41ed",path:"/blog/tags/rust/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3fee41ed").then(n)},meta:{pid:"tags",id:"rust"}},{path:"/blog/tags/rust/index.html",redirect:"/blog/tags/rust/"},{name:"v-543950a6",path:"/blog/tags/release/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-543950a6").then(n)},meta:{pid:"tags",id:"release"}},{path:"/blog/tags/release/index.html",redirect:"/blog/tags/release/"},{name:"v-da8c869a",path:"/blog/tags/tutorial/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-da8c869a").then(n)},meta:{pid:"tags",id:"tutorial"}},{path:"/blog/tags/tutorial/index.html",redirect:"/blog/tags/tutorial/"},{name:"v-62bbf2ad",path:"/blog/tags/Bitcoin Core/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-62bbf2ad").then(n)},meta:{pid:"tags",id:"Bitcoin Core"}},{path:"/blog/tags/Bitcoin Core/index.html",redirect:"/blog/tags/Bitcoin Core/"},{name:"v-5f171cb0",path:"/blog/tags/RPC/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f171cb0").then(n)},meta:{pid:"tags",id:"RPC"}},{path:"/blog/tags/RPC/index.html",redirect:"/blog/tags/RPC/"},{name:"v-4696dfd8",path:"/blog/tags/Wallet/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4696dfd8").then(n)},meta:{pid:"tags",id:"Wallet"}},{path:"/blog/tags/Wallet/index.html",redirect:"/blog/tags/Wallet/"},{name:"v-c711ccde",path:"/blog/tags/bdk-cli/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-c711ccde").then(n)},meta:{pid:"tags",id:"bdk-cli"}},{path:"/blog/tags/bdk-cli/index.html",redirect:"/blog/tags/bdk-cli/"},{name:"v-655ee4a0",path:"/blog/tags/multi-sig/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-655ee4a0").then(n)},meta:{pid:"tags",id:"multi-sig"}},{path:"/blog/tags/multi-sig/index.html",redirect:"/blog/tags/multi-sig/"},{name:"v-e646a928",path:"/blog/tags/basics/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-e646a928").then(n)},meta:{pid:"tags",id:"basics"}},{path:"/blog/tags/basics/index.html",redirect:"/blog/tags/basics/"},{name:"v-1fb58ffb",path:"/blog/tags/novice/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-1fb58ffb").then(n)},meta:{pid:"tags",id:"novice"}},{path:"/blog/tags/novice/index.html",redirect:"/blog/tags/novice/"},{name:"v-5ef73f54",path:"/blog/tags/tor/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5ef73f54").then(n)},meta:{pid:"tags",id:"tor"}},{path:"/blog/tags/tor/index.html",redirect:"/blog/tags/tor/"},{name:"v-39437010",path:"/blog/tags/wallet/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-39437010").then(n)},meta:{pid:"tags",id:"wallet"}},{path:"/blog/tags/wallet/index.html",redirect:"/blog/tags/wallet/"},{name:"v-7c8563fd",path:"/blog/tags/blockchain/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-7c8563fd").then(n)},meta:{pid:"tags",id:"blockchain"}},{path:"/blog/tags/blockchain/index.html",redirect:"/blog/tags/blockchain/"},{name:"v-baacba64",path:"/blog/tags/compact_filters/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-baacba64").then(n)},meta:{pid:"tags",id:"compact_filters"}},{path:"/blog/tags/compact_filters/index.html",redirect:"/blog/tags/compact_filters/"},{name:"v-75ccd5f2",path:"/blog/tags/BIP157/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-75ccd5f2").then(n)},meta:{pid:"tags",id:"BIP157"}},{path:"/blog/tags/BIP157/index.html",redirect:"/blog/tags/BIP157/"},{name:"v-4fed1c23",path:"/blog/tags/Neutrino/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4fed1c23").then(n)},meta:{pid:"tags",id:"Neutrino"}},{path:"/blog/tags/Neutrino/index.html",redirect:"/blog/tags/Neutrino/"},{name:"v-a9e0285e",path:"/blog/tags/guide/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-a9e0285e").then(n)},meta:{pid:"tags",id:"guide"}},{path:"/blog/tags/guide/index.html",redirect:"/blog/tags/guide/"},{name:"v-733ed37c",path:"/blog/tags/descriptor/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-733ed37c").then(n)},meta:{pid:"tags",id:"descriptor"}},{path:"/blog/tags/descriptor/index.html",redirect:"/blog/tags/descriptor/"},{name:"v-1144be8a",path:"/blog/tags/paper wallets/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-1144be8a").then(n)},meta:{pid:"tags",id:"paper wallets"}},{path:"/blog/tags/paper wallets/index.html",redirect:"/blog/tags/paper wallets/"},{name:"v-915f8322",path:"/blog/tags/bitcoin/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-915f8322").then(n)},meta:{pid:"tags",id:"bitcoin"}},{path:"/blog/tags/bitcoin/index.html",redirect:"/blog/tags/bitcoin/"},{name:"v-bf53d4d4",path:"/blog/tags/React Native/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-bf53d4d4").then(n)},meta:{pid:"tags",id:"React Native"}},{path:"/blog/tags/React Native/index.html",redirect:"/blog/tags/React Native/"},{name:"v-07eeb15e",path:"/blog/tags/Flutter/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-07eeb15e").then(n)},meta:{pid:"tags",id:"Flutter"}},{path:"/blog/tags/Flutter/index.html",redirect:"/blog/tags/Flutter/"},{name:"v-5f023740",path:"/blog/tags/iOS/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f023740").then(n)},meta:{pid:"tags",id:"iOS"}},{path:"/blog/tags/iOS/index.html",redirect:"/blog/tags/iOS/"},{name:"v-414e735e",path:"/blog/tags/Android/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-414e735e").then(n)},meta:{pid:"tags",id:"Android"}},{path:"/blog/tags/Android/index.html",redirect:"/blog/tags/Android/"},{name:"v-2c94bf22",path:"/blog/tags/mobile/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-2c94bf22").then(n)},meta:{pid:"tags",id:"mobile"}},{path:"/blog/tags/mobile/index.html",redirect:"/blog/tags/mobile/"},{name:"v-dd212a9e",path:"/blog/tags/bdk-rn/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-dd212a9e").then(n)},meta:{pid:"tags",id:"bdk-rn"}},{path:"/blog/tags/bdk-rn/index.html",redirect:"/blog/tags/bdk-rn/"},{name:"v-5f07f0f8",path:"/blog/tags/bdk/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f07f0f8").then(n)},meta:{pid:"tags",id:"bdk"}},{path:"/blog/tags/bdk/index.html",redirect:"/blog/tags/bdk/"},{name:"v-79c3de4b",path:"/blog/tags/getting started/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-79c3de4b").then(n)},meta:{pid:"tags",id:"getting started"}},{path:"/blog/tags/getting started/index.html",redirect:"/blog/tags/getting started/"},{name:"v-01a03a08",path:"/blog/tags/bitcoin-cli/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-01a03a08").then(n)},meta:{pid:"tags",id:"bitcoin-cli"}},{path:"/blog/tags/bitcoin-cli/index.html",redirect:"/blog/tags/bitcoin-cli/"},{name:"v-600b5b28",path:"/blog/author/Lloyd Fournier/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-600b5b28").then(n)},meta:{pid:"author",id:"Lloyd Fournier"}},{path:"/blog/author/Lloyd Fournier/index.html",redirect:"/blog/author/Lloyd Fournier/"},{name:"v-37829241",path:"/blog/author/Bitcoin Zavior/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-37829241").then(n)},meta:{pid:"author",id:"Bitcoin Zavior"}},{path:"/blog/author/Bitcoin Zavior/index.html",redirect:"/blog/author/Bitcoin Zavior/"},{name:"v-5d54001e",path:"/blog/author/thunderbiscuit/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5d54001e").then(n)},meta:{pid:"author",id:"thunderbiscuit"}},{path:"/blog/author/thunderbiscuit/index.html",redirect:"/blog/author/thunderbiscuit/"},{name:"v-624fd61e",path:"/blog/author/Riccardo Casatta/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-624fd61e").then(n)},meta:{pid:"author",id:"Riccardo Casatta"}},{path:"/blog/author/Riccardo Casatta/index.html",redirect:"/blog/author/Riccardo Casatta/"},{name:"v-ad00c09c",path:"/blog/author/Alekos Filini/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-ad00c09c").then(n)},meta:{pid:"author",id:"Alekos Filini"}},{path:"/blog/author/Alekos Filini/index.html",redirect:"/blog/author/Alekos Filini/"},{name:"v-4eeab648",path:"/blog/author/Wszdexdrf/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4eeab648").then(n)},meta:{pid:"author",id:"Wszdexdrf"}},{path:"/blog/author/Wszdexdrf/index.html",redirect:"/blog/author/Wszdexdrf/"},{name:"v-a0d840b0",path:"/blog/author/César Alvarez Vallero/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-a0d840b0").then(n)},meta:{pid:"author",id:"César Alvarez Vallero"}},{path:"/blog/author/César Alvarez Vallero/index.html",redirect:"/blog/author/César Alvarez Vallero/"},{name:"v-82e16b5c",path:"/blog/author/Rajarshi Maitra/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-82e16b5c").then(n)},meta:{pid:"author",id:"Rajarshi Maitra"}},{path:"/blog/author/Rajarshi Maitra/index.html",redirect:"/blog/author/Rajarshi Maitra/"},{name:"v-3e85f455",path:"/blog/author/waterstone/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3e85f455").then(n)},meta:{pid:"author",id:"waterstone"}},{path:"/blog/author/waterstone/index.html",redirect:"/blog/author/waterstone/"},{name:"v-3e6950f4",path:"/blog/author/waterst0ne/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3e6950f4").then(n)},meta:{pid:"author",id:"waterst0ne"}},{path:"/blog/author/waterst0ne/index.html",redirect:"/blog/author/waterst0ne/"},{name:"v-d2b26530",path:"/blog/author/rorp/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-d2b26530").then(n)},meta:{pid:"author",id:"rorp"}},{path:"/blog/author/rorp/index.html",redirect:"/blog/author/rorp/"},{name:"v-a354115e",path:"/blog/author/Steve Myers/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-a354115e").then(n)},meta:{pid:"author",id:"Steve Myers"}},{path:"/blog/author/Steve Myers/index.html",redirect:"/blog/author/Steve Myers/"},{name:"v-6b564fb4",path:"/blog/author/Gabriele Domenichini/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-6b564fb4").then(n)},meta:{pid:"author",id:"Gabriele Domenichini"}},{path:"/blog/author/Gabriele Domenichini/index.html",redirect:"/blog/author/Gabriele Domenichini/"},{name:"v-91c10894",path:"/blog/author/Sandipan Dey/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-91c10894").then(n)},meta:{pid:"author",id:"Sandipan Dey"}},{path:"/blog/author/Sandipan Dey/index.html",redirect:"/blog/author/Sandipan Dey/"},{name:"v-754a45a4",path:"/blog/author/danielabrozzoni/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-754a45a4").then(n)},meta:{pid:"author",id:"danielabrozzoni"}},{path:"/blog/author/danielabrozzoni/index.html",redirect:"/blog/author/danielabrozzoni/"},{name:"v-c3507bb6",path:"/blog/page/2/",component:Lc,beforeEnter:(t,e,n)=>{pc("DirectoryPagination","v-c3507bb6").then(n)},meta:{pid:"blog",id:"blog"}},{path:"/blog/page/2/index.html",redirect:"/blog/page/2/"},{name:"v-5f2ac9cb",path:"/blog/author/Alekos Filini/page/2/",component:Lc,beforeEnter:(t,e,n)=>{pc("DirectoryPagination","v-5f2ac9cb").then(n)},meta:{pid:"author",id:"Alekos Filini"}},{path:"/blog/author/Alekos Filini/page/2/index.html",redirect:"/blog/author/Alekos Filini/page/2/"},{path:"*",component:Lc}],Uc={title:"Bitcoin Dev Kit Documentation",description:"The Bitcoin Dev Kit (BDK) project (originally called Magical Bitcoin 🧙) aims to build a collection of tools and libraries that are designed to be a solid foundation for cross platform Bitcoin wallets, along with a fully working reference implementation wallet called Magical Bitcoin.",base:"/",headTags:[["meta",{name:"viewport",content:"width=device-width,initial-scale=1.0"}],["link",{rel:"preload",href:"/fonts/ibm-plex-mono-400.woff2",as:"font",crossorigin:!0}],["link",{rel:"apple-touch-icon",sizes:"180x180",href:"/img/favicon/apple-touch-icon.png"}],["link",{rel:"manifest",href:"/site.webmanifest"}],["link",{rel:"stylesheet",href:"/css/variables.css"}],["link",{name:"msapplication-config",content:"/browserconfig.xml"}],["link",{name:"msapplication-TileColor",content:"#ffffff"}],["link",{name:"theme-color",content:"#ffffff"}]],pages:[{title:"Home",frontmatter:{home:!0,heroText:"Bitcoin Dev Kit",tagline:"With BDK, you can seamlessly build cross platform mobile wallets",actionText:"Get started",actionLink:"/getting-started/",features:[{title:"Customizable",details:"Designed from the ground up to be easily customized to your application needs: blockchain backends, databases, signers, coin selection, key management and more.",image:"customizable"},{title:"Focus on what matters",details:"All of the low-level Bitcoin logic is handled by us, so you can focus on crafting custom-tailored user experiences.",image:"focus"},{title:"High performance & compact",details:"As lightweight as you need it to be and optimized to run on all modern-day embedded devices such as mobile phones, IoT devices, PoS terminals and more.",image:"mobile"}],meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"With BDK, you can seamlessly build cross platform mobile wallets"},{property:"og:description",content:"We are building native API's for C, Swift, Java & Kotlin so you can easily integrate Bitcoin in your preferred programming language on mobile."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"With BDK, you can seamlessly build cross platform mobile wallets"},{name:"twitter:description",content:"We are building native API's for C, Swift, Java & Kotlin so you can easily integrate Bitcoin in your preferred programming language on mobile."},{name:"twitter:url",content:"https://bitcoindevkit.org/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/",relativePath:"README.md",key:"v-330a32a2",path:"/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"bdk_core: a new architecture for the Bitcoin Dev Kit",frontmatter:{title:"`bdk_core`: a new architecture for the Bitcoin Dev Kit",description:"A new architecture for the Bitcoin Dev Kit",authors:["Lloyd Fournier"],date:"2022-05-09",tags:["architecture"],draft:!1,meta:[{property:"article:published_time",content:"2022-05-09T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"bdk_core: a new architecture for the Bitcoin Dev Kit"},{property:"og:description",content:"A new architecture for the Bitcoin Dev Kit"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/bdk_core_pt1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"bdk_core: a new architecture for the Bitcoin Dev Kit"},{name:"twitter:description",content:"A new architecture for the Bitcoin Dev Kit"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/bdk_core_pt1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"architecture"},{property:"article:tag",content:"architecture"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/bdk_core_pt1.html",relativePath:"_blog/bdk_core_pt1.md",key:"v-2cebe183",path:"/blog/bdk-core-pt1/",headers:[{level:2,title:"The separation of policy and mechanism",slug:"the-separation-of-policy-and-mechanism"},{level:2,title:"A syncing mechansim without the policy",slug:"a-syncing-mechansim-without-the-policy"},{level:3,title:"A general syncing mechanism",slug:"a-general-syncing-mechanism"},{level:3,title:"How to store and index transactions",slug:"how-to-store-and-index-transactions"},{level:3,title:"Rolling back, rolling forward and syncing to disk",slug:"rolling-back-rolling-forward-and-syncing-to-disk"},{level:2,title:"Examples",slug:"examples"},{level:3,title:"Doing an initial sync of a descriptor that may already contain coins",slug:"doing-an-initial-sync-of-a-descriptor-that-may-already-contain-coins"},{level:3,title:"Doing a sync of a wallet after you already have sync'd",slug:"doing-a-sync-of-a-wallet-after-you-already-have-syncd"},{level:3,title:"Updating state when you get the data in real time",slug:"updating-state-when-you-get-the-data-in-real-time"},{level:2,title:"Feedback",slug:"feedback"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"bdk-rn: Behind the scenes",frontmatter:{title:"`bdk-rn`: Behind the scenes",description:"bdk-rn: React Native version of BitcoinDevKit. Insight into how bdk-rn was developed",authors:["Bitcoin Zavior"],date:"2022-07-10",tags:["BDK-RN","Development","Architecture"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-07-10T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"bdk-rn: Behind the scenes"},{property:"og:description",content:"bdk-rn: React Native version of BitcoinDevKit. Insight into how bdk-rn was developed"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/bdk_rn_making_of/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"bdk-rn: Behind the scenes"},{name:"twitter:description",content:"bdk-rn: React Native version of BitcoinDevKit. Insight into how bdk-rn was developed"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/bdk_rn_making_of/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK-RN, Development, Architecture"},{property:"article:tag",content:"BDK-RN"},{property:"article:tag",content:"Development"},{property:"article:tag",content:"Architecture"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/bdk_rn_making_of.html",relativePath:"_blog/bdk_rn_making_of.md",key:"v-3eaa044d",path:"/blog/bdk-rn-making-of/",headers:[{level:2,title:"React Native Architecture",slug:"react-native-architecture"},{level:2,title:"Native Integration",slug:"native-integration"},{level:2,title:"Android Module",slug:"android-module"},{level:2,title:"References",slug:"references"},{level:2,title:"Feedback",slug:"feedback"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"BDK's Scope and Approach to Rust Bindings",frontmatter:{title:"BDK's Scope and Approach to Rust Bindings",description:"An outline of BDK's approach to language bindings and how we intend on supporting others build their own.",authors:["thunderbiscuit"],date:"2023-06-02",tags:["BDK","bindings"],meta:[{property:"article:published_time",content:"2023-06-02T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK's Scope and Approach to Rust Bindings"},{property:"og:description",content:"An outline of BDK's approach to language bindings and how we intend on supporting others build their own."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/bindings-scope/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK's Scope and Approach to Rust Bindings"},{name:"twitter:description",content:"An outline of BDK's approach to language bindings and how we intend on supporting others build their own."},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/bindings-scope/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, bindings"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"bindings"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/bindings-scope.html",relativePath:"_blog/bindings-scope.md",key:"v-3875825f",path:"/blog/bindings-scope/",headers:[{level:2,title:"Current architecture",slug:"current-architecture"},{level:2,title:"Moving forward: building a family of libraries",slug:"moving-forward-building-a-family-of-libraries"},{level:2,title:"Why can't we just build one big BDK library with everything in it?",slug:"why-cant-we-just-build-one-big-bdk-library-with-everything-in-it"},{level:2,title:"Are you looking to build Rust bindings yourself?",slug:"are-you-looking-to-build-rust-bindings-yourself"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Fee estimation for light-clients (Part 1)",frontmatter:{title:"Fee estimation for light-clients (Part 1)",description:"Applying machine learning to the bitcoin fee estimation problem",authors:["Riccardo Casatta"],date:"2021-01-25",tags:["fee","machine learning"],permalink:"/blog/2021/01/fee-estimation-for-light-clients-part-1/",meta:[{property:"article:published_time",content:"2021-01-25T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Fee estimation for light-clients (Part 1)"},{property:"og:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Fee estimation for light-clients (Part 1)"},{name:"twitter:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"fee, machine learning"},{property:"article:tag",content:"fee"},{property:"article:tag",content:"machine learning"}],layout:"Post"},regularPath:"/_blog/fee_estimation_for_light_clients_part_1.html",relativePath:"_blog/fee_estimation_for_light_clients_part_1.md",key:"v-015729b9",path:"/blog/2021/01/fee-estimation-for-light-clients-part-1/",headers:[{level:2,title:"Introduction: what is fee estimation?",slug:"introduction-what-is-fee-estimation"},{level:2,title:"The problem",slug:"the-problem"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Fee estimation for light-clients (Part 2)",frontmatter:{title:"Fee estimation for light-clients (Part 2)",description:"Applying machine learning to the bitcoin fee estimation problem",authors:["Riccardo Casatta"],date:"2021-01-25",tags:["fee","machine learning"],permalink:"/blog/2021/01/fee-estimation-for-light-clients-part-2/",meta:[{property:"article:published_time",content:"2021-01-25T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Fee estimation for light-clients (Part 2)"},{property:"og:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Fee estimation for light-clients (Part 2)"},{name:"twitter:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"fee, machine learning"},{property:"article:tag",content:"fee"},{property:"article:tag",content:"machine learning"}],layout:"Post"},regularPath:"/_blog/fee_estimation_for_light_clients_part_2.html",relativePath:"_blog/fee_estimation_for_light_clients_part_2.md",key:"v-2c605799",path:"/blog/2021/01/fee-estimation-for-light-clients-part-2/",headers:[{level:2,title:"The dataset",slug:"the-dataset"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Fee estimation for light-clients (Part 3)",frontmatter:{title:"Fee estimation for light-clients (Part 3)",description:"Applying machine learning to the bitcoin fee estimation problem",authors:["Riccardo Casatta"],date:"2021-01-25",tags:["fee","machine learning"],permalink:"/blog/2021/01/fee-estimation-for-light-clients-part-3/",meta:[{property:"article:published_time",content:"2021-01-25T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Fee estimation for light-clients (Part 3)"},{property:"og:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Fee estimation for light-clients (Part 3)"},{name:"twitter:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"fee, machine learning"},{property:"article:tag",content:"fee"},{property:"article:tag",content:"machine learning"}],layout:"Post"},regularPath:"/_blog/fee_estimation_for_light_clients_part_3.html",relativePath:"_blog/fee_estimation_for_light_clients_part_3.md",key:"v-57698579",path:"/blog/2021/01/fee-estimation-for-light-clients-part-3/",headers:[{level:2,title:"The model",slug:"the-model"},{level:2,title:"The prediction phase",slug:"the-prediction-phase"},{level:2,title:"Conclusion and future development",slug:"conclusion-and-future-development"},{level:2,title:"Acknowledgements",slug:"acknowledgements"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"The first BDK Taproot TX: a look at the code (Part 1)",frontmatter:{title:"The first BDK Taproot TX: a look at the code (Part 1)",description:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction",authors:["Alekos Filini"],date:"2021-11-15",tags:["BDK","taproot","miniscript"],permalink:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1",meta:[{property:"article:published_time",content:"2021-11-15T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"The first BDK Taproot TX: a look at the code (Part 1)"},{property:"og:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"The first BDK Taproot TX: a look at the code (Part 1)"},{name:"twitter:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, taproot, miniscript"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"taproot"},{property:"article:tag",content:"miniscript"}],layout:"Post"},regularPath:"/_blog/first_bdk_taproot_tx.html",relativePath:"_blog/first_bdk_taproot_tx.md",key:"v-9145467a",path:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/",headers:[{level:2,title:"Backstory",slug:"backstory"},{level:2,title:"rust-bitcoin",slug:"rust-bitcoin"},{level:2,title:"rust-miniscript",slug:"rust-miniscript"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"The first BDK Taproot TX: a look at the code (Part 2)",frontmatter:{title:"The first BDK Taproot TX: a look at the code (Part 2)",description:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction",authors:["Alekos Filini"],date:"2021-12-10",tags:["BDK","taproot","miniscript"],permalink:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2",meta:[{property:"article:published_time",content:"2021-12-10T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"The first BDK Taproot TX: a look at the code (Part 2)"},{property:"og:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"The first BDK Taproot TX: a look at the code (Part 2)"},{name:"twitter:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, taproot, miniscript"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"taproot"},{property:"article:tag",content:"miniscript"}],layout:"Post"},regularPath:"/_blog/first_bdk_taproot_tx_part_2.html",relativePath:"_blog/first_bdk_taproot_tx_part_2.md",key:"v-2cf72b39",path:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/",headers:[{level:2,title:"Shortcuts",slug:"shortcuts"},{level:2,title:"Utilities",slug:"utilities"},{level:2,title:"Wrap Fallible Methods",slug:"wrap-fallible-methods"},{level:2,title:"Descriptor Metadata",slug:"descriptor-metadata"},{level:2,title:"Policy",slug:"policy"},{level:2,title:"Signer",slug:"signer"},{level:2,title:"PSBT Metadata",slug:"psbt-metadata"},{level:2,title:"descriptor!() Macro",slug:"descriptor-macro"},{level:3,title:"tr() Descriptors",slug:"tr-descriptors"},{level:3,title:"multi_a() Operator",slug:"multi-a-operator"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Getting Started with rust-hwi",frontmatter:{title:"Getting Started with rust-hwi",description:"This post will help one understand and develop for hardware wallets using BDK",authors:["Wszdexdrf"],date:"2022-08-16",tags:["BDK","Development","Hardware Wallets"],draft:!1,meta:[{property:"article:published_time",content:"2022-08-16T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Getting Started with rust-hwi"},{property:"og:description",content:"This post will help one understand and develop for hardware wallets using BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/getting_started_with_rust_hwi/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Getting Started with rust-hwi"},{name:"twitter:description",content:"This post will help one understand and develop for hardware wallets using BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/getting_started_with_rust_hwi/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, Development, Hardware Wallets"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"Development"},{property:"article:tag",content:"Hardware Wallets"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/getting_started_with_rust_hwi.html",relativePath:"_blog/getting_started_with_rust_hwi.md",key:"v-11d64359",path:"/blog/getting-started-with-rust-hwi/",headers:[{level:2,title:"Fundamentals",slug:"fundamentals"},{level:2,title:"Integration with BDK",slug:"integration-with-bdk"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Improving coin selection in BDK",frontmatter:{title:"Improving coin selection in BDK",description:"A brief description of the work done in the coin selection module in BDK during Summer of Bitcoin 2022",date:"2022-08-17",tags:["coin selection","BDK","development","summer of bitcoin"],authors:["César Alvarez Vallero"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-08-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Improving coin selection in BDK"},{property:"og:description",content:"A brief description of the work done in the coin selection module in BDK during Summer of Bitcoin 2022"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/improving_coin_selection_in_BDK/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Improving coin selection in BDK"},{name:"twitter:description",content:"A brief description of the work done in the coin selection module in BDK during Summer of Bitcoin 2022"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/improving_coin_selection_in_BDK/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"coin selection, BDK, development, summer of bitcoin"},{property:"article:tag",content:"coin selection"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"development"},{property:"article:tag",content:"summer of bitcoin"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/improving_coin_selection_in_BDK.html",relativePath:"_blog/improving_coin_selection_in_BDK.md",key:"v-d0375c8e",path:"/blog/improving-coin-selection-in-bdk/",headers:[{level:2,title:"Waste",slug:"waste"},{level:3,title:"How it works?",slug:"how-it-works"},{level:3,title:"What has been done",slug:"what-has-been-done"},{level:3,title:"Work in progress",slug:"work-in-progress"},{level:2,title:"Further Improvements",slug:"further-improvements"},{level:3,title:"Privacy",slug:"privacy"},{level:3,title:"Flexibility",slug:"flexibility"},{level:2,title:"Conclusion",slug:"conclusion"},{level:2,title:"Acknowledgements",slug:"acknowledgements"},{level:2,title:"References",slug:"references"},{level:3,title:"About coin selection considerations",slug:"about-coin-selection-considerations"},{level:3,title:"About Waste metric",slug:"about-waste-metric"},{level:3,title:"About improving privacy in coin selection",slug:"about-improving-privacy-in-coin-selection"},{level:3,title:"About bdk_core",slug:"about-bdk-core"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Security Advisory: Miniscript MINIMALIF Bug",frontmatter:{title:"Security Advisory: Miniscript MINIMALIF Bug",description:"Security advisory on the recent Miniscript MINIMALIF bug. How to check if you are affected and what to do next.",authors:["Alekos Filini"],date:"2022-04-19",tags:["miniscript","security"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-04-19T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Security Advisory: Miniscript MINIMALIF Bug"},{property:"og:description",content:"Security advisory on the recent Miniscript MINIMALIF bug. How to check if you are affected and what to do next."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/miniscript_vulnerability/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Security Advisory: Miniscript MINIMALIF Bug"},{name:"twitter:description",content:"Security advisory on the recent Miniscript MINIMALIF bug. How to check if you are affected and what to do next."},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/miniscript_vulnerability/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"miniscript, security"},{property:"article:tag",content:"miniscript"},{property:"article:tag",content:"security"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/miniscript_vulnerability.html",relativePath:"_blog/miniscript_vulnerability.md",key:"v-10852eea",path:"/blog/miniscript-vulnerability/",headers:[{level:2,title:"How to check if you are vulnerable",slug:"how-to-check-if-you-are-vulnerable"},{level:2,title:"Next steps",slug:"next-steps"},{level:3,title:"If you are affected",slug:"if-you-are-affected"},{level:3,title:"Everybody",slug:"everybody"},{level:2,title:"Consequences of the update",slug:"consequences-of-the-update"},{level:2,title:"Footnote: How we analyzed the blockchain",slug:"footnote-how-we-analyzed-the-blockchain"},{level:2,title:"Correction (2022-04-25)",slug:"correction-2022-04-25"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.2.0",frontmatter:{title:"Release v0.2.0",description:"Announcing the v0.2.0 release of BDK",authors:["Alekos Filini"],date:"2020-12-21",tags:["rust","release"],permalink:"/blog/2020/12/release-v0.2.0/",meta:[{property:"article:published_time",content:"2020-12-21T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.2.0"},{property:"og:description",content:"Announcing the v0.2.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2020/12/release-v0.2.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.2.0"},{name:"twitter:description",content:"Announcing the v0.2.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2020/12/release-v0.2.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.2.0.html",relativePath:"_blog/release-0.2.0.md",key:"v-edd5570e",path:"/blog/2020/12/release-v0.2.0/",headers:[{level:2,title:"What's new in v0.2.0",slug:"whats-new-in-v020"},{level:3,title:"A new name",slug:"a-new-name"},{level:3,title:"Branch and Bound coin selection",slug:"branch-and-bound-coin-selection"},{level:3,title:"Key generation",slug:"key-generation"},{level:3,title:"Generic key types",slug:"generic-key-types"},{level:3,title:"Descriptor templates",slug:"descriptor-templates"},{level:3,title:"Easier creation of Blockchain and Database",slug:"easier-creation-of-blockchain-and-database"},{level:3,title:"descriptor!() macro",slug:"descriptor-macro"},{level:3,title:"Support for sortedmulti()",slug:"support-for-sortedmulti"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.3.0",frontmatter:{title:"Release v0.3.0",description:"Announcing the v0.3.0 release of BDK",authors:["Alekos Filini"],date:"2021-01-20",tags:["rust","release"],permalink:"/blog/2021/01/release-v0.3.0/",meta:[{property:"article:published_time",content:"2021-01-20T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.3.0"},{property:"og:description",content:"Announcing the v0.3.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/release-v0.3.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.3.0"},{name:"twitter:description",content:"Announcing the v0.3.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/release-v0.3.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.3.0.html",relativePath:"_blog/release-0.3.0.md",key:"v-05df4999",path:"/blog/2021/01/release-v0.3.0/",headers:[{level:2,title:"What's new in v0.3.0",slug:"whats-new-in-v030"},{level:3,title:"Less verbosity when using Wallet::new_offline()",slug:"less-verbosity-when-using-walletnew-offline"},{level:3,title:"No more error conversions in DescriptorTemplate",slug:"no-more-error-conversions-in-descriptortemplate"},{level:3,title:"A new repo for the CLI",slug:"a-new-repo-for-the-cli"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.4.0",frontmatter:{title:"Release v0.4.0",description:"Announcing the v0.4.0 release of BDK",authors:["Alekos Filini"],date:"2021-02-17",tags:["rust","release"],permalink:"/blog/2021/02/release-v0.4.0/",meta:[{property:"article:published_time",content:"2021-02-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.4.0"},{property:"og:description",content:"Announcing the v0.4.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/02/release-v0.4.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.4.0"},{name:"twitter:description",content:"Announcing the v0.4.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/02/release-v0.4.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.4.0.html",relativePath:"_blog/release-0.4.0.md",key:"v-faad828e",path:"/blog/2021/02/release-v0.4.0/",headers:[{level:2,title:"What's new in v0.4.0",slug:"whats-new-in-v040"},{level:3,title:"A new API to build transaction",slug:"a-new-api-to-build-transaction"},{level:3,title:"Upgraded dependencies",slug:"upgraded-dependencies"},{level:3,title:"Compact Filters example",slug:"compact-filters-example"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.5.0",frontmatter:{title:"Release v0.5.0",description:"Announcing the v0.5.0 release of BDK",authors:["Alekos Filini"],date:"2021-03-18",tags:["rust","release"],permalink:"/blog/2021/03/release-v0.5.0/",meta:[{property:"article:published_time",content:"2021-03-18T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.5.0"},{property:"og:description",content:"Announcing the v0.5.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/03/release-v0.5.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.5.0"},{name:"twitter:description",content:"Announcing the v0.5.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/03/release-v0.5.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.5.0.html",relativePath:"_blog/release-0.5.0.md",key:"v-0119984e",path:"/blog/2021/03/release-v0.5.0/",headers:[{level:2,title:"What's new in v0.5.0",slug:"whats-new-in-v050"},{level:3,title:"Dual Licensing",slug:"dual-licensing"},{level:3,title:"Spending foreign UTXOs",slug:"spending-foreign-utxos"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.6.0",frontmatter:{title:"Release v0.6.0",description:"Announcing the v0.6.0 release of BDK",authors:["Alekos Filini"],date:"2021-04-15",tags:["rust","release"],permalink:"/blog/2021/04/release-v0.6.0/",meta:[{property:"article:published_time",content:"2021-04-15T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.6.0"},{property:"og:description",content:"Announcing the v0.6.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/04/release-v0.6.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.6.0"},{name:"twitter:description",content:"Announcing the v0.6.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/04/release-v0.6.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.6.0.html",relativePath:"_blog/release-0.6.0.md",key:"v-7c3d28f9",path:"/blog/2021/04/release-v0.6.0/",headers:[{level:2,title:"What's new in v0.6.0",slug:"whats-new-in-v060"},{level:3,title:"A new way to generate addresses",slug:"a-new-way-to-generate-addresses"},{level:3,title:"Easier multiparty transaction creation",slug:"easier-multiparty-transaction-creation"},{level:3,title:"Renamed types",slug:"renamed-types"},{level:3,title:"New MSRV",slug:"new-msrv"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.7.0",frontmatter:{title:"Release v0.7.0",description:"Announcing the v0.7.0 release of BDK",authors:["Alekos Filini"],date:"2021-05-17",tags:["rust","release"],permalink:"/blog/2021/05/release-v0.7.0/",meta:[{property:"article:published_time",content:"2021-05-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.7.0"},{property:"og:description",content:"Announcing the v0.7.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/05/release-v0.7.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.7.0"},{name:"twitter:description",content:"Announcing the v0.7.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/05/release-v0.7.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.7.0.html",relativePath:"_blog/release-0.7.0.md",key:"v-0df1c3ce",path:"/blog/2021/05/release-v0.7.0/",headers:[{level:2,title:"What's new in v0.7.0",slug:"whats-new-in-v070"},{level:3,title:"New Signing API",slug:"new-signing-api"},{level:3,title:"Support Timelocks in the policy Module",slug:"support-timelocks-in-the-policy-module"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.8.0",frontmatter:{title:"Release v0.8.0",description:"Announcing the v0.8.0 release of BDK",authors:["Alekos Filini"],date:"2021-06-14",tags:["rust","release"],permalink:"/blog/2021/06/release-v0.8.0/",meta:[{property:"article:published_time",content:"2021-06-14T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.8.0"},{property:"og:description",content:"Announcing the v0.8.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/06/release-v0.8.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.8.0"},{name:"twitter:description",content:"Announcing the v0.8.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/06/release-v0.8.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.8.0.html",relativePath:"_blog/release-0.8.0.md",key:"v-75d11339",path:"/blog/2021/06/release-v0.8.0/",headers:[{level:2,title:"What's new in v0.8.0",slug:"whats-new-in-v080"},{level:3,title:"Getting the Derivation Index",slug:"getting-the-derivation-index"},{level:3,title:"Explicitly Enable non-ALL Sighashes",slug:"explicitly-enable-non-all-sighashes"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Release v0.9.0",frontmatter:{title:"Release v0.9.0",description:"Announcing the v0.9.0 release of BDK",authors:["Alekos Filini"],date:"2021-07-11",tags:["rust","release"],permalink:"/blog/2021/07/release-v0.9.0/",meta:[{property:"article:published_time",content:"2021-07-11T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.9.0"},{property:"og:description",content:"Announcing the v0.9.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/07/release-v0.9.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.9.0"},{name:"twitter:description",content:"Announcing the v0.9.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/07/release-v0.9.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.9.0.html",relativePath:"_blog/release-0.9.0.md",key:"v-1ac9ef4e",path:"/blog/2021/07/release-v0.9.0/",headers:[{level:2,title:"What's new in v0.9.0",slug:"whats-new-in-v090"},{level:2,title:"Bitcoin Core Blockchain Backend",slug:"bitcoin-core-blockchain-backend"},{level:2,title:"Updated TransactionDetails Struct",slug:"updated-transactiondetails-struct"},{level:2,title:"Verify Downloaded TXs",slug:"verify-downloaded-txs"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"The Road to BDK 1.0",frontmatter:{title:"The Road to BDK 1.0",description:"Outlining the plan for the 1.0 release of BDK",authors:["Alekos Filini"],date:"2022-10-03",tags:["architecture"],draft:!1,meta:[{property:"article:published_time",content:"2022-10-03T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"The Road to BDK 1.0"},{property:"og:description",content:"Outlining the plan for the 1.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/road_to_bdk_1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"The Road to BDK 1.0"},{name:"twitter:description",content:"Outlining the plan for the 1.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/road_to_bdk_1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"architecture"},{property:"article:tag",content:"architecture"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/road_to_bdk_1.html",relativePath:"_blog/road_to_bdk_1.md",key:"v-55969f39",path:"/blog/road-to-bdk-1/",headers:[{level:2,title:"Goals",slug:"goals"},{level:3,title:"Stable API",slug:"stable-api"},{level:3,title:"Upstreaming our code",slug:"upstreaming-our-code"},{level:3,title:"Partially Syncing a Wallet",slug:"partially-syncing-a-wallet"},{level:3,title:"no_std",slug:"no-std"},{level:3,title:"Lower MSRV",slug:"lower-msrv"},{level:2,title:"Architecture",slug:"architecture"},{level:2,title:"Timeline",slug:"timeline"},{level:2,title:"Feature Freezing BDK",slug:"feature-freezing-bdk"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"BDK-CLI",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK-CLI"},{property:"og:description",content:"The bdk-clihttps://github.com/bitcoindevkit/bdk-cli repo has an example interactive shell built\nusing the `bdk` library called `bdk-cli` that acts both as a reference implementation of a wallet\nand a tool to quickly experiment with descriptors and transactions."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK-CLI"},{name:"twitter:description",content:"The bdk-clihttps://github.com/bitcoindevkit/bdk-cli repo has an example interactive shell built\nusing the `bdk` library called `bdk-cli` that acts both as a reference implementation of a wallet\nand a tool to quickly experiment with descriptors and transactions."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/",relativePath:"bdk-cli/README.md",key:"v-009133c8",path:"/bdk-cli/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Compiler",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Compiler"},{property:"og:description",content:'If you want to play around with more complicated spending policies, you\'ll start to find it harder and harder to manually create the descriptors. This is where the miniscript compiler comes in! The `bdk` library\nincludes a very simple compiler that can produce a descriptor given a spending policy. The syntax used to encode the spending policy is very well described in this pagehttp://bitcoin.sipa.be/miniscript/,\nspecifically in the "Policy to Miniscript compiler". The compiler included in BDK does basically the same job, but produces descriptors for `rust-miniscript` that have some minor differences from\nthe ones made by the C++ implementation used in that website.'},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/compiler/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Compiler"},{name:"twitter:description",content:'If you want to play around with more complicated spending policies, you\'ll start to find it harder and harder to manually create the descriptors. This is where the miniscript compiler comes in! The `bdk` library\nincludes a very simple compiler that can produce a descriptor given a spending policy. The syntax used to encode the spending policy is very well described in this pagehttp://bitcoin.sipa.be/miniscript/,\nspecifically in the "Policy to Miniscript compiler". The compiler included in BDK does basically the same job, but produces descriptors for `rust-miniscript` that have some minor differences from\nthe ones made by the C++ implementation used in that website.'},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/compiler/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/compiler.html",relativePath:"bdk-cli/compiler.md",key:"v-7a315e41",path:"/bdk-cli/compiler/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Installation",slug:"installation"},{level:2,title:"Usage",slug:"usage"},{level:2,title:"Example",slug:"example"},{level:2,title:"Troubleshooting",slug:"troubleshooting"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Concept",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Concept"},{property:"og:description",content:"Now, in order to better grasp some of the design choices made by BDK, it's important to understand the main concept driving the development of this project, and the goal that it's trying to\nachieve."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/concept/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Concept"},{name:"twitter:description",content:"Now, in order to better grasp some of the design choices made by BDK, it's important to understand the main concept driving the development of this project, and the goal that it's trying to\nachieve."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/concept/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/concept.html",relativePath:"bdk-cli/concept.md",key:"v-f611a14e",path:"/bdk-cli/concept/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Installation",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Installation"},{property:"og:description",content:"The only requirement to run the `bdk-cli` tool is a Linux/macOS system with a fairly recent Rust\ntoolchain installed. Since Linux distros tend to lag behind with updates, the quickest way to\ninstall the Rust compiler and Cargo is rustup.rshttps://rustup.rs/. You can head there and\nfollow their instructions, after which you can test if everything went fine by running"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/installation/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Installation"},{name:"twitter:description",content:"The only requirement to run the `bdk-cli` tool is a Linux/macOS system with a fairly recent Rust\ntoolchain installed. Since Linux distros tend to lag behind with updates, the quickest way to\ninstall the Rust compiler and Cargo is rustup.rshttps://rustup.rs/. You can head there and\nfollow their instructions, after which you can test if everything went fine by running"},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/installation/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/installation.html",relativePath:"bdk-cli/installation.md",key:"v-3acb6e6a",path:"/bdk-cli/installation/",headers:[{level:2,title:"Requirements",slug:"requirements"},{level:2,title:"Installing the bdk-cli tool",slug:"installing-the-bdk-cli-tool"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Interface",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Interface"},{property:"og:description",content:"Remember the `bdk-cli --help` command you ran before? Let's analyze its output here to figure out the interface:"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/interface/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Interface"},{name:"twitter:description",content:"Remember the `bdk-cli --help` command you ran before? Let's analyze its output here to figure out the interface:"},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/interface/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/interface.html",relativePath:"bdk-cli/interface.md",key:"v-496cb7f9",path:"/bdk-cli/interface/",headers:[{level:2,title:"Flags",slug:"flags"},{level:3,title:"Verbosity",slug:"verbosity"},{level:2,title:"Options",slug:"options"},{level:2,title:"Subcommands",slug:"subcommands"},{level:2,title:"key",slug:"key"},{level:3,title:"generate",slug:"generate"},{level:3,title:"restore",slug:"restore"},{level:3,title:"derive",slug:"derive"},{level:2,title:"wallet",slug:"wallet"},{level:3,title:"Options",slug:"options-2"},{level:2,title:"Subcommands",slug:"subcommands-2"},{level:3,title:"broadcast",slug:"broadcast"},{level:3,title:"bump_fee",slug:"bump-fee"},{level:3,title:"combine_psbt",slug:"combine-psbt"},{level:3,title:"create_tx",slug:"create-tx"},{level:3,title:"extract_psbt",slug:"extract-psbt"},{level:3,title:"finalize_psbt",slug:"finalize-psbt"},{level:3,title:"get_balance",slug:"get-balance"},{level:3,title:"get_new_address",slug:"get-new-address"},{level:3,title:"list_transactions",slug:"list-transactions"},{level:3,title:"list_unspent",slug:"list-unspent"},{level:3,title:"policies",slug:"policies"},{level:3,title:"public_descriptor",slug:"public-descriptor"},{level:3,title:"help",slug:"help"},{level:3,title:"sign",slug:"sign"},{level:3,title:"sync",slug:"sync"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Introduction",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Introduction"},{property:"og:description",content:"This can also be used as an example application to create your own command line bitcoin wallet tool using bdk."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/introduction/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Introduction"},{name:"twitter:description",content:"This can also be used as an example application to create your own command line bitcoin wallet tool using bdk."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/introduction/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/introduction.html",relativePath:"bdk-cli/introduction.md",key:"v-0b3b65ea",path:"/bdk-cli/introduction/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Playground",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Playground"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/playground/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Playground"},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/playground/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/playground.html",relativePath:"bdk-cli/playground.md",key:"v-a76bccee",path:"/bdk-cli/playground/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Regtest",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Regtest"},{property:"og:description",content:"Running the `bdk-cli` tool in regtest requires having a local Electrum server set-up. There are two main implementations, `electrs`https://github.com/romanz/electrs in Rust and `ElectrumX`https://github.com/spesmilo/electrumx in Python. Since the Rust toolchain is already required to\nuse BDK, this page will focus mostly on the former."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/regtest/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Regtest"},{name:"twitter:description",content:"Running the `bdk-cli` tool in regtest requires having a local Electrum server set-up. There are two main implementations, `electrs`https://github.com/romanz/electrs in Rust and `ElectrumX`https://github.com/spesmilo/electrumx in Python. Since the Rust toolchain is already required to\nuse BDK, this page will focus mostly on the former."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/regtest/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/regtest.html",relativePath:"bdk-cli/regtest.md",key:"v-05d01c19",path:"/bdk-cli/regtest/",headers:[{level:2,title:"Troubleshooting",slug:"troubleshooting"},{level:2,title:"Bonus: Docker",slug:"bonus-docker"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{frontmatter:{cases:!0,sidebar:!1,tagline:"Bitcoin applications building with BDK",description:"A list of bitcoin applications and services building with BDK",actionText:"Add your project",actionLink:"https://github.com/orgs/bitcoindevkit/discussions/64",editLink:!1,lastUpdated:!1,meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Bitcoin applications building with BDK"},{property:"og:description",content:"A list of bitcoin applications and services building with BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/case-studies/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Bitcoin applications building with BDK"},{name:"twitter:description",content:"A list of bitcoin applications and services building with BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/case-studies/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/case-studies.html",relativePath:"case-studies.md",key:"v-11bf335e",path:"/case-studies/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Descriptors",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Descriptors"},{property:"og:description",content:'Descriptors are a compact and semi-standard way to easily encode, or "describe", how scripts and subsequently, addresses of a wallet should be generated. They can be especially helpful when working with multisigs or even\nmore complex scripts, where the structure of the script itself is not trivial. They are a big step forward in making wallets more portable across different tools and apps, because for the first time they create a common\nlanguage to describe a full bitcoin script that developers can use and integrate in their software.'},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/descriptors/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Descriptors"},{name:"twitter:description",content:'Descriptors are a compact and semi-standard way to easily encode, or "describe", how scripts and subsequently, addresses of a wallet should be generated. They can be especially helpful when working with multisigs or even\nmore complex scripts, where the structure of the script itself is not trivial. They are a big step forward in making wallets more portable across different tools and apps, because for the first time they create a common\nlanguage to describe a full bitcoin script that developers can use and integrate in their software.'},{name:"twitter:url",content:"https://bitcoindevkit.org/descriptors/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/descriptors/",relativePath:"descriptors/README.md",key:"v-a9236c10",path:"/descriptors/",headers:[{level:3,title:"Compatibility Matrix",slug:"compatibility-matrix"},{level:3,title:"Examples",slug:"examples"},{level:3,title:"Implementation Details",slug:"implementation-details"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Examples",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Examples"},{property:"og:description",content:"Click the links below and learn from community-built example projects."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/examples/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Examples"},{name:"twitter:description",content:"Click the links below and learn from community-built example projects."},{name:"twitter:url",content:"https://bitcoindevkit.org/examples/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/examples/",relativePath:"examples/README.md",key:"v-29f9f21c",path:"/examples/",headers:[{level:2,title:"BDK-CLI",slug:"bdk-cli"},{level:2,title:"DevkitWallet",slug:"devkitwallet"},{level:2,title:"Padawan Wallet",slug:"padawan-wallet"},{level:2,title:"BDKSwiftExampleWallet",slug:"bdkswiftexamplewallet"},{level:2,title:"Tatooine",slug:"tatooine"},{level:2,title:"SEBA Bank Proof of reserves",slug:"seba-bank-proof-of-reserves"},{level:2,title:"Stackmate",slug:"stackmate"},{level:2,title:"Spotbit",slug:"spotbit"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Bitcoin Dev Kit",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Bitcoin Dev Kit"},{property:"og:description",content:"The Bitcoin Dev Kit BDKhttps://github.com/bitcoindevkit project originally called Magical Bitcoin 🧙 aims to build a collection of tools and libraries that are designed to be a solid foundation for cross platform Bitcoin wallets, along with a fully working reference implementation wallets for various platforms.\nAll BDK components are designed to be lightweight and modular so that they can be adapted for virtually any use-case: from single-sig mobile wallets to multi-billion-dollar cold storage vaults."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/getting-started/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Bitcoin Dev Kit"},{name:"twitter:description",content:"The Bitcoin Dev Kit BDKhttps://github.com/bitcoindevkit project originally called Magical Bitcoin 🧙 aims to build a collection of tools and libraries that are designed to be a solid foundation for cross platform Bitcoin wallets, along with a fully working reference implementation wallets for various platforms.\nAll BDK components are designed to be lightweight and modular so that they can be adapted for virtually any use-case: from single-sig mobile wallets to multi-billion-dollar cold storage vaults."},{name:"twitter:url",content:"https://bitcoindevkit.org/getting-started/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/getting-started.html",relativePath:"getting-started.md",key:"v-4bcdac39",path:"/getting-started/",headers:[{level:2,title:"Initial Configuration",slug:"initial-configuration"},{level:2,title:"Internal Features",slug:"internal-features"},{level:2,title:"Playground",slug:"playground"},{level:2,title:"Descriptors",slug:"descriptors"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Supporters",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Supporters"},{property:"og:description",content:"The Bitcoin Dev Kit project is proudly supported by:"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/supporters/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Supporters"},{name:"twitter:description",content:"The Bitcoin Dev Kit project is proudly supported by:"},{name:"twitter:url",content:"https://bitcoindevkit.org/supporters/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/supporters/",relativePath:"supporters/README.md",key:"v-5245a0b2",path:"/supporters/",codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"BDK wallet with Bitcoin core RPC",frontmatter:{title:"BDK wallet with Bitcoin core RPC ",description:"Tutorial showing usage of Bitcoin core backend with BDK wallet",authors:["Rajarshi Maitra"],date:"2021-08-21",tags:["tutorial","BDK","Bitcoin Core","RPC","Wallet"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2021-08-21T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK wallet with Bitcoin core RPC"},{property:"og:description",content:"Tutorial showing usage of Bitcoin core backend with BDK wallet"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/Bitcoin_Core_RPC_Demo/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK wallet with Bitcoin core RPC"},{name:"twitter:description",content:"Tutorial showing usage of Bitcoin core backend with BDK wallet"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/Bitcoin_Core_RPC_Demo/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, BDK, Bitcoin Core, RPC, Wallet"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"Bitcoin Core"},{property:"article:tag",content:"RPC"},{property:"article:tag",content:"Wallet"}]},regularPath:"/tutorials/Bitcoin_Core_RPC_Demo.html",relativePath:"tutorials/Bitcoin_Core_RPC_Demo.md",key:"v-283d4479",path:"/tutorials/Bitcoin_Core_RPC_Demo/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Prerequisite",slug:"prerequisite"},{level:2,title:"Setting Up",slug:"setting-up"},{level:2,title:"Setting dependencies",slug:"setting-dependencies"},{level:2,title:"Getting Descriptors",slug:"getting-descriptors"},{level:2,title:"Talking to Bitcoin Core Programmatically",slug:"talking-to-bitcoin-core-programmatically"},{level:2,title:"Get some balance in core wallet.",slug:"get-some-balance-in-core-wallet"},{level:2,title:"Setup the BDK wallet",slug:"setup-the-bdk-wallet"},{level:2,title:"Sending Sats Around",slug:"sending-sats-around"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"bdk-cli basics multi-sig 2 of 3 tutorial",frontmatter:{title:"bdk-cli basics multi-sig 2 of 3 tutorial",description:"Tutorial using command-line to create a 2 of 3 multi-sig Wallet and Spend",authors:["waterstone"],date:"2022-10-17",tags:["tutorial","bdk-cli","multi-sig"],hidden:!1,draft:!1,meta:[{property:"article:published_time",content:"2022-10-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"bdk-cli basics multi-sig 2 of 3 tutorial"},{property:"og:description",content:"Tutorial using command-line to create a 2 of 3 multi-sig Wallet and Spend"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/bdk-cli_basics_multisig_2of3/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"bdk-cli basics multi-sig 2 of 3 tutorial"},{name:"twitter:description",content:"Tutorial using command-line to create a 2 of 3 multi-sig Wallet and Spend"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/bdk-cli_basics_multisig_2of3/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, bdk-cli, multi-sig"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"multi-sig"}]},regularPath:"/tutorials/bdk-cli_basics_multisig_2of3.html",relativePath:"tutorials/bdk-cli_basics_multisig_2of3.md",key:"v-e4749186",path:"/tutorials/bdk-cli_basics_multisig_2of3/",headers:[{level:2,title:"2-of-3 Multi-Signature Descriptor Wallet using bdk-cli",slug:"2-of-3-multi-signature-descriptor-wallet-using-bdk-cli"},{level:2,title:"Overview of the tutorial",slug:"overview-of-the-tutorial"},{level:2,title:"Step 1: Generate the XPRVs (Extended-Keys) and Save to environment variables",slug:"step-1-generate-the-xprvs-extended-keys-and-save-to-environment-variables"},{level:3,title:"1a: Verify XPRV environment variables are Active",slug:"1a-verify-xprv-environment-variables-are-active"},{level:2,title:"Step 2: Generate XPUBs (Extended Public Keys) & Save to environment variables",slug:"step-2-generate-xpubs-extended-public-keys-save-to-environment-variables"},{level:3,title:"2a: Verify XPUB environment variables",slug:"2a-verify-xpub-environment-variables"},{level:2,title:"Step 3: Create Single-Wallet Descriptors",slug:"step-3-create-single-wallet-descriptors"},{level:2,title:"Step 4: Create Multi-Sig-Descriptor Wallets",slug:"step-4-create-multi-sig-descriptor-wallets"},{level:3,title:"4a: Verify Multi-Sig-Descriptor environment variables are active",slug:"4a-verify-multi-sig-descriptor-environment-variables-are-active"},{level:2,title:"Step 5: Generate Receive Address by using Multi-Sig-Descriptor Wallets",slug:"step-5-generate-receive-address-by-using-multi-sig-descriptor-wallets"},{level:2,title:"Step 6: Send Testnet Bitcoin to the newly created receive-address",slug:"step-6-send-testnet-bitcoin-to-the-newly-created-receive-address"},{level:2,title:"Step 7: Sync one of the Multi-Sig Wallets",slug:"step-7-sync-one-of-the-multi-sig-wallets"},{level:2,title:"Step 8: Check Balance Multi-Sig Wallets",slug:"step-8-check-balance-multi-sig-wallets"},{level:2,title:"Step 9: Check Multi-Sig Policies on Descriptor Wallet",slug:"step-9-check-multi-sig-policies-on-descriptor-wallet"},{level:3,title:"SpendingPolicyRequired for complex descriptors",slug:"spendingpolicyrequired-for-complex-descriptors"},{level:2,title:"Step 10: Create a Transaction (PSBT)",slug:"step-10-create-a-transaction-psbt"},{level:3,title:"Export UNSIGNED_PSBT to environment variable",slug:"export-unsigned-psbt-to-environment-variable"},{level:3,title:"Verify UNSIGNED_PSBT environment variable",slug:"verify-unsigned-psbt-environment-variable"},{level:2,title:"Step 11: SIGN the Transaction",slug:"step-11-sign-the-transaction"},{level:3,title:"1st Wallet Signs the transaction",slug:"1st-wallet-signs-the-transaction"},{level:3,title:"2nd Wallet Signs the transaction",slug:"2nd-wallet-signs-the-transaction"},{level:2,title:"Step 12: Broadcast Transaction",slug:"step-12-broadcast-transaction"},{level:3,title:"Verify Transaction",slug:"verify-transaction"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Command Line introduction to Bitcoin Wallet Development using bdk-cli",frontmatter:{title:"Command Line introduction to Bitcoin Wallet Development using bdk-cli",description:"Intro to bdk-cli and wallet dev",authors:["waterst0ne"],date:"2022-09-22",tags:["bdk-cli","basics","novice"],meta:[{property:"article:published_time",content:"2022-09-22T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Command Line introduction to Bitcoin Wallet Development using bdk-cli"},{property:"og:description",content:"Intro to bdk-cli and wallet dev"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/bdk_cli_basics/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Command Line introduction to Bitcoin Wallet Development using bdk-cli"},{name:"twitter:description",content:"Intro to bdk-cli and wallet dev"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/bdk_cli_basics/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"bdk-cli, basics, novice"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"basics"},{property:"article:tag",content:"novice"}]},regularPath:"/tutorials/bdk_cli_basics.html",relativePath:"tutorials/bdk_cli_basics.md",key:"v-317756bd",path:"/tutorials/bdk_cli_basics/",headers:[{level:2,title:"Tutorial Goals",slug:"tutorial-goals"},{level:2,title:"A few things before you begin:",slug:"a-few-things-before-you-begin"},{level:3,title:"Outline of Tutorial and Installation notes:",slug:"outline-of-tutorial-and-installation-notes"},{level:3,title:"Brief Outline of Tutorial",slug:"brief-outline-of-tutorial"},{level:3,title:"Rust and Cargo installation:",slug:"rust-and-cargo-installation"},{level:3,title:"bdk-cli installation:",slug:"bdk-cli-installation"},{level:3,title:"Emoji Legend:",slug:"emoji-legend"},{level:2,title:"Step 0: Check Version of bdk-cli",slug:"step-0-check-version-of-bdk-cli"},{level:3,title:"Preview of bdk-cli help menu",slug:"preview-of-bdk-cli-help-menu"},{level:2,title:"Step 1: Seed Generate",slug:"step-1-seed-generate"},{level:3,title:"1a: Mnemonic word-list + XPRV (Extended Private Key) :key:",slug:"1a-mnemonic-word-list-xprv-extended-private-key-"},{level:3,title:"1b: Save XPRV (Extended Private Key) into environment variable",slug:"1b-save-xprv-extended-private-key-into-environment-variable"},{level:3,title:"1c: Verify environment variable XPRV_00 is active",slug:"1c-verify-environment-variable-xprv-00-is-active"},{level:3,title:"1d: Create Descriptor and Save into environment variable",slug:"1d-create-descriptor-and-save-into-environment-variable"},{level:3,title:"1e: Verify environment variable my_descriptor is active",slug:"1e-verify-environment-variable-my-descriptor-is-active"},{level:2,title:"Step 2: Generate Receive-Address",slug:"step-2-generate-receive-address"},{level:2,title:"Step 3: Send testnet bitcoin to the newly created receive-address",slug:"step-3-send-testnet-bitcoin-to-the-newly-created-receive-address"},{level:2,title:"Step 4: Sync the wallet",slug:"step-4-sync-the-wallet"},{level:2,title:"Step 5: Check the balance",slug:"step-5-check-the-balance"},{level:2,title:"Step 6: Create Transaction (PSBT)",slug:"step-6-create-transaction-psbt"},{level:3,title:"6a: export PSBT to environment-variable",slug:"6a-export-psbt-to-environment-variable"},{level:2,title:"Step 7: Sign Transaction (PSBT)",slug:"step-7-sign-transaction-psbt"},{level:3,title:"7a: export signed psbt to environment variable",slug:"7a-export-signed-psbt-to-environment-variable"},{level:2,title:"Step 8: Broadcast Transaction",slug:"step-8-broadcast-transaction"},{level:2,title:"Resources",slug:"resources"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Using BDK with Tor",frontmatter:{title:"Using BDK with Tor",description:"How to integrate Tor client to sync BDK wallet with tor enabled blockchain service",authors:["rorp"],date:"2023-01-03",tags:["tutorial","tor","wallet","blockchain"],meta:[{property:"article:published_time",content:"2023-01-03T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Using BDK with Tor"},{property:"og:description",content:"How to integrate Tor client to sync BDK wallet with tor enabled blockchain service"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/bdk_with_tor/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Using BDK with Tor"},{name:"twitter:description",content:"How to integrate Tor client to sync BDK wallet with tor enabled blockchain service"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/bdk_with_tor/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, tor, wallet, blockchain"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"tor"},{property:"article:tag",content:"wallet"},{property:"article:tag",content:"blockchain"}]},regularPath:"/tutorials/bdk_with_tor.html",relativePath:"tutorials/bdk_with_tor.md",key:"v-e8e842ee",path:"/tutorials/bdk_with_tor/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Prerequisite",slug:"prerequisite"},{level:2,title:"Setting Up",slug:"setting-up"},{level:2,title:"ElectrumBlockchain",slug:"electrumblockchain"},{level:2,title:"Blocking EsploraBlockchain",slug:"blocking-esplorablockchain"},{level:2,title:"Asynchronous EsploraBlockchain",slug:"asynchronous-esplorablockchain"},{level:2,title:"CompactFiltersBlockchain",slug:"compactfiltersblockchain"},{level:2,title:"Integrated Tor daemon",slug:"integrated-tor-daemon"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"BDK wallet as a BIP157 SPV light client",frontmatter:{title:"BDK wallet as a BIP157 SPV light client",description:"Tutorial showing usage of compact filters (BIP157) using bdk-cli command line tools",authors:["Rajarshi Maitra"],date:"2021-06-20",tags:["tutorial","BDK","bdk-cli","compact_filters","BIP157","Neutrino"],meta:[{property:"article:published_time",content:"2021-06-20T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK wallet as a BIP157 SPV light client"},{property:"og:description",content:"Tutorial showing usage of compact filters (BIP157) using bdk-cli command line tools"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/compact_filters_demo/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK wallet as a BIP157 SPV light client"},{name:"twitter:description",content:"Tutorial showing usage of compact filters (BIP157) using bdk-cli command line tools"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/compact_filters_demo/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, BDK, bdk-cli, compact_filters, BIP157, Neutrino"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"compact_filters"},{property:"article:tag",content:"BIP157"},{property:"article:tag",content:"Neutrino"}]},regularPath:"/tutorials/compact_filters_demo.html",relativePath:"tutorials/compact_filters_demo.md",key:"v-c6331d2a",path:"/tutorials/compact_filters_demo/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:3,title:"Compact Filters:",slug:"compact-filters"},{level:3,title:"BDK and Compact filters",slug:"bdk-and-compact-filters"},{level:3,title:"bdk-cli",slug:"bdk-cli"},{level:2,title:"Tutorial Scope",slug:"tutorial-scope"},{level:2,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Install and run bitcoind",slug:"install-and-run-bitcoind"},{level:3,title:"Install and run bdk-cli",slug:"install-and-run-bdk-cli"},{level:2,title:"Tutorial",slug:"tutorial"},{level:3,title:"Bitcoin Core Wallet Generation",slug:"bitcoin-core-wallet-generation"},{level:3,title:"BDK Wallet Generation",slug:"bdk-wallet-generation"},{level:3,title:"Recieve Coins",slug:"recieve-coins"},{level:3,title:"Creating a transaction.",slug:"creating-a-transaction"},{level:3,title:"Sign and Broadcast the transaction",slug:"sign-and-broadcast-the-transaction"},{level:3,title:"Confirming the Transaction",slug:"confirming-the-transaction"},{level:3,title:"Shutdown Docker",slug:"shutdown-docker"},{level:2,title:"End Words",slug:"end-words"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Making Descriptor-based paper wallets",frontmatter:{title:"Making Descriptor-based paper wallets",description:"Demonstrate how to create descriptor-based paper wallet and how to spend them with bdk",authors:["Riccardo Casatta","Steve Myers"],date:"2021-03-30",tags:["guide","descriptor","paper wallets"],meta:[{property:"article:published_time",content:"2021-03-30T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Making Descriptor-based paper wallets"},{property:"og:description",content:"Demonstrate how to create descriptor-based paper wallet and how to spend them with bdk"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/descriptor_based_paper_wallet/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Making Descriptor-based paper wallets"},{name:"twitter:description",content:"Demonstrate how to create descriptor-based paper wallet and how to spend them with bdk"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/descriptor_based_paper_wallet/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"guide, descriptor, paper wallets"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"descriptor"},{property:"article:tag",content:"paper wallets"}]},regularPath:"/tutorials/descriptor_based_paper_wallet.html",relativePath:"tutorials/descriptor_based_paper_wallet.md",key:"v-4432e00e",path:"/tutorials/descriptor_based_paper_wallet/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"About paper wallets",slug:"about-paper-wallets"},{level:2,title:"Descriptors",slug:"descriptors"},{level:2,title:"Example use case",slug:"example-use-case"},{level:2,title:"Creating the paper wallet",slug:"creating-the-paper-wallet"},{level:2,title:"BDK",slug:"bdk"},{level:2,title:"Funding tx",slug:"funding-tx"},{level:2,title:"Sweep tx",slug:"sweep-tx"},{level:3,title:"Step 1: Alice creates and signs a PSBT",slug:"step-1-alice-creates-and-signs-a-psbt"},{level:3,title:"Step 2: Barbara signs Alice's signed PSBT and broadcasts the tx",slug:"step-2-barbara-signs-alices-signed-psbt-and-broadcasts-the-tx"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"A Multisig between BDK and Core",frontmatter:{title:"A Multisig between BDK and Core",description:"Guide to setup a 2-of-2 multisig using Bitcoin Core and BDK",authors:["Gabriele Domenichini"],date:"2020-11-18",tags:["guide","descriptor"],meta:[{property:"article:published_time",content:"2020-11-18T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"A Multisig between BDK and Core"},{property:"og:description",content:"Guide to setup a 2-of-2 multisig using Bitcoin Core and BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/descriptors_in_the_wild/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"A Multisig between BDK and Core"},{name:"twitter:description",content:"Guide to setup a 2-of-2 multisig using Bitcoin Core and BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/descriptors_in_the_wild/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"guide, descriptor"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"descriptor"}]},regularPath:"/tutorials/descriptors_in_the_wild.html",relativePath:"tutorials/descriptors_in_the_wild.md",key:"v-48a004ce",path:"/tutorials/descriptors_in_the_wild/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"The use case",slug:"the-use-case"},{level:2,title:"The role of Descriptors",slug:"the-role-of-descriptors"},{level:2,title:"Our playground",slug:"our-playground"},{level:3,title:"1. Creating the seeds and the derived Extended Public keys",slug:"1-creating-the-seeds-and-the-derived-extended-public-keys"},{level:3,title:"2. Creation of the multi signature descriptor for each wallet",slug:"2-creation-of-the-multi-signature-descriptor-for-each-wallet"},{level:3,title:"3. Use each other's software to receive testnet coins from a faucet",slug:"3-use-each-others-software-to-receive-testnet-coins-from-a-faucet"},{level:3,title:"4. we return part of the satoshis received back to the faucet",slug:"4-we-return-part-of-the-satoshis-received-back-to-the-faucet"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"BDK-FLUTTER: Building Flutter Apps with BDK",frontmatter:{title:"BDK-FLUTTER: Building Flutter Apps with BDK",description:"A tutorial and guide to using bdk-flutter for building bitcoin apps",authors:["Bitcoin Zavior"],date:"2022-10-05",tags:["bitcoin","React Native","Flutter","iOS","Android","mobile","bdk-rn","bdk","tutorial","guide","wallet"],meta:[{property:"article:published_time",content:"2022-10-05T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK-FLUTTER: Building Flutter Apps with BDK"},{property:"og:description",content:"A tutorial and guide to using bdk-flutter for building bitcoin apps"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_flutter/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK-FLUTTER: Building Flutter Apps with BDK"},{name:"twitter:description",content:"A tutorial and guide to using bdk-flutter for building bitcoin apps"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_flutter/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"bitcoin, React Native, Flutter, iOS, Android, mobile, bdk-rn, bdk, tutorial, guide, wallet"},{property:"article:tag",content:"bitcoin"},{property:"article:tag",content:"React Native"},{property:"article:tag",content:"Flutter"},{property:"article:tag",content:"iOS"},{property:"article:tag",content:"Android"},{property:"article:tag",content:"mobile"},{property:"article:tag",content:"bdk-rn"},{property:"article:tag",content:"bdk"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"wallet"}]},regularPath:"/tutorials/exploring_bdk_flutter.html",relativePath:"tutorials/exploring_bdk_flutter.md",key:"v-2220834e",path:"/tutorials/exploring_bdk_flutter/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:3,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Bitcoin Basics",slug:"bitcoin-basics"},{level:2,title:"Bitcoin Dev Kit and bdk-flutter",slug:"bitcoin-dev-kit-and-bdk-flutter"},{level:2,title:"Getting Started",slug:"getting-started"},{level:2,title:"Setting up Flutter app structure",slug:"setting-up-flutter-app-structure"},{level:2,title:"Installing bdk-flutter",slug:"installing-bdk-flutter"},{level:2,title:"Configuring",slug:"configuring"},{level:2,title:"Importing bdk-flutter",slug:"importing-bdk-flutter"},{level:2,title:"Calling bdk-flutter methods",slug:"calling-bdk-flutter-methods"},{level:2,title:"Creating a wallet",slug:"creating-a-wallet"},{level:2,title:"UTXOs and balance",slug:"utxos-and-balance"},{level:2,title:"Restoring a wallet",slug:"restoring-a-wallet"},{level:2,title:"Sending bitcoin",slug:"sending-bitcoin"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"BDK-RN: Building React Native Apps with BDK",frontmatter:{title:"BDK-RN: Building React Native Apps with BDK",description:"A tutorial and guide to using bdk-rn for building bitcoin apps",authors:["Bitcoin Zavior"],date:"2022-08-05",tags:["bitcoin","React Native","iOS","Android","mobile","bdk-rn","bdk","tutorial","guide","wallet"],meta:[{property:"article:published_time",content:"2022-08-05T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK-RN: Building React Native Apps with BDK"},{property:"og:description",content:"A tutorial and guide to using bdk-rn for building bitcoin apps"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_rn/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK-RN: Building React Native Apps with BDK"},{name:"twitter:description",content:"A tutorial and guide to using bdk-rn for building bitcoin apps"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_rn/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"bitcoin, React Native, iOS, Android, mobile, bdk-rn, bdk, tutorial, guide, wallet"},{property:"article:tag",content:"bitcoin"},{property:"article:tag",content:"React Native"},{property:"article:tag",content:"iOS"},{property:"article:tag",content:"Android"},{property:"article:tag",content:"mobile"},{property:"article:tag",content:"bdk-rn"},{property:"article:tag",content:"bdk"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"wallet"}]},regularPath:"/tutorials/exploring_bdk_rn.html",relativePath:"tutorials/exploring_bdk_rn.md",key:"v-61999ca2",path:"/tutorials/exploring_bdk_rn/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:3,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Bitcoin Basics",slug:"bitcoin-basics"},{level:2,title:"Bitcoin Dev Kit and bdk-rn",slug:"bitcoin-dev-kit-and-bdk-rn"},{level:2,title:"Getting Started",slug:"getting-started"},{level:2,title:"Setting up styles and RN app structure",slug:"setting-up-styles-and-rn-app-structure"},{level:2,title:"Installing bdk-rn",slug:"installing-bdk-rn"},{level:2,title:"Importing bdk-rn",slug:"importing-bdk-rn"},{level:2,title:"Calling bdk-rn methods",slug:"calling-bdk-rn-methods"},{level:2,title:"Creating a wallet",slug:"creating-a-wallet"},{level:2,title:"UTXOs and balance",slug:"utxos-and-balance"},{level:2,title:"Restoring wallet",slug:"restoring-wallet"},{level:2,title:"Sending bitcoin",slug:"sending-bitcoin"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Hello World!",frontmatter:{title:"Hello World!",description:"Getting started using the BDK library in a very simple Rust project",authors:["Alekos Filini"],date:"2020-12-18",tags:["getting started","rust"],permalink:"/blog/2020/12/hello-world/",meta:[{property:"article:published_time",content:"2020-12-18T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Hello World!"},{property:"og:description",content:"Getting started using the BDK library in a very simple Rust project"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2020/12/hello-world/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Hello World!"},{name:"twitter:description",content:"Getting started using the BDK library in a very simple Rust project"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2020/12/hello-world/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"getting started, rust"},{property:"article:tag",content:"getting started"},{property:"article:tag",content:"rust"}]},regularPath:"/tutorials/hello-world.html",relativePath:"tutorials/hello-world.md",key:"v-b29a7bce",path:"/blog/2020/12/hello-world/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Design Goals",slug:"design-goals"},{level:2,title:"The Wallet Structure",slug:"the-wallet-structure"},{level:2,title:"Custom Database and Blockchain types",slug:"custom-database-and-blockchain-types"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Hidden Powers of Miniscript Policy & Descriptors",frontmatter:{title:"Hidden Powers of Miniscript Policy & Descriptors",description:"Introduction to Descriptor and Miniscript, making a Multisig Wallet and Testing Miniscript Policies",authors:["Sandipan Dey","Rajarshi Maitra"],date:"2022-01-02",tags:["tutorial","bdk","bdk-cli","miniscript","descriptor","bitcoin-cli"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-01-02T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Hidden Powers of Miniscript Policy & Descriptors"},{property:"og:description",content:"Introduction to Descriptor and Miniscript, making a Multisig Wallet and Testing Miniscript Policies"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/hidden-power-of-bitcoin/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Hidden Powers of Miniscript Policy & Descriptors"},{name:"twitter:description",content:"Introduction to Descriptor and Miniscript, making a Multisig Wallet and Testing Miniscript Policies"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/hidden-power-of-bitcoin/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, bdk, bdk-cli, miniscript, descriptor, bitcoin-cli"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"bdk"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"miniscript"},{property:"article:tag",content:"descriptor"},{property:"article:tag",content:"bitcoin-cli"}]},regularPath:"/tutorials/hidden-power-of-bitcoin.html",relativePath:"tutorials/hidden-power-of-bitcoin.md",key:"v-1a26d7ce",path:"/tutorials/hidden-power-of-bitcoin/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Script",slug:"script"},{level:2,title:"Miniscript",slug:"miniscript"},{level:2,title:"Descriptors",slug:"descriptors"},{level:2,title:"Where it all comes together...",slug:"where-it-all-comes-together"},{level:3,title:"Keys and Generating Addresses",slug:"keys-and-generating-addresses"},{level:3,title:"Making a MultiSig Descriptor for Funds",slug:"making-a-multisig-descriptor-for-funds"},{level:2,title:"Retention Bonus - Smart Contract with Bitcoin",slug:"retention-bonus-smart-contract-with-bitcoin"},{level:2,title:"Inspirations",slug:"inspirations"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Spending Policy Decoded",frontmatter:{title:"Spending Policy Decoded",description:"Demonstrate how to use a descriptor wallet with different spending policies",authors:["Steve Myers","thunderbiscuit"],date:"2021-02-23",tags:["guide","descriptor"],meta:[{property:"article:published_time",content:"2021-02-23T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Spending Policy Decoded"},{property:"og:description",content:"Demonstrate how to use a descriptor wallet with different spending policies"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/spending_policy_demo/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Spending Policy Decoded"},{name:"twitter:description",content:"Demonstrate how to use a descriptor wallet with different spending policies"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/spending_policy_demo/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"guide, descriptor"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"descriptor"}]},regularPath:"/tutorials/spending_policy_demo.html",relativePath:"tutorials/spending_policy_demo.md",key:"v-4883b547",path:"/tutorials/spending_policy_demo/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Initial Setup",slug:"initial-setup"},{level:3,title:"Step 0: Install a recent version bdk-cli",slug:"step-0-install-a-recent-version-bdk-cli"},{level:3,title:"Step 1: Generate private extended keys",slug:"step-1-generate-private-extended-keys"},{level:3,title:"Step 2: Extract private extended keys",slug:"step-2-extract-private-extended-keys"},{level:3,title:"Step 3: Derive public extended keys",slug:"step-3-derive-public-extended-keys"},{level:3,title:"Step 4: Create wallet descriptors for each participant",slug:"step-4-create-wallet-descriptors-for-each-participant"},{level:2,title:"Policy A. Three signatures",slug:"policy-a-three-signatures"},{level:3,title:"Step 1a: Create a testnet segwit0 receive address",slug:"step-1a-create-a-testnet-segwit0-receive-address"},{level:3,title:"Step 2a: Send testnet bitcoin from a faucet to receive address",slug:"step-2a-send-testnet-bitcoin-from-a-faucet-to-receive-address"},{level:3,title:"Step 3a: Sync participant wallets and confirm balance",slug:"step-3a-sync-participant-wallets-and-confirm-balance"},{level:3,title:"Step 4a: View wallet spending policies",slug:"step-4a-view-wallet-spending-policies"},{level:3,title:"Step 5a: Create spending transaction",slug:"step-5a-create-spending-transaction"},{level:3,title:"Step 6a: Sign and finalize PSBTs",slug:"step-6a-sign-and-finalize-psbts"},{level:3,title:"Step 7a: Broadcast finalized PSBT",slug:"step-7a-broadcast-finalized-psbt"},{level:3,title:"Step 8a: Confirm transaction included in a testnet block",slug:"step-8a-confirm-transaction-included-in-a-testnet-block"},{level:2,title:"Policy B. Two signatures after a relative time lock",slug:"policy-b-two-signatures-after-a-relative-time-lock"},{level:3,title:"Step 1b: Create a new testnet receive address",slug:"step-1b-create-a-new-testnet-receive-address"},{level:3,title:"Step 2b: Fund new address from testnet faucet",slug:"step-2b-fund-new-address-from-testnet-faucet"},{level:3,title:"Step 3b: Sync wallet and confirm wallet balance",slug:"step-3b-sync-wallet-and-confirm-wallet-balance"},{level:3,title:"Step 4b: Create spending transaction",slug:"step-4b-create-spending-transaction"},{level:3,title:"Step 5b: Sign and finalize PSBTs",slug:"step-5b-sign-and-finalize-psbts"},{level:3,title:"Step 6b: Broadcast finalized PSBT",slug:"step-6b-broadcast-finalized-psbt"},{level:3,title:"Step 7b: View confirmed transaction",slug:"step-7b-view-confirmed-transaction"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{title:"Using BDK with hardware wallets",frontmatter:{title:"Using BDK with hardware wallets",description:"Tutorial showing how to send funds to a HW and then spend from it using BDK",authors:["danielabrozzoni"],date:"2022-10-27",tags:["BDK","Development","Hardware Wallets"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-10-27T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Using BDK with hardware wallets"},{property:"og:description",content:"Tutorial showing how to send funds to a HW and then spend from it using BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/using_bdk_with_hardware_wallets/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Using BDK with hardware wallets"},{name:"twitter:description",content:"Tutorial showing how to send funds to a HW and then spend from it using BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/using_bdk_with_hardware_wallets/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, Development, Hardware Wallets"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"Development"},{property:"article:tag",content:"Hardware Wallets"}]},regularPath:"/tutorials/using_bdk_with_hardware_wallets.html",relativePath:"tutorials/using_bdk_with_hardware_wallets.md",key:"v-35b03e19",path:"/tutorials/using_bdk_with_hardware_wallets/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Prerequisites",slug:"prerequisites"},{level:2,title:"Initial setup",slug:"initial-setup"},{level:2,title:"Finding the hardware wallet",slug:"finding-the-hardware-wallet"},{level:2,title:"Receiving funds",slug:"receiving-funds"},{level:2,title:"Spending funds",slug:"spending-funds"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/4/2023, 2:57:16 PM",lastUpdatedTimestamp:1696431436e3},{frontmatter:{layout:"IndexPost",title:"Blog",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/",key:"v-424df898",path:"/blog/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterKey",title:"Tags",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/",key:"v-619df59e",path:"/blog/tags/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterKey",title:"Authors",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/",key:"v-b0968728",path:"/blog/author/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"architecture ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/architecture/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/architecture/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/architecture/",key:"v-c4494744",path:"/blog/tags/architecture/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"BDK-RN ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/BDK-RN/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/BDK-RN/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/BDK-RN/",key:"v-876cfade",path:"/blog/tags/BDK-RN/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Development ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Development/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Development/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Development/",key:"v-3acc51dc",path:"/blog/tags/Development/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Architecture ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Architecture/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Architecture/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Architecture/",key:"v-650ae784",path:"/blog/tags/Architecture/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"BDK ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/BDK/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/BDK/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/BDK/",key:"v-5f2600b8",path:"/blog/tags/BDK/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bindings ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bindings/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bindings/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bindings/",key:"v-1296a8fa",path:"/blog/tags/bindings/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"fee ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/fee/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/fee/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/fee/",key:"v-5f0447f2",path:"/blog/tags/fee/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"machine learning ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/machine learning/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/machine learning/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/machine%20learning/",key:"v-e2317b12",path:"/blog/tags/machine learning/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"taproot ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/taproot/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/taproot/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/taproot/",key:"v-57f3a168",path:"/blog/tags/taproot/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"miniscript ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/miniscript/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/miniscript/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/miniscript/",key:"v-ef7c3fa2",path:"/blog/tags/miniscript/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Hardware Wallets ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Hardware Wallets/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Hardware Wallets/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Hardware%20Wallets/",key:"v-640144b2",path:"/blog/tags/Hardware Wallets/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"coin selection ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/coin selection/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/coin selection/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/coin%20selection/",key:"v-74edfe92",path:"/blog/tags/coin selection/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"development ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/development/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/development/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/development/",key:"v-4e62fa1c",path:"/blog/tags/development/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"summer of bitcoin ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/summer of bitcoin/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/summer of bitcoin/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/summer%20of%20bitcoin/",key:"v-0159a747",path:"/blog/tags/summer of bitcoin/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"security ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/security/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/security/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/security/",key:"v-0755ed11",path:"/blog/tags/security/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"rust ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/rust/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/rust/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/rust/",key:"v-3fee41ed",path:"/blog/tags/rust/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"release ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/release/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/release/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/release/",key:"v-543950a6",path:"/blog/tags/release/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"tutorial ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/tutorial/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/tutorial/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/tutorial/",key:"v-da8c869a",path:"/blog/tags/tutorial/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Bitcoin Core ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Bitcoin Core/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Bitcoin Core/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Bitcoin%20Core/",key:"v-62bbf2ad",path:"/blog/tags/Bitcoin Core/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"RPC ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/RPC/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/RPC/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/RPC/",key:"v-5f171cb0",path:"/blog/tags/RPC/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Wallet ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Wallet/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Wallet/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Wallet/",key:"v-4696dfd8",path:"/blog/tags/Wallet/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bdk-cli ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bdk-cli/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bdk-cli/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bdk-cli/",key:"v-c711ccde",path:"/blog/tags/bdk-cli/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"multi-sig ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/multi-sig/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/multi-sig/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/multi-sig/",key:"v-655ee4a0",path:"/blog/tags/multi-sig/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"basics ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/basics/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/basics/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/basics/",key:"v-e646a928",path:"/blog/tags/basics/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"novice ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/novice/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/novice/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/novice/",key:"v-1fb58ffb",path:"/blog/tags/novice/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"tor ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/tor/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/tor/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/tor/",key:"v-5ef73f54",path:"/blog/tags/tor/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"wallet ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/wallet/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/wallet/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/wallet/",key:"v-39437010",path:"/blog/tags/wallet/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"blockchain ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/blockchain/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/blockchain/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/blockchain/",key:"v-7c8563fd",path:"/blog/tags/blockchain/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"compact_filters ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/compact_filters/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/compact_filters/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/compact_filters/",key:"v-baacba64",path:"/blog/tags/compact_filters/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"BIP157 ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/BIP157/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/BIP157/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/BIP157/",key:"v-75ccd5f2",path:"/blog/tags/BIP157/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Neutrino ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Neutrino/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Neutrino/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Neutrino/",key:"v-4fed1c23",path:"/blog/tags/Neutrino/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"guide ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/guide/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/guide/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/guide/",key:"v-a9e0285e",path:"/blog/tags/guide/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"descriptor ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/descriptor/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/descriptor/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/descriptor/",key:"v-733ed37c",path:"/blog/tags/descriptor/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"paper wallets ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/paper wallets/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/paper wallets/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/paper%20wallets/",key:"v-1144be8a",path:"/blog/tags/paper wallets/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bitcoin ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bitcoin/",key:"v-915f8322",path:"/blog/tags/bitcoin/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"React Native ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/React Native/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/React Native/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/React%20Native/",key:"v-bf53d4d4",path:"/blog/tags/React Native/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Flutter ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Flutter/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Flutter/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Flutter/",key:"v-07eeb15e",path:"/blog/tags/Flutter/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"iOS ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/iOS/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/iOS/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/iOS/",key:"v-5f023740",path:"/blog/tags/iOS/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Android ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Android/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Android/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Android/",key:"v-414e735e",path:"/blog/tags/Android/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"mobile ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/mobile/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/mobile/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/mobile/",key:"v-2c94bf22",path:"/blog/tags/mobile/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bdk-rn ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bdk-rn/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bdk-rn/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bdk-rn/",key:"v-dd212a9e",path:"/blog/tags/bdk-rn/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bdk ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bdk/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bdk/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bdk/",key:"v-5f07f0f8",path:"/blog/tags/bdk/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"getting started ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/getting started/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/getting started/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/getting%20started/",key:"v-79c3de4b",path:"/blog/tags/getting started/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bitcoin-cli ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin-cli/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin-cli/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bitcoin-cli/",key:"v-01a03a08",path:"/blog/tags/bitcoin-cli/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Lloyd Fournier ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Lloyd Fournier/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Lloyd Fournier/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Lloyd%20Fournier/",key:"v-600b5b28",path:"/blog/author/Lloyd Fournier/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Bitcoin Zavior ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Bitcoin Zavior/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Bitcoin Zavior/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Bitcoin%20Zavior/",key:"v-37829241",path:"/blog/author/Bitcoin Zavior/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"thunderbiscuit ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/thunderbiscuit/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/thunderbiscuit/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/thunderbiscuit/",key:"v-5d54001e",path:"/blog/author/thunderbiscuit/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Riccardo Casatta ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Riccardo Casatta/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Riccardo Casatta/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Riccardo%20Casatta/",key:"v-624fd61e",path:"/blog/author/Riccardo Casatta/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Alekos Filini ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Alekos%20Filini/",key:"v-ad00c09c",path:"/blog/author/Alekos Filini/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Wszdexdrf ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Wszdexdrf/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Wszdexdrf/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Wszdexdrf/",key:"v-4eeab648",path:"/blog/author/Wszdexdrf/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"César Alvarez Vallero ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/César Alvarez Vallero/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/César Alvarez Vallero/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/C%C3%A9sar%20Alvarez%20Vallero/",key:"v-a0d840b0",path:"/blog/author/César Alvarez Vallero/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Rajarshi Maitra ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Rajarshi Maitra/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Rajarshi Maitra/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Rajarshi%20Maitra/",key:"v-82e16b5c",path:"/blog/author/Rajarshi Maitra/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"waterstone ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/waterstone/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/waterstone/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/waterstone/",key:"v-3e85f455",path:"/blog/author/waterstone/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"waterst0ne ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/waterst0ne/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/waterst0ne/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/waterst0ne/",key:"v-3e6950f4",path:"/blog/author/waterst0ne/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"rorp ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/rorp/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/rorp/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/rorp/",key:"v-d2b26530",path:"/blog/author/rorp/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Steve Myers ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Steve Myers/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Steve Myers/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Steve%20Myers/",key:"v-a354115e",path:"/blog/author/Steve Myers/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Gabriele Domenichini ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Gabriele Domenichini/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Gabriele Domenichini/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Gabriele%20Domenichini/",key:"v-6b564fb4",path:"/blog/author/Gabriele Domenichini/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Sandipan Dey ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Sandipan Dey/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Sandipan Dey/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Sandipan%20Dey/",key:"v-91c10894",path:"/blog/author/Sandipan Dey/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"danielabrozzoni ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/danielabrozzoni/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/danielabrozzoni/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/danielabrozzoni/",key:"v-754a45a4",path:"/blog/author/danielabrozzoni/",codeSwitcherOptions:{}},{frontmatter:{layout:"DirectoryPagination",title:"Page 2",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/page/2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/page/2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/page/2/",key:"v-c3507bb6",path:"/blog/page/2/",codeSwitcherOptions:{}},{frontmatter:{layout:"DirectoryPagination",title:"Alekos Filini - Page 2",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/page/2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/page/2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Alekos%20Filini/page/2/",key:"v-5f2ac9cb",path:"/blog/author/Alekos Filini/page/2/",codeSwitcherOptions:{}}],themeConfig:{domain:"https://bitcoindevkit.org",logo:"/img/logo.svg",displayAllHeaders:!1,repo:"bitcoindevkit/bitcoindevkit.org",docsDir:"docs",editLinks:!0,sidebarDepth:0,nav:[{text:"Docs",link:"/getting-started/"},{text:"Tutorials",link:"/tutorials/hello-world"},{text:"Case Studies",link:"/case-studies"},{text:"Blog",link:"/blog/"},{text:"Discord",link:"https://discord.gg/dstn4dQ"},{text:"GitHub",link:"https://github.com/bitcoindevkit",rel:"noopener noreferrer"}],sidebar:{"/_blog/":[{title:"Blog",collapsable:!1,children:[["/blog/","Articles"],["/blog/tags/","Tags"],["/blog/author/","Authors"]]}],"/blog/":[{title:"Blog",collapsable:!1,children:[["/blog/","Articles"],["/blog/tags/","Tags"],["/blog/author/","Authors"]]}],"/tutorials/":[{title:"Tutorials",collapsable:!1,children:["/tutorials/hello-world","/tutorials/Bitcoin_Core_RPC_Demo","/tutorials/compact_filters_demo","/tutorials/descriptors_in_the_wild","/tutorials/hidden-power-of-bitcoin","/tutorials/descriptor_based_paper_wallet","/tutorials/spending_policy_demo","/tutorials/exploring_bdk_rn","/tutorials/using_bdk_with_hardware_wallets","/tutorials/exploring_bdk_flutter","/tutorials/bdk_cli_basics","/tutorials/bdk-cli_basics_multisig_2of3","/tutorials/bdk_with_tor"]}],"/":[{title:"Documentation",collapsable:!1,children:[["/getting-started","Getting Started"],{title:"BDK-CLI",collapsable:!0,children:["/bdk-cli/introduction","/bdk-cli/installation","/bdk-cli/concept","/bdk-cli/interface","/bdk-cli/regtest","/bdk-cli/compiler","/bdk-cli/playground"]},"/descriptors/","/examples/"]},{title:"API Reference",collapsable:!1,children:[["https://docs.rs/bdk/","Rust Stable Docs"],["https://bitcoindevkit.org/docs-rs/bdk/nightly/latest/bdk/","Rust Nightly Docs"],["https://bitcoindevkit.org/android/","Android Docs"],["https://bitcoindevkit.org/jvm/","Kotlin/JVM Docs"],["https://bitcoindevkit.org/java/","Java Docs"]]}]},footer:{links:[{title:"Docs",children:[{text:"Getting Started",link:"/getting-started/"},{text:"BDK-CLI",link:"/bdk-cli/installation/"},{text:"Descriptors",link:"/descriptors/"}]},{title:"Community",children:[{text:"GitHub",link:"https://github.com/bitcoindevkit",rel:"noopener noreferrer"},{text:"Twitter",link:"https://twitter.com/intent/follow?screen_name=bitcoindevkit",rel:"noopener noreferrer"},{text:"Chat on Discord",link:"https://discord.gg/dstn4dQ",rel:"noopener noreferrer"}]},{title:"More",children:[{text:"Blog",link:"/blog/"},{text:"Supporters",link:"/supporters/"}]}],copyright:"Copyright © 2023 BDK Developers"}}},{COLOR_MODES:Wc,STORE_ATTR:Hc,setColorMode:Vc}=n(109),qc=t=>"Enter"===t.code||13===(t.keyCode||t.which),Gc=t=>{const e=t.target.matches("#algolia-search-input")&&qc(t);(t.target.matches(".ds-dropdown-menu *")||e)&&document.getElementById("algolia-search-input").blur(),t.target.matches(".ytEmbed")&&(t.preventDefault(),(t=>{const e=t.querySelector("iframe[data-src]");if(e){const t=e.getAttribute("data-src");e.setAttribute("src",t)}})(t.target))};if("undefined"==typeof process||"server"!==process.env.VUE_ENV){const t=window.matchMedia("(prefers-color-scheme: dark)").matches?Wc[1]:Wc[0],e=window.localStorage.getItem(Hc);Vc(Wc.includes(e)?e:t)}n(243);Vn.component("Badge",()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,410))),Vn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,361))),Vn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,362)));n(244);var Zc={props:{color:{required:!1,default:"rgb(66, 185, 131)"}}},Xc=(n(245),Object(Kc.a)(Zc,(function(){return(0,this._self._c)("div",{staticClass:"spinner",style:{background:this.color}})}),[],!1,null,"1bbcb91a",null).exports);const Yc={name:"Mermaid",props:{id:{type:String,required:!0},graph:{type:String,required:!0}},data:()=>({svg:void 0}),render(t){return void 0===this.svg?t("Loading"):t("div",{domProps:{innerHTML:this.svg,style:"width: 100%"}})},mounted(){n.e(63).then(n.t.bind(null,350,7)).then(t=>{t.initialize({startOnLoad:!0});let e=document.createElement("div");document.body.appendChild(e),t.render(this.id,this.graph,t=>{this.svg=t,document.body.removeChild(e)},e)})},components:{Loading:Xc}};var Jc=n(95),Qc=n.n(Jc);n(246);Vn.component("CodeSwitcher",()=>n.e(19).then(n.bind(null,363)));var ts={tags:{architecture:{key:"architecture",scope:"tags",path:"/blog/tags/architecture/",pageKeys:["v-2cebe183","v-55969f39"]},"BDK-RN":{key:"BDK-RN",scope:"tags",path:"/blog/tags/BDK-RN/",pageKeys:["v-3eaa044d"]},Development:{key:"Development",scope:"tags",path:"/blog/tags/Development/",pageKeys:["v-3eaa044d","v-11d64359","v-35b03e19"]},Architecture:{key:"Architecture",scope:"tags",path:"/blog/tags/Architecture/",pageKeys:["v-3eaa044d"]},BDK:{key:"BDK",scope:"tags",path:"/blog/tags/BDK/",pageKeys:["v-3875825f","v-9145467a","v-2cf72b39","v-11d64359","v-d0375c8e","v-283d4479","v-c6331d2a","v-35b03e19"]},bindings:{key:"bindings",scope:"tags",path:"/blog/tags/bindings/",pageKeys:["v-3875825f"]},fee:{key:"fee",scope:"tags",path:"/blog/tags/fee/",pageKeys:["v-015729b9","v-2c605799","v-57698579"]},"machine learning":{key:"machine learning",scope:"tags",path:"/blog/tags/machine learning/",pageKeys:["v-015729b9","v-2c605799","v-57698579"]},taproot:{key:"taproot",scope:"tags",path:"/blog/tags/taproot/",pageKeys:["v-9145467a","v-2cf72b39"]},miniscript:{key:"miniscript",scope:"tags",path:"/blog/tags/miniscript/",pageKeys:["v-9145467a","v-2cf72b39","v-10852eea","v-1a26d7ce"]},"Hardware Wallets":{key:"Hardware Wallets",scope:"tags",path:"/blog/tags/Hardware Wallets/",pageKeys:["v-11d64359","v-35b03e19"]},"coin selection":{key:"coin selection",scope:"tags",path:"/blog/tags/coin selection/",pageKeys:["v-d0375c8e"]},development:{key:"development",scope:"tags",path:"/blog/tags/development/",pageKeys:["v-d0375c8e"]},"summer of bitcoin":{key:"summer of bitcoin",scope:"tags",path:"/blog/tags/summer of bitcoin/",pageKeys:["v-d0375c8e"]},security:{key:"security",scope:"tags",path:"/blog/tags/security/",pageKeys:["v-10852eea"]},rust:{key:"rust",scope:"tags",path:"/blog/tags/rust/",pageKeys:["v-edd5570e","v-05df4999","v-faad828e","v-0119984e","v-7c3d28f9","v-0df1c3ce","v-75d11339","v-1ac9ef4e","v-b29a7bce"]},release:{key:"release",scope:"tags",path:"/blog/tags/release/",pageKeys:["v-edd5570e","v-05df4999","v-faad828e","v-0119984e","v-7c3d28f9","v-0df1c3ce","v-75d11339","v-1ac9ef4e"]},tutorial:{key:"tutorial",scope:"tags",path:"/blog/tags/tutorial/",pageKeys:["v-283d4479","v-e4749186","v-e8e842ee","v-c6331d2a","v-2220834e","v-61999ca2","v-1a26d7ce"]},"Bitcoin Core":{key:"Bitcoin Core",scope:"tags",path:"/blog/tags/Bitcoin Core/",pageKeys:["v-283d4479"]},RPC:{key:"RPC",scope:"tags",path:"/blog/tags/RPC/",pageKeys:["v-283d4479"]},Wallet:{key:"Wallet",scope:"tags",path:"/blog/tags/Wallet/",pageKeys:["v-283d4479"]},"bdk-cli":{key:"bdk-cli",scope:"tags",path:"/blog/tags/bdk-cli/",pageKeys:["v-e4749186","v-317756bd","v-c6331d2a","v-1a26d7ce"]},"multi-sig":{key:"multi-sig",scope:"tags",path:"/blog/tags/multi-sig/",pageKeys:["v-e4749186"]},basics:{key:"basics",scope:"tags",path:"/blog/tags/basics/",pageKeys:["v-317756bd"]},novice:{key:"novice",scope:"tags",path:"/blog/tags/novice/",pageKeys:["v-317756bd"]},tor:{key:"tor",scope:"tags",path:"/blog/tags/tor/",pageKeys:["v-e8e842ee"]},wallet:{key:"wallet",scope:"tags",path:"/blog/tags/wallet/",pageKeys:["v-e8e842ee","v-2220834e","v-61999ca2"]},blockchain:{key:"blockchain",scope:"tags",path:"/blog/tags/blockchain/",pageKeys:["v-e8e842ee"]},compact_filters:{key:"compact_filters",scope:"tags",path:"/blog/tags/compact_filters/",pageKeys:["v-c6331d2a"]},BIP157:{key:"BIP157",scope:"tags",path:"/blog/tags/BIP157/",pageKeys:["v-c6331d2a"]},Neutrino:{key:"Neutrino",scope:"tags",path:"/blog/tags/Neutrino/",pageKeys:["v-c6331d2a"]},guide:{key:"guide",scope:"tags",path:"/blog/tags/guide/",pageKeys:["v-4432e00e","v-48a004ce","v-2220834e","v-61999ca2","v-4883b547"]},descriptor:{key:"descriptor",scope:"tags",path:"/blog/tags/descriptor/",pageKeys:["v-4432e00e","v-48a004ce","v-1a26d7ce","v-4883b547"]},"paper wallets":{key:"paper wallets",scope:"tags",path:"/blog/tags/paper wallets/",pageKeys:["v-4432e00e"]},bitcoin:{key:"bitcoin",scope:"tags",path:"/blog/tags/bitcoin/",pageKeys:["v-2220834e","v-61999ca2"]},"React Native":{key:"React Native",scope:"tags",path:"/blog/tags/React Native/",pageKeys:["v-2220834e","v-61999ca2"]},Flutter:{key:"Flutter",scope:"tags",path:"/blog/tags/Flutter/",pageKeys:["v-2220834e"]},iOS:{key:"iOS",scope:"tags",path:"/blog/tags/iOS/",pageKeys:["v-2220834e","v-61999ca2"]},Android:{key:"Android",scope:"tags",path:"/blog/tags/Android/",pageKeys:["v-2220834e","v-61999ca2"]},mobile:{key:"mobile",scope:"tags",path:"/blog/tags/mobile/",pageKeys:["v-2220834e","v-61999ca2"]},"bdk-rn":{key:"bdk-rn",scope:"tags",path:"/blog/tags/bdk-rn/",pageKeys:["v-2220834e","v-61999ca2"]},bdk:{key:"bdk",scope:"tags",path:"/blog/tags/bdk/",pageKeys:["v-2220834e","v-61999ca2","v-1a26d7ce"]},"getting started":{key:"getting started",scope:"tags",path:"/blog/tags/getting started/",pageKeys:["v-b29a7bce"]},"bitcoin-cli":{key:"bitcoin-cli",scope:"tags",path:"/blog/tags/bitcoin-cli/",pageKeys:["v-1a26d7ce"]}},author:{"Lloyd Fournier":{key:"Lloyd Fournier",scope:"author",path:"/blog/author/Lloyd Fournier/",pageKeys:["v-2cebe183"]},"Bitcoin Zavior":{key:"Bitcoin Zavior",scope:"author",path:"/blog/author/Bitcoin Zavior/",pageKeys:["v-3eaa044d","v-2220834e","v-61999ca2"]},thunderbiscuit:{key:"thunderbiscuit",scope:"author",path:"/blog/author/thunderbiscuit/",pageKeys:["v-3875825f","v-4883b547"]},"Riccardo Casatta":{key:"Riccardo Casatta",scope:"author",path:"/blog/author/Riccardo Casatta/",pageKeys:["v-015729b9","v-2c605799","v-57698579","v-4432e00e"]},"Alekos Filini":{key:"Alekos Filini",scope:"author",path:"/blog/author/Alekos Filini/",pageKeys:["v-9145467a","v-2cf72b39","v-10852eea","v-edd5570e","v-05df4999","v-faad828e","v-0119984e","v-7c3d28f9","v-0df1c3ce","v-75d11339","v-1ac9ef4e","v-55969f39","v-b29a7bce"]},Wszdexdrf:{key:"Wszdexdrf",scope:"author",path:"/blog/author/Wszdexdrf/",pageKeys:["v-11d64359"]},"César Alvarez Vallero":{key:"César Alvarez Vallero",scope:"author",path:"/blog/author/César Alvarez Vallero/",pageKeys:["v-d0375c8e"]},"Rajarshi Maitra":{key:"Rajarshi Maitra",scope:"author",path:"/blog/author/Rajarshi Maitra/",pageKeys:["v-283d4479","v-c6331d2a","v-1a26d7ce"]},waterstone:{key:"waterstone",scope:"author",path:"/blog/author/waterstone/",pageKeys:["v-e4749186"]},waterst0ne:{key:"waterst0ne",scope:"author",path:"/blog/author/waterst0ne/",pageKeys:["v-317756bd"]},rorp:{key:"rorp",scope:"author",path:"/blog/author/rorp/",pageKeys:["v-e8e842ee"]},"Steve Myers":{key:"Steve Myers",scope:"author",path:"/blog/author/Steve Myers/",pageKeys:["v-4432e00e","v-4883b547"]},"Gabriele Domenichini":{key:"Gabriele Domenichini",scope:"author",path:"/blog/author/Gabriele Domenichini/",pageKeys:["v-48a004ce"]},"Sandipan Dey":{key:"Sandipan Dey",scope:"author",path:"/blog/author/Sandipan Dey/",pageKeys:["v-1a26d7ce"]},danielabrozzoni:{key:"danielabrozzoni",scope:"author",path:"/blog/author/danielabrozzoni/",pageKeys:["v-35b03e19"]}}};class es{constructor(t,e){this._metaMap=Object.assign({},t),Object.keys(this._metaMap).forEach(t=>{const{pageKeys:n}=this._metaMap[t];this._metaMap[t].pages=n.map(t=>function(t,e){for(let n=0;n{const{pages:n,path:r}=this._metaMap[e];t.push({name:e,pages:n,path:r})}),t}getItemByName(t){return this._metaMap[t]}}var ns={blog:(t,e)=>{const r=n(45);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1},tags:(t,e)=>{const r=n(45);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1},author:(t,e)=>{const r=n(45);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1}},rs={blog:function(t,e,n){return t.pid===n&&t.id===e},tags:function(t,e,n){const r=e;return["tags"].some(e=>{const n=t.frontmatter[e];return Array.isArray(n)?n.some(t=>t==r):n==r})},author:function(t,e,n){const r=e;return["author","authors"].some(e=>{const n=t.frontmatter[e];return Array.isArray(n)?n.some(t=>t==r):n==r})}},os=[{pid:"blog",id:"blog",filter:rs.blog,sorter:ns.blog,pages:[{path:"/blog/",interval:[0,9]},{path:"/blog/page/2/",interval:[10,19]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"architecture",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/architecture/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"BDK-RN",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/BDK-RN/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Development",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Development/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Architecture",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Architecture/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"BDK",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/BDK/",interval:[0,8]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bindings",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bindings/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"fee",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/fee/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"machine learning",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/machine learning/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"taproot",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/taproot/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"miniscript",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/miniscript/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Hardware Wallets",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Hardware Wallets/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"coin selection",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/coin selection/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"development",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/development/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"summer of bitcoin",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/summer of bitcoin/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"security",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/security/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"rust",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/rust/",interval:[0,9]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"release",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/release/",interval:[0,8]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"tutorial",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/tutorial/",interval:[0,7]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Bitcoin Core",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Bitcoin Core/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"RPC",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/RPC/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Wallet",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Wallet/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bdk-cli",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bdk-cli/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"multi-sig",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/multi-sig/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"basics",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/basics/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"novice",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/novice/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"tor",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/tor/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"wallet",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/wallet/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"blockchain",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/blockchain/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"compact_filters",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/compact_filters/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"BIP157",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/BIP157/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Neutrino",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Neutrino/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"guide",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/guide/",interval:[0,5]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"descriptor",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/descriptor/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"paper wallets",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/paper wallets/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bitcoin",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bitcoin/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"React Native",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/React Native/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Flutter",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Flutter/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"iOS",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/iOS/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Android",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Android/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"mobile",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/mobile/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bdk-rn",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bdk-rn/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bdk",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bdk/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"getting started",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/getting started/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bitcoin-cli",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bitcoin-cli/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Lloyd Fournier",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Lloyd Fournier/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Bitcoin Zavior",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Bitcoin Zavior/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"thunderbiscuit",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/thunderbiscuit/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Riccardo Casatta",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Riccardo Casatta/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Alekos Filini",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Alekos Filini/",interval:[0,9]},{path:"/blog/author/Alekos Filini/page/2/",interval:[10,13]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Wszdexdrf",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Wszdexdrf/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"César Alvarez Vallero",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/César Alvarez Vallero/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Rajarshi Maitra",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Rajarshi Maitra/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"waterstone",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/waterstone/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"waterst0ne",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/waterst0ne/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"rorp",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/rorp/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Steve Myers",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Steve Myers/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Gabriele Domenichini",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Gabriele Domenichini/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Sandipan Dey",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Sandipan Dey/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"danielabrozzoni",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/danielabrozzoni/",interval:[0,1]}],prevText:"Prev",nextText:"Next"}],is=n(96);const as=n.n(is)()("plugin-blog:pagination");class cs{constructor(t,e,n){as("pagination",t);const{pages:r,prevText:o,nextText:i}=t,{path:a}=n;this._prevText=o,this._nextText=i;for(let t=0,e=r.length;tt.filter(e,t.id,t.pid)).sort(t.sorter)}setIndexPage(t){this._indexPage=t}get length(){return this._paginationPages.length}get pages(){const[t,e]=this._currentPage.interval;return this._matchedPages.slice(t,e+1)}get hasPrev(){return 0!==this.paginationIndex}get prevLink(){return this.hasPrev?this.paginationIndex-1==0&&this._indexPage?this._indexPage:this._paginationPages[this.paginationIndex-1].path:null}get hasNext(){return this.paginationIndex!==this.length-1}get nextLink(){return this.hasNext?this._paginationPages[this.paginationIndex+1].path:null}get prevText(){return this._prevText}get nextText(){return this._nextText}getSpecificPageLink(t){return this._paginationPages[t].path}}const ss=new class{constructor(t){this.paginations=t}get pages(){return Vn.$vuepress.$get("siteData").pages}getPagination(t,e,n){as("id",e),as("pid",t);const r=this.paginations.filter(n=>n.id===e&&n.pid===t)[0];return new cs(r,this.pages,n)}}(os);var ls={comment:{enabled:!1,service:""},email:{enabled:!1},feed:{rss:!1,atom:!1,json:!1}},ps=[({router:t})=>{"undefined"!=typeof process&&"server"===process.env.VUE_ENV||t.onReady(()=>{const{app:e}=t;e.$once("hook:mounted",()=>{setTimeout(()=>{const{hash:t}=document.location;if(t.length>1){const e=t.substring(1),n=document.getElementById(e);n&&n.scrollIntoView()}},500)}),document.addEventListener("click",Gc),document.addEventListener("keyup",t=>{qc(t)&&Gc(t)})})},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component("CodeCopy",Sc)},({Vue:t})=>{t.component("Mermaid",Yc)},({Vue:t})=>t.use(Qc.a),{},{},({Vue:t})=>{const e=Object.keys(ts).map(t=>{const e=ts[t],n="$"+t;return{[n](){const{pages:t}=this.$site;return new es(e,t)},["$current"+(t.charAt(0).toUpperCase()+t.slice(1))](){const t=this.$route.meta.id;return this[n].getItemByName(t)}}}).reduce((t,e)=>(Object.assign(t,e),t),{});e.$frontmatterKey=function(){const t=this["$"+this.$route.meta.id];return t||null},t.mixin({computed:e})},({Vue:t})=>{t.mixin({computed:{$pagination(){return this.$route.meta.pid&&this.$route.meta.id?this.$getPagination(this.$route.meta.pid,this.$route.meta.id):null}},methods:{$getPagination(t,e){return e=e||t,ss.getPagination(t,e,this.$route)}}})},({Vue:t})=>{const e={$service:()=>ls};t.mixin({computed:e})}],us=[];class ds extends class{constructor(){this.store=new Vn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Vn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(ds.prototype,{getPageAsyncComponent:ac,getLayoutAsyncComponent:cc,getAsyncComponent:sc,getVueComponent:lc});var gs={install(t){const e=new ds;t.$vuepress=e,t.prototype.$vuepress=e}};function hs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var ms={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return uc("pageKey",e),Vn.component(e)||Vn.component(e,ac(e)),Vn.component(e)?t(e):t("")}},fs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},vs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},bs=(n(249),n(250),Object(Kc.a)(vs,(function(){var t=this._self._c;return t("span",[t("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"}},[t("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"}}),this._v(" "),t("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"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),ys={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Vn.config.productionTip=!1,Vn.use(Wa),Vn.use(gs),Vn.mixin(function(t,e,n=Vn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Vn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(hs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";hs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";hs(t,o)?r(o):hs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(ps.filter(t=>"function"==typeof t).map(e=>e({Vue:Vn,options:r,router:n,siteData:Uc,isServer:t})))}catch(t){console.error(t)}return{app:new Vn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},us.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file +var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function c(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function l(t){return"function"==typeof t}function p(t){return null!==t&&"object"==typeof t}var u=Object.prototype.toString;function d(t){return"[object Object]"===u.call(t)}function g(t){return"[object RegExp]"===u.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function m(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function f(t){return null==t?"":Array.isArray(t)||d(t)&&t.toString===u?JSON.stringify(t,null,2):String(t)}function v(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var k=Object.prototype.hasOwnProperty;function _(t,e){return k.call(t,e)}function x(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var D=/-(\w)/g,B=x((function(t){return t.replace(D,(function(t,e){return e?e.toUpperCase():""}))})),P=x((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),K=/\B([A-Z])/g,S=x((function(t){return t.replace(K,"-$1").toLowerCase()}));var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function C(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function O(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,J=Z&&Z.indexOf("edge/")>0;Z&&Z.indexOf("android");var Q=Z&&/iphone|ipad|ipod|ios/.test(Z);Z&&/chrome\/\d+/.test(Z),Z&&/phantomjs/.test(Z);var tt,et=Z&&Z.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"==typeof t&&/native code/.test(t.toString())}var st,lt="undefined"!=typeof Symbol&&ct(Symbol)&&"undefined"!=typeof Reflect&&ct(Reflect.ownKeys);st="undefined"!=typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var pt=null;function ut(t){void 0===t&&(t=null),t||pt&&pt._scope.off(),pt=t,t&&t._scope.on()}var dt=function(){function t(t,e,n,r,o,i,a,c){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),gt=function(t){void 0===t&&(t="");var e=new dt;return e.text=t,e.isComment=!0,e};function ht(t){return new dt(void 0,void 0,void 0,String(t))}function mt(t){var e=new dt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var ft=0,vt=[],bt=function(){function t(){this._pending=!1,this.id=ft++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,vt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Zt((l=t(l,"".concat(n||"","_").concat(r)))[0])&&Zt(u)&&(d[p]=ht(u.text+l[0].text),l.shift()),d.push.apply(d,l)):s(l)?Zt(u)?d[p]=ht(u.text+l):""!==l&&d.push(ht(l)):Zt(l)&&Zt(u)?d[p]=ht(u.text+l.text):(c(e._isVList)&&a(l.tag)&&i(l.key)&&a(n)&&(l.key="__vlist".concat(n,"_").concat(r,"__")),d.push(l)));return d}(t):void 0}function Zt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Xt(t,e){var n,r,i,c,s=null;if(o(t)||"string"==typeof t)for(s=new Array(t.length),n=0,r=t.length;n0,c=e?!!e.$stable:!a,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(c&&o&&o!==r&&s===o.$key&&!a&&!o.$hasNormal)return o;for(var l in i={},e)e[l]&&"$"!==l[0]&&(i[l]=me(t,n,l,e[l]))}else i={};for(var p in n)p in i||(i[p]=fe(n,p));return e&&Object.isExtensible(e)&&(e._normalized=i),H(i,"$stable",c),H(i,"$key",s),H(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=pt;ut(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Gt(n))&&n[0];return ut(e),n&&(!i||1===n.length&&i.isComment&&!ge(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function fe(t,e){return function(){return t[e]}}function ve(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};H(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||we(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:T(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return It(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ye(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ye(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function we(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var ke=null;function _e(t,e){return(t.__esModule||lt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),p(t)?e.extend(t):t}function xe(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(sn=function(){return ln.now()})}var pn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function un(){var t,e;for(cn=sn(),on=!0,tn.sort(pn),an=0;anan&&tn[n].id>t.id;)n--;tn.splice(n+1,0,t)}else tn.push(t);rn||(rn=!0,Re(un))}}function gn(t,e){if(t){for(var n=Object.create(null),r=lt?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!_(o,"default"))a=!1;else if(""===a||a===S(t)){var s=Fn(String,o.type);(s<0||c-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!g(t)&&t.test(e)}function Xn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var c=a.name;c&&!e(c)&&Yn(n,i,r,o)}}}function Yn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}Vn.prototype._init=function(t){var e=this;e._uid=Wn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Lt(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Tn(Hn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ge(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=ue(e._renderChildren,o),t.$scopedSlots=n?he(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return De(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return De(t,e,n,r,o,!0)};var i=n&&n.data;Ot(t,"$attrs",i&&i.attrs||r,null,!0),Ot(t,"$listeners",e._parentListeners||r,null,!0)}(e),Qe(e,"beforeCreate",void 0,!1),function(t){var e=gn(t.$options.inject,t);e&&(Kt(!1),Object.keys(e).forEach((function(n){Ot(t,n,e[n])})),Kt(!0))}(e),Rn(e),function(t){var e=t.$options.provide;if(e){var n=l(e)?e.call(t):e;if(!p(n))return;for(var r=zt(t),o=lt?Reflect.ownKeys(n):Object.keys(n),i=0;i1?C(n):n;for(var r=C(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Yn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Yn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Xn(t,(function(t){return Zn(e,t)}))})),this.$watch("exclude",(function(e){Xn(t,(function(t){return!Zn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=xe(t),n=e&&e.componentOptions;if(n){var r=Gn(n),o=this.include,i=this.exclude;if(o&&(!r||!Zn(o,r))||i&&r&&Zn(i,r))return e;var a=this.cache,c=this.keys,s=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[s]?(e.componentInstance=a[s].componentInstance,w(c,s),c.push(s)):(this.vnodeToCache=e,this.keyToCache=s),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return z}};Object.defineProperty(t,"config",e),t.util={warn:_n,extend:O,mergeOptions:Tn,defineReactive:Ot},t.set=At,t.delete=Et,t.nextTick=Re,t.observable=function(t){return Ct(t),t},t.options=Object.create(null),N.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,O(t.options.components,Qn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=C(arguments,1);return n.unshift(this),l(t.install)?t.install.apply(t,n):l(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Tn(this.options,t),this}}(t),qn(t),function(t){N.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&d(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&l(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Vn),Object.defineProperty(Vn.prototype,"$isServer",{get:it}),Object.defineProperty(Vn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Vn,"FunctionalRenderContext",{value:hn}),Vn.version="2.7.14";var tr=b("style,class"),er=b("input,textarea,option,select,progress"),nr=b("contenteditable,draggable,spellcheck"),rr=b("events,caret,typing,plaintext-only"),or=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ir="http://www.w3.org/1999/xlink",ar=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},cr=function(t){return ar(t)?t.slice(6,t.length):""},sr=function(t){return null==t||!1===t};function lr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=pr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=pr(e,n.data));return function(t,e){if(a(t)||a(e))return ur(t,dr(e));return""}(e.staticClass,e.class)}function pr(t,e){return{staticClass:ur(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function ur(t,e){return t?e?t+" "+e:t:e||""}function dr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?jr(t,e,n):or(e)?sr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):nr(e)?t.setAttribute(e,function(t,e){return sr(e)||"false"===e?"false":"contenteditable"===t&&rr(e)?e:"true"}(e,n)):ar(e)?sr(n)?t.removeAttributeNS(ir,cr(e)):t.setAttributeNS(ir,e,n):jr(t,e,n)}function jr(t,e,n){if(sr(n))t.removeAttribute(e);else{if(X&&!Y&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Mr={create:$r,update:$r};function Rr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var c=lr(e),s=n._transitionClasses;a(s)&&(c=ur(c,dr(s))),c!==n._prevClass&&(n.setAttribute("class",c),n._prevClass=c)}}var Ir,Nr={create:Rr,update:Rr};function Lr(t,e,n){var r=Ir;return function o(){var i=e.apply(null,arguments);null!==i&&Wr(t,o,n,r)}}var zr=Ce&&!(et&&Number(et[1])<=53);function Ur(t,e,n,r){if(zr){var o=cn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Ir.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function Wr(t,e,n,r){(r||Ir).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Ir=e.elm||t.elm,function(t){if(a(t.__r)){var e=X?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Ht(n,r,Ur,Wr,Lr,e.context),Ir=void 0}}var Vr,qr={create:Hr,update:Hr,destroy:function(t){return Hr(t,xr)}};function Gr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,s=t.data.domProps||{},l=e.data.domProps||{};for(n in(a(l.__ob__)||c(l._v_attr_proxy))&&(l=e.data.domProps=O({},l)),s)n in l||(o[n]="");for(n in l){if(r=l[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===s[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var p=i(r)?"":String(r);Zr(o,p)&&(o.value=p)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Vr=Vr||document.createElement("div")).innerHTML="".concat(r,"");for(var u=Vr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;u.firstChild;)o.appendChild(u.firstChild)}else if(r!==s[n])try{o[n]=r}catch(t){}}}}function Zr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return v(n)!==v(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Xr={create:Gr,update:Gr},Yr=x((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Jr(t){var e=Qr(t.style);return t.staticStyle?O(t.staticStyle,e):e}function Qr(t){return Array.isArray(t)?A(t):"string"==typeof t?Yr(t):t}var to,eo=/^--/,no=/\s*!important$/,ro=function(t,e,n){if(eo.test(e))t.style.setProperty(e,n);else if(no.test(n))t.style.setProperty(S(e),n.replace(no,""),"important");else{var r=io(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(so).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function po(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(so).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function uo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&O(e,go(t.name||"v")),O(e,t),e}return"string"==typeof t?go(t):void 0}}var go=x((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ho=G&&!Y,mo="transition",fo="transitionend",vo="animation",bo="animationend";ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",fo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(vo="WebkitAnimation",bo="webkitAnimationEnd"));var yo=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function wo(t){yo((function(){yo(t)}))}function ko(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),lo(t,e))}function _o(t,e){t._transitionClasses&&w(t._transitionClasses,e),po(t,e)}function xo(t,e,n){var r=Bo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var c="transition"===o?fo:bo,s=0,l=function(){t.removeEventListener(c,p),n()},p=function(e){e.target===t&&++s>=a&&l()};setTimeout((function(){s0&&(n="transition",p=a,u=i.length):"animation"===e?l>0&&(n="animation",p=l,u=s.length):u=(n=(p=Math.max(a,l))>0?a>l?"transition":"animation":null)?"transition"===n?i.length:s.length:0,{type:n,timeout:p,propCount:u,hasTransform:"transition"===n&&Do.test(r[mo+"Property"])}}function Po(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&So(e)}var Eo=function(t){var e,n,r={},l=t.modules,p=t.nodeOps;for(e=0;eh?w(t,i(n[v+1])?null:n[v+1].elm,n,g,v,r):g>v&&_(e,u,h)}(u,m,v,n,l):a(v)?(a(t.text)&&p.setTextContent(u,""),w(u,null,v,0,v.length-1,n)):a(m)?_(m,0,m.length-1):a(t.text)&&p.setTextContent(u,""):t.text!==e.text&&p.setTextContent(u,e.text),a(h)&&a(g=h.hook)&&a(g=g.postpatch)&&g(t,e)}}}function P(t,e,n){if(c(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(j(Ro(a),r))return void(t.selectedIndex!==c&&(t.selectedIndex=c));o||(t.selectedIndex=-1)}}function Mo(t,e){return e.every((function(e){return!j(e,t)}))}function Ro(t){return"_value"in t?t._value:t.value}function Io(t){t.target.composing=!0}function No(t){t.target.composing&&(t.target.composing=!1,Lo(t.target,"input"))}function Lo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zo(t){return!t.componentInstance||t.data&&t.data.transition?t:zo(t.componentInstance._vnode)}var Uo={model:$o,show:{bind:function(t,e,n){var r=e.value,o=(n=zo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,So(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zo(n)).data&&n.data.transition?(n.data.show=!0,r?So(n,(function(){t.style.display=t.__vOriginalDisplay})):To(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Wo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ho(xe(e.children)):t}function Vo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[B(r)]=o[r];return e}function qo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Go=function(t){return t.tag||ge(t)},Zo=function(t){return"show"===t.name},Xo={name:"transition",props:Wo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Go)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return qo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var c=(i.data||(i.data={})).transition=Vo(this),l=this._vnode,p=Ho(l);if(i.data.directives&&i.data.directives.some(Zo)&&(i.data.show=!0),p&&p.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,p)&&!ge(p)&&(!p.componentInstance||!p.componentInstance._vnode.isComment)){var u=p.data.transition=O({},c);if("out-in"===r)return this._leaving=!0,Vt(u,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),qo(t,o);if("in-out"===r){if(ge(i))return l;var d,g=function(){d()};Vt(c,"afterEnter",g),Vt(c,"enterCancelled",g),Vt(u,"delayLeave",(function(t){d=t}))}}return o}}},Yo=O({tag:String,moveClass:String},Wo);function Jo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qo(t){t.data.newPos=t.elm.getBoundingClientRect()}function ti(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Yo.mode;var ei={Transition:Xo,TransitionGroup:{props:Yo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Xe(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Vo(this),c=0;c-1?vr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:vr[t]=/HTMLUnknownElement/.test(e.toString())},O(Vn.options.directives,Uo),O(Vn.options.components,ei),Vn.prototype.__patch__=G?Eo:E,Vn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=gt),Qe(t,"beforeMount"),r=function(){t._update(t._render(),n)},new We(t,r,E,{before:function(){t._isMounted&&!t._isDestroyed&&Qe(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",p=s.path?_i(s.path,l,n||o.append):l,u=function(t,e,n){void 0===e&&(e={});var r,o=n||li;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(si):si(a)}return r}(s.query,o.query,r&&r.options.parseQuery),d=o.hash||s.hash;return d&&"#"!==d.charAt(0)&&(d="#"+d),{_normalized:!0,path:p,query:u,hash:d}}var Ui,Wi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,c=o.href,s={},l=n.options.linkActiveClass,p=n.options.linkExactActiveClass,u=null==l?"router-link-active":l,d=null==p?"router-link-exact-active":p,g=null==this.activeClass?u:this.activeClass,h=null==this.exactActiveClass?d:this.exactActiveClass,m=a.redirectedFrom?di(null,zi(a.redirectedFrom),null,n):a;s[h]=vi(r,m,this.exactPath),s[g]=this.exact||this.exactPath?s[h]:function(t,e){return 0===t.path.replace(ui,"/").indexOf(e.path.replace(ui,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,m);var f=s[h]?this.ariaCurrentValue:null,v=function(t){Vi(t)&&(e.replace?n.replace(i,Wi):n.push(i,Wi))},b={click:Vi};Array.isArray(this.event)?this.event.forEach((function(t){b[t]=v})):b[this.event]=v;var y={class:s},w=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:a,navigate:v,isActive:s[g],isExactActive:s[h]});if(w){if(1===w.length)return w[0];if(w.length>1||!w.length)return 0===w.length?t():t("span",{},w)}if("a"===this.tag)y.on=b,y.attrs={href:c,"aria-current":f};else{var k=function t(e){var n;if(e)for(var r=0;r-1&&(c.params[d]=n.params[d]);return c.path=Li(p.path,c.params),s(p,c,a)}if(c.path){c.params={};for(var g=0;g-1}function xa(t,e){return _a(t)&&t._isRouter&&(null==e||t.type===e)}function Da(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Ba(t){return function(e,n,r){var o=!1,i=0,a=null;Pa(t,(function(t,e,n,c){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var s,l=Ta((function(e){var o;((o=e).__esModule||Sa&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Ui.extend(e),n.components[c]=e,--i<=0&&r()})),p=Ta((function(t){var e="Failed to resolve async component "+c+": "+t;a||(a=_a(t)?t:new Error(e),r(a))}));try{s=t(l,p)}catch(t){p(t)}if(s)if("function"==typeof s.then)s.then(l,p);else{var u=s.component;u&&"function"==typeof u.then&&u.then(l,p)}}})),o||r()}}function Pa(t,e){return Ka(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ka(t){return Array.prototype.concat.apply([],t)}var Sa="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ta(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Ca=function(t,e){this.router=t,this.base=function(t){if(!t)if(qi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=hi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Oa(t,e,n,r){var o=Pa(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Ui.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ka(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}Ca.prototype.listen=function(t){this.cb=t},Ca.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ca.prototype.onError=function(t){this.errorCbs.push(t)},Ca.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(xa(t,va.redirected)&&i===hi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ca.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,c=function(t){!xa(t)&&_a(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},s=t.matched.length-1,l=o.matched.length-1;if(vi(t,o)&&s===l&&t.matched[s]===o.matched[l])return this.ensureURL(),t.hash&&ia(this.router,o,t,!1),c(((a=wa(i=o,t,va.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var p=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=ha&&n;r&&this.listeners.push(oa());var o=function(){var n=t.current,o=$a(t.base);t.current===hi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ia(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(xi(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){fa(xi(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if($a(this.base)!==this.current.fullPath){var e=xi(this.base+this.current.fullPath);t?ma(e):fa(e)}},e.prototype.getCurrentLocation=function(){return $a(this.base)},e}(Ca);function $a(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(xi(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Fa=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=$a(t);if(!/^\/#/.test(e))return window.location.replace(xi(t+"/#"+e)),!0}(this.base)||ja()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=ha&&e;n&&this.listeners.push(oa());var r=function(){var e=t.current;ja()&&t.transitionTo(Ma(),(function(r){n&&ia(t.router,r,e,!0),ha||Na(r.fullPath)}))},o=ha?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ia(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ma()!==e&&(t?Ia(e):Na(e))},e.prototype.getCurrentLocation=function(){return Ma()},e}(Ca);function ja(){var t=Ma();return"/"===t.charAt(0)||(Na("/"+t),!1)}function Ma(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ra(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Ia(t){ha?ma(Ra(t)):window.location.hash=t}function Na(t){ha?fa(Ra(t)):window.location.replace(Ra(t))}var La=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){xa(t,va.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ca),za=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Xi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ha&&!1!==t.fallback,this.fallback&&(e="hash"),qi||(e="abstract"),this.mode=e,e){case"history":this.history=new Ea(this,t.base);break;case"hash":this.history=new Fa(this,t.base,this.fallback);break;case"abstract":this.history=new La(this,t.base);break;default:0}},Ua={currentRoute:{configurable:!0}};za.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Ua.currentRoute.get=function(){return this.history&&this.history.current},za.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Ea||n instanceof Fa){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;ha&&o&&"fullPath"in t&&ia(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},za.prototype.beforeEach=function(t){return Ha(this.beforeHooks,t)},za.prototype.beforeResolve=function(t){return Ha(this.resolveHooks,t)},za.prototype.afterEach=function(t){return Ha(this.afterHooks,t)},za.prototype.onReady=function(t,e){this.history.onReady(t,e)},za.prototype.onError=function(t){this.history.onError(t)},za.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},za.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},za.prototype.go=function(t){this.history.go(t)},za.prototype.back=function(){this.go(-1)},za.prototype.forward=function(){this.go(1)},za.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},za.prototype.resolve=function(t,e,n){var r=zi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?xi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},za.prototype.getRoutes=function(){return this.matcher.getRoutes()},za.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},za.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(za.prototype,Ua);var Wa=za;function Ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}za.install=function t(e){if(!t.installed||Ui!==e){t.installed=!0,Ui=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",wi),e.component("RouterLink",Hi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},za.version="3.6.5",za.isNavigationFailure=xa,za.NavigationFailureType=va,za.START_LOCATION=hi,qi&&window.Vue&&window.Vue.use(za);n(53);n(46),n(106);var Va={NotFound:()=>Promise.all([n.e(0),n.e(1),n.e(18)]).then(n.bind(null,355)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(9)]).then(n.bind(null,354)),DirectoryPagination:()=>Promise.all([n.e(0),n.e(1),n.e(5)]).then(n.bind(null,356)),FrontmatterKey:()=>Promise.all([n.e(0),n.e(1),n.e(17)]).then(n.bind(null,357)),FrontmatterPagination:()=>Promise.all([n.e(0),n.e(1),n.e(6)]).then(n.bind(null,358)),IndexPost:()=>Promise.all([n.e(0),n.e(1),n.e(7)]).then(n.bind(null,280)),Post:()=>Promise.all([n.e(0),n.e(1),n.e(8)]).then(n.bind(null,359))},qa={"v-330a32a2":()=>n.e(20).then(n.bind(null,364)),"v-2cebe183":()=>n.e(16).then(n.bind(null,365)),"v-3eaa044d":()=>n.e(12).then(n.bind(null,366)),"v-3875825f":()=>n.e(21).then(n.bind(null,367)),"v-015729b9":()=>n.e(22).then(n.bind(null,368)),"v-2c605799":()=>n.e(23).then(n.bind(null,369)),"v-57698579":()=>n.e(24).then(n.bind(null,370)),"v-9145467a":()=>n.e(25).then(n.bind(null,371)),"v-2cf72b39":()=>n.e(26).then(n.bind(null,372)),"v-11d64359":()=>n.e(27).then(n.bind(null,373)),"v-d0375c8e":()=>n.e(28).then(n.bind(null,374)),"v-10852eea":()=>n.e(29).then(n.bind(null,375)),"v-edd5570e":()=>n.e(30).then(n.bind(null,376)),"v-05df4999":()=>n.e(31).then(n.bind(null,377)),"v-faad828e":()=>n.e(32).then(n.bind(null,378)),"v-0119984e":()=>n.e(33).then(n.bind(null,379)),"v-7c3d28f9":()=>n.e(34).then(n.bind(null,380)),"v-0df1c3ce":()=>n.e(35).then(n.bind(null,381)),"v-75d11339":()=>n.e(36).then(n.bind(null,382)),"v-1ac9ef4e":()=>n.e(37).then(n.bind(null,383)),"v-55969f39":()=>n.e(38).then(n.bind(null,384)),"v-009133c8":()=>n.e(39).then(n.bind(null,385)),"v-7a315e41":()=>n.e(40).then(n.bind(null,386)),"v-f611a14e":()=>n.e(41).then(n.bind(null,387)),"v-3acb6e6a":()=>n.e(42).then(n.bind(null,388)),"v-496cb7f9":()=>n.e(43).then(n.bind(null,360)),"v-0b3b65ea":()=>n.e(44).then(n.bind(null,389)),"v-a76bccee":()=>n.e(45).then(n.bind(null,390)),"v-05d01c19":()=>n.e(46).then(n.bind(null,391)),"v-11bf335e":()=>n.e(47).then(n.bind(null,392)),"v-a9236c10":()=>n.e(48).then(n.bind(null,393)),"v-29f9f21c":()=>n.e(49).then(n.bind(null,394)),"v-4bcdac39":()=>n.e(50).then(n.bind(null,395)),"v-5245a0b2":()=>n.e(51).then(n.bind(null,396)),"v-283d4479":()=>n.e(52).then(n.bind(null,397)),"v-e4749186":()=>n.e(53).then(n.bind(null,398)),"v-317756bd":()=>n.e(54).then(n.bind(null,399)),"v-e8e842ee":()=>n.e(55).then(n.bind(null,400)),"v-c6331d2a":()=>n.e(56).then(n.bind(null,401)),"v-4432e00e":()=>n.e(57).then(n.bind(null,402)),"v-48a004ce":()=>n.e(58).then(n.bind(null,403)),"v-2220834e":()=>n.e(10).then(n.bind(null,404)),"v-61999ca2":()=>n.e(11).then(n.bind(null,405)),"v-b29a7bce":()=>n.e(59).then(n.bind(null,406)),"v-1a26d7ce":()=>n.e(60).then(n.bind(null,407)),"v-4883b547":()=>n.e(61).then(n.bind(null,408)),"v-35b03e19":()=>n.e(62).then(n.bind(null,409))};function Ga(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Za=/-(\w)/g,Xa=Ga(t=>t.replace(Za,(t,e)=>e?e.toUpperCase():"")),Ya=/\B([A-Z])/g,Ja=Ga(t=>t.replace(Ya,"-$1").toLowerCase()),Qa=Ga(t=>t.charAt(0).toUpperCase()+t.slice(1));function tc(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Qa(Xa(e))):t(Qa(e))||t(Ja(e))}const ec=Object.assign({},Va,qa),nc=t=>ec[t],rc=t=>qa[t],oc=t=>Va[t],ic=t=>Vn.component(t);function ac(t){return tc(rc,t)}function cc(t){return tc(oc,t)}function sc(t){return tc(nc,t)}function lc(t){return tc(ic,t)}function pc(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!lc(t)&&sc(t)){const e=await sc(t)();Vn.component(t,e.default)}}))}function uc(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var dc=n(92),gc=n.n(dc),hc=n(93),mc=n.n(hc),fc={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${mc()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bc(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=yc(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return gc()([{name:"description",content:this.$description}],t,this.siteMeta,wc)},updateCanonicalLink(){vc(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bc(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){yc(null,this.currentMetaTags),vc()}};function vc(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bc(t=""){return t?``:""}function yc(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function wc(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var kc=n(94),_c={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(kc)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},xc=n(22),Dc=n.n(xc),Bc={mounted(){Dc.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Vn.component(t.name)||Dc.a.start(),n()}),this.$router.afterEach(()=>{Dc.a.done(),this.isSidebarOpen=!1})}},Pc={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let t={};return t[this.options.align]="7.5px",t},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard(t){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let t=document.createElement("textarea");document.body.appendChild(t),t.value=this.code,t.select(),document.execCommand("Copy"),t.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let t=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${t.r}, ${t.g}, ${t.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Kc=(n(240),n(7)),Sc=Object(Kc.a)(Pc,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"code-copy"},[e("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[e("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),e("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),e("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"49140617",null).exports,Tc=(n(241),{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(t=>{if(t.classList.contains("code-copy-added"))return;let e=new(Vn.extend(Sc));e.options={align:"bottom",color:"#8F979E",backgroundTransition:!1,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!0},e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)})},100)}}}),Cc=(n(242),Object.assign||function(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==B?-1!==y.indexOf(e)&&m({target:e}):h()},i=function(){if(!k&&D.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(_-t)>x.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},c=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(B.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Cc({},x.container,t.container)),t.template){var n=Ac(t.template)?t.template:document.querySelector(t.template);e.template=n}return x=Cc({},x,e),y.forEach((function(t){t.dispatchEvent(Mc("medium-zoom:update",{detail:{zoom:P}}))})),P},s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Cc({},x,e))},l=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,$c(e))}),[]):y;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(Mc("medium-zoom:detach",{detail:{zoom:P}}))})),y=y.filter((function(t){return-1===r.indexOf(t)})),P},u=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return y.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),w.push({type:"medium-zoom:"+t,listener:e,options:n}),P},d=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return y.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),w=w.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),P},g=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(x.container)if(x.container instanceof Object)e=(t=Cc({},t,x.container)).width-t.left-t.right-2*x.margin,n=t.height-t.top-t.bottom-2*x.margin;else{var r=(Ac(x.container)?x.container:document.querySelector(x.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,c=r.top;t=Cc({},t,{width:o,height:i,left:a,top:c})}e=e||t.width-2*x.margin,n=n||t.height-2*x.margin;var s=D.zoomedHd||D.original,l=Ec(s)?e:s.naturalWidth||e,p=Ec(s)?n:s.naturalHeight||n,u=s.getBoundingClientRect(),d=u.top,g=u.left,h=u.width,m=u.height,f=Math.min(l,e)/h,v=Math.min(p,n)/m,b=Math.min(f,v),y="scale("+b+") translate3d("+((e-h)/2-g+x.margin+t.left)/b+"px, "+((n-m)/2-d+x.margin+t.top)/b+"px, 0)";D.zoomed.style.transform=y,D.zoomedHd&&(D.zoomedHd.style.transform=y)};return new r((function(t){if(e&&-1===y.indexOf(e))t(P);else{if(D.zoomed)t(P);else{if(e)D.original=e;else{if(!(y.length>0))return void t(P);var r=y;D.original=r[0]}if(D.original.dispatchEvent(Mc("medium-zoom:open",{detail:{zoom:P}})),_=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,k=!0,D.zoomed=jc(D.original),document.body.appendChild(B),x.template){var o=Ac(x.template)?x.template:document.querySelector(x.template);D.template=document.createElement("div"),D.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(D.template)}if(document.body.appendChild(D.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),D.original.classList.add("medium-zoom-image--hidden"),D.zoomed.classList.add("medium-zoom-image--opened"),D.zoomed.addEventListener("click",h),D.zoomed.addEventListener("transitionend",(function e(){k=!1,D.zoomed.removeEventListener("transitionend",e),D.original.dispatchEvent(Mc("medium-zoom:opened",{detail:{zoom:P}})),t(P)})),D.original.getAttribute("data-zoom-src")){D.zoomedHd=D.zoomed.cloneNode(),D.zoomedHd.removeAttribute("srcset"),D.zoomedHd.removeAttribute("sizes"),D.zoomedHd.src=D.zoomed.getAttribute("data-zoom-src"),D.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+D.zoomedHd.src),D.zoomedHd=null,n()};var i=setInterval((function(){D.zoomedHd.complete&&(clearInterval(i),D.zoomedHd.classList.add("medium-zoom-image--opened"),D.zoomedHd.addEventListener("click",h),document.body.appendChild(D.zoomedHd),n())}),10)}else if(D.original.hasAttribute("srcset")){D.zoomedHd=D.zoomed.cloneNode(),D.zoomedHd.removeAttribute("sizes"),D.zoomedHd.removeAttribute("loading");var a=D.zoomedHd.addEventListener("load",(function(){D.zoomedHd.removeEventListener("load",a),D.zoomedHd.classList.add("medium-zoom-image--opened"),D.zoomedHd.addEventListener("click",h),document.body.appendChild(D.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!k&&D.original){k=!0,document.body.classList.remove("medium-zoom--opened"),D.zoomed.style.transform="",D.zoomedHd&&(D.zoomedHd.style.transform=""),D.template&&(D.template.style.transition="opacity 150ms",D.template.style.opacity=0),D.original.dispatchEvent(Mc("medium-zoom:close",{detail:{zoom:P}})),D.zoomed.addEventListener("transitionend",(function e(){D.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(D.zoomed),D.zoomedHd&&document.body.removeChild(D.zoomedHd),document.body.removeChild(B),D.zoomed.classList.remove("medium-zoom-image--opened"),D.template&&document.body.removeChild(D.template),k=!1,D.zoomed.removeEventListener("transitionend",e),D.original.dispatchEvent(Mc("medium-zoom:closed",{detail:{zoom:P}})),D.original=null,D.zoomed=null,D.zoomedHd=null,D.template=null,t(P)}))}else t(P)}))},m=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return D.original?h():g({target:e})},f=function(){return x},v=function(){return y},b=function(){return D.original},y=[],w=[],k=!1,_=0,x=n,D={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?x=e:(e||"string"==typeof e)&&l(e),x=Cc({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},x);var B=Fc(x.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var P={open:g,close:h,toggle:m,update:c,clone:s,attach:l,detach:p,on:u,off:d,getOptions:f,getImages:v,getZoomedImage:b};return P},Ic=[fc,_c,Bc,Tc,{data:()=>({zoom:null}),mounted(){this.updateZoom()},updated(){this.updateZoom()},methods:{updateZoom(){setTimeout(()=>{this.zoom&&this.zoom.detach(),this.zoom=Rc(".theme-default-content :not(a) > img",void 0)},1e3)}}}],Nc={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return uc("layout",t),Vn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Lc=Object(Kc.a)(Nc,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Lc,"mixins",Ic);const zc=[{name:"v-330a32a2",path:"/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-330a32a2").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-2cebe183",path:"/blog/bdk-core-pt1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-2cebe183").then(n)}},{path:"/blog/bdk-core-pt1/index.html",redirect:"/blog/bdk-core-pt1/"},{path:"/_blog/bdk_core_pt1.html",redirect:"/blog/bdk-core-pt1/"},{name:"v-3eaa044d",path:"/blog/bdk-rn-making-of/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-3eaa044d").then(n)}},{path:"/blog/bdk-rn-making-of/index.html",redirect:"/blog/bdk-rn-making-of/"},{path:"/_blog/bdk_rn_making_of.html",redirect:"/blog/bdk-rn-making-of/"},{name:"v-3875825f",path:"/blog/bindings-scope/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-3875825f").then(n)}},{path:"/blog/bindings-scope/index.html",redirect:"/blog/bindings-scope/"},{path:"/_blog/bindings-scope.html",redirect:"/blog/bindings-scope/"},{name:"v-015729b9",path:"/blog/2021/01/fee-estimation-for-light-clients-part-1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-015729b9").then(n)}},{path:"/blog/2021/01/fee-estimation-for-light-clients-part-1/index.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{path:"/_blog/fee_estimation_for_light_clients_part_1.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{name:"v-2c605799",path:"/blog/2021/01/fee-estimation-for-light-clients-part-2/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-2c605799").then(n)}},{path:"/blog/2021/01/fee-estimation-for-light-clients-part-2/index.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{path:"/_blog/fee_estimation_for_light_clients_part_2.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{name:"v-57698579",path:"/blog/2021/01/fee-estimation-for-light-clients-part-3/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-57698579").then(n)}},{path:"/blog/2021/01/fee-estimation-for-light-clients-part-3/index.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{path:"/_blog/fee_estimation_for_light_clients_part_3.html",redirect:"/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{name:"v-9145467a",path:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-9145467a").then(n)}},{path:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/index.html",redirect:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{path:"/_blog/first_bdk_taproot_tx.html",redirect:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{name:"v-2cf72b39",path:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-2cf72b39").then(n)}},{path:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/index.html",redirect:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{path:"/_blog/first_bdk_taproot_tx_part_2.html",redirect:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{name:"v-11d64359",path:"/blog/getting-started-with-rust-hwi/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-11d64359").then(n)}},{path:"/blog/getting-started-with-rust-hwi/index.html",redirect:"/blog/getting-started-with-rust-hwi/"},{path:"/_blog/getting_started_with_rust_hwi.html",redirect:"/blog/getting-started-with-rust-hwi/"},{name:"v-d0375c8e",path:"/blog/improving-coin-selection-in-bdk/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-d0375c8e").then(n)}},{path:"/blog/improving-coin-selection-in-bdk/index.html",redirect:"/blog/improving-coin-selection-in-bdk/"},{path:"/_blog/improving_coin_selection_in_BDK.html",redirect:"/blog/improving-coin-selection-in-bdk/"},{name:"v-10852eea",path:"/blog/miniscript-vulnerability/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-10852eea").then(n)}},{path:"/blog/miniscript-vulnerability/index.html",redirect:"/blog/miniscript-vulnerability/"},{path:"/_blog/miniscript_vulnerability.html",redirect:"/blog/miniscript-vulnerability/"},{name:"v-edd5570e",path:"/blog/2020/12/release-v0.2.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-edd5570e").then(n)}},{path:"/blog/2020/12/release-v0.2.0/index.html",redirect:"/blog/2020/12/release-v0.2.0/"},{path:"/_blog/release-0.2.0.html",redirect:"/blog/2020/12/release-v0.2.0/"},{name:"v-05df4999",path:"/blog/2021/01/release-v0.3.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-05df4999").then(n)}},{path:"/blog/2021/01/release-v0.3.0/index.html",redirect:"/blog/2021/01/release-v0.3.0/"},{path:"/_blog/release-0.3.0.html",redirect:"/blog/2021/01/release-v0.3.0/"},{name:"v-faad828e",path:"/blog/2021/02/release-v0.4.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-faad828e").then(n)}},{path:"/blog/2021/02/release-v0.4.0/index.html",redirect:"/blog/2021/02/release-v0.4.0/"},{path:"/_blog/release-0.4.0.html",redirect:"/blog/2021/02/release-v0.4.0/"},{name:"v-0119984e",path:"/blog/2021/03/release-v0.5.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-0119984e").then(n)}},{path:"/blog/2021/03/release-v0.5.0/index.html",redirect:"/blog/2021/03/release-v0.5.0/"},{path:"/_blog/release-0.5.0.html",redirect:"/blog/2021/03/release-v0.5.0/"},{name:"v-7c3d28f9",path:"/blog/2021/04/release-v0.6.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-7c3d28f9").then(n)}},{path:"/blog/2021/04/release-v0.6.0/index.html",redirect:"/blog/2021/04/release-v0.6.0/"},{path:"/_blog/release-0.6.0.html",redirect:"/blog/2021/04/release-v0.6.0/"},{name:"v-0df1c3ce",path:"/blog/2021/05/release-v0.7.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-0df1c3ce").then(n)}},{path:"/blog/2021/05/release-v0.7.0/index.html",redirect:"/blog/2021/05/release-v0.7.0/"},{path:"/_blog/release-0.7.0.html",redirect:"/blog/2021/05/release-v0.7.0/"},{name:"v-75d11339",path:"/blog/2021/06/release-v0.8.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-75d11339").then(n)}},{path:"/blog/2021/06/release-v0.8.0/index.html",redirect:"/blog/2021/06/release-v0.8.0/"},{path:"/_blog/release-0.8.0.html",redirect:"/blog/2021/06/release-v0.8.0/"},{name:"v-1ac9ef4e",path:"/blog/2021/07/release-v0.9.0/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-1ac9ef4e").then(n)}},{path:"/blog/2021/07/release-v0.9.0/index.html",redirect:"/blog/2021/07/release-v0.9.0/"},{path:"/_blog/release-0.9.0.html",redirect:"/blog/2021/07/release-v0.9.0/"},{name:"v-55969f39",path:"/blog/road-to-bdk-1/",component:Lc,beforeEnter:(t,e,n)=>{pc("Post","v-55969f39").then(n)}},{path:"/blog/road-to-bdk-1/index.html",redirect:"/blog/road-to-bdk-1/"},{path:"/_blog/road_to_bdk_1.html",redirect:"/blog/road-to-bdk-1/"},{name:"v-009133c8",path:"/bdk-cli/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-009133c8").then(n)}},{path:"/bdk-cli/index.html",redirect:"/bdk-cli/"},{name:"v-7a315e41",path:"/bdk-cli/compiler/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-7a315e41").then(n)}},{path:"/bdk-cli/compiler/index.html",redirect:"/bdk-cli/compiler/"},{path:"/bdk-cli/compiler.html",redirect:"/bdk-cli/compiler/"},{name:"v-f611a14e",path:"/bdk-cli/concept/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-f611a14e").then(n)}},{path:"/bdk-cli/concept/index.html",redirect:"/bdk-cli/concept/"},{path:"/bdk-cli/concept.html",redirect:"/bdk-cli/concept/"},{name:"v-3acb6e6a",path:"/bdk-cli/installation/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-3acb6e6a").then(n)}},{path:"/bdk-cli/installation/index.html",redirect:"/bdk-cli/installation/"},{path:"/bdk-cli/installation.html",redirect:"/bdk-cli/installation/"},{name:"v-496cb7f9",path:"/bdk-cli/interface/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-496cb7f9").then(n)}},{path:"/bdk-cli/interface/index.html",redirect:"/bdk-cli/interface/"},{path:"/bdk-cli/interface.html",redirect:"/bdk-cli/interface/"},{name:"v-0b3b65ea",path:"/bdk-cli/introduction/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-0b3b65ea").then(n)}},{path:"/bdk-cli/introduction/index.html",redirect:"/bdk-cli/introduction/"},{path:"/bdk-cli/introduction.html",redirect:"/bdk-cli/introduction/"},{name:"v-a76bccee",path:"/bdk-cli/playground/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-a76bccee").then(n)}},{path:"/bdk-cli/playground/index.html",redirect:"/bdk-cli/playground/"},{path:"/bdk-cli/playground.html",redirect:"/bdk-cli/playground/"},{name:"v-05d01c19",path:"/bdk-cli/regtest/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-05d01c19").then(n)}},{path:"/bdk-cli/regtest/index.html",redirect:"/bdk-cli/regtest/"},{path:"/bdk-cli/regtest.html",redirect:"/bdk-cli/regtest/"},{name:"v-11bf335e",path:"/case-studies/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-11bf335e").then(n)}},{path:"/case-studies/index.html",redirect:"/case-studies/"},{path:"/case-studies.html",redirect:"/case-studies/"},{name:"v-a9236c10",path:"/descriptors/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-a9236c10").then(n)}},{path:"/descriptors/index.html",redirect:"/descriptors/"},{name:"v-29f9f21c",path:"/examples/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-29f9f21c").then(n)}},{path:"/examples/index.html",redirect:"/examples/"},{name:"v-4bcdac39",path:"/getting-started/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-4bcdac39").then(n)}},{path:"/getting-started/index.html",redirect:"/getting-started/"},{path:"/getting-started.html",redirect:"/getting-started/"},{name:"v-5245a0b2",path:"/supporters/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-5245a0b2").then(n)}},{path:"/supporters/index.html",redirect:"/supporters/"},{name:"v-283d4479",path:"/tutorials/Bitcoin_Core_RPC_Demo/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-283d4479").then(n)}},{path:"/tutorials/Bitcoin_Core_RPC_Demo/index.html",redirect:"/tutorials/Bitcoin_Core_RPC_Demo/"},{path:"/tutorials/Bitcoin_Core_RPC_Demo.html",redirect:"/tutorials/Bitcoin_Core_RPC_Demo/"},{name:"v-e4749186",path:"/tutorials/bdk-cli_basics_multisig_2of3/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-e4749186").then(n)}},{path:"/tutorials/bdk-cli_basics_multisig_2of3/index.html",redirect:"/tutorials/bdk-cli_basics_multisig_2of3/"},{path:"/tutorials/bdk-cli_basics_multisig_2of3.html",redirect:"/tutorials/bdk-cli_basics_multisig_2of3/"},{name:"v-317756bd",path:"/tutorials/bdk_cli_basics/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-317756bd").then(n)}},{path:"/tutorials/bdk_cli_basics/index.html",redirect:"/tutorials/bdk_cli_basics/"},{path:"/tutorials/bdk_cli_basics.html",redirect:"/tutorials/bdk_cli_basics/"},{name:"v-e8e842ee",path:"/tutorials/bdk_with_tor/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-e8e842ee").then(n)}},{path:"/tutorials/bdk_with_tor/index.html",redirect:"/tutorials/bdk_with_tor/"},{path:"/tutorials/bdk_with_tor.html",redirect:"/tutorials/bdk_with_tor/"},{name:"v-c6331d2a",path:"/tutorials/compact_filters_demo/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-c6331d2a").then(n)}},{path:"/tutorials/compact_filters_demo/index.html",redirect:"/tutorials/compact_filters_demo/"},{path:"/tutorials/compact_filters_demo.html",redirect:"/tutorials/compact_filters_demo/"},{name:"v-4432e00e",path:"/tutorials/descriptor_based_paper_wallet/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-4432e00e").then(n)}},{path:"/tutorials/descriptor_based_paper_wallet/index.html",redirect:"/tutorials/descriptor_based_paper_wallet/"},{path:"/tutorials/descriptor_based_paper_wallet.html",redirect:"/tutorials/descriptor_based_paper_wallet/"},{name:"v-48a004ce",path:"/tutorials/descriptors_in_the_wild/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-48a004ce").then(n)}},{path:"/tutorials/descriptors_in_the_wild/index.html",redirect:"/tutorials/descriptors_in_the_wild/"},{path:"/tutorials/descriptors_in_the_wild.html",redirect:"/tutorials/descriptors_in_the_wild/"},{name:"v-2220834e",path:"/tutorials/exploring_bdk_flutter/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-2220834e").then(n)}},{path:"/tutorials/exploring_bdk_flutter/index.html",redirect:"/tutorials/exploring_bdk_flutter/"},{path:"/tutorials/exploring_bdk_flutter.html",redirect:"/tutorials/exploring_bdk_flutter/"},{name:"v-61999ca2",path:"/tutorials/exploring_bdk_rn/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-61999ca2").then(n)}},{path:"/tutorials/exploring_bdk_rn/index.html",redirect:"/tutorials/exploring_bdk_rn/"},{path:"/tutorials/exploring_bdk_rn.html",redirect:"/tutorials/exploring_bdk_rn/"},{name:"v-b29a7bce",path:"/blog/2020/12/hello-world/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-b29a7bce").then(n)}},{path:"/blog/2020/12/hello-world/index.html",redirect:"/blog/2020/12/hello-world/"},{path:"/tutorials/hello-world.html",redirect:"/blog/2020/12/hello-world/"},{name:"v-1a26d7ce",path:"/tutorials/hidden-power-of-bitcoin/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-1a26d7ce").then(n)}},{path:"/tutorials/hidden-power-of-bitcoin/index.html",redirect:"/tutorials/hidden-power-of-bitcoin/"},{path:"/tutorials/hidden-power-of-bitcoin.html",redirect:"/tutorials/hidden-power-of-bitcoin/"},{name:"v-4883b547",path:"/tutorials/spending_policy_demo/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-4883b547").then(n)}},{path:"/tutorials/spending_policy_demo/index.html",redirect:"/tutorials/spending_policy_demo/"},{path:"/tutorials/spending_policy_demo.html",redirect:"/tutorials/spending_policy_demo/"},{name:"v-35b03e19",path:"/tutorials/using_bdk_with_hardware_wallets/",component:Lc,beforeEnter:(t,e,n)=>{pc("Layout","v-35b03e19").then(n)}},{path:"/tutorials/using_bdk_with_hardware_wallets/index.html",redirect:"/tutorials/using_bdk_with_hardware_wallets/"},{path:"/tutorials/using_bdk_with_hardware_wallets.html",redirect:"/tutorials/using_bdk_with_hardware_wallets/"},{name:"v-424df898",path:"/blog/",component:Lc,beforeEnter:(t,e,n)=>{pc("IndexPost","v-424df898").then(n)},meta:{pid:"blog",id:"blog"}},{path:"/blog/index.html",redirect:"/blog/"},{name:"v-619df59e",path:"/blog/tags/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterKey","v-619df59e").then(n)},meta:{pid:"tags",id:"tags"}},{path:"/blog/tags/index.html",redirect:"/blog/tags/"},{name:"v-b0968728",path:"/blog/author/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterKey","v-b0968728").then(n)},meta:{pid:"author",id:"author"}},{path:"/blog/author/index.html",redirect:"/blog/author/"},{name:"v-c4494744",path:"/blog/tags/architecture/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-c4494744").then(n)},meta:{pid:"tags",id:"architecture"}},{path:"/blog/tags/architecture/index.html",redirect:"/blog/tags/architecture/"},{name:"v-876cfade",path:"/blog/tags/BDK-RN/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-876cfade").then(n)},meta:{pid:"tags",id:"BDK-RN"}},{path:"/blog/tags/BDK-RN/index.html",redirect:"/blog/tags/BDK-RN/"},{name:"v-3acc51dc",path:"/blog/tags/Development/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3acc51dc").then(n)},meta:{pid:"tags",id:"Development"}},{path:"/blog/tags/Development/index.html",redirect:"/blog/tags/Development/"},{name:"v-650ae784",path:"/blog/tags/Architecture/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-650ae784").then(n)},meta:{pid:"tags",id:"Architecture"}},{path:"/blog/tags/Architecture/index.html",redirect:"/blog/tags/Architecture/"},{name:"v-5f2600b8",path:"/blog/tags/BDK/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f2600b8").then(n)},meta:{pid:"tags",id:"BDK"}},{path:"/blog/tags/BDK/index.html",redirect:"/blog/tags/BDK/"},{name:"v-1296a8fa",path:"/blog/tags/bindings/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-1296a8fa").then(n)},meta:{pid:"tags",id:"bindings"}},{path:"/blog/tags/bindings/index.html",redirect:"/blog/tags/bindings/"},{name:"v-5f0447f2",path:"/blog/tags/fee/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f0447f2").then(n)},meta:{pid:"tags",id:"fee"}},{path:"/blog/tags/fee/index.html",redirect:"/blog/tags/fee/"},{name:"v-e2317b12",path:"/blog/tags/machine learning/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-e2317b12").then(n)},meta:{pid:"tags",id:"machine learning"}},{path:"/blog/tags/machine learning/index.html",redirect:"/blog/tags/machine learning/"},{name:"v-57f3a168",path:"/blog/tags/taproot/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-57f3a168").then(n)},meta:{pid:"tags",id:"taproot"}},{path:"/blog/tags/taproot/index.html",redirect:"/blog/tags/taproot/"},{name:"v-ef7c3fa2",path:"/blog/tags/miniscript/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-ef7c3fa2").then(n)},meta:{pid:"tags",id:"miniscript"}},{path:"/blog/tags/miniscript/index.html",redirect:"/blog/tags/miniscript/"},{name:"v-640144b2",path:"/blog/tags/Hardware Wallets/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-640144b2").then(n)},meta:{pid:"tags",id:"Hardware Wallets"}},{path:"/blog/tags/Hardware Wallets/index.html",redirect:"/blog/tags/Hardware Wallets/"},{name:"v-74edfe92",path:"/blog/tags/coin selection/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-74edfe92").then(n)},meta:{pid:"tags",id:"coin selection"}},{path:"/blog/tags/coin selection/index.html",redirect:"/blog/tags/coin selection/"},{name:"v-4e62fa1c",path:"/blog/tags/development/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4e62fa1c").then(n)},meta:{pid:"tags",id:"development"}},{path:"/blog/tags/development/index.html",redirect:"/blog/tags/development/"},{name:"v-0159a747",path:"/blog/tags/summer of bitcoin/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-0159a747").then(n)},meta:{pid:"tags",id:"summer of bitcoin"}},{path:"/blog/tags/summer of bitcoin/index.html",redirect:"/blog/tags/summer of bitcoin/"},{name:"v-0755ed11",path:"/blog/tags/security/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-0755ed11").then(n)},meta:{pid:"tags",id:"security"}},{path:"/blog/tags/security/index.html",redirect:"/blog/tags/security/"},{name:"v-3fee41ed",path:"/blog/tags/rust/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3fee41ed").then(n)},meta:{pid:"tags",id:"rust"}},{path:"/blog/tags/rust/index.html",redirect:"/blog/tags/rust/"},{name:"v-543950a6",path:"/blog/tags/release/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-543950a6").then(n)},meta:{pid:"tags",id:"release"}},{path:"/blog/tags/release/index.html",redirect:"/blog/tags/release/"},{name:"v-da8c869a",path:"/blog/tags/tutorial/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-da8c869a").then(n)},meta:{pid:"tags",id:"tutorial"}},{path:"/blog/tags/tutorial/index.html",redirect:"/blog/tags/tutorial/"},{name:"v-62bbf2ad",path:"/blog/tags/Bitcoin Core/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-62bbf2ad").then(n)},meta:{pid:"tags",id:"Bitcoin Core"}},{path:"/blog/tags/Bitcoin Core/index.html",redirect:"/blog/tags/Bitcoin Core/"},{name:"v-5f171cb0",path:"/blog/tags/RPC/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f171cb0").then(n)},meta:{pid:"tags",id:"RPC"}},{path:"/blog/tags/RPC/index.html",redirect:"/blog/tags/RPC/"},{name:"v-4696dfd8",path:"/blog/tags/Wallet/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4696dfd8").then(n)},meta:{pid:"tags",id:"Wallet"}},{path:"/blog/tags/Wallet/index.html",redirect:"/blog/tags/Wallet/"},{name:"v-c711ccde",path:"/blog/tags/bdk-cli/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-c711ccde").then(n)},meta:{pid:"tags",id:"bdk-cli"}},{path:"/blog/tags/bdk-cli/index.html",redirect:"/blog/tags/bdk-cli/"},{name:"v-655ee4a0",path:"/blog/tags/multi-sig/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-655ee4a0").then(n)},meta:{pid:"tags",id:"multi-sig"}},{path:"/blog/tags/multi-sig/index.html",redirect:"/blog/tags/multi-sig/"},{name:"v-e646a928",path:"/blog/tags/basics/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-e646a928").then(n)},meta:{pid:"tags",id:"basics"}},{path:"/blog/tags/basics/index.html",redirect:"/blog/tags/basics/"},{name:"v-1fb58ffb",path:"/blog/tags/novice/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-1fb58ffb").then(n)},meta:{pid:"tags",id:"novice"}},{path:"/blog/tags/novice/index.html",redirect:"/blog/tags/novice/"},{name:"v-5ef73f54",path:"/blog/tags/tor/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5ef73f54").then(n)},meta:{pid:"tags",id:"tor"}},{path:"/blog/tags/tor/index.html",redirect:"/blog/tags/tor/"},{name:"v-39437010",path:"/blog/tags/wallet/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-39437010").then(n)},meta:{pid:"tags",id:"wallet"}},{path:"/blog/tags/wallet/index.html",redirect:"/blog/tags/wallet/"},{name:"v-7c8563fd",path:"/blog/tags/blockchain/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-7c8563fd").then(n)},meta:{pid:"tags",id:"blockchain"}},{path:"/blog/tags/blockchain/index.html",redirect:"/blog/tags/blockchain/"},{name:"v-baacba64",path:"/blog/tags/compact_filters/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-baacba64").then(n)},meta:{pid:"tags",id:"compact_filters"}},{path:"/blog/tags/compact_filters/index.html",redirect:"/blog/tags/compact_filters/"},{name:"v-75ccd5f2",path:"/blog/tags/BIP157/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-75ccd5f2").then(n)},meta:{pid:"tags",id:"BIP157"}},{path:"/blog/tags/BIP157/index.html",redirect:"/blog/tags/BIP157/"},{name:"v-4fed1c23",path:"/blog/tags/Neutrino/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4fed1c23").then(n)},meta:{pid:"tags",id:"Neutrino"}},{path:"/blog/tags/Neutrino/index.html",redirect:"/blog/tags/Neutrino/"},{name:"v-a9e0285e",path:"/blog/tags/guide/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-a9e0285e").then(n)},meta:{pid:"tags",id:"guide"}},{path:"/blog/tags/guide/index.html",redirect:"/blog/tags/guide/"},{name:"v-733ed37c",path:"/blog/tags/descriptor/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-733ed37c").then(n)},meta:{pid:"tags",id:"descriptor"}},{path:"/blog/tags/descriptor/index.html",redirect:"/blog/tags/descriptor/"},{name:"v-1144be8a",path:"/blog/tags/paper wallets/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-1144be8a").then(n)},meta:{pid:"tags",id:"paper wallets"}},{path:"/blog/tags/paper wallets/index.html",redirect:"/blog/tags/paper wallets/"},{name:"v-915f8322",path:"/blog/tags/bitcoin/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-915f8322").then(n)},meta:{pid:"tags",id:"bitcoin"}},{path:"/blog/tags/bitcoin/index.html",redirect:"/blog/tags/bitcoin/"},{name:"v-bf53d4d4",path:"/blog/tags/React Native/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-bf53d4d4").then(n)},meta:{pid:"tags",id:"React Native"}},{path:"/blog/tags/React Native/index.html",redirect:"/blog/tags/React Native/"},{name:"v-07eeb15e",path:"/blog/tags/Flutter/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-07eeb15e").then(n)},meta:{pid:"tags",id:"Flutter"}},{path:"/blog/tags/Flutter/index.html",redirect:"/blog/tags/Flutter/"},{name:"v-5f023740",path:"/blog/tags/iOS/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f023740").then(n)},meta:{pid:"tags",id:"iOS"}},{path:"/blog/tags/iOS/index.html",redirect:"/blog/tags/iOS/"},{name:"v-414e735e",path:"/blog/tags/Android/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-414e735e").then(n)},meta:{pid:"tags",id:"Android"}},{path:"/blog/tags/Android/index.html",redirect:"/blog/tags/Android/"},{name:"v-2c94bf22",path:"/blog/tags/mobile/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-2c94bf22").then(n)},meta:{pid:"tags",id:"mobile"}},{path:"/blog/tags/mobile/index.html",redirect:"/blog/tags/mobile/"},{name:"v-dd212a9e",path:"/blog/tags/bdk-rn/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-dd212a9e").then(n)},meta:{pid:"tags",id:"bdk-rn"}},{path:"/blog/tags/bdk-rn/index.html",redirect:"/blog/tags/bdk-rn/"},{name:"v-5f07f0f8",path:"/blog/tags/bdk/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5f07f0f8").then(n)},meta:{pid:"tags",id:"bdk"}},{path:"/blog/tags/bdk/index.html",redirect:"/blog/tags/bdk/"},{name:"v-79c3de4b",path:"/blog/tags/getting started/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-79c3de4b").then(n)},meta:{pid:"tags",id:"getting started"}},{path:"/blog/tags/getting started/index.html",redirect:"/blog/tags/getting started/"},{name:"v-01a03a08",path:"/blog/tags/bitcoin-cli/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-01a03a08").then(n)},meta:{pid:"tags",id:"bitcoin-cli"}},{path:"/blog/tags/bitcoin-cli/index.html",redirect:"/blog/tags/bitcoin-cli/"},{name:"v-600b5b28",path:"/blog/author/Lloyd Fournier/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-600b5b28").then(n)},meta:{pid:"author",id:"Lloyd Fournier"}},{path:"/blog/author/Lloyd Fournier/index.html",redirect:"/blog/author/Lloyd Fournier/"},{name:"v-37829241",path:"/blog/author/Bitcoin Zavior/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-37829241").then(n)},meta:{pid:"author",id:"Bitcoin Zavior"}},{path:"/blog/author/Bitcoin Zavior/index.html",redirect:"/blog/author/Bitcoin Zavior/"},{name:"v-5d54001e",path:"/blog/author/thunderbiscuit/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-5d54001e").then(n)},meta:{pid:"author",id:"thunderbiscuit"}},{path:"/blog/author/thunderbiscuit/index.html",redirect:"/blog/author/thunderbiscuit/"},{name:"v-624fd61e",path:"/blog/author/Riccardo Casatta/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-624fd61e").then(n)},meta:{pid:"author",id:"Riccardo Casatta"}},{path:"/blog/author/Riccardo Casatta/index.html",redirect:"/blog/author/Riccardo Casatta/"},{name:"v-ad00c09c",path:"/blog/author/Alekos Filini/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-ad00c09c").then(n)},meta:{pid:"author",id:"Alekos Filini"}},{path:"/blog/author/Alekos Filini/index.html",redirect:"/blog/author/Alekos Filini/"},{name:"v-4eeab648",path:"/blog/author/Wszdexdrf/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-4eeab648").then(n)},meta:{pid:"author",id:"Wszdexdrf"}},{path:"/blog/author/Wszdexdrf/index.html",redirect:"/blog/author/Wszdexdrf/"},{name:"v-a0d840b0",path:"/blog/author/César Alvarez Vallero/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-a0d840b0").then(n)},meta:{pid:"author",id:"César Alvarez Vallero"}},{path:"/blog/author/César Alvarez Vallero/index.html",redirect:"/blog/author/César Alvarez Vallero/"},{name:"v-82e16b5c",path:"/blog/author/Rajarshi Maitra/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-82e16b5c").then(n)},meta:{pid:"author",id:"Rajarshi Maitra"}},{path:"/blog/author/Rajarshi Maitra/index.html",redirect:"/blog/author/Rajarshi Maitra/"},{name:"v-3e85f455",path:"/blog/author/waterstone/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3e85f455").then(n)},meta:{pid:"author",id:"waterstone"}},{path:"/blog/author/waterstone/index.html",redirect:"/blog/author/waterstone/"},{name:"v-3e6950f4",path:"/blog/author/waterst0ne/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-3e6950f4").then(n)},meta:{pid:"author",id:"waterst0ne"}},{path:"/blog/author/waterst0ne/index.html",redirect:"/blog/author/waterst0ne/"},{name:"v-d2b26530",path:"/blog/author/rorp/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-d2b26530").then(n)},meta:{pid:"author",id:"rorp"}},{path:"/blog/author/rorp/index.html",redirect:"/blog/author/rorp/"},{name:"v-a354115e",path:"/blog/author/Steve Myers/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-a354115e").then(n)},meta:{pid:"author",id:"Steve Myers"}},{path:"/blog/author/Steve Myers/index.html",redirect:"/blog/author/Steve Myers/"},{name:"v-6b564fb4",path:"/blog/author/Gabriele Domenichini/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-6b564fb4").then(n)},meta:{pid:"author",id:"Gabriele Domenichini"}},{path:"/blog/author/Gabriele Domenichini/index.html",redirect:"/blog/author/Gabriele Domenichini/"},{name:"v-91c10894",path:"/blog/author/Sandipan Dey/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-91c10894").then(n)},meta:{pid:"author",id:"Sandipan Dey"}},{path:"/blog/author/Sandipan Dey/index.html",redirect:"/blog/author/Sandipan Dey/"},{name:"v-754a45a4",path:"/blog/author/danielabrozzoni/",component:Lc,beforeEnter:(t,e,n)=>{pc("FrontmatterPagination","v-754a45a4").then(n)},meta:{pid:"author",id:"danielabrozzoni"}},{path:"/blog/author/danielabrozzoni/index.html",redirect:"/blog/author/danielabrozzoni/"},{name:"v-c3507bb6",path:"/blog/page/2/",component:Lc,beforeEnter:(t,e,n)=>{pc("DirectoryPagination","v-c3507bb6").then(n)},meta:{pid:"blog",id:"blog"}},{path:"/blog/page/2/index.html",redirect:"/blog/page/2/"},{name:"v-5f2ac9cb",path:"/blog/author/Alekos Filini/page/2/",component:Lc,beforeEnter:(t,e,n)=>{pc("DirectoryPagination","v-5f2ac9cb").then(n)},meta:{pid:"author",id:"Alekos Filini"}},{path:"/blog/author/Alekos Filini/page/2/index.html",redirect:"/blog/author/Alekos Filini/page/2/"},{path:"*",component:Lc}],Uc={title:"Bitcoin Dev Kit Documentation",description:"The Bitcoin Dev Kit (BDK) project (originally called Magical Bitcoin 🧙) aims to build a collection of tools and libraries that are designed to be a solid foundation for cross platform Bitcoin wallets, along with a fully working reference implementation wallet called Magical Bitcoin.",base:"/",headTags:[["meta",{name:"viewport",content:"width=device-width,initial-scale=1.0"}],["link",{rel:"preload",href:"/fonts/ibm-plex-mono-400.woff2",as:"font",crossorigin:!0}],["link",{rel:"apple-touch-icon",sizes:"180x180",href:"/img/favicon/apple-touch-icon.png"}],["link",{rel:"manifest",href:"/site.webmanifest"}],["link",{rel:"stylesheet",href:"/css/variables.css"}],["link",{name:"msapplication-config",content:"/browserconfig.xml"}],["link",{name:"msapplication-TileColor",content:"#ffffff"}],["link",{name:"theme-color",content:"#ffffff"}]],pages:[{title:"Home",frontmatter:{home:!0,heroText:"Bitcoin Dev Kit",tagline:"With BDK, you can seamlessly build cross platform mobile wallets",actionText:"Get started",actionLink:"/getting-started/",features:[{title:"Customizable",details:"Designed from the ground up to be easily customized to your application needs: blockchain backends, databases, signers, coin selection, key management and more.",image:"customizable"},{title:"Focus on what matters",details:"All of the low-level Bitcoin logic is handled by us, so you can focus on crafting custom-tailored user experiences.",image:"focus"},{title:"High performance & compact",details:"As lightweight as you need it to be and optimized to run on all modern-day embedded devices such as mobile phones, IoT devices, PoS terminals and more.",image:"mobile"}],meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"With BDK, you can seamlessly build cross platform mobile wallets"},{property:"og:description",content:"We are building native API's for C, Swift, Java & Kotlin so you can easily integrate Bitcoin in your preferred programming language on mobile."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"With BDK, you can seamlessly build cross platform mobile wallets"},{name:"twitter:description",content:"We are building native API's for C, Swift, Java & Kotlin so you can easily integrate Bitcoin in your preferred programming language on mobile."},{name:"twitter:url",content:"https://bitcoindevkit.org/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/",relativePath:"README.md",key:"v-330a32a2",path:"/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"bdk_core: a new architecture for the Bitcoin Dev Kit",frontmatter:{title:"`bdk_core`: a new architecture for the Bitcoin Dev Kit",description:"A new architecture for the Bitcoin Dev Kit",authors:["Lloyd Fournier"],date:"2022-05-09",tags:["architecture"],draft:!1,meta:[{property:"article:published_time",content:"2022-05-09T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"bdk_core: a new architecture for the Bitcoin Dev Kit"},{property:"og:description",content:"A new architecture for the Bitcoin Dev Kit"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/bdk_core_pt1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"bdk_core: a new architecture for the Bitcoin Dev Kit"},{name:"twitter:description",content:"A new architecture for the Bitcoin Dev Kit"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/bdk_core_pt1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"architecture"},{property:"article:tag",content:"architecture"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/bdk_core_pt1.html",relativePath:"_blog/bdk_core_pt1.md",key:"v-2cebe183",path:"/blog/bdk-core-pt1/",headers:[{level:2,title:"The separation of policy and mechanism",slug:"the-separation-of-policy-and-mechanism"},{level:2,title:"A syncing mechansim without the policy",slug:"a-syncing-mechansim-without-the-policy"},{level:3,title:"A general syncing mechanism",slug:"a-general-syncing-mechanism"},{level:3,title:"How to store and index transactions",slug:"how-to-store-and-index-transactions"},{level:3,title:"Rolling back, rolling forward and syncing to disk",slug:"rolling-back-rolling-forward-and-syncing-to-disk"},{level:2,title:"Examples",slug:"examples"},{level:3,title:"Doing an initial sync of a descriptor that may already contain coins",slug:"doing-an-initial-sync-of-a-descriptor-that-may-already-contain-coins"},{level:3,title:"Doing a sync of a wallet after you already have sync'd",slug:"doing-a-sync-of-a-wallet-after-you-already-have-syncd"},{level:3,title:"Updating state when you get the data in real time",slug:"updating-state-when-you-get-the-data-in-real-time"},{level:2,title:"Feedback",slug:"feedback"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"bdk-rn: Behind the scenes",frontmatter:{title:"`bdk-rn`: Behind the scenes",description:"bdk-rn: React Native version of BitcoinDevKit. Insight into how bdk-rn was developed",authors:["Bitcoin Zavior"],date:"2022-07-10",tags:["BDK-RN","Development","Architecture"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-07-10T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"bdk-rn: Behind the scenes"},{property:"og:description",content:"bdk-rn: React Native version of BitcoinDevKit. Insight into how bdk-rn was developed"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/bdk_rn_making_of/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"bdk-rn: Behind the scenes"},{name:"twitter:description",content:"bdk-rn: React Native version of BitcoinDevKit. Insight into how bdk-rn was developed"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/bdk_rn_making_of/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK-RN, Development, Architecture"},{property:"article:tag",content:"BDK-RN"},{property:"article:tag",content:"Development"},{property:"article:tag",content:"Architecture"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/bdk_rn_making_of.html",relativePath:"_blog/bdk_rn_making_of.md",key:"v-3eaa044d",path:"/blog/bdk-rn-making-of/",headers:[{level:2,title:"React Native Architecture",slug:"react-native-architecture"},{level:2,title:"Native Integration",slug:"native-integration"},{level:2,title:"Android Module",slug:"android-module"},{level:2,title:"References",slug:"references"},{level:2,title:"Feedback",slug:"feedback"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"BDK's Scope and Approach to Rust Bindings",frontmatter:{title:"BDK's Scope and Approach to Rust Bindings",description:"An outline of BDK's approach to language bindings and how we intend on supporting others build their own.",authors:["thunderbiscuit"],date:"2023-06-02",tags:["BDK","bindings"],meta:[{property:"article:published_time",content:"2023-06-02T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK's Scope and Approach to Rust Bindings"},{property:"og:description",content:"An outline of BDK's approach to language bindings and how we intend on supporting others build their own."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/bindings-scope/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK's Scope and Approach to Rust Bindings"},{name:"twitter:description",content:"An outline of BDK's approach to language bindings and how we intend on supporting others build their own."},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/bindings-scope/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, bindings"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"bindings"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/bindings-scope.html",relativePath:"_blog/bindings-scope.md",key:"v-3875825f",path:"/blog/bindings-scope/",headers:[{level:2,title:"Current architecture",slug:"current-architecture"},{level:2,title:"Moving forward: building a family of libraries",slug:"moving-forward-building-a-family-of-libraries"},{level:2,title:"Why can't we just build one big BDK library with everything in it?",slug:"why-cant-we-just-build-one-big-bdk-library-with-everything-in-it"},{level:2,title:"Are you looking to build Rust bindings yourself?",slug:"are-you-looking-to-build-rust-bindings-yourself"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Fee estimation for light-clients (Part 1)",frontmatter:{title:"Fee estimation for light-clients (Part 1)",description:"Applying machine learning to the bitcoin fee estimation problem",authors:["Riccardo Casatta"],date:"2021-01-25",tags:["fee","machine learning"],permalink:"/blog/2021/01/fee-estimation-for-light-clients-part-1/",meta:[{property:"article:published_time",content:"2021-01-25T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Fee estimation for light-clients (Part 1)"},{property:"og:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Fee estimation for light-clients (Part 1)"},{name:"twitter:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"fee, machine learning"},{property:"article:tag",content:"fee"},{property:"article:tag",content:"machine learning"}],layout:"Post"},regularPath:"/_blog/fee_estimation_for_light_clients_part_1.html",relativePath:"_blog/fee_estimation_for_light_clients_part_1.md",key:"v-015729b9",path:"/blog/2021/01/fee-estimation-for-light-clients-part-1/",headers:[{level:2,title:"Introduction: what is fee estimation?",slug:"introduction-what-is-fee-estimation"},{level:2,title:"The problem",slug:"the-problem"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Fee estimation for light-clients (Part 2)",frontmatter:{title:"Fee estimation for light-clients (Part 2)",description:"Applying machine learning to the bitcoin fee estimation problem",authors:["Riccardo Casatta"],date:"2021-01-25",tags:["fee","machine learning"],permalink:"/blog/2021/01/fee-estimation-for-light-clients-part-2/",meta:[{property:"article:published_time",content:"2021-01-25T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Fee estimation for light-clients (Part 2)"},{property:"og:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Fee estimation for light-clients (Part 2)"},{name:"twitter:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"fee, machine learning"},{property:"article:tag",content:"fee"},{property:"article:tag",content:"machine learning"}],layout:"Post"},regularPath:"/_blog/fee_estimation_for_light_clients_part_2.html",relativePath:"_blog/fee_estimation_for_light_clients_part_2.md",key:"v-2c605799",path:"/blog/2021/01/fee-estimation-for-light-clients-part-2/",headers:[{level:2,title:"The dataset",slug:"the-dataset"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Fee estimation for light-clients (Part 3)",frontmatter:{title:"Fee estimation for light-clients (Part 3)",description:"Applying machine learning to the bitcoin fee estimation problem",authors:["Riccardo Casatta"],date:"2021-01-25",tags:["fee","machine learning"],permalink:"/blog/2021/01/fee-estimation-for-light-clients-part-3/",meta:[{property:"article:published_time",content:"2021-01-25T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Fee estimation for light-clients (Part 3)"},{property:"og:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Fee estimation for light-clients (Part 3)"},{name:"twitter:description",content:"Applying machine learning to the bitcoin fee estimation problem"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/fee-estimation-for-light-clients-part-3/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"fee, machine learning"},{property:"article:tag",content:"fee"},{property:"article:tag",content:"machine learning"}],layout:"Post"},regularPath:"/_blog/fee_estimation_for_light_clients_part_3.html",relativePath:"_blog/fee_estimation_for_light_clients_part_3.md",key:"v-57698579",path:"/blog/2021/01/fee-estimation-for-light-clients-part-3/",headers:[{level:2,title:"The model",slug:"the-model"},{level:2,title:"The prediction phase",slug:"the-prediction-phase"},{level:2,title:"Conclusion and future development",slug:"conclusion-and-future-development"},{level:2,title:"Acknowledgements",slug:"acknowledgements"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"The first BDK Taproot TX: a look at the code (Part 1)",frontmatter:{title:"The first BDK Taproot TX: a look at the code (Part 1)",description:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction",authors:["Alekos Filini"],date:"2021-11-15",tags:["BDK","taproot","miniscript"],permalink:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1",meta:[{property:"article:published_time",content:"2021-11-15T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"The first BDK Taproot TX: a look at the code (Part 1)"},{property:"og:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"The first BDK Taproot TX: a look at the code (Part 1)"},{name:"twitter:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, taproot, miniscript"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"taproot"},{property:"article:tag",content:"miniscript"}],layout:"Post"},regularPath:"/_blog/first_bdk_taproot_tx.html",relativePath:"_blog/first_bdk_taproot_tx.md",key:"v-9145467a",path:"/blog/2021/11/first-bdk-taproot-tx-look-at-the-code-part-1/",headers:[{level:2,title:"Backstory",slug:"backstory"},{level:2,title:"rust-bitcoin",slug:"rust-bitcoin"},{level:2,title:"rust-miniscript",slug:"rust-miniscript"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"The first BDK Taproot TX: a look at the code (Part 2)",frontmatter:{title:"The first BDK Taproot TX: a look at the code (Part 2)",description:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction",authors:["Alekos Filini"],date:"2021-12-10",tags:["BDK","taproot","miniscript"],permalink:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2",meta:[{property:"article:published_time",content:"2021-12-10T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"The first BDK Taproot TX: a look at the code (Part 2)"},{property:"og:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"The first BDK Taproot TX: a look at the code (Part 2)"},{name:"twitter:description",content:"A quick overview of the changes made to bdk, rust-miniscript and rust-bitcoin to make a Taproot transaction"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, taproot, miniscript"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"taproot"},{property:"article:tag",content:"miniscript"}],layout:"Post"},regularPath:"/_blog/first_bdk_taproot_tx_part_2.html",relativePath:"_blog/first_bdk_taproot_tx_part_2.md",key:"v-2cf72b39",path:"/blog/2021/12/first-bdk-taproot-tx-look-at-the-code-part-2/",headers:[{level:2,title:"Shortcuts",slug:"shortcuts"},{level:2,title:"Utilities",slug:"utilities"},{level:2,title:"Wrap Fallible Methods",slug:"wrap-fallible-methods"},{level:2,title:"Descriptor Metadata",slug:"descriptor-metadata"},{level:2,title:"Policy",slug:"policy"},{level:2,title:"Signer",slug:"signer"},{level:2,title:"PSBT Metadata",slug:"psbt-metadata"},{level:2,title:"descriptor!() Macro",slug:"descriptor-macro"},{level:3,title:"tr() Descriptors",slug:"tr-descriptors"},{level:3,title:"multi_a() Operator",slug:"multi-a-operator"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Getting Started with rust-hwi",frontmatter:{title:"Getting Started with rust-hwi",description:"This post will help one understand and develop for hardware wallets using BDK",authors:["Wszdexdrf"],date:"2022-08-16",tags:["BDK","Development","Hardware Wallets"],draft:!1,meta:[{property:"article:published_time",content:"2022-08-16T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Getting Started with rust-hwi"},{property:"og:description",content:"This post will help one understand and develop for hardware wallets using BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/getting_started_with_rust_hwi/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Getting Started with rust-hwi"},{name:"twitter:description",content:"This post will help one understand and develop for hardware wallets using BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/getting_started_with_rust_hwi/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, Development, Hardware Wallets"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"Development"},{property:"article:tag",content:"Hardware Wallets"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/getting_started_with_rust_hwi.html",relativePath:"_blog/getting_started_with_rust_hwi.md",key:"v-11d64359",path:"/blog/getting-started-with-rust-hwi/",headers:[{level:2,title:"Fundamentals",slug:"fundamentals"},{level:2,title:"Integration with BDK",slug:"integration-with-bdk"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Improving coin selection in BDK",frontmatter:{title:"Improving coin selection in BDK",description:"A brief description of the work done in the coin selection module in BDK during Summer of Bitcoin 2022",date:"2022-08-17",tags:["coin selection","BDK","development","summer of bitcoin"],authors:["César Alvarez Vallero"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-08-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Improving coin selection in BDK"},{property:"og:description",content:"A brief description of the work done in the coin selection module in BDK during Summer of Bitcoin 2022"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/improving_coin_selection_in_BDK/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Improving coin selection in BDK"},{name:"twitter:description",content:"A brief description of the work done in the coin selection module in BDK during Summer of Bitcoin 2022"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/improving_coin_selection_in_BDK/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"coin selection, BDK, development, summer of bitcoin"},{property:"article:tag",content:"coin selection"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"development"},{property:"article:tag",content:"summer of bitcoin"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/improving_coin_selection_in_BDK.html",relativePath:"_blog/improving_coin_selection_in_BDK.md",key:"v-d0375c8e",path:"/blog/improving-coin-selection-in-bdk/",headers:[{level:2,title:"Waste",slug:"waste"},{level:3,title:"How it works?",slug:"how-it-works"},{level:3,title:"What has been done",slug:"what-has-been-done"},{level:3,title:"Work in progress",slug:"work-in-progress"},{level:2,title:"Further Improvements",slug:"further-improvements"},{level:3,title:"Privacy",slug:"privacy"},{level:3,title:"Flexibility",slug:"flexibility"},{level:2,title:"Conclusion",slug:"conclusion"},{level:2,title:"Acknowledgements",slug:"acknowledgements"},{level:2,title:"References",slug:"references"},{level:3,title:"About coin selection considerations",slug:"about-coin-selection-considerations"},{level:3,title:"About Waste metric",slug:"about-waste-metric"},{level:3,title:"About improving privacy in coin selection",slug:"about-improving-privacy-in-coin-selection"},{level:3,title:"About bdk_core",slug:"about-bdk-core"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Security Advisory: Miniscript MINIMALIF Bug",frontmatter:{title:"Security Advisory: Miniscript MINIMALIF Bug",description:"Security advisory on the recent Miniscript MINIMALIF bug. How to check if you are affected and what to do next.",authors:["Alekos Filini"],date:"2022-04-19",tags:["miniscript","security"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-04-19T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Security Advisory: Miniscript MINIMALIF Bug"},{property:"og:description",content:"Security advisory on the recent Miniscript MINIMALIF bug. How to check if you are affected and what to do next."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/miniscript_vulnerability/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Security Advisory: Miniscript MINIMALIF Bug"},{name:"twitter:description",content:"Security advisory on the recent Miniscript MINIMALIF bug. How to check if you are affected and what to do next."},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/miniscript_vulnerability/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"miniscript, security"},{property:"article:tag",content:"miniscript"},{property:"article:tag",content:"security"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/miniscript_vulnerability.html",relativePath:"_blog/miniscript_vulnerability.md",key:"v-10852eea",path:"/blog/miniscript-vulnerability/",headers:[{level:2,title:"How to check if you are vulnerable",slug:"how-to-check-if-you-are-vulnerable"},{level:2,title:"Next steps",slug:"next-steps"},{level:3,title:"If you are affected",slug:"if-you-are-affected"},{level:3,title:"Everybody",slug:"everybody"},{level:2,title:"Consequences of the update",slug:"consequences-of-the-update"},{level:2,title:"Footnote: How we analyzed the blockchain",slug:"footnote-how-we-analyzed-the-blockchain"},{level:2,title:"Correction (2022-04-25)",slug:"correction-2022-04-25"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.2.0",frontmatter:{title:"Release v0.2.0",description:"Announcing the v0.2.0 release of BDK",authors:["Alekos Filini"],date:"2020-12-21",tags:["rust","release"],permalink:"/blog/2020/12/release-v0.2.0/",meta:[{property:"article:published_time",content:"2020-12-21T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.2.0"},{property:"og:description",content:"Announcing the v0.2.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2020/12/release-v0.2.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.2.0"},{name:"twitter:description",content:"Announcing the v0.2.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2020/12/release-v0.2.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.2.0.html",relativePath:"_blog/release-0.2.0.md",key:"v-edd5570e",path:"/blog/2020/12/release-v0.2.0/",headers:[{level:2,title:"What's new in v0.2.0",slug:"whats-new-in-v020"},{level:3,title:"A new name",slug:"a-new-name"},{level:3,title:"Branch and Bound coin selection",slug:"branch-and-bound-coin-selection"},{level:3,title:"Key generation",slug:"key-generation"},{level:3,title:"Generic key types",slug:"generic-key-types"},{level:3,title:"Descriptor templates",slug:"descriptor-templates"},{level:3,title:"Easier creation of Blockchain and Database",slug:"easier-creation-of-blockchain-and-database"},{level:3,title:"descriptor!() macro",slug:"descriptor-macro"},{level:3,title:"Support for sortedmulti()",slug:"support-for-sortedmulti"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.3.0",frontmatter:{title:"Release v0.3.0",description:"Announcing the v0.3.0 release of BDK",authors:["Alekos Filini"],date:"2021-01-20",tags:["rust","release"],permalink:"/blog/2021/01/release-v0.3.0/",meta:[{property:"article:published_time",content:"2021-01-20T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.3.0"},{property:"og:description",content:"Announcing the v0.3.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/01/release-v0.3.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.3.0"},{name:"twitter:description",content:"Announcing the v0.3.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/01/release-v0.3.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.3.0.html",relativePath:"_blog/release-0.3.0.md",key:"v-05df4999",path:"/blog/2021/01/release-v0.3.0/",headers:[{level:2,title:"What's new in v0.3.0",slug:"whats-new-in-v030"},{level:3,title:"Less verbosity when using Wallet::new_offline()",slug:"less-verbosity-when-using-walletnew-offline"},{level:3,title:"No more error conversions in DescriptorTemplate",slug:"no-more-error-conversions-in-descriptortemplate"},{level:3,title:"A new repo for the CLI",slug:"a-new-repo-for-the-cli"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.4.0",frontmatter:{title:"Release v0.4.0",description:"Announcing the v0.4.0 release of BDK",authors:["Alekos Filini"],date:"2021-02-17",tags:["rust","release"],permalink:"/blog/2021/02/release-v0.4.0/",meta:[{property:"article:published_time",content:"2021-02-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.4.0"},{property:"og:description",content:"Announcing the v0.4.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/02/release-v0.4.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.4.0"},{name:"twitter:description",content:"Announcing the v0.4.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/02/release-v0.4.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.4.0.html",relativePath:"_blog/release-0.4.0.md",key:"v-faad828e",path:"/blog/2021/02/release-v0.4.0/",headers:[{level:2,title:"What's new in v0.4.0",slug:"whats-new-in-v040"},{level:3,title:"A new API to build transaction",slug:"a-new-api-to-build-transaction"},{level:3,title:"Upgraded dependencies",slug:"upgraded-dependencies"},{level:3,title:"Compact Filters example",slug:"compact-filters-example"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.5.0",frontmatter:{title:"Release v0.5.0",description:"Announcing the v0.5.0 release of BDK",authors:["Alekos Filini"],date:"2021-03-18",tags:["rust","release"],permalink:"/blog/2021/03/release-v0.5.0/",meta:[{property:"article:published_time",content:"2021-03-18T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.5.0"},{property:"og:description",content:"Announcing the v0.5.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/03/release-v0.5.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.5.0"},{name:"twitter:description",content:"Announcing the v0.5.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/03/release-v0.5.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.5.0.html",relativePath:"_blog/release-0.5.0.md",key:"v-0119984e",path:"/blog/2021/03/release-v0.5.0/",headers:[{level:2,title:"What's new in v0.5.0",slug:"whats-new-in-v050"},{level:3,title:"Dual Licensing",slug:"dual-licensing"},{level:3,title:"Spending foreign UTXOs",slug:"spending-foreign-utxos"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.6.0",frontmatter:{title:"Release v0.6.0",description:"Announcing the v0.6.0 release of BDK",authors:["Alekos Filini"],date:"2021-04-15",tags:["rust","release"],permalink:"/blog/2021/04/release-v0.6.0/",meta:[{property:"article:published_time",content:"2021-04-15T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.6.0"},{property:"og:description",content:"Announcing the v0.6.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/04/release-v0.6.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.6.0"},{name:"twitter:description",content:"Announcing the v0.6.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/04/release-v0.6.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.6.0.html",relativePath:"_blog/release-0.6.0.md",key:"v-7c3d28f9",path:"/blog/2021/04/release-v0.6.0/",headers:[{level:2,title:"What's new in v0.6.0",slug:"whats-new-in-v060"},{level:3,title:"A new way to generate addresses",slug:"a-new-way-to-generate-addresses"},{level:3,title:"Easier multiparty transaction creation",slug:"easier-multiparty-transaction-creation"},{level:3,title:"Renamed types",slug:"renamed-types"},{level:3,title:"New MSRV",slug:"new-msrv"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.7.0",frontmatter:{title:"Release v0.7.0",description:"Announcing the v0.7.0 release of BDK",authors:["Alekos Filini"],date:"2021-05-17",tags:["rust","release"],permalink:"/blog/2021/05/release-v0.7.0/",meta:[{property:"article:published_time",content:"2021-05-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.7.0"},{property:"og:description",content:"Announcing the v0.7.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/05/release-v0.7.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.7.0"},{name:"twitter:description",content:"Announcing the v0.7.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/05/release-v0.7.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.7.0.html",relativePath:"_blog/release-0.7.0.md",key:"v-0df1c3ce",path:"/blog/2021/05/release-v0.7.0/",headers:[{level:2,title:"What's new in v0.7.0",slug:"whats-new-in-v070"},{level:3,title:"New Signing API",slug:"new-signing-api"},{level:3,title:"Support Timelocks in the policy Module",slug:"support-timelocks-in-the-policy-module"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.8.0",frontmatter:{title:"Release v0.8.0",description:"Announcing the v0.8.0 release of BDK",authors:["Alekos Filini"],date:"2021-06-14",tags:["rust","release"],permalink:"/blog/2021/06/release-v0.8.0/",meta:[{property:"article:published_time",content:"2021-06-14T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.8.0"},{property:"og:description",content:"Announcing the v0.8.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/06/release-v0.8.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.8.0"},{name:"twitter:description",content:"Announcing the v0.8.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/06/release-v0.8.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.8.0.html",relativePath:"_blog/release-0.8.0.md",key:"v-75d11339",path:"/blog/2021/06/release-v0.8.0/",headers:[{level:2,title:"What's new in v0.8.0",slug:"whats-new-in-v080"},{level:3,title:"Getting the Derivation Index",slug:"getting-the-derivation-index"},{level:3,title:"Explicitly Enable non-ALL Sighashes",slug:"explicitly-enable-non-all-sighashes"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Release v0.9.0",frontmatter:{title:"Release v0.9.0",description:"Announcing the v0.9.0 release of BDK",authors:["Alekos Filini"],date:"2021-07-11",tags:["rust","release"],permalink:"/blog/2021/07/release-v0.9.0/",meta:[{property:"article:published_time",content:"2021-07-11T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Release v0.9.0"},{property:"og:description",content:"Announcing the v0.9.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2021/07/release-v0.9.0/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Release v0.9.0"},{name:"twitter:description",content:"Announcing the v0.9.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2021/07/release-v0.9.0/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"rust, release"},{property:"article:tag",content:"rust"},{property:"article:tag",content:"release"}],layout:"Post"},regularPath:"/_blog/release-0.9.0.html",relativePath:"_blog/release-0.9.0.md",key:"v-1ac9ef4e",path:"/blog/2021/07/release-v0.9.0/",headers:[{level:2,title:"What's new in v0.9.0",slug:"whats-new-in-v090"},{level:2,title:"Bitcoin Core Blockchain Backend",slug:"bitcoin-core-blockchain-backend"},{level:2,title:"Updated TransactionDetails Struct",slug:"updated-transactiondetails-struct"},{level:2,title:"Verify Downloaded TXs",slug:"verify-downloaded-txs"},{level:2,title:"Contributors",slug:"contributors"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"The Road to BDK 1.0",frontmatter:{title:"The Road to BDK 1.0",description:"Outlining the plan for the 1.0 release of BDK",authors:["Alekos Filini"],date:"2022-10-03",tags:["architecture"],draft:!1,meta:[{property:"article:published_time",content:"2022-10-03T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"The Road to BDK 1.0"},{property:"og:description",content:"Outlining the plan for the 1.0 release of BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/_blog/road_to_bdk_1/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"The Road to BDK 1.0"},{name:"twitter:description",content:"Outlining the plan for the 1.0 release of BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/_blog/road_to_bdk_1/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"architecture"},{property:"article:tag",content:"architecture"}],layout:"Post",permalink:"/blog/:slug"},regularPath:"/_blog/road_to_bdk_1.html",relativePath:"_blog/road_to_bdk_1.md",key:"v-55969f39",path:"/blog/road-to-bdk-1/",headers:[{level:2,title:"Goals",slug:"goals"},{level:3,title:"Stable API",slug:"stable-api"},{level:3,title:"Upstreaming our code",slug:"upstreaming-our-code"},{level:3,title:"Partially Syncing a Wallet",slug:"partially-syncing-a-wallet"},{level:3,title:"no_std",slug:"no-std"},{level:3,title:"Lower MSRV",slug:"lower-msrv"},{level:2,title:"Architecture",slug:"architecture"},{level:2,title:"Timeline",slug:"timeline"},{level:2,title:"Feature Freezing BDK",slug:"feature-freezing-bdk"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},id:"blog",pid:"blog",lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"BDK-CLI",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK-CLI"},{property:"og:description",content:"The bdk-clihttps://github.com/bitcoindevkit/bdk-cli repo has an example interactive shell built\nusing the `bdk` library called `bdk-cli` that acts both as a reference implementation of a wallet\nand a tool to quickly experiment with descriptors and transactions."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK-CLI"},{name:"twitter:description",content:"The bdk-clihttps://github.com/bitcoindevkit/bdk-cli repo has an example interactive shell built\nusing the `bdk` library called `bdk-cli` that acts both as a reference implementation of a wallet\nand a tool to quickly experiment with descriptors and transactions."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/",relativePath:"bdk-cli/README.md",key:"v-009133c8",path:"/bdk-cli/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Compiler",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Compiler"},{property:"og:description",content:'If you want to play around with more complicated spending policies, you\'ll start to find it harder and harder to manually create the descriptors. This is where the miniscript compiler comes in! The `bdk` library\nincludes a very simple compiler that can produce a descriptor given a spending policy. The syntax used to encode the spending policy is very well described in this pagehttp://bitcoin.sipa.be/miniscript/,\nspecifically in the "Policy to Miniscript compiler". The compiler included in BDK does basically the same job, but produces descriptors for `rust-miniscript` that have some minor differences from\nthe ones made by the C++ implementation used in that website.'},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/compiler/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Compiler"},{name:"twitter:description",content:'If you want to play around with more complicated spending policies, you\'ll start to find it harder and harder to manually create the descriptors. This is where the miniscript compiler comes in! The `bdk` library\nincludes a very simple compiler that can produce a descriptor given a spending policy. The syntax used to encode the spending policy is very well described in this pagehttp://bitcoin.sipa.be/miniscript/,\nspecifically in the "Policy to Miniscript compiler". The compiler included in BDK does basically the same job, but produces descriptors for `rust-miniscript` that have some minor differences from\nthe ones made by the C++ implementation used in that website.'},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/compiler/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/compiler.html",relativePath:"bdk-cli/compiler.md",key:"v-7a315e41",path:"/bdk-cli/compiler/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Installation",slug:"installation"},{level:2,title:"Usage",slug:"usage"},{level:2,title:"Example",slug:"example"},{level:2,title:"Troubleshooting",slug:"troubleshooting"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Concept",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Concept"},{property:"og:description",content:"Now, in order to better grasp some of the design choices made by BDK, it's important to understand the main concept driving the development of this project, and the goal that it's trying to\nachieve."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/concept/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Concept"},{name:"twitter:description",content:"Now, in order to better grasp some of the design choices made by BDK, it's important to understand the main concept driving the development of this project, and the goal that it's trying to\nachieve."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/concept/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/concept.html",relativePath:"bdk-cli/concept.md",key:"v-f611a14e",path:"/bdk-cli/concept/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Installation",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Installation"},{property:"og:description",content:"The only requirement to run the `bdk-cli` tool is a Linux/macOS system with a fairly recent Rust\ntoolchain installed. Since Linux distros tend to lag behind with updates, the quickest way to\ninstall the Rust compiler and Cargo is rustup.rshttps://rustup.rs/. You can head there and\nfollow their instructions, after which you can test if everything went fine by running"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/installation/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Installation"},{name:"twitter:description",content:"The only requirement to run the `bdk-cli` tool is a Linux/macOS system with a fairly recent Rust\ntoolchain installed. Since Linux distros tend to lag behind with updates, the quickest way to\ninstall the Rust compiler and Cargo is rustup.rshttps://rustup.rs/. You can head there and\nfollow their instructions, after which you can test if everything went fine by running"},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/installation/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/installation.html",relativePath:"bdk-cli/installation.md",key:"v-3acb6e6a",path:"/bdk-cli/installation/",headers:[{level:2,title:"Requirements",slug:"requirements"},{level:2,title:"Installing the bdk-cli tool",slug:"installing-the-bdk-cli-tool"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Interface",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Interface"},{property:"og:description",content:"Remember the `bdk-cli --help` command you ran before? Let's analyze its output here to figure out the interface:"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/interface/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Interface"},{name:"twitter:description",content:"Remember the `bdk-cli --help` command you ran before? Let's analyze its output here to figure out the interface:"},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/interface/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/interface.html",relativePath:"bdk-cli/interface.md",key:"v-496cb7f9",path:"/bdk-cli/interface/",headers:[{level:2,title:"Flags",slug:"flags"},{level:3,title:"Verbosity",slug:"verbosity"},{level:2,title:"Options",slug:"options"},{level:2,title:"Subcommands",slug:"subcommands"},{level:2,title:"key",slug:"key"},{level:3,title:"generate",slug:"generate"},{level:3,title:"restore",slug:"restore"},{level:3,title:"derive",slug:"derive"},{level:2,title:"wallet",slug:"wallet"},{level:3,title:"Options",slug:"options-2"},{level:2,title:"Subcommands",slug:"subcommands-2"},{level:3,title:"broadcast",slug:"broadcast"},{level:3,title:"bump_fee",slug:"bump-fee"},{level:3,title:"combine_psbt",slug:"combine-psbt"},{level:3,title:"create_tx",slug:"create-tx"},{level:3,title:"extract_psbt",slug:"extract-psbt"},{level:3,title:"finalize_psbt",slug:"finalize-psbt"},{level:3,title:"get_balance",slug:"get-balance"},{level:3,title:"get_new_address",slug:"get-new-address"},{level:3,title:"list_transactions",slug:"list-transactions"},{level:3,title:"list_unspent",slug:"list-unspent"},{level:3,title:"policies",slug:"policies"},{level:3,title:"public_descriptor",slug:"public-descriptor"},{level:3,title:"help",slug:"help"},{level:3,title:"sign",slug:"sign"},{level:3,title:"sync",slug:"sync"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Introduction",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Introduction"},{property:"og:description",content:"This can also be used as an example application to create your own command line bitcoin wallet tool using bdk."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/introduction/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Introduction"},{name:"twitter:description",content:"This can also be used as an example application to create your own command line bitcoin wallet tool using bdk."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/introduction/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/introduction.html",relativePath:"bdk-cli/introduction.md",key:"v-0b3b65ea",path:"/bdk-cli/introduction/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Playground",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Playground"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/playground/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Playground"},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/playground/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/playground.html",relativePath:"bdk-cli/playground.md",key:"v-a76bccee",path:"/bdk-cli/playground/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Regtest",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Regtest"},{property:"og:description",content:"Running the `bdk-cli` tool in regtest requires having a local Electrum server set-up. There are two main implementations, `electrs`https://github.com/romanz/electrs in Rust and `ElectrumX`https://github.com/spesmilo/electrumx in Python. Since the Rust toolchain is already required to\nuse BDK, this page will focus mostly on the former."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/bdk-cli/regtest/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Regtest"},{name:"twitter:description",content:"Running the `bdk-cli` tool in regtest requires having a local Electrum server set-up. There are two main implementations, `electrs`https://github.com/romanz/electrs in Rust and `ElectrumX`https://github.com/spesmilo/electrumx in Python. Since the Rust toolchain is already required to\nuse BDK, this page will focus mostly on the former."},{name:"twitter:url",content:"https://bitcoindevkit.org/bdk-cli/regtest/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/bdk-cli/regtest.html",relativePath:"bdk-cli/regtest.md",key:"v-05d01c19",path:"/bdk-cli/regtest/",headers:[{level:2,title:"Troubleshooting",slug:"troubleshooting"},{level:2,title:"Bonus: Docker",slug:"bonus-docker"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{frontmatter:{cases:!0,sidebar:!1,tagline:"Bitcoin applications building with BDK",description:"A list of bitcoin applications and services building with BDK",actionText:"Add your project",actionLink:"https://github.com/orgs/bitcoindevkit/discussions/64",editLink:!1,lastUpdated:!1,meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Bitcoin applications building with BDK"},{property:"og:description",content:"A list of bitcoin applications and services building with BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/case-studies/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Bitcoin applications building with BDK"},{name:"twitter:description",content:"A list of bitcoin applications and services building with BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/case-studies/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/case-studies.html",relativePath:"case-studies.md",key:"v-11bf335e",path:"/case-studies/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Descriptors",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Descriptors"},{property:"og:description",content:'Descriptors are a compact and semi-standard way to easily encode, or "describe", how scripts and subsequently, addresses of a wallet should be generated. They can be especially helpful when working with multisigs or even\nmore complex scripts, where the structure of the script itself is not trivial. They are a big step forward in making wallets more portable across different tools and apps, because for the first time they create a common\nlanguage to describe a full bitcoin script that developers can use and integrate in their software.'},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/descriptors/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Descriptors"},{name:"twitter:description",content:'Descriptors are a compact and semi-standard way to easily encode, or "describe", how scripts and subsequently, addresses of a wallet should be generated. They can be especially helpful when working with multisigs or even\nmore complex scripts, where the structure of the script itself is not trivial. They are a big step forward in making wallets more portable across different tools and apps, because for the first time they create a common\nlanguage to describe a full bitcoin script that developers can use and integrate in their software.'},{name:"twitter:url",content:"https://bitcoindevkit.org/descriptors/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/descriptors/",relativePath:"descriptors/README.md",key:"v-a9236c10",path:"/descriptors/",headers:[{level:3,title:"Compatibility Matrix",slug:"compatibility-matrix"},{level:3,title:"Examples",slug:"examples"},{level:3,title:"Implementation Details",slug:"implementation-details"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Examples",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Examples"},{property:"og:description",content:"Click the links below and learn from community-built example projects."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/examples/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Examples"},{name:"twitter:description",content:"Click the links below and learn from community-built example projects."},{name:"twitter:url",content:"https://bitcoindevkit.org/examples/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/examples/",relativePath:"examples/README.md",key:"v-29f9f21c",path:"/examples/",headers:[{level:2,title:"BDK-CLI",slug:"bdk-cli"},{level:2,title:"DevkitWallet",slug:"devkitwallet"},{level:2,title:"Padawan Wallet",slug:"padawan-wallet"},{level:2,title:"BDKSwiftExampleWallet",slug:"bdkswiftexamplewallet"},{level:2,title:"Tatooine",slug:"tatooine"},{level:2,title:"SEBA Bank Proof of reserves",slug:"seba-bank-proof-of-reserves"},{level:2,title:"Stackmate",slug:"stackmate"},{level:2,title:"Spotbit",slug:"spotbit"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Bitcoin Dev Kit",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Bitcoin Dev Kit"},{property:"og:description",content:"The Bitcoin Dev Kit BDKhttps://github.com/bitcoindevkit project originally called Magical Bitcoin 🧙 aims to build a collection of tools and libraries that are designed to be a solid foundation for cross platform Bitcoin wallets, along with a fully working reference implementation wallets for various platforms.\nAll BDK components are designed to be lightweight and modular so that they can be adapted for virtually any use-case: from single-sig mobile wallets to multi-billion-dollar cold storage vaults."},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/getting-started/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Bitcoin Dev Kit"},{name:"twitter:description",content:"The Bitcoin Dev Kit BDKhttps://github.com/bitcoindevkit project originally called Magical Bitcoin 🧙 aims to build a collection of tools and libraries that are designed to be a solid foundation for cross platform Bitcoin wallets, along with a fully working reference implementation wallets for various platforms.\nAll BDK components are designed to be lightweight and modular so that they can be adapted for virtually any use-case: from single-sig mobile wallets to multi-billion-dollar cold storage vaults."},{name:"twitter:url",content:"https://bitcoindevkit.org/getting-started/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/getting-started.html",relativePath:"getting-started.md",key:"v-4bcdac39",path:"/getting-started/",headers:[{level:2,title:"Initial Configuration",slug:"initial-configuration"},{level:2,title:"Internal Features",slug:"internal-features"},{level:2,title:"Playground",slug:"playground"},{level:2,title:"Descriptors",slug:"descriptors"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Supporters",frontmatter:{meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Supporters"},{property:"og:description",content:"The Bitcoin Dev Kit project is proudly supported by:"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/supporters/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Supporters"},{name:"twitter:description",content:"The Bitcoin Dev Kit project is proudly supported by:"},{name:"twitter:url",content:"https://bitcoindevkit.org/supporters/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/supporters/",relativePath:"supporters/README.md",key:"v-5245a0b2",path:"/supporters/",codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"BDK wallet with Bitcoin core RPC",frontmatter:{title:"BDK wallet with Bitcoin core RPC ",description:"Tutorial showing usage of Bitcoin core backend with BDK wallet",authors:["Rajarshi Maitra"],date:"2021-08-21",tags:["tutorial","BDK","Bitcoin Core","RPC","Wallet"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2021-08-21T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK wallet with Bitcoin core RPC"},{property:"og:description",content:"Tutorial showing usage of Bitcoin core backend with BDK wallet"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/Bitcoin_Core_RPC_Demo/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK wallet with Bitcoin core RPC"},{name:"twitter:description",content:"Tutorial showing usage of Bitcoin core backend with BDK wallet"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/Bitcoin_Core_RPC_Demo/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, BDK, Bitcoin Core, RPC, Wallet"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"Bitcoin Core"},{property:"article:tag",content:"RPC"},{property:"article:tag",content:"Wallet"}]},regularPath:"/tutorials/Bitcoin_Core_RPC_Demo.html",relativePath:"tutorials/Bitcoin_Core_RPC_Demo.md",key:"v-283d4479",path:"/tutorials/Bitcoin_Core_RPC_Demo/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Prerequisite",slug:"prerequisite"},{level:2,title:"Setting Up",slug:"setting-up"},{level:2,title:"Setting dependencies",slug:"setting-dependencies"},{level:2,title:"Getting Descriptors",slug:"getting-descriptors"},{level:2,title:"Talking to Bitcoin Core Programmatically",slug:"talking-to-bitcoin-core-programmatically"},{level:2,title:"Get some balance in core wallet.",slug:"get-some-balance-in-core-wallet"},{level:2,title:"Setup the BDK wallet",slug:"setup-the-bdk-wallet"},{level:2,title:"Sending Sats Around",slug:"sending-sats-around"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"bdk-cli basics multi-sig 2 of 3 tutorial",frontmatter:{title:"bdk-cli basics multi-sig 2 of 3 tutorial",description:"Tutorial using command-line to create a 2 of 3 multi-sig Wallet and Spend",authors:["waterstone"],date:"2022-10-17",tags:["tutorial","bdk-cli","multi-sig"],hidden:!1,draft:!1,meta:[{property:"article:published_time",content:"2022-10-17T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"bdk-cli basics multi-sig 2 of 3 tutorial"},{property:"og:description",content:"Tutorial using command-line to create a 2 of 3 multi-sig Wallet and Spend"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/bdk-cli_basics_multisig_2of3/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"bdk-cli basics multi-sig 2 of 3 tutorial"},{name:"twitter:description",content:"Tutorial using command-line to create a 2 of 3 multi-sig Wallet and Spend"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/bdk-cli_basics_multisig_2of3/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, bdk-cli, multi-sig"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"multi-sig"}]},regularPath:"/tutorials/bdk-cli_basics_multisig_2of3.html",relativePath:"tutorials/bdk-cli_basics_multisig_2of3.md",key:"v-e4749186",path:"/tutorials/bdk-cli_basics_multisig_2of3/",headers:[{level:2,title:"2-of-3 Multi-Signature Descriptor Wallet using bdk-cli",slug:"2-of-3-multi-signature-descriptor-wallet-using-bdk-cli"},{level:2,title:"Overview of the tutorial",slug:"overview-of-the-tutorial"},{level:2,title:"Step 1: Generate the XPRVs (Extended-Keys) and Save to environment variables",slug:"step-1-generate-the-xprvs-extended-keys-and-save-to-environment-variables"},{level:3,title:"1a: Verify XPRV environment variables are Active",slug:"1a-verify-xprv-environment-variables-are-active"},{level:2,title:"Step 2: Generate XPUBs (Extended Public Keys) & Save to environment variables",slug:"step-2-generate-xpubs-extended-public-keys-save-to-environment-variables"},{level:3,title:"2a: Verify XPUB environment variables",slug:"2a-verify-xpub-environment-variables"},{level:2,title:"Step 3: Create Single-Wallet Descriptors",slug:"step-3-create-single-wallet-descriptors"},{level:2,title:"Step 4: Create Multi-Sig-Descriptor Wallets",slug:"step-4-create-multi-sig-descriptor-wallets"},{level:3,title:"4a: Verify Multi-Sig-Descriptor environment variables are active",slug:"4a-verify-multi-sig-descriptor-environment-variables-are-active"},{level:2,title:"Step 5: Generate Receive Address by using Multi-Sig-Descriptor Wallets",slug:"step-5-generate-receive-address-by-using-multi-sig-descriptor-wallets"},{level:2,title:"Step 6: Send Testnet Bitcoin to the newly created receive-address",slug:"step-6-send-testnet-bitcoin-to-the-newly-created-receive-address"},{level:2,title:"Step 7: Sync one of the Multi-Sig Wallets",slug:"step-7-sync-one-of-the-multi-sig-wallets"},{level:2,title:"Step 8: Check Balance Multi-Sig Wallets",slug:"step-8-check-balance-multi-sig-wallets"},{level:2,title:"Step 9: Check Multi-Sig Policies on Descriptor Wallet",slug:"step-9-check-multi-sig-policies-on-descriptor-wallet"},{level:3,title:"SpendingPolicyRequired for complex descriptors",slug:"spendingpolicyrequired-for-complex-descriptors"},{level:2,title:"Step 10: Create a Transaction (PSBT)",slug:"step-10-create-a-transaction-psbt"},{level:3,title:"Export UNSIGNED_PSBT to environment variable",slug:"export-unsigned-psbt-to-environment-variable"},{level:3,title:"Verify UNSIGNED_PSBT environment variable",slug:"verify-unsigned-psbt-environment-variable"},{level:2,title:"Step 11: SIGN the Transaction",slug:"step-11-sign-the-transaction"},{level:3,title:"1st Wallet Signs the transaction",slug:"1st-wallet-signs-the-transaction"},{level:3,title:"2nd Wallet Signs the transaction",slug:"2nd-wallet-signs-the-transaction"},{level:2,title:"Step 12: Broadcast Transaction",slug:"step-12-broadcast-transaction"},{level:3,title:"Verify Transaction",slug:"verify-transaction"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Command Line introduction to Bitcoin Wallet Development using bdk-cli",frontmatter:{title:"Command Line introduction to Bitcoin Wallet Development using bdk-cli",description:"Intro to bdk-cli and wallet dev",authors:["waterst0ne"],date:"2022-09-22",tags:["bdk-cli","basics","novice"],meta:[{property:"article:published_time",content:"2022-09-22T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Command Line introduction to Bitcoin Wallet Development using bdk-cli"},{property:"og:description",content:"Intro to bdk-cli and wallet dev"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/bdk_cli_basics/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Command Line introduction to Bitcoin Wallet Development using bdk-cli"},{name:"twitter:description",content:"Intro to bdk-cli and wallet dev"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/bdk_cli_basics/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"bdk-cli, basics, novice"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"basics"},{property:"article:tag",content:"novice"}]},regularPath:"/tutorials/bdk_cli_basics.html",relativePath:"tutorials/bdk_cli_basics.md",key:"v-317756bd",path:"/tutorials/bdk_cli_basics/",headers:[{level:2,title:"Tutorial Goals",slug:"tutorial-goals"},{level:2,title:"A few things before you begin:",slug:"a-few-things-before-you-begin"},{level:3,title:"Outline of Tutorial and Installation notes:",slug:"outline-of-tutorial-and-installation-notes"},{level:3,title:"Brief Outline of Tutorial",slug:"brief-outline-of-tutorial"},{level:3,title:"Rust and Cargo installation:",slug:"rust-and-cargo-installation"},{level:3,title:"bdk-cli installation:",slug:"bdk-cli-installation"},{level:3,title:"Emoji Legend:",slug:"emoji-legend"},{level:2,title:"Step 0: Check Version of bdk-cli",slug:"step-0-check-version-of-bdk-cli"},{level:3,title:"Preview of bdk-cli help menu",slug:"preview-of-bdk-cli-help-menu"},{level:2,title:"Step 1: Seed Generate",slug:"step-1-seed-generate"},{level:3,title:"1a: Mnemonic word-list + XPRV (Extended Private Key) :key:",slug:"1a-mnemonic-word-list-xprv-extended-private-key-"},{level:3,title:"1b: Save XPRV (Extended Private Key) into environment variable",slug:"1b-save-xprv-extended-private-key-into-environment-variable"},{level:3,title:"1c: Verify environment variable XPRV_00 is active",slug:"1c-verify-environment-variable-xprv-00-is-active"},{level:3,title:"1d: Create Descriptor and Save into environment variable",slug:"1d-create-descriptor-and-save-into-environment-variable"},{level:3,title:"1e: Verify environment variable my_descriptor is active",slug:"1e-verify-environment-variable-my-descriptor-is-active"},{level:2,title:"Step 2: Generate Receive-Address",slug:"step-2-generate-receive-address"},{level:2,title:"Step 3: Send testnet bitcoin to the newly created receive-address",slug:"step-3-send-testnet-bitcoin-to-the-newly-created-receive-address"},{level:2,title:"Step 4: Sync the wallet",slug:"step-4-sync-the-wallet"},{level:2,title:"Step 5: Check the balance",slug:"step-5-check-the-balance"},{level:2,title:"Step 6: Create Transaction (PSBT)",slug:"step-6-create-transaction-psbt"},{level:3,title:"6a: export PSBT to environment-variable",slug:"6a-export-psbt-to-environment-variable"},{level:2,title:"Step 7: Sign Transaction (PSBT)",slug:"step-7-sign-transaction-psbt"},{level:3,title:"7a: export signed psbt to environment variable",slug:"7a-export-signed-psbt-to-environment-variable"},{level:2,title:"Step 8: Broadcast Transaction",slug:"step-8-broadcast-transaction"},{level:2,title:"Resources",slug:"resources"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Using BDK with Tor",frontmatter:{title:"Using BDK with Tor",description:"How to integrate Tor client to sync BDK wallet with tor enabled blockchain service",authors:["rorp"],date:"2023-01-03",tags:["tutorial","tor","wallet","blockchain"],meta:[{property:"article:published_time",content:"2023-01-03T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Using BDK with Tor"},{property:"og:description",content:"How to integrate Tor client to sync BDK wallet with tor enabled blockchain service"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/bdk_with_tor/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Using BDK with Tor"},{name:"twitter:description",content:"How to integrate Tor client to sync BDK wallet with tor enabled blockchain service"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/bdk_with_tor/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, tor, wallet, blockchain"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"tor"},{property:"article:tag",content:"wallet"},{property:"article:tag",content:"blockchain"}]},regularPath:"/tutorials/bdk_with_tor.html",relativePath:"tutorials/bdk_with_tor.md",key:"v-e8e842ee",path:"/tutorials/bdk_with_tor/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Prerequisite",slug:"prerequisite"},{level:2,title:"Setting Up",slug:"setting-up"},{level:2,title:"ElectrumBlockchain",slug:"electrumblockchain"},{level:2,title:"Blocking EsploraBlockchain",slug:"blocking-esplorablockchain"},{level:2,title:"Asynchronous EsploraBlockchain",slug:"asynchronous-esplorablockchain"},{level:2,title:"CompactFiltersBlockchain",slug:"compactfiltersblockchain"},{level:2,title:"Integrated Tor daemon",slug:"integrated-tor-daemon"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"BDK wallet as a BIP157 SPV light client",frontmatter:{title:"BDK wallet as a BIP157 SPV light client",description:"Tutorial showing usage of compact filters (BIP157) using bdk-cli command line tools",authors:["Rajarshi Maitra"],date:"2021-06-20",tags:["tutorial","BDK","bdk-cli","compact_filters","BIP157","Neutrino"],meta:[{property:"article:published_time",content:"2021-06-20T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK wallet as a BIP157 SPV light client"},{property:"og:description",content:"Tutorial showing usage of compact filters (BIP157) using bdk-cli command line tools"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/compact_filters_demo/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK wallet as a BIP157 SPV light client"},{name:"twitter:description",content:"Tutorial showing usage of compact filters (BIP157) using bdk-cli command line tools"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/compact_filters_demo/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, BDK, bdk-cli, compact_filters, BIP157, Neutrino"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"compact_filters"},{property:"article:tag",content:"BIP157"},{property:"article:tag",content:"Neutrino"}]},regularPath:"/tutorials/compact_filters_demo.html",relativePath:"tutorials/compact_filters_demo.md",key:"v-c6331d2a",path:"/tutorials/compact_filters_demo/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:3,title:"Compact Filters:",slug:"compact-filters"},{level:3,title:"BDK and Compact filters",slug:"bdk-and-compact-filters"},{level:3,title:"bdk-cli",slug:"bdk-cli"},{level:2,title:"Tutorial Scope",slug:"tutorial-scope"},{level:2,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Install and run bitcoind",slug:"install-and-run-bitcoind"},{level:3,title:"Install and run bdk-cli",slug:"install-and-run-bdk-cli"},{level:2,title:"Tutorial",slug:"tutorial"},{level:3,title:"Bitcoin Core Wallet Generation",slug:"bitcoin-core-wallet-generation"},{level:3,title:"BDK Wallet Generation",slug:"bdk-wallet-generation"},{level:3,title:"Recieve Coins",slug:"recieve-coins"},{level:3,title:"Creating a transaction.",slug:"creating-a-transaction"},{level:3,title:"Sign and Broadcast the transaction",slug:"sign-and-broadcast-the-transaction"},{level:3,title:"Confirming the Transaction",slug:"confirming-the-transaction"},{level:3,title:"Shutdown Docker",slug:"shutdown-docker"},{level:2,title:"End Words",slug:"end-words"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Making Descriptor-based paper wallets",frontmatter:{title:"Making Descriptor-based paper wallets",description:"Demonstrate how to create descriptor-based paper wallet and how to spend them with bdk",authors:["Riccardo Casatta","Steve Myers"],date:"2021-03-30",tags:["guide","descriptor","paper wallets"],meta:[{property:"article:published_time",content:"2021-03-30T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Making Descriptor-based paper wallets"},{property:"og:description",content:"Demonstrate how to create descriptor-based paper wallet and how to spend them with bdk"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/descriptor_based_paper_wallet/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Making Descriptor-based paper wallets"},{name:"twitter:description",content:"Demonstrate how to create descriptor-based paper wallet and how to spend them with bdk"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/descriptor_based_paper_wallet/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"guide, descriptor, paper wallets"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"descriptor"},{property:"article:tag",content:"paper wallets"}]},regularPath:"/tutorials/descriptor_based_paper_wallet.html",relativePath:"tutorials/descriptor_based_paper_wallet.md",key:"v-4432e00e",path:"/tutorials/descriptor_based_paper_wallet/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"About paper wallets",slug:"about-paper-wallets"},{level:2,title:"Descriptors",slug:"descriptors"},{level:2,title:"Example use case",slug:"example-use-case"},{level:2,title:"Creating the paper wallet",slug:"creating-the-paper-wallet"},{level:2,title:"BDK",slug:"bdk"},{level:2,title:"Funding tx",slug:"funding-tx"},{level:2,title:"Sweep tx",slug:"sweep-tx"},{level:3,title:"Step 1: Alice creates and signs a PSBT",slug:"step-1-alice-creates-and-signs-a-psbt"},{level:3,title:"Step 2: Barbara signs Alice's signed PSBT and broadcasts the tx",slug:"step-2-barbara-signs-alices-signed-psbt-and-broadcasts-the-tx"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"A Multisig between BDK and Core",frontmatter:{title:"A Multisig between BDK and Core",description:"Guide to setup a 2-of-2 multisig using Bitcoin Core and BDK",authors:["Gabriele Domenichini"],date:"2020-11-18",tags:["guide","descriptor"],meta:[{property:"article:published_time",content:"2020-11-18T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"A Multisig between BDK and Core"},{property:"og:description",content:"Guide to setup a 2-of-2 multisig using Bitcoin Core and BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/descriptors_in_the_wild/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"A Multisig between BDK and Core"},{name:"twitter:description",content:"Guide to setup a 2-of-2 multisig using Bitcoin Core and BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/descriptors_in_the_wild/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"guide, descriptor"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"descriptor"}]},regularPath:"/tutorials/descriptors_in_the_wild.html",relativePath:"tutorials/descriptors_in_the_wild.md",key:"v-48a004ce",path:"/tutorials/descriptors_in_the_wild/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"The use case",slug:"the-use-case"},{level:2,title:"The role of Descriptors",slug:"the-role-of-descriptors"},{level:2,title:"Our playground",slug:"our-playground"},{level:3,title:"1. Creating the seeds and the derived Extended Public keys",slug:"1-creating-the-seeds-and-the-derived-extended-public-keys"},{level:3,title:"2. Creation of the multi signature descriptor for each wallet",slug:"2-creation-of-the-multi-signature-descriptor-for-each-wallet"},{level:3,title:"3. Use each other's software to receive testnet coins from a faucet",slug:"3-use-each-others-software-to-receive-testnet-coins-from-a-faucet"},{level:3,title:"4. we return part of the satoshis received back to the faucet",slug:"4-we-return-part-of-the-satoshis-received-back-to-the-faucet"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"BDK-FLUTTER: Building Flutter Apps with BDK",frontmatter:{title:"BDK-FLUTTER: Building Flutter Apps with BDK",description:"A tutorial and guide to using bdk-flutter for building bitcoin apps",authors:["Bitcoin Zavior"],date:"2022-10-05",tags:["bitcoin","React Native","Flutter","iOS","Android","mobile","bdk-rn","bdk","tutorial","guide","wallet"],meta:[{property:"article:published_time",content:"2022-10-05T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK-FLUTTER: Building Flutter Apps with BDK"},{property:"og:description",content:"A tutorial and guide to using bdk-flutter for building bitcoin apps"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_flutter/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK-FLUTTER: Building Flutter Apps with BDK"},{name:"twitter:description",content:"A tutorial and guide to using bdk-flutter for building bitcoin apps"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_flutter/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"bitcoin, React Native, Flutter, iOS, Android, mobile, bdk-rn, bdk, tutorial, guide, wallet"},{property:"article:tag",content:"bitcoin"},{property:"article:tag",content:"React Native"},{property:"article:tag",content:"Flutter"},{property:"article:tag",content:"iOS"},{property:"article:tag",content:"Android"},{property:"article:tag",content:"mobile"},{property:"article:tag",content:"bdk-rn"},{property:"article:tag",content:"bdk"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"wallet"}]},regularPath:"/tutorials/exploring_bdk_flutter.html",relativePath:"tutorials/exploring_bdk_flutter.md",key:"v-2220834e",path:"/tutorials/exploring_bdk_flutter/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:3,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Bitcoin Basics",slug:"bitcoin-basics"},{level:2,title:"Bitcoin Dev Kit and bdk-flutter",slug:"bitcoin-dev-kit-and-bdk-flutter"},{level:2,title:"Getting Started",slug:"getting-started"},{level:2,title:"Setting up Flutter app structure",slug:"setting-up-flutter-app-structure"},{level:2,title:"Installing bdk-flutter",slug:"installing-bdk-flutter"},{level:2,title:"Configuring",slug:"configuring"},{level:2,title:"Importing bdk-flutter",slug:"importing-bdk-flutter"},{level:2,title:"Calling bdk-flutter methods",slug:"calling-bdk-flutter-methods"},{level:2,title:"Creating a wallet",slug:"creating-a-wallet"},{level:2,title:"UTXOs and balance",slug:"utxos-and-balance"},{level:2,title:"Restoring a wallet",slug:"restoring-a-wallet"},{level:2,title:"Sending bitcoin",slug:"sending-bitcoin"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"BDK-RN: Building React Native Apps with BDK",frontmatter:{title:"BDK-RN: Building React Native Apps with BDK",description:"A tutorial and guide to using bdk-rn for building bitcoin apps",authors:["Bitcoin Zavior"],date:"2022-08-05",tags:["bitcoin","React Native","iOS","Android","mobile","bdk-rn","bdk","tutorial","guide","wallet"],meta:[{property:"article:published_time",content:"2022-08-05T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"BDK-RN: Building React Native Apps with BDK"},{property:"og:description",content:"A tutorial and guide to using bdk-rn for building bitcoin apps"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_rn/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"BDK-RN: Building React Native Apps with BDK"},{name:"twitter:description",content:"A tutorial and guide to using bdk-rn for building bitcoin apps"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/exploring_bdk_rn/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"bitcoin, React Native, iOS, Android, mobile, bdk-rn, bdk, tutorial, guide, wallet"},{property:"article:tag",content:"bitcoin"},{property:"article:tag",content:"React Native"},{property:"article:tag",content:"iOS"},{property:"article:tag",content:"Android"},{property:"article:tag",content:"mobile"},{property:"article:tag",content:"bdk-rn"},{property:"article:tag",content:"bdk"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"wallet"}]},regularPath:"/tutorials/exploring_bdk_rn.html",relativePath:"tutorials/exploring_bdk_rn.md",key:"v-61999ca2",path:"/tutorials/exploring_bdk_rn/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:3,title:"Prerequisites",slug:"prerequisites"},{level:3,title:"Bitcoin Basics",slug:"bitcoin-basics"},{level:2,title:"Bitcoin Dev Kit and bdk-rn",slug:"bitcoin-dev-kit-and-bdk-rn"},{level:2,title:"Getting Started",slug:"getting-started"},{level:2,title:"Setting up styles and RN app structure",slug:"setting-up-styles-and-rn-app-structure"},{level:2,title:"Installing bdk-rn",slug:"installing-bdk-rn"},{level:2,title:"Importing bdk-rn",slug:"importing-bdk-rn"},{level:2,title:"Calling bdk-rn methods",slug:"calling-bdk-rn-methods"},{level:2,title:"Creating a wallet",slug:"creating-a-wallet"},{level:2,title:"UTXOs and balance",slug:"utxos-and-balance"},{level:2,title:"Restoring wallet",slug:"restoring-wallet"},{level:2,title:"Sending bitcoin",slug:"sending-bitcoin"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Hello World!",frontmatter:{title:"Hello World!",description:"Getting started using the BDK library in a very simple Rust project",authors:["Alekos Filini"],date:"2020-12-18",tags:["getting started","rust"],permalink:"/blog/2020/12/hello-world/",meta:[{property:"article:published_time",content:"2020-12-18T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Hello World!"},{property:"og:description",content:"Getting started using the BDK library in a very simple Rust project"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/2020/12/hello-world/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Hello World!"},{name:"twitter:description",content:"Getting started using the BDK library in a very simple Rust project"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/2020/12/hello-world/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"getting started, rust"},{property:"article:tag",content:"getting started"},{property:"article:tag",content:"rust"}]},regularPath:"/tutorials/hello-world.html",relativePath:"tutorials/hello-world.md",key:"v-b29a7bce",path:"/blog/2020/12/hello-world/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Design Goals",slug:"design-goals"},{level:2,title:"The Wallet Structure",slug:"the-wallet-structure"},{level:2,title:"Custom Database and Blockchain types",slug:"custom-database-and-blockchain-types"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Hidden Powers of Miniscript Policy & Descriptors",frontmatter:{title:"Hidden Powers of Miniscript Policy & Descriptors",description:"Introduction to Descriptor and Miniscript, making a Multisig Wallet and Testing Miniscript Policies",authors:["Sandipan Dey","Rajarshi Maitra"],date:"2022-01-02",tags:["tutorial","bdk","bdk-cli","miniscript","descriptor","bitcoin-cli"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-01-02T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Hidden Powers of Miniscript Policy & Descriptors"},{property:"og:description",content:"Introduction to Descriptor and Miniscript, making a Multisig Wallet and Testing Miniscript Policies"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/hidden-power-of-bitcoin/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Hidden Powers of Miniscript Policy & Descriptors"},{name:"twitter:description",content:"Introduction to Descriptor and Miniscript, making a Multisig Wallet and Testing Miniscript Policies"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/hidden-power-of-bitcoin/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"tutorial, bdk, bdk-cli, miniscript, descriptor, bitcoin-cli"},{property:"article:tag",content:"tutorial"},{property:"article:tag",content:"bdk"},{property:"article:tag",content:"bdk-cli"},{property:"article:tag",content:"miniscript"},{property:"article:tag",content:"descriptor"},{property:"article:tag",content:"bitcoin-cli"}]},regularPath:"/tutorials/hidden-power-of-bitcoin.html",relativePath:"tutorials/hidden-power-of-bitcoin.md",key:"v-1a26d7ce",path:"/tutorials/hidden-power-of-bitcoin/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Script",slug:"script"},{level:2,title:"Miniscript",slug:"miniscript"},{level:2,title:"Descriptors",slug:"descriptors"},{level:2,title:"Where it all comes together...",slug:"where-it-all-comes-together"},{level:3,title:"Keys and Generating Addresses",slug:"keys-and-generating-addresses"},{level:3,title:"Making a MultiSig Descriptor for Funds",slug:"making-a-multisig-descriptor-for-funds"},{level:2,title:"Retention Bonus - Smart Contract with Bitcoin",slug:"retention-bonus-smart-contract-with-bitcoin"},{level:2,title:"Inspirations",slug:"inspirations"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Spending Policy Decoded",frontmatter:{title:"Spending Policy Decoded",description:"Demonstrate how to use a descriptor wallet with different spending policies",authors:["Steve Myers","thunderbiscuit"],date:"2021-02-23",tags:["guide","descriptor"],meta:[{property:"article:published_time",content:"2021-02-23T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Spending Policy Decoded"},{property:"og:description",content:"Demonstrate how to use a descriptor wallet with different spending policies"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/spending_policy_demo/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Spending Policy Decoded"},{name:"twitter:description",content:"Demonstrate how to use a descriptor wallet with different spending policies"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/spending_policy_demo/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"guide, descriptor"},{property:"article:tag",content:"guide"},{property:"article:tag",content:"descriptor"}]},regularPath:"/tutorials/spending_policy_demo.html",relativePath:"tutorials/spending_policy_demo.md",key:"v-4883b547",path:"/tutorials/spending_policy_demo/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Initial Setup",slug:"initial-setup"},{level:3,title:"Step 0: Install a recent version bdk-cli",slug:"step-0-install-a-recent-version-bdk-cli"},{level:3,title:"Step 1: Generate private extended keys",slug:"step-1-generate-private-extended-keys"},{level:3,title:"Step 2: Extract private extended keys",slug:"step-2-extract-private-extended-keys"},{level:3,title:"Step 3: Derive public extended keys",slug:"step-3-derive-public-extended-keys"},{level:3,title:"Step 4: Create wallet descriptors for each participant",slug:"step-4-create-wallet-descriptors-for-each-participant"},{level:2,title:"Policy A. Three signatures",slug:"policy-a-three-signatures"},{level:3,title:"Step 1a: Create a testnet segwit0 receive address",slug:"step-1a-create-a-testnet-segwit0-receive-address"},{level:3,title:"Step 2a: Send testnet bitcoin from a faucet to receive address",slug:"step-2a-send-testnet-bitcoin-from-a-faucet-to-receive-address"},{level:3,title:"Step 3a: Sync participant wallets and confirm balance",slug:"step-3a-sync-participant-wallets-and-confirm-balance"},{level:3,title:"Step 4a: View wallet spending policies",slug:"step-4a-view-wallet-spending-policies"},{level:3,title:"Step 5a: Create spending transaction",slug:"step-5a-create-spending-transaction"},{level:3,title:"Step 6a: Sign and finalize PSBTs",slug:"step-6a-sign-and-finalize-psbts"},{level:3,title:"Step 7a: Broadcast finalized PSBT",slug:"step-7a-broadcast-finalized-psbt"},{level:3,title:"Step 8a: Confirm transaction included in a testnet block",slug:"step-8a-confirm-transaction-included-in-a-testnet-block"},{level:2,title:"Policy B. Two signatures after a relative time lock",slug:"policy-b-two-signatures-after-a-relative-time-lock"},{level:3,title:"Step 1b: Create a new testnet receive address",slug:"step-1b-create-a-new-testnet-receive-address"},{level:3,title:"Step 2b: Fund new address from testnet faucet",slug:"step-2b-fund-new-address-from-testnet-faucet"},{level:3,title:"Step 3b: Sync wallet and confirm wallet balance",slug:"step-3b-sync-wallet-and-confirm-wallet-balance"},{level:3,title:"Step 4b: Create spending transaction",slug:"step-4b-create-spending-transaction"},{level:3,title:"Step 5b: Sign and finalize PSBTs",slug:"step-5b-sign-and-finalize-psbts"},{level:3,title:"Step 6b: Broadcast finalized PSBT",slug:"step-6b-broadcast-finalized-psbt"},{level:3,title:"Step 7b: View confirmed transaction",slug:"step-7b-view-confirmed-transaction"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{title:"Using BDK with hardware wallets",frontmatter:{title:"Using BDK with hardware wallets",description:"Tutorial showing how to send funds to a HW and then spend from it using BDK",authors:["danielabrozzoni"],date:"2022-10-27",tags:["BDK","Development","Hardware Wallets"],hidden:!0,draft:!1,meta:[{property:"article:published_time",content:"2022-10-27T00:00:00.000Z"},{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:title",content:"Using BDK with hardware wallets"},{property:"og:description",content:"Tutorial showing how to send funds to a HW and then spend from it using BDK"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/tutorials/using_bdk_with_hardware_wallets/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:title",content:"Using BDK with hardware wallets"},{name:"twitter:description",content:"Tutorial showing how to send funds to a HW and then spend from it using BDK"},{name:"twitter:url",content:"https://bitcoindevkit.org/tutorials/using_bdk_with_hardware_wallets/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"BDK, Development, Hardware Wallets"},{property:"article:tag",content:"BDK"},{property:"article:tag",content:"Development"},{property:"article:tag",content:"Hardware Wallets"}]},regularPath:"/tutorials/using_bdk_with_hardware_wallets.html",relativePath:"tutorials/using_bdk_with_hardware_wallets.md",key:"v-35b03e19",path:"/tutorials/using_bdk_with_hardware_wallets/",headers:[{level:2,title:"Introduction",slug:"introduction"},{level:2,title:"Prerequisites",slug:"prerequisites"},{level:2,title:"Initial setup",slug:"initial-setup"},{level:2,title:"Finding the hardware wallet",slug:"finding-the-hardware-wallet"},{level:2,title:"Receiving funds",slug:"receiving-funds"},{level:2,title:"Spending funds",slug:"spending-funds"},{level:2,title:"Conclusion",slug:"conclusion"}],codeSwitcherOptions:{},lastUpdated:"10/5/2023, 4:23:33 PM",lastUpdatedTimestamp:1696523013e3},{frontmatter:{layout:"IndexPost",title:"Blog",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/",key:"v-424df898",path:"/blog/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterKey",title:"Tags",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/",key:"v-619df59e",path:"/blog/tags/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterKey",title:"Authors",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/",key:"v-b0968728",path:"/blog/author/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"architecture ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/architecture/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/architecture/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/architecture/",key:"v-c4494744",path:"/blog/tags/architecture/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"BDK-RN ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/BDK-RN/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/BDK-RN/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/BDK-RN/",key:"v-876cfade",path:"/blog/tags/BDK-RN/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Development ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Development/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Development/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Development/",key:"v-3acc51dc",path:"/blog/tags/Development/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Architecture ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Architecture/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Architecture/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Architecture/",key:"v-650ae784",path:"/blog/tags/Architecture/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"BDK ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/BDK/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/BDK/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/BDK/",key:"v-5f2600b8",path:"/blog/tags/BDK/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bindings ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bindings/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bindings/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bindings/",key:"v-1296a8fa",path:"/blog/tags/bindings/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"fee ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/fee/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/fee/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/fee/",key:"v-5f0447f2",path:"/blog/tags/fee/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"machine learning ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/machine learning/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/machine learning/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/machine%20learning/",key:"v-e2317b12",path:"/blog/tags/machine learning/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"taproot ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/taproot/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/taproot/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/taproot/",key:"v-57f3a168",path:"/blog/tags/taproot/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"miniscript ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/miniscript/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/miniscript/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/miniscript/",key:"v-ef7c3fa2",path:"/blog/tags/miniscript/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Hardware Wallets ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Hardware Wallets/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Hardware Wallets/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Hardware%20Wallets/",key:"v-640144b2",path:"/blog/tags/Hardware Wallets/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"coin selection ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/coin selection/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/coin selection/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/coin%20selection/",key:"v-74edfe92",path:"/blog/tags/coin selection/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"development ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/development/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/development/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/development/",key:"v-4e62fa1c",path:"/blog/tags/development/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"summer of bitcoin ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/summer of bitcoin/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/summer of bitcoin/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/summer%20of%20bitcoin/",key:"v-0159a747",path:"/blog/tags/summer of bitcoin/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"security ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/security/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/security/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/security/",key:"v-0755ed11",path:"/blog/tags/security/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"rust ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/rust/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/rust/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/rust/",key:"v-3fee41ed",path:"/blog/tags/rust/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"release ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/release/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/release/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/release/",key:"v-543950a6",path:"/blog/tags/release/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"tutorial ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/tutorial/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/tutorial/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/tutorial/",key:"v-da8c869a",path:"/blog/tags/tutorial/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Bitcoin Core ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Bitcoin Core/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Bitcoin Core/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Bitcoin%20Core/",key:"v-62bbf2ad",path:"/blog/tags/Bitcoin Core/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"RPC ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/RPC/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/RPC/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/RPC/",key:"v-5f171cb0",path:"/blog/tags/RPC/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Wallet ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Wallet/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Wallet/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Wallet/",key:"v-4696dfd8",path:"/blog/tags/Wallet/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bdk-cli ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bdk-cli/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bdk-cli/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bdk-cli/",key:"v-c711ccde",path:"/blog/tags/bdk-cli/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"multi-sig ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/multi-sig/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/multi-sig/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/multi-sig/",key:"v-655ee4a0",path:"/blog/tags/multi-sig/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"basics ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/basics/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/basics/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/basics/",key:"v-e646a928",path:"/blog/tags/basics/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"novice ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/novice/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/novice/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/novice/",key:"v-1fb58ffb",path:"/blog/tags/novice/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"tor ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/tor/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/tor/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/tor/",key:"v-5ef73f54",path:"/blog/tags/tor/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"wallet ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/wallet/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/wallet/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/wallet/",key:"v-39437010",path:"/blog/tags/wallet/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"blockchain ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/blockchain/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/blockchain/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/blockchain/",key:"v-7c8563fd",path:"/blog/tags/blockchain/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"compact_filters ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/compact_filters/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/compact_filters/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/compact_filters/",key:"v-baacba64",path:"/blog/tags/compact_filters/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"BIP157 ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/BIP157/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/BIP157/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/BIP157/",key:"v-75ccd5f2",path:"/blog/tags/BIP157/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Neutrino ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Neutrino/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Neutrino/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Neutrino/",key:"v-4fed1c23",path:"/blog/tags/Neutrino/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"guide ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/guide/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/guide/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/guide/",key:"v-a9e0285e",path:"/blog/tags/guide/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"descriptor ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/descriptor/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/descriptor/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/descriptor/",key:"v-733ed37c",path:"/blog/tags/descriptor/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"paper wallets ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/paper wallets/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/paper wallets/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/paper%20wallets/",key:"v-1144be8a",path:"/blog/tags/paper wallets/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bitcoin ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bitcoin/",key:"v-915f8322",path:"/blog/tags/bitcoin/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"React Native ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/React Native/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/React Native/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/React%20Native/",key:"v-bf53d4d4",path:"/blog/tags/React Native/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Flutter ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Flutter/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Flutter/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Flutter/",key:"v-07eeb15e",path:"/blog/tags/Flutter/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"iOS ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/iOS/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/iOS/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/iOS/",key:"v-5f023740",path:"/blog/tags/iOS/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Android ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/Android/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/Android/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/Android/",key:"v-414e735e",path:"/blog/tags/Android/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"mobile ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/mobile/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/mobile/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/mobile/",key:"v-2c94bf22",path:"/blog/tags/mobile/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bdk-rn ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bdk-rn/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bdk-rn/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bdk-rn/",key:"v-dd212a9e",path:"/blog/tags/bdk-rn/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bdk ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bdk/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bdk/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bdk/",key:"v-5f07f0f8",path:"/blog/tags/bdk/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"getting started ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/getting started/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/getting started/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/getting%20started/",key:"v-79c3de4b",path:"/blog/tags/getting started/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"bitcoin-cli ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin-cli/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/tags/bitcoin-cli/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/tags/bitcoin-cli/",key:"v-01a03a08",path:"/blog/tags/bitcoin-cli/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Lloyd Fournier ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Lloyd Fournier/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Lloyd Fournier/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Lloyd%20Fournier/",key:"v-600b5b28",path:"/blog/author/Lloyd Fournier/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Bitcoin Zavior ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Bitcoin Zavior/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Bitcoin Zavior/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Bitcoin%20Zavior/",key:"v-37829241",path:"/blog/author/Bitcoin Zavior/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"thunderbiscuit ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/thunderbiscuit/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/thunderbiscuit/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/thunderbiscuit/",key:"v-5d54001e",path:"/blog/author/thunderbiscuit/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Riccardo Casatta ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Riccardo Casatta/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Riccardo Casatta/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Riccardo%20Casatta/",key:"v-624fd61e",path:"/blog/author/Riccardo Casatta/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Alekos Filini ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Alekos%20Filini/",key:"v-ad00c09c",path:"/blog/author/Alekos Filini/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Wszdexdrf ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Wszdexdrf/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Wszdexdrf/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Wszdexdrf/",key:"v-4eeab648",path:"/blog/author/Wszdexdrf/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"César Alvarez Vallero ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/César Alvarez Vallero/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/César Alvarez Vallero/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/C%C3%A9sar%20Alvarez%20Vallero/",key:"v-a0d840b0",path:"/blog/author/César Alvarez Vallero/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Rajarshi Maitra ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Rajarshi Maitra/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Rajarshi Maitra/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Rajarshi%20Maitra/",key:"v-82e16b5c",path:"/blog/author/Rajarshi Maitra/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"waterstone ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/waterstone/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/waterstone/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/waterstone/",key:"v-3e85f455",path:"/blog/author/waterstone/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"waterst0ne ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/waterst0ne/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/waterst0ne/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/waterst0ne/",key:"v-3e6950f4",path:"/blog/author/waterst0ne/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"rorp ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/rorp/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/rorp/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/rorp/",key:"v-d2b26530",path:"/blog/author/rorp/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Steve Myers ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Steve Myers/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Steve Myers/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Steve%20Myers/",key:"v-a354115e",path:"/blog/author/Steve Myers/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Gabriele Domenichini ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Gabriele Domenichini/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Gabriele Domenichini/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Gabriele%20Domenichini/",key:"v-6b564fb4",path:"/blog/author/Gabriele Domenichini/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"Sandipan Dey ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Sandipan Dey/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Sandipan Dey/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Sandipan%20Dey/",key:"v-91c10894",path:"/blog/author/Sandipan Dey/",codeSwitcherOptions:{}},{frontmatter:{layout:"FrontmatterPagination",title:"danielabrozzoni ",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/danielabrozzoni/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/danielabrozzoni/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/danielabrozzoni/",key:"v-754a45a4",path:"/blog/author/danielabrozzoni/",codeSwitcherOptions:{}},{frontmatter:{layout:"DirectoryPagination",title:"Page 2",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/page/2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/page/2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/page/2/",key:"v-c3507bb6",path:"/blog/page/2/",codeSwitcherOptions:{}},{frontmatter:{layout:"DirectoryPagination",title:"Alekos Filini - Page 2",meta:[{property:"og:site_name",content:"Bitcoin Dev Kit Documentation"},{property:"og:type",content:"article"},{property:"og:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/page/2/"},{property:"og:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:url",content:"https://bitcoindevkit.org/blog/author/Alekos Filini/page/2/"},{name:"twitter:card",content:"summary"},{name:"twitter:image",content:"https://bitcoindevkit.org/card.png"},{name:"twitter:label2",content:"Filed under"},{name:"twitter:data2",content:"Bitcoin, Bitcoin Dev Kit, BDK"},{property:"article:tag",content:"Bitcoin"},{property:"article:tag",content:"Bitcoin Dev Kit"},{property:"article:tag",content:"BDK"}]},regularPath:"/blog/author/Alekos%20Filini/page/2/",key:"v-5f2ac9cb",path:"/blog/author/Alekos Filini/page/2/",codeSwitcherOptions:{}}],themeConfig:{domain:"https://bitcoindevkit.org",logo:"/img/logo.svg",displayAllHeaders:!1,repo:"bitcoindevkit/bitcoindevkit.org",docsDir:"docs",editLinks:!0,sidebarDepth:0,nav:[{text:"Docs",link:"/getting-started/"},{text:"Tutorials",link:"/tutorials/hello-world"},{text:"Case Studies",link:"/case-studies"},{text:"Blog",link:"/blog/"},{text:"Discord",link:"https://discord.gg/dstn4dQ"},{text:"GitHub",link:"https://github.com/bitcoindevkit",rel:"noopener noreferrer"}],sidebar:{"/_blog/":[{title:"Blog",collapsable:!1,children:[["/blog/","Articles"],["/blog/tags/","Tags"],["/blog/author/","Authors"]]}],"/blog/":[{title:"Blog",collapsable:!1,children:[["/blog/","Articles"],["/blog/tags/","Tags"],["/blog/author/","Authors"]]}],"/tutorials/":[{title:"Tutorials",collapsable:!1,children:["/tutorials/hello-world","/tutorials/Bitcoin_Core_RPC_Demo","/tutorials/compact_filters_demo","/tutorials/descriptors_in_the_wild","/tutorials/hidden-power-of-bitcoin","/tutorials/descriptor_based_paper_wallet","/tutorials/spending_policy_demo","/tutorials/exploring_bdk_rn","/tutorials/using_bdk_with_hardware_wallets","/tutorials/exploring_bdk_flutter","/tutorials/bdk_cli_basics","/tutorials/bdk-cli_basics_multisig_2of3","/tutorials/bdk_with_tor"]}],"/":[{title:"Documentation",collapsable:!1,children:[["/getting-started","Getting Started"],{title:"BDK-CLI",collapsable:!0,children:["/bdk-cli/introduction","/bdk-cli/installation","/bdk-cli/concept","/bdk-cli/interface","/bdk-cli/regtest","/bdk-cli/compiler","/bdk-cli/playground"]},"/descriptors/","/examples/"]},{title:"API Reference",collapsable:!1,children:[["https://docs.rs/bdk/","Rust Stable Docs"],["https://bitcoindevkit.org/docs-rs/bdk/nightly/latest/bdk/","Rust Nightly Docs"],["https://bitcoindevkit.org/android/","Android Docs"],["https://bitcoindevkit.org/jvm/","Kotlin/JVM Docs"],["https://bitcoindevkit.org/java/","Java Docs"]]}]},footer:{links:[{title:"Docs",children:[{text:"Getting Started",link:"/getting-started/"},{text:"BDK-CLI",link:"/bdk-cli/installation/"},{text:"Descriptors",link:"/descriptors/"}]},{title:"Community",children:[{text:"GitHub",link:"https://github.com/bitcoindevkit",rel:"noopener noreferrer"},{text:"Twitter",link:"https://twitter.com/intent/follow?screen_name=bitcoindevkit",rel:"noopener noreferrer"},{text:"Chat on Discord",link:"https://discord.gg/dstn4dQ",rel:"noopener noreferrer"}]},{title:"More",children:[{text:"Blog",link:"/blog/"},{text:"Supporters",link:"/supporters/"}]}],copyright:"Copyright © 2023 BDK Developers"}}},{COLOR_MODES:Wc,STORE_ATTR:Hc,setColorMode:Vc}=n(109),qc=t=>"Enter"===t.code||13===(t.keyCode||t.which),Gc=t=>{const e=t.target.matches("#algolia-search-input")&&qc(t);(t.target.matches(".ds-dropdown-menu *")||e)&&document.getElementById("algolia-search-input").blur(),t.target.matches(".ytEmbed")&&(t.preventDefault(),(t=>{const e=t.querySelector("iframe[data-src]");if(e){const t=e.getAttribute("data-src");e.setAttribute("src",t)}})(t.target))};if("undefined"==typeof process||"server"!==process.env.VUE_ENV){const t=window.matchMedia("(prefers-color-scheme: dark)").matches?Wc[1]:Wc[0],e=window.localStorage.getItem(Hc);Vc(Wc.includes(e)?e:t)}n(243);Vn.component("Badge",()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,410))),Vn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,361))),Vn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,362)));n(244);var Zc={props:{color:{required:!1,default:"rgb(66, 185, 131)"}}},Xc=(n(245),Object(Kc.a)(Zc,(function(){return(0,this._self._c)("div",{staticClass:"spinner",style:{background:this.color}})}),[],!1,null,"1bbcb91a",null).exports);const Yc={name:"Mermaid",props:{id:{type:String,required:!0},graph:{type:String,required:!0}},data:()=>({svg:void 0}),render(t){return void 0===this.svg?t("Loading"):t("div",{domProps:{innerHTML:this.svg,style:"width: 100%"}})},mounted(){n.e(63).then(n.t.bind(null,350,7)).then(t=>{t.initialize({startOnLoad:!0});let e=document.createElement("div");document.body.appendChild(e),t.render(this.id,this.graph,t=>{this.svg=t,document.body.removeChild(e)},e)})},components:{Loading:Xc}};var Jc=n(95),Qc=n.n(Jc);n(246);Vn.component("CodeSwitcher",()=>n.e(19).then(n.bind(null,363)));var ts={tags:{architecture:{key:"architecture",scope:"tags",path:"/blog/tags/architecture/",pageKeys:["v-2cebe183","v-55969f39"]},"BDK-RN":{key:"BDK-RN",scope:"tags",path:"/blog/tags/BDK-RN/",pageKeys:["v-3eaa044d"]},Development:{key:"Development",scope:"tags",path:"/blog/tags/Development/",pageKeys:["v-3eaa044d","v-11d64359","v-35b03e19"]},Architecture:{key:"Architecture",scope:"tags",path:"/blog/tags/Architecture/",pageKeys:["v-3eaa044d"]},BDK:{key:"BDK",scope:"tags",path:"/blog/tags/BDK/",pageKeys:["v-3875825f","v-9145467a","v-2cf72b39","v-11d64359","v-d0375c8e","v-283d4479","v-c6331d2a","v-35b03e19"]},bindings:{key:"bindings",scope:"tags",path:"/blog/tags/bindings/",pageKeys:["v-3875825f"]},fee:{key:"fee",scope:"tags",path:"/blog/tags/fee/",pageKeys:["v-015729b9","v-2c605799","v-57698579"]},"machine learning":{key:"machine learning",scope:"tags",path:"/blog/tags/machine learning/",pageKeys:["v-015729b9","v-2c605799","v-57698579"]},taproot:{key:"taproot",scope:"tags",path:"/blog/tags/taproot/",pageKeys:["v-9145467a","v-2cf72b39"]},miniscript:{key:"miniscript",scope:"tags",path:"/blog/tags/miniscript/",pageKeys:["v-9145467a","v-2cf72b39","v-10852eea","v-1a26d7ce"]},"Hardware Wallets":{key:"Hardware Wallets",scope:"tags",path:"/blog/tags/Hardware Wallets/",pageKeys:["v-11d64359","v-35b03e19"]},"coin selection":{key:"coin selection",scope:"tags",path:"/blog/tags/coin selection/",pageKeys:["v-d0375c8e"]},development:{key:"development",scope:"tags",path:"/blog/tags/development/",pageKeys:["v-d0375c8e"]},"summer of bitcoin":{key:"summer of bitcoin",scope:"tags",path:"/blog/tags/summer of bitcoin/",pageKeys:["v-d0375c8e"]},security:{key:"security",scope:"tags",path:"/blog/tags/security/",pageKeys:["v-10852eea"]},rust:{key:"rust",scope:"tags",path:"/blog/tags/rust/",pageKeys:["v-edd5570e","v-05df4999","v-faad828e","v-0119984e","v-7c3d28f9","v-0df1c3ce","v-75d11339","v-1ac9ef4e","v-b29a7bce"]},release:{key:"release",scope:"tags",path:"/blog/tags/release/",pageKeys:["v-edd5570e","v-05df4999","v-faad828e","v-0119984e","v-7c3d28f9","v-0df1c3ce","v-75d11339","v-1ac9ef4e"]},tutorial:{key:"tutorial",scope:"tags",path:"/blog/tags/tutorial/",pageKeys:["v-283d4479","v-e4749186","v-e8e842ee","v-c6331d2a","v-2220834e","v-61999ca2","v-1a26d7ce"]},"Bitcoin Core":{key:"Bitcoin Core",scope:"tags",path:"/blog/tags/Bitcoin Core/",pageKeys:["v-283d4479"]},RPC:{key:"RPC",scope:"tags",path:"/blog/tags/RPC/",pageKeys:["v-283d4479"]},Wallet:{key:"Wallet",scope:"tags",path:"/blog/tags/Wallet/",pageKeys:["v-283d4479"]},"bdk-cli":{key:"bdk-cli",scope:"tags",path:"/blog/tags/bdk-cli/",pageKeys:["v-e4749186","v-317756bd","v-c6331d2a","v-1a26d7ce"]},"multi-sig":{key:"multi-sig",scope:"tags",path:"/blog/tags/multi-sig/",pageKeys:["v-e4749186"]},basics:{key:"basics",scope:"tags",path:"/blog/tags/basics/",pageKeys:["v-317756bd"]},novice:{key:"novice",scope:"tags",path:"/blog/tags/novice/",pageKeys:["v-317756bd"]},tor:{key:"tor",scope:"tags",path:"/blog/tags/tor/",pageKeys:["v-e8e842ee"]},wallet:{key:"wallet",scope:"tags",path:"/blog/tags/wallet/",pageKeys:["v-e8e842ee","v-2220834e","v-61999ca2"]},blockchain:{key:"blockchain",scope:"tags",path:"/blog/tags/blockchain/",pageKeys:["v-e8e842ee"]},compact_filters:{key:"compact_filters",scope:"tags",path:"/blog/tags/compact_filters/",pageKeys:["v-c6331d2a"]},BIP157:{key:"BIP157",scope:"tags",path:"/blog/tags/BIP157/",pageKeys:["v-c6331d2a"]},Neutrino:{key:"Neutrino",scope:"tags",path:"/blog/tags/Neutrino/",pageKeys:["v-c6331d2a"]},guide:{key:"guide",scope:"tags",path:"/blog/tags/guide/",pageKeys:["v-4432e00e","v-48a004ce","v-2220834e","v-61999ca2","v-4883b547"]},descriptor:{key:"descriptor",scope:"tags",path:"/blog/tags/descriptor/",pageKeys:["v-4432e00e","v-48a004ce","v-1a26d7ce","v-4883b547"]},"paper wallets":{key:"paper wallets",scope:"tags",path:"/blog/tags/paper wallets/",pageKeys:["v-4432e00e"]},bitcoin:{key:"bitcoin",scope:"tags",path:"/blog/tags/bitcoin/",pageKeys:["v-2220834e","v-61999ca2"]},"React Native":{key:"React Native",scope:"tags",path:"/blog/tags/React Native/",pageKeys:["v-2220834e","v-61999ca2"]},Flutter:{key:"Flutter",scope:"tags",path:"/blog/tags/Flutter/",pageKeys:["v-2220834e"]},iOS:{key:"iOS",scope:"tags",path:"/blog/tags/iOS/",pageKeys:["v-2220834e","v-61999ca2"]},Android:{key:"Android",scope:"tags",path:"/blog/tags/Android/",pageKeys:["v-2220834e","v-61999ca2"]},mobile:{key:"mobile",scope:"tags",path:"/blog/tags/mobile/",pageKeys:["v-2220834e","v-61999ca2"]},"bdk-rn":{key:"bdk-rn",scope:"tags",path:"/blog/tags/bdk-rn/",pageKeys:["v-2220834e","v-61999ca2"]},bdk:{key:"bdk",scope:"tags",path:"/blog/tags/bdk/",pageKeys:["v-2220834e","v-61999ca2","v-1a26d7ce"]},"getting started":{key:"getting started",scope:"tags",path:"/blog/tags/getting started/",pageKeys:["v-b29a7bce"]},"bitcoin-cli":{key:"bitcoin-cli",scope:"tags",path:"/blog/tags/bitcoin-cli/",pageKeys:["v-1a26d7ce"]}},author:{"Lloyd Fournier":{key:"Lloyd Fournier",scope:"author",path:"/blog/author/Lloyd Fournier/",pageKeys:["v-2cebe183"]},"Bitcoin Zavior":{key:"Bitcoin Zavior",scope:"author",path:"/blog/author/Bitcoin Zavior/",pageKeys:["v-3eaa044d","v-2220834e","v-61999ca2"]},thunderbiscuit:{key:"thunderbiscuit",scope:"author",path:"/blog/author/thunderbiscuit/",pageKeys:["v-3875825f","v-4883b547"]},"Riccardo Casatta":{key:"Riccardo Casatta",scope:"author",path:"/blog/author/Riccardo Casatta/",pageKeys:["v-015729b9","v-2c605799","v-57698579","v-4432e00e"]},"Alekos Filini":{key:"Alekos Filini",scope:"author",path:"/blog/author/Alekos Filini/",pageKeys:["v-9145467a","v-2cf72b39","v-10852eea","v-edd5570e","v-05df4999","v-faad828e","v-0119984e","v-7c3d28f9","v-0df1c3ce","v-75d11339","v-1ac9ef4e","v-55969f39","v-b29a7bce"]},Wszdexdrf:{key:"Wszdexdrf",scope:"author",path:"/blog/author/Wszdexdrf/",pageKeys:["v-11d64359"]},"César Alvarez Vallero":{key:"César Alvarez Vallero",scope:"author",path:"/blog/author/César Alvarez Vallero/",pageKeys:["v-d0375c8e"]},"Rajarshi Maitra":{key:"Rajarshi Maitra",scope:"author",path:"/blog/author/Rajarshi Maitra/",pageKeys:["v-283d4479","v-c6331d2a","v-1a26d7ce"]},waterstone:{key:"waterstone",scope:"author",path:"/blog/author/waterstone/",pageKeys:["v-e4749186"]},waterst0ne:{key:"waterst0ne",scope:"author",path:"/blog/author/waterst0ne/",pageKeys:["v-317756bd"]},rorp:{key:"rorp",scope:"author",path:"/blog/author/rorp/",pageKeys:["v-e8e842ee"]},"Steve Myers":{key:"Steve Myers",scope:"author",path:"/blog/author/Steve Myers/",pageKeys:["v-4432e00e","v-4883b547"]},"Gabriele Domenichini":{key:"Gabriele Domenichini",scope:"author",path:"/blog/author/Gabriele Domenichini/",pageKeys:["v-48a004ce"]},"Sandipan Dey":{key:"Sandipan Dey",scope:"author",path:"/blog/author/Sandipan Dey/",pageKeys:["v-1a26d7ce"]},danielabrozzoni:{key:"danielabrozzoni",scope:"author",path:"/blog/author/danielabrozzoni/",pageKeys:["v-35b03e19"]}}};class es{constructor(t,e){this._metaMap=Object.assign({},t),Object.keys(this._metaMap).forEach(t=>{const{pageKeys:n}=this._metaMap[t];this._metaMap[t].pages=n.map(t=>function(t,e){for(let n=0;n{const{pages:n,path:r}=this._metaMap[e];t.push({name:e,pages:n,path:r})}),t}getItemByName(t){return this._metaMap[t]}}var ns={blog:(t,e)=>{const r=n(45);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1},tags:(t,e)=>{const r=n(45);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1},author:(t,e)=>{const r=n(45);return r(t.frontmatter.date)-r(e.frontmatter.date)>0?-1:1}},rs={blog:function(t,e,n){return t.pid===n&&t.id===e},tags:function(t,e,n){const r=e;return["tags"].some(e=>{const n=t.frontmatter[e];return Array.isArray(n)?n.some(t=>t==r):n==r})},author:function(t,e,n){const r=e;return["author","authors"].some(e=>{const n=t.frontmatter[e];return Array.isArray(n)?n.some(t=>t==r):n==r})}},os=[{pid:"blog",id:"blog",filter:rs.blog,sorter:ns.blog,pages:[{path:"/blog/",interval:[0,9]},{path:"/blog/page/2/",interval:[10,19]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"architecture",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/architecture/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"BDK-RN",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/BDK-RN/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Development",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Development/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Architecture",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Architecture/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"BDK",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/BDK/",interval:[0,8]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bindings",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bindings/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"fee",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/fee/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"machine learning",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/machine learning/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"taproot",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/taproot/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"miniscript",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/miniscript/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Hardware Wallets",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Hardware Wallets/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"coin selection",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/coin selection/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"development",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/development/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"summer of bitcoin",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/summer of bitcoin/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"security",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/security/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"rust",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/rust/",interval:[0,9]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"release",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/release/",interval:[0,8]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"tutorial",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/tutorial/",interval:[0,7]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Bitcoin Core",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Bitcoin Core/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"RPC",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/RPC/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Wallet",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Wallet/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bdk-cli",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bdk-cli/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"multi-sig",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/multi-sig/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"basics",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/basics/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"novice",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/novice/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"tor",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/tor/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"wallet",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/wallet/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"blockchain",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/blockchain/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"compact_filters",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/compact_filters/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"BIP157",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/BIP157/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Neutrino",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Neutrino/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"guide",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/guide/",interval:[0,5]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"descriptor",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/descriptor/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"paper wallets",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/paper wallets/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bitcoin",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bitcoin/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"React Native",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/React Native/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Flutter",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Flutter/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"iOS",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/iOS/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"Android",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/Android/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"mobile",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/mobile/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bdk-rn",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bdk-rn/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bdk",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bdk/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"getting started",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/getting started/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"tags",id:"bitcoin-cli",filter:rs.tags,sorter:ns.tags,pages:[{path:"/blog/tags/bitcoin-cli/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Lloyd Fournier",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Lloyd Fournier/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Bitcoin Zavior",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Bitcoin Zavior/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"thunderbiscuit",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/thunderbiscuit/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Riccardo Casatta",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Riccardo Casatta/",interval:[0,4]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Alekos Filini",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Alekos Filini/",interval:[0,9]},{path:"/blog/author/Alekos Filini/page/2/",interval:[10,13]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Wszdexdrf",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Wszdexdrf/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"César Alvarez Vallero",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/César Alvarez Vallero/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Rajarshi Maitra",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Rajarshi Maitra/",interval:[0,3]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"waterstone",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/waterstone/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"waterst0ne",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/waterst0ne/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"rorp",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/rorp/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Steve Myers",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Steve Myers/",interval:[0,2]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Gabriele Domenichini",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Gabriele Domenichini/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"Sandipan Dey",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/Sandipan Dey/",interval:[0,1]}],prevText:"Prev",nextText:"Next"},{pid:"author",id:"danielabrozzoni",filter:rs.author,sorter:ns.author,pages:[{path:"/blog/author/danielabrozzoni/",interval:[0,1]}],prevText:"Prev",nextText:"Next"}],is=n(96);const as=n.n(is)()("plugin-blog:pagination");class cs{constructor(t,e,n){as("pagination",t);const{pages:r,prevText:o,nextText:i}=t,{path:a}=n;this._prevText=o,this._nextText=i;for(let t=0,e=r.length;tt.filter(e,t.id,t.pid)).sort(t.sorter)}setIndexPage(t){this._indexPage=t}get length(){return this._paginationPages.length}get pages(){const[t,e]=this._currentPage.interval;return this._matchedPages.slice(t,e+1)}get hasPrev(){return 0!==this.paginationIndex}get prevLink(){return this.hasPrev?this.paginationIndex-1==0&&this._indexPage?this._indexPage:this._paginationPages[this.paginationIndex-1].path:null}get hasNext(){return this.paginationIndex!==this.length-1}get nextLink(){return this.hasNext?this._paginationPages[this.paginationIndex+1].path:null}get prevText(){return this._prevText}get nextText(){return this._nextText}getSpecificPageLink(t){return this._paginationPages[t].path}}const ss=new class{constructor(t){this.paginations=t}get pages(){return Vn.$vuepress.$get("siteData").pages}getPagination(t,e,n){as("id",e),as("pid",t);const r=this.paginations.filter(n=>n.id===e&&n.pid===t)[0];return new cs(r,this.pages,n)}}(os);var ls={comment:{enabled:!1,service:""},email:{enabled:!1},feed:{rss:!1,atom:!1,json:!1}},ps=[({router:t})=>{"undefined"!=typeof process&&"server"===process.env.VUE_ENV||t.onReady(()=>{const{app:e}=t;e.$once("hook:mounted",()=>{setTimeout(()=>{const{hash:t}=document.location;if(t.length>1){const e=t.substring(1),n=document.getElementById(e);n&&n.scrollIntoView()}},500)}),document.addEventListener("click",Gc),document.addEventListener("keyup",t=>{qc(t)&&Gc(t)})})},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component("CodeCopy",Sc)},({Vue:t})=>{t.component("Mermaid",Yc)},({Vue:t})=>t.use(Qc.a),{},{},({Vue:t})=>{const e=Object.keys(ts).map(t=>{const e=ts[t],n="$"+t;return{[n](){const{pages:t}=this.$site;return new es(e,t)},["$current"+(t.charAt(0).toUpperCase()+t.slice(1))](){const t=this.$route.meta.id;return this[n].getItemByName(t)}}}).reduce((t,e)=>(Object.assign(t,e),t),{});e.$frontmatterKey=function(){const t=this["$"+this.$route.meta.id];return t||null},t.mixin({computed:e})},({Vue:t})=>{t.mixin({computed:{$pagination(){return this.$route.meta.pid&&this.$route.meta.id?this.$getPagination(this.$route.meta.pid,this.$route.meta.id):null}},methods:{$getPagination(t,e){return e=e||t,ss.getPagination(t,e,this.$route)}}})},({Vue:t})=>{const e={$service:()=>ls};t.mixin({computed:e})}],us=[];class ds extends class{constructor(){this.store=new Vn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Vn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(ds.prototype,{getPageAsyncComponent:ac,getLayoutAsyncComponent:cc,getAsyncComponent:sc,getVueComponent:lc});var gs={install(t){const e=new ds;t.$vuepress=e,t.prototype.$vuepress=e}};function hs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var ms={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return uc("pageKey",e),Vn.component(e)||Vn.component(e,ac(e)),Vn.component(e)?t(e):t("")}},fs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},vs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},bs=(n(249),n(250),Object(Kc.a)(vs,(function(){var t=this._self._c;return t("span",[t("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"}},[t("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"}}),this._v(" "),t("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"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),ys={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Vn.config.productionTip=!1,Vn.use(Wa),Vn.use(gs),Vn.mixin(function(t,e,n=Vn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Vn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(hs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";hs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";hs(t,o)?r(o):hs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(ps.filter(t=>"function"==typeof t).map(e=>e({Vue:Vn,options:r,router:n,siteData:Uc,isServer:t})))}catch(t){console.error(t)}return{app:new Vn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},us.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/bdk-cli/compiler/index.html b/bdk-cli/compiler/index.html index 72effc8ec3..2b28c5ba2d 100644 --- a/bdk-cli/compiler/index.html +++ b/bdk-cli/compiler/index.html @@ -35,7 +35,7 @@ - + @@ -163,7 +163,7 @@ } }

# Troubleshooting

# Nothing is printed

This might mean that you have a RUST_LOG variable set to a value that suppresses the compiler's log. You can try adding miniscriptc=info to your RUST_LOG value and see if that works, or open a new clean -shell.

- + diff --git a/bdk-cli/concept/index.html b/bdk-cli/concept/index.html index e69acf3d3f..44cb2af8dd 100644 --- a/bdk-cli/concept/index.html +++ b/bdk-cli/concept/index.html @@ -31,7 +31,7 @@ - + @@ -70,7 +70,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!

    - + diff --git a/bdk-cli/index.html b/bdk-cli/index.html index 28bc252904..d9ebfa7582 100644 --- a/bdk-cli/index.html +++ b/bdk-cli/index.html @@ -33,7 +33,7 @@ - + @@ -67,7 +67,7 @@ GitHub (opens new window)

    # BDK-CLI

    The bdk-cli (opens new window) repo has an example interactive shell built using the bdk library called bdk-cli that acts both as a reference implementation of a wallet -and a tool to quickly experiment with descriptors and transactions.

    - + diff --git a/bdk-cli/installation/index.html b/bdk-cli/installation/index.html index 43e2d9ee18..6543222c5b 100644 --- a/bdk-cli/installation/index.html +++ b/bdk-cli/installation/index.html @@ -35,7 +35,7 @@ - + @@ -118,7 +118,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
    -
    Supporters
    - + diff --git a/bdk-cli/interface/index.html b/bdk-cli/interface/index.html index 9a96670973..e9ccbce816 100644 --- a/bdk-cli/interface/index.html +++ b/bdk-cli/interface/index.html @@ -29,7 +29,7 @@ - + @@ -372,7 +372,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.

    Supporters
    - + diff --git a/bdk-cli/introduction/index.html b/bdk-cli/introduction/index.html index bfe29e6cd0..c527e20548 100644 --- a/bdk-cli/introduction/index.html +++ b/bdk-cli/introduction/index.html @@ -29,7 +29,7 @@ - + @@ -61,7 +61,7 @@ GitHub (opens new window) 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 b376278bf3..efa214f961 100644 --- a/bdk-cli/playground/index.html +++ b/bdk-cli/playground/index.html @@ -27,7 +27,7 @@ - + @@ -59,7 +59,7 @@ GitHub (opens new window) GitHub - (opens new window)

    # Playground

    - + diff --git a/bdk-cli/regtest/index.html b/bdk-cli/regtest/index.html index 905eae97f3..f20c7e8b31 100644 --- a/bdk-cli/regtest/index.html +++ b/bdk-cli/regtest/index.html @@ -31,7 +31,7 @@ - + @@ -68,7 +68,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.

    Supporters
    - + diff --git a/blog/2020/12/hello-world/index.html b/blog/2020/12/hello-world/index.html index 5b01b3e5f3..4a33fb9bc5 100644 --- a/blog/2020/12/hello-world/index.html +++ b/blog/2020/12/hello-world/index.html @@ -30,7 +30,7 @@ - + @@ -144,7 +144,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!

    Supporters
    - + diff --git a/blog/2020/12/release-v0.2.0/index.html b/blog/2020/12/release-v0.2.0/index.html index 7f4ee6a288..5aa33dba33 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 @@ - + @@ -136,7 +136,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/2021/01/fee-estimation-for-light-clients-part-1/index.html b/blog/2021/01/fee-estimation-for-light-clients-part-1/index.html index abe9196203..694a28cb4c 100644 --- a/blog/2021/01/fee-estimation-for-light-clients-part-1/index.html +++ b/blog/2021/01/fee-estimation-for-light-clients-part-1/index.html @@ -30,7 +30,7 @@ - + @@ -82,7 +82,7 @@ fee rate paid by t was the exact value required to get confirmed within the next 6 blocks.

    So to build our model, we first need to gather these data, and machine learning needs a lot of data to work well.

    # The data logger

    The data logger (opens new window) is built with the purpose of collecting all the data we need, and it's MIT licensed open source software written in Rust.

    We need to register the moment in time when transactions enter in the node's mempool; to be efficient and precise we should not only call the RPC endpoints but listen to ZMQ (opens new window) events. Luckily, the just released bitcoin core 0.21.0 added a new ZMQ (opens new window) topic zmqpubsequence notifying mempool events (and block events). The logger is also listening to zmqpubrawtx and zmqpubrawblock topics, to make less RPC calls.

    We are not only interested in the timestamp of the transaction entering the mempool, but also how many blocks it will take until the same transaction is confirmed. In the final dataset this field is called confirms_in[4]; if confirms_in = 1 it means the transaction is confirmed in the first block created after it has been seen for the first time.

    Another critical piece of information logged by the data logger is the fee_rate of the transaction, since the absolute fee value paid by a bitcoin transaction is not available nor derivable given only the transaction itself, as the inputs don't have explicit amounts.

    All these data (apart from the time of the transaction entering in the mempool) can actually be reconstructed simply by looking at the blockchain. However, querying the bitcoin node can be fairly slow, and during the model training iterations we want to recreate the ML dataset rapidly[5], for example whenever we need to modify or add a new field.

    For these reasons, the logger is split into two parts: a process listening to the events sent by our node, which creates raw logs, and then a second process that uses these logs to create the final CSV dataset. Raw logs are self-contained: for example, they contain all the previous transaction output values for every relevant transaction. This causes some redundancy, but in this case it's better to trade some efficiency for more performance -when recreating the dataset.

    High level graph

    My logger instance started collecting data on the 18th of December 2020, and as of today (25th January 2020), the raw logs are about 16GB.

    I expect (or at least hope) the raw logs, the CSV dataset, or the data logger will be useful also for other projects as well, like monitoring the propagation of transactions or other works involving raw mempool data. We will share raw logs data through torrent soon.

    In the following Part 2 we are going to talk about the dataset.


    1. The transaction fee rate is the ratio between the absolute fee expressed in satoshi, over the weight of the transaction measured in virtual bytes. The weight of the transaction is similar to the byte size, however a part of the transaction (the segwit part) is discounted, their byte size is considered less because it creates less burden for the network. ↩︎

    2. mempool is the set of transactions that are valid by consensus rules (for example, they are spending existing bitcoin), broadcasted in the bitcoin peer to peer network, but they are not yet part of the blockchain. ↩︎

    3. DISCLAIMER: I am not an expert data-scientist! ↩︎

    4. Conceptually similar to bitcoin core estimatesmartfee parameter called "blocks target", however, confirms_in is the real value not the desired target. ↩︎

    5. 16GB of compressed raw logs are processed and a compressed CSV produced in about 5 minutes. ↩︎

    - + diff --git a/blog/author/index.html b/blog/author/index.html index a44d5e6549..836f10bf3b 100644 --- a/blog/author/index.html +++ b/blog/author/index.html @@ -25,7 +25,7 @@ - + @@ -74,6 +74,6 @@
    Supporters
    - + diff --git a/blog/author/rorp/index.html b/blog/author/rorp/index.html index 0c6878a471..4946c281bc 100644 --- a/blog/author/rorp/index.html +++ b/blog/author/rorp/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/author/thunderbiscuit/index.html b/blog/author/thunderbiscuit/index.html index b0e67469d0..88015afd12 100644 --- a/blog/author/thunderbiscuit/index.html +++ b/blog/author/thunderbiscuit/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/author/waterst0ne/index.html b/blog/author/waterst0ne/index.html index d1d51fcbb0..26af7a1edf 100644 --- a/blog/author/waterst0ne/index.html +++ b/blog/author/waterst0ne/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/author/waterstone/index.html b/blog/author/waterstone/index.html index 72e022ea22..6b79a79323 100644 --- a/blog/author/waterstone/index.html +++ b/blog/author/waterstone/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/bdk-core-pt1/index.html b/blog/bdk-core-pt1/index.html index df85656aa9..39650e0aeb 100644 --- a/blog/bdk-core-pt1/index.html +++ b/blog/bdk-core-pt1/index.html @@ -30,7 +30,7 @@ - + @@ -253,7 +253,7 @@ } }

    # Feedback

    The best way to give feedback on this would be to comment on the pull request (opens new window) for this blog post. -Thanks in advance.

    - + diff --git a/blog/tags/Bitcoin Core/index.html b/blog/tags/Bitcoin Core/index.html index 651c53ee24..5b38aba2ce 100644 --- a/blog/tags/Bitcoin Core/index.html +++ b/blog/tags/Bitcoin Core/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/Development/index.html b/blog/tags/Development/index.html index aabe2f96ee..466f1778e9 100644 --- a/blog/tags/Development/index.html +++ b/blog/tags/Development/index.html @@ -25,7 +25,7 @@ - + @@ -107,6 +107,6 @@
    Supporters
    - + diff --git a/blog/tags/Flutter/index.html b/blog/tags/Flutter/index.html index 3dfbcc55f7..bbb8c60aa4 100644 --- a/blog/tags/Flutter/index.html +++ b/blog/tags/Flutter/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/Hardware Wallets/index.html b/blog/tags/Hardware Wallets/index.html index b2a8045a60..6fe904be95 100644 --- a/blog/tags/Hardware Wallets/index.html +++ b/blog/tags/Hardware Wallets/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/Neutrino/index.html b/blog/tags/Neutrino/index.html index 2b1371762d..0cc57df6a0 100644 --- a/blog/tags/Neutrino/index.html +++ b/blog/tags/Neutrino/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/RPC/index.html b/blog/tags/RPC/index.html index d8a069684d..496706b3a2 100644 --- a/blog/tags/RPC/index.html +++ b/blog/tags/RPC/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/React Native/index.html b/blog/tags/React Native/index.html index 90236ff2dd..ec2ca87444 100644 --- a/blog/tags/React Native/index.html +++ b/blog/tags/React Native/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/Wallet/index.html b/blog/tags/Wallet/index.html index b612677db5..d13a92537e 100644 --- a/blog/tags/Wallet/index.html +++ b/blog/tags/Wallet/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/architecture/index.html b/blog/tags/architecture/index.html index 66c2b816ff..f37396f688 100644 --- a/blog/tags/architecture/index.html +++ b/blog/tags/architecture/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/basics/index.html b/blog/tags/basics/index.html index fff1b1d4d9..d33b729e93 100644 --- a/blog/tags/basics/index.html +++ b/blog/tags/basics/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/bdk-cli/index.html b/blog/tags/bdk-cli/index.html index 68d3ab73a9..1a2fe0b3c5 100644 --- a/blog/tags/bdk-cli/index.html +++ b/blog/tags/bdk-cli/index.html @@ -25,7 +25,7 @@ - + @@ -118,6 +118,6 @@
    Supporters
    - + diff --git a/blog/tags/bdk-rn/index.html b/blog/tags/bdk-rn/index.html index e63d4d7782..d66f2f99c3 100644 --- a/blog/tags/bdk-rn/index.html +++ b/blog/tags/bdk-rn/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/bdk/index.html b/blog/tags/bdk/index.html index 329e7680b1..8a251bc7c6 100644 --- a/blog/tags/bdk/index.html +++ b/blog/tags/bdk/index.html @@ -25,7 +25,7 @@ - + @@ -162,6 +162,6 @@
    Supporters
    - + diff --git a/blog/tags/bindings/index.html b/blog/tags/bindings/index.html index 6075b9f9e1..21129f290b 100644 --- a/blog/tags/bindings/index.html +++ b/blog/tags/bindings/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/bitcoin-cli/index.html b/blog/tags/bitcoin-cli/index.html index 2bc1b13f58..95a612bcf7 100644 --- a/blog/tags/bitcoin-cli/index.html +++ b/blog/tags/bitcoin-cli/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/bitcoin/index.html b/blog/tags/bitcoin/index.html index 569fe0677e..7133861169 100644 --- a/blog/tags/bitcoin/index.html +++ b/blog/tags/bitcoin/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/blockchain/index.html b/blog/tags/blockchain/index.html index 407b1889ce..96cd9994e6 100644 --- a/blog/tags/blockchain/index.html +++ b/blog/tags/blockchain/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/coin selection/index.html b/blog/tags/coin selection/index.html index 651e99280e..6bd891821a 100644 --- a/blog/tags/coin selection/index.html +++ b/blog/tags/coin selection/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/compact_filters/index.html b/blog/tags/compact_filters/index.html index 3fcc28bf0c..ee619bf8ee 100644 --- a/blog/tags/compact_filters/index.html +++ b/blog/tags/compact_filters/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/descriptor/index.html b/blog/tags/descriptor/index.html index ba89edf548..34dcf9ed23 100644 --- a/blog/tags/descriptor/index.html +++ b/blog/tags/descriptor/index.html @@ -25,7 +25,7 @@ - + @@ -118,6 +118,6 @@
    Supporters
    - + diff --git a/blog/tags/development/index.html b/blog/tags/development/index.html index 524e669dfd..1b16461c47 100644 --- a/blog/tags/development/index.html +++ b/blog/tags/development/index.html @@ -25,7 +25,7 @@ - + @@ -107,6 +107,6 @@
    Supporters
    - + diff --git a/blog/tags/fee/index.html b/blog/tags/fee/index.html index 2f3145a7ce..7d5754ef0f 100644 --- a/blog/tags/fee/index.html +++ b/blog/tags/fee/index.html @@ -25,7 +25,7 @@ - + @@ -107,6 +107,6 @@
    Supporters
    - + diff --git a/blog/tags/getting started/index.html b/blog/tags/getting started/index.html index c942ba8dd0..c9eedfacc1 100644 --- a/blog/tags/getting started/index.html +++ b/blog/tags/getting started/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/guide/index.html b/blog/tags/guide/index.html index 53e3fc30a9..1c2dee5ebe 100644 --- a/blog/tags/guide/index.html +++ b/blog/tags/guide/index.html @@ -25,7 +25,7 @@ - + @@ -129,6 +129,6 @@
    Supporters
    - + diff --git a/blog/tags/iOS/index.html b/blog/tags/iOS/index.html index 36427186f7..de5a6b2402 100644 --- a/blog/tags/iOS/index.html +++ b/blog/tags/iOS/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/index.html b/blog/tags/index.html index cfc6e88873..c2b8dd3446 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -25,7 +25,7 @@ - + @@ -74,6 +74,6 @@
    Supporters
    - + diff --git a/blog/tags/machine learning/index.html b/blog/tags/machine learning/index.html index 7a43551cdc..b504cd9e35 100644 --- a/blog/tags/machine learning/index.html +++ b/blog/tags/machine learning/index.html @@ -25,7 +25,7 @@ - + @@ -107,6 +107,6 @@
    Supporters
    - + diff --git a/blog/tags/miniscript/index.html b/blog/tags/miniscript/index.html index 5c15113120..e3552b6b72 100644 --- a/blog/tags/miniscript/index.html +++ b/blog/tags/miniscript/index.html @@ -25,7 +25,7 @@ - + @@ -118,6 +118,6 @@
    Supporters
    - + diff --git a/blog/tags/mobile/index.html b/blog/tags/mobile/index.html index 4c65c35320..fd626b974c 100644 --- a/blog/tags/mobile/index.html +++ b/blog/tags/mobile/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/multi-sig/index.html b/blog/tags/multi-sig/index.html index abc14c972f..3216387fcb 100644 --- a/blog/tags/multi-sig/index.html +++ b/blog/tags/multi-sig/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/novice/index.html b/blog/tags/novice/index.html index 68e36c1696..95e5aa31af 100644 --- a/blog/tags/novice/index.html +++ b/blog/tags/novice/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/paper wallets/index.html b/blog/tags/paper wallets/index.html index 493bfddcd6..edd5ad0542 100644 --- a/blog/tags/paper wallets/index.html +++ b/blog/tags/paper wallets/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/release/index.html b/blog/tags/release/index.html index cbe39d52ca..9412e34f13 100644 --- a/blog/tags/release/index.html +++ b/blog/tags/release/index.html @@ -25,7 +25,7 @@ - + @@ -162,6 +162,6 @@
    Supporters
    - + diff --git a/blog/tags/rust/index.html b/blog/tags/rust/index.html index 6966ccf0d5..7a22ab3ea5 100644 --- a/blog/tags/rust/index.html +++ b/blog/tags/rust/index.html @@ -25,7 +25,7 @@ - + @@ -173,6 +173,6 @@
    Supporters
    - + diff --git a/blog/tags/security/index.html b/blog/tags/security/index.html index ba94e1fbc8..9aa30b70e6 100644 --- a/blog/tags/security/index.html +++ b/blog/tags/security/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/summer of bitcoin/index.html b/blog/tags/summer of bitcoin/index.html index 153902b253..49f8b12e20 100644 --- a/blog/tags/summer of bitcoin/index.html +++ b/blog/tags/summer of bitcoin/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/taproot/index.html b/blog/tags/taproot/index.html index a3bc8a27e1..47b38afade 100644 --- a/blog/tags/taproot/index.html +++ b/blog/tags/taproot/index.html @@ -25,7 +25,7 @@ - + @@ -96,6 +96,6 @@
    Supporters
    - + diff --git a/blog/tags/tor/index.html b/blog/tags/tor/index.html index 9ceaa826b0..15c3f06c9b 100644 --- a/blog/tags/tor/index.html +++ b/blog/tags/tor/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/blog/tags/tutorial/index.html b/blog/tags/tutorial/index.html index 6e14c7bf80..0f9f71d4f1 100644 --- a/blog/tags/tutorial/index.html +++ b/blog/tags/tutorial/index.html @@ -25,7 +25,7 @@ - + @@ -151,6 +151,6 @@
    Supporters
    - + diff --git a/blog/tags/wallet/index.html b/blog/tags/wallet/index.html index 15974cc254..3e83455f7c 100644 --- a/blog/tags/wallet/index.html +++ b/blog/tags/wallet/index.html @@ -25,7 +25,7 @@ - + @@ -85,6 +85,6 @@
    Supporters
    - + diff --git a/case-studies/index.html b/case-studies/index.html index 30746500c4..3e3b5f6a8b 100644 --- a/case-studies/index.html +++ b/case-studies/index.html @@ -29,7 +29,7 @@ - + @@ -89,6 +89,6 @@
    Supporters
    - + diff --git a/descriptors/index.html b/descriptors/index.html index 548c162d5a..1b7bdf9b1a 100644 --- a/descriptors/index.html +++ b/descriptors/index.html @@ -33,7 +33,7 @@ - + @@ -71,7 +71,7 @@ aims to produce the first "Native Descriptor" Bitcoin library that can be used by developers to build their own "Native Descriptor Wallets" (opens new window).

    # Compatibility Matrix

    Below are some tables to highlight the differences between Bitcoin Core's descriptor support, rust-miniscript's one and BDK's.

    # Key Types

    Key Type BDK rust-miniscript Bitcoin Core
    Hex PublicKey
    WIF PrivateKey
    Extended Keys (xpub/xprv)

    # Script Types (top level)

    Script Type BDK rust-miniscript Bitcoin Core
    pk()
    pkh()
    wpkh()
    sh(wpkh())
    sh()
    wsh()
    sh(wsh())
    combo()
    addr()
    raw()
    Bare scripts

    # Operators

    Operator BDK rust-miniscript Bitcoin Core
    pk()
    pkh()
    older()
    after()
    sha256()
    hash256()
    ripemd160()
    hash160()
    andor()
    and_{v,b,n}()
    or_{b,c,d,i}()
    multi()
    thresh()
    sortedmulti()

    # Modifiers

    Script Type BDK rust-miniscript Bitcoin Core
    a:
    s:
    c:
    t:
    d:
    v:
    j:
    n:
    l:
    u:

    For a more thorough description of these operators and modifiers see Sipa's Miniscript Page (opens new window) and Bitcoin Core's (opens new window).

    # Examples

    Some examples of valid BDK descriptors are:

    Spending Policy Descriptor Address 0 Address 1
    Static P2PKH pkh(cSQPHDBwXGjVzWRqAHm6zfvQhaTuj1f2bFH58h55ghbjtFwvmeXR) mrkwtj5xpYQjHeJe5wsweNjVeTKkvR5fCr mrkwtj5xpYQjHeJe5wsweNjVeTKkvR5fCr
    Static P2PKH, watch-only pkh(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c) mrkwtj5xpYQjHeJe5wsweNjVeTKkvR5fCr mrkwtj5xpYQjHeJe5wsweNjVeTKkvR5fCr
    P2WSH 2-of-2 with one private key wsh(multi(2,tprv8ZgxMBicQKsPePmENhT9N9yiSfTtDoC1f39P7nNmgEyCB6Nm4Qiv1muq4CykB9jtnQg2VitBrWh8PJU8LHzoGMHTrS2VKBSgAz7Ssjf9S3P/0/*,tpubDBYDcH8P2PedrEN3HxWYJJJMZEdgnrqMsjeKpPNzwe7jmGwk5M3HRdSf5vudAXwrJPfUsfvUPFooKWmz79Lh111U51RNotagXiGNeJe3i6t/1/*)) tb1qqsat6c82fvdy73rfzye8f7nwxcz3xny7t56azl73g95mt3tmzvgs9a8vjs tb1q7sgx6gscgtau57jduend6a8l445ahpk3dt3u5zu58rx5qm27lhkqgfdjdr
    P2WSH-P2SH one key + 10 days timelock sh(wsh(and_v(vc:pk_h(tprv8ZgxMBicQKsPePmENhT9N9yiSfTtDoC1f39P7nNmgEyCB6Nm4Qiv1muq4CykB9jtnQg2VitBrWh8PJU8LHzoGMHTrS2VKBSgAz7Ssjf9S3P/0/*),older(1440)))) 2Mtk2nyS98MCi2P7TkoBGLaJviBy956XxB1 2MuEStKzYhqb5HCFgHz9153tZsL5sVqV5xC

    # Implementation Details

    BDK extends the capabilities of rust-miniscript (opens new window) by introducing the concept of an ExtendedDescriptor: it represents a descriptor that contains one or more "derivable keys" like xpubs or xprvs and can be "derived" from a normal Descriptor by deriving every single one of its keys. It is currently called "StringDescriptor" in the code, because it's implemented as a wrapped miniscript::Descriptor<String>.

    ExtendedDescriptors are derived using a single index instead of a full derivation path: this is because normally most of the path is fixed and can be represented right after the xpub/xprv itself, and only the final index changes for each address. This is what's normally called a DescriptorExtendedKey in the codebase, it is represented with a similar syntax to Bitcoin Core's, such as:

    [d34db33f/44'/0'/0']xpub6ERApfZwUNrhL.......rBGRjaDMzQLcgJvLJuZZvRcEL/0/*
    -
    Supporters
    - + diff --git a/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html b/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html index 0559bb91c0..0165fba8bc 100644 --- a/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html +++ b/docs-rs/bdk/nightly/latest/bdk/descriptor/enum.Descriptor.html @@ -169,8 +169,8 @@
    Examples
    assert_eq!(result.to_string(), "tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym");
    Errors

    This function will return an error if hardened derivation is attempted.

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the minimum value (in satoshis) at which an output is broadcastable. -Panics if the descriptor wildcard is hardened. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Formats the value using the given formatter. Read more
    Extract the spending policy
    Run a predicate on every key in the descriptor, returning whether +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    Returns the minimum value (in satoshis) at which an output is broadcastable. +Panics if the descriptor wildcard is hardened. Read more
    Deserialize this value from the given Serde deserializer. Read more
    Formats the value using the given formatter. Read more
    Extract the spending policy
    Run a predicate on every key in the descriptor, returning whether the predicate returned true for every key Read more
    Run a predicate on every key in the descriptor, returning whether the predicate returned true for any key Read more
    Converts to this type from the input type.
    Converts to this type from the input type.
    Converts to this type from the input type.
    Converts to this type from the input type.
    Converts to this type from the input type.
    Converts to this type from the input type.
    The associated error which can be returned from parsing.
    Parses a string s to return a value of this type. Read more

    Parse an expression tree into a descriptor.

    Feeds this value into the given Hasher. Read more
    Feeds a slice of this type into the given Hasher. Read more
    Convert the object into an abstract policy
    This method returns an Ordering between self and other. Read more
    Compares and returns the maximum of two values. Read more
    Compares and returns the minimum of two values. Read more
    Restrict a value to a certain interval. Read more
    This method tests for self and other values to be equal, and is used diff --git a/docs-rs/bdk/nightly/latest/bdk/index.html b/docs-rs/bdk/nightly/latest/bdk/index.html index 1f272096bf..1765a29788 100644 --- a/docs-rs/bdk/nightly/latest/bdk/index.html +++ b/docs-rs/bdk/nightly/latest/bdk/index.html @@ -166,4 +166,4 @@

    Contribution

    submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

    -

    Re-exports

    pub extern crate bitcoin;
    pub extern crate miniscript;
    pub use descriptor::template;
    pub use descriptor::HdKeyPaths;
    pub use wallet::signer;
    pub use wallet::signer::SignOptions;
    pub use wallet::tx_builder::TxBuilder;
    pub use wallet::Wallet;
    pub use bdk_chain as chain;

    Modules

    Descriptors
    Key formats
    Additional functions on the rust-bitcoin PartiallySignedTransaction structure.
    Wallet

    Macros

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

    Structs

    Fee rate
    An unspent output owned by a Wallet.
    A Utxo with its satisfaction_weight.

    Enums

    Errors that can be thrown by the Wallet
    Types of keychains
    An unspent transaction output (UTXO).

    Traits

    Trait implemented by types that can be used to measure weight units.

    Functions

    Get the version of BDK at runtime
    \ No newline at end of file +

    Re-exports

    pub extern crate bitcoin;
    pub extern crate miniscript;
    pub use descriptor::template;
    pub use descriptor::HdKeyPaths;
    pub use wallet::signer;
    pub use wallet::signer::SignOptions;
    pub use wallet::tx_builder::TxBuilder;
    pub use wallet::Wallet;
    pub use bdk_chain as chain;

    Modules

    Descriptors
    Key formats
    Additional functions on the rust-bitcoin PartiallySignedTransaction structure.
    Wallet

    Macros

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

    Structs

    Fee rate
    An unspent output owned by a Wallet.
    A Utxo with its satisfaction_weight.

    Enums

    Errors that can be thrown by the Wallet
    Types of keychains
    An unspent transaction output (UTXO).

    Traits

    Trait implemented by types that can be used to measure weight units.

    Functions

    Get the version of BDK at runtime
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html b/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html index c5119050cf..f47065de99 100644 --- a/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html +++ b/docs-rs/bdk/nightly/latest/bdk/struct.LocalUtxo.html @@ -5,14 +5,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§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    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 249ac24d3e..ff608b3c0a 100644 --- a/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Balance.html +++ b/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Balance.html @@ -1,5 +1,5 @@ Balance in bdk::wallet - Rust

    Struct bdk::wallet::Balance

    pub struct Balance {
    +                    logo

    Balance

    Struct bdk::wallet::Balance

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

    Unconfirmed UTXOs generated by a wallet tx

    §untrusted_pending: u64

    Unconfirmed UTXOs received from an external wallet

    §confirmed: u64

    Confirmed and immediately spendable balance

    -

    Implementations§

    Get sum of trusted_pending and confirmed coins.

    +

    Implementations§

    Get sum of trusted_pending and confirmed coins.

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

    -

    Get the whole balance visible to the wallet.

    -

    Trait Implementations§

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

    Get the whole balance visible to the wallet.

    +

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs-rs/bdk/nightly/latest/bdk/wallet/struct.ChangeSet.html b/docs-rs/bdk/nightly/latest/bdk/wallet/struct.ChangeSet.html index 5c168fe4c4..5ae5d29725 100644 --- a/docs-rs/bdk/nightly/latest/bdk/wallet/struct.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/bdk/wallet/struct.ChangeSet.html @@ -1,11 +1,11 @@ ChangeSet in bdk::wallet - Rust

    Struct bdk::wallet::ChangeSet

    source ·
    pub struct ChangeSet {
    -    pub chain: ChangeSet,
    -    pub indexed_tx_graph: ChangeSet<ConfirmationTimeAnchor, ChangeSet<KeychainKind>>,
    +    pub chain: ChangeSet,
    +    pub indexed_tx_graph: ChangeSet<ConfirmationTimeAnchor, ChangeSet<KeychainKind>>,
     }
    Expand description

    The changes made to a wallet by applying an Update.

    -

    Fields§

    §chain: ChangeSet

    Changes to the LocalChain.

    -
    §indexed_tx_graph: ChangeSet<ConfirmationTimeAnchor, ChangeSet<KeychainKind>>

    Changes to IndexedTxGraph.

    -

    Trait Implementations§

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

    Fields§

    §chain: ChangeSet

    Changes to the LocalChain.

    +
    §indexed_tx_graph: ChangeSet<ConfirmationTimeAnchor, ChangeSet<KeychainKind>>

    Changes to IndexedTxGraph.

    +

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

    diff --git a/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Update.html b/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Update.html index 7067413dbb..48d4535950 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 graph: TxGraph<ConfirmationTimeAnchor>,
    -    pub chain: Option<Update>,
    +    pub graph: TxGraph<ConfirmationTimeAnchor>,
    +    pub chain: Option<Update>,
     }
    Expand description

    An update to Wallet.

    -

    It updates [bdk_chain::keychain::KeychainTxOutIndex], [bdk_chain::TxGraph] and [local_chain::LocalChain] atomically.

    +

    It updates bdk_chain::keychain::KeychainTxOutIndex, bdk_chain::TxGraph and local_chain::LocalChain atomically.

    Fields§

    §last_active_indices: BTreeMap<KeychainKind, u32>

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

    -
    §graph: TxGraph<ConfirmationTimeAnchor>

    Update for the wallet’s internal [TxGraph].

    -
    §chain: Option<Update>

    Update for the wallet’s internal LocalChain.

    +KeychainTxOutIndex.

    +
    §graph: TxGraph<ConfirmationTimeAnchor>

    Update for the wallet’s internal TxGraph.

    +
    §chain: Option<Update>

    Update for the wallet’s internal LocalChain.

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

    That is, this conversion is whatever the implementation of 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 b73f4e60a4..231106897d 100644 --- a/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html +++ b/docs-rs/bdk/nightly/latest/bdk/wallet/struct.Wallet.html @@ -7,14 +7,14 @@

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

    Creates a wallet that does not persist data.

    -

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

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

    Get the Bitcoin network the wallet is using.

    Iterator over all keychains in this wallet

    -

    Return a derived address using the external descriptor, see AddressIndex for +

    Return a derived address using the external descriptor, see AddressIndex for available address index selection strategies. If none of the keys in the descriptor are derivable (i.e. does not end with /*) then the same address will always be returned for any AddressIndex.

    -

    Return a derived address using the internal (change) descriptor.

    +

    Return a derived address using the internal (change) descriptor.

    If the wallet doesn’t have an internal descriptor it will use the external descriptor.

    see AddressIndex for available address index selection strategies. If none of the keys in the descriptor are derivable (i.e. does not end with /*) then the same address will always @@ -23,8 +23,8 @@

    Finds how the wallet derived the script pubkey spk.

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

    Return the list of unspent outputs of this wallet

    -

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

    -

    Returns the latest checkpoint.

    +

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

    +

    Returns the latest checkpoint.

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

    This is 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. @@ -35,12 +35,12 @@

    See spks_of_all_keychains for more documentation

    Returns the utxo owned by this wallet corresponding to outpoint if it exists in the wallet’s database.

    -

    Inserts a [TxOut] at [OutPoint] into the wallet’s transaction graph. +

    Inserts a [TxOut] at [OutPoint] into the wallet’s transaction graph. Any inserted TxOuts are not persisted until commit is called.

    This can be used to add a TxOut that the wallet doesn’t own but is used as an input to a [Transaction] passed to the calculate_fee or calculate_fee_rate functions.

    Only insert TxOuts you trust the values for!

    -

    Calculates the fee of a given transaction. Returns 0 if tx is a coinbase transaction.

    +

    Calculates the fee of a given transaction. Returns 0 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.

    @@ -50,7 +50,7 @@
    Examples
    let tx = &psbt.clone().extract_tx();
     let fee = wallet.calculate_fee(tx).expect("fee");
    -

    Calculate the FeeRate for a given transaction.

    +

    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.

    @@ -71,12 +71,12 @@
    Examples
    let tx = &psbt.clone().extract_tx();
     let (sent, received) = wallet.sent_and_received(tx);
    -

    Get a single transaction from the wallet as a [CanonicalTx] (if the transaction exists).

    +

    Get a single transaction from the wallet as a CanonicalTx (if the transaction exists).

    CanonicalTx contains the full transaction alongside meta-data such as:

      -
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist +
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist in the best chain.
    • -
    • The [ChainPosition] of the transaction in the best chain - whether the transaction is +
    • The ChainPosition of the transaction in the best chain - whether the transaction is confirmed or unconfirmed. If the transaction is confirmed, the anchor which proves the confirmation is provided. If the transaction is unconfirmed, the unix timestamp of when the transaction was last seen in the mempool is provided.
    • @@ -109,11 +109,11 @@
      Examples
      last_seen, ), }
    -

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

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

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

    -

    Add a transaction to the wallet’s internal view of the chain. This stages but does not +

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

    Returns whether anything changed with the transaction insertion (e.g. false if the transaction was already inserted at the same position).

    @@ -123,7 +123,7 @@
    Examples

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

    -

    Iterate over the transactions in the wallet.

    +

    Iterate over the transactions in the wallet.

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

    Add an external signer

    @@ -207,17 +207,17 @@
    Example

    get the corresponding PSBT Input for a LocalUtxo

    Return the checksum of the public descriptor associated to keychain

    Internally calls Self::get_descriptor_for_keychain to fetch the right descriptor

    -

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

    +

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

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

    -

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

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

    This returns whether the update resulted in any changes.

    -

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

    -

    Get a reference to the inner [TxGraph].

    -

    Get a reference to the inner [KeychainTxOutIndex].

    -

    Get a reference to the inner [LocalChain].

    -

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    +

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

    +

    Get a reference to the inner TxGraph.

    +

    Get a reference to the inner KeychainTxOutIndex.

    +

    Get a reference to the inner LocalChain.

    +

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html b/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html index 1ff7c146a4..943f66590b 100644 --- a/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html +++ b/docs-rs/bdk/nightly/latest/bdk/wallet/tx_builder/struct.TxBuilder.html @@ -174,7 +174,7 @@
    Errors

    Choose the coin selection algorithm

    Overrides the DefaultCoinSelectionAlgorithm.

    Note that this function consumes the builder and returns it so it is usually best to put this as the first call on the builder.

    -

    Finish building the transaction.

    +

    Finish building the transaction.

    Returns the BIP174 “PSBT” and summary details about the transaction.

    Enable signaling RBF

    This will use the default nSequence value of 0xFFFFFFFD.

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/all.html b/docs-rs/bdk/nightly/latest/bdk_chain/all.html index 95488b2f07..e1e0ee2dff 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/all.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/all.html @@ -1 +1 @@ -List of all items in this crate
    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html b/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html index 140f90b79c..145b41f547 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html @@ -4,4 +4,4 @@ }
    Expand description

    Trait that makes an object appendable.

    Required Methods§

    Append another object of the same type onto self.

    Returns whether the structure is considered empty.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html index cc47832ec7..a83330f556 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/enum.CalculateFeeError.html @@ -1,12 +1,12 @@ -CalculateFeeError in bdk_chain::tx_graph - Rust
    pub enum CalculateFeeError {
    +CalculateFeeError in bdk_chain::tx_graph - Rust
    pub enum CalculateFeeError {
         MissingTxOut(Vec<OutPoint>),
         NegativeFee(i64),
     }
    Expand description

    Errors returned by TxGraph::calculate_fee.

    Variants§

    §

    MissingTxOut(Vec<OutPoint>)

    Missing TxOut for one or more of the inputs of the tx

    §

    NegativeFee(i64)

    When the transaction is invalid according to the graph it has a negative fee

    -

    Trait Implementations§

    Formats the value using the given formatter. Read more
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Formats the value using the given formatter. Read more
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html index 79bdc27b63..7ebc3c0f7b 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/index.html @@ -1,4 +1,4 @@ -bdk_chain::tx_graph - Rust

    Module bdk_chain::tx_graph

    source ·
    Expand description

    Module for structures that store and traverse transactions.

    +bdk_chain::tx_graph - Rust

    Module bdk_chain::tx_graph

    source ·
    Expand description

    Module for structures that store and traverse transactions.

    TxGraph is a monotone structure that inserts transactions and indexes the spends. The ChangeSet structure reports changes of TxGraph but can also be applied to a TxGraph as well. Lastly, TxDescendants is an Iterator that traverses descendants of @@ -29,4 +29,4 @@

    Applying changes

    // if we apply it again, the resulting changeset will be empty let changeset = graph.apply_update(update); assert!(changeset.is_empty());
    -

    Structs

    An outwards-facing view of a transaction that is part of the best chain’s history.
    A structure that represents changes to a TxGraph.
    An iterator that traverses transaction descendants.
    A graph of transactions and spends.
    An outward-facing view of a (transaction) node in the TxGraph.

    Enums

    Errors returned by TxGraph::calculate_fee.
    \ No newline at end of file +

    Structs

    An outwards-facing view of a transaction that is part of the best chain’s history.
    A structure that represents changes to a TxGraph.
    An iterator that traverses ancestors of a given root transaction.
    An iterator that traverses transaction descendants.
    A graph of transactions and spends.
    An outward-facing view of a (transaction) node in the TxGraph.

    Enums

    Errors returned by TxGraph::calculate_fee.
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/sidebar-items.js b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/sidebar-items.js index 63b894ea66..eef7b8c203 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/sidebar-items.js +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":[["CalculateFeeError","Errors returned by `TxGraph::calculate_fee`."]],"struct":[["CanonicalTx","An outwards-facing view of a transaction that is part of the best chain’s history."],["ChangeSet","A structure that represents changes to a [`TxGraph`]."],["TxDescendants","An iterator that traverses transaction descendants."],["TxGraph","A graph of transactions and spends."],["TxNode","An outward-facing view of a (transaction) node in the [`TxGraph`]."]]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":[["CalculateFeeError","Errors returned by `TxGraph::calculate_fee`."]],"struct":[["CanonicalTx","An outwards-facing view of a transaction that is part of the best chain’s history."],["ChangeSet","A structure that represents changes to a [`TxGraph`]."],["TxAncestors","An iterator that traverses ancestors of a given root transaction."],["TxDescendants","An iterator that traverses transaction descendants."],["TxGraph","A graph of transactions and spends."],["TxNode","An outward-facing view of a (transaction) node in the [`TxGraph`]."]]}; \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html index cd4079fb4d..935b171d8f 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.CanonicalTx.html @@ -1,14 +1,14 @@ -CanonicalTx in bdk_chain::tx_graph - Rust
    pub struct CanonicalTx<'a, T, A> {
    +CanonicalTx in bdk_chain::tx_graph - Rust
    pub struct CanonicalTx<'a, T, A> {
         pub chain_position: ChainPosition<&'a A>,
         pub tx_node: TxNode<'a, T, A>,
     }
    Expand description

    An outwards-facing view of a transaction that is part of the best chain’s history.

    Fields§

    §chain_position: ChainPosition<&'a A>

    How the transaction is observed as (confirmed or unconfirmed).

    §tx_node: TxNode<'a, T, A>

    The transaction node (as part of the graph).

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    This method returns an Ordering between self and other. Read more
    Compares and returns the maximum of two values. Read more
    Compares and returns the minimum of two values. Read more
    Restrict a value to a certain interval. Read more
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    This method returns an Ordering between self and other. Read more
    Compares and returns the maximum of two values. Read more
    Compares and returns the minimum of two values. Read more
    Restrict a value to a certain interval. Read more
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    This method returns an ordering between self and other values if one exists. Read more
    This method tests less than (for self and other) and is used by the < operator. Read more
    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason. Read more
    This method returns an ordering between self and other values if one exists. Read more
    This method tests less than (for self and other) and is used by the < operator. Read more
    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    This method tests greater than (for self and other) and is used by the > operator. Read more
    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    +operator. Read more

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    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 5f56d2d6de..bf9c3d0895 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 @@ -1,4 +1,4 @@ -ChangeSet in bdk_chain::tx_graph - Rust
    pub struct ChangeSet<A = ()> {
    +ChangeSet in bdk_chain::tx_graph - Rust
    pub struct ChangeSet<A = ()> {
         pub txs: BTreeSet<Transaction>,
         pub txouts: BTreeMap<OutPoint, TxOut>,
         pub anchors: BTreeSet<(A, Txid)>,
    @@ -11,19 +11,19 @@
     
    §txouts: BTreeMap<OutPoint, TxOut>

    Added txouts.

    §anchors: BTreeSet<(A, Txid)>

    Added anchors.

    §last_seen: BTreeMap<Txid, u64>

    Added last-seen unix timestamps of transactions.

    -

    Implementations§

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

    -

    Iterates over all outpoints contained within ChangeSet.

    -

    Iterates over the heights of that the new transaction anchors in this changeset.

    +

    Implementations§

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

    +

    Iterates over all outpoints contained within ChangeSet.

    +

    Iterates over the heights of that the new transaction anchors in this changeset.

    This is useful if you want to find which heights you need to fetch data about in order to confirm or exclude these anchors.

    See also: TxGraph::missing_heights

    -

    Returns an iterator for the anchor_heights in this changeset that are not included in +

    Returns an iterator for the anchor_heights in this changeset that are not included in local_chain. This tells you which heights you need to include in local_chain in order for it to conclusively act as a ChainOracle for the transaction anchors this changeset will add.

    -

    Trait Implementations§

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

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html new file mode 100644 index 0000000000..176d328550 --- /dev/null +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxAncestors.html @@ -0,0 +1,43 @@ +TxAncestors in bdk_chain::tx_graph - Rust
    pub struct TxAncestors<'g, A, F> { /* private fields */ }
    Expand description

    An iterator that traverses ancestors of a given root transaction.

    +

    The iterator excludes partial transactions.

    +

    This struct is created by the walk_ancestors method of TxGraph.

    +

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

    Gets the TypeId of self. Read more
    Immutably borrows from an owned value. Read more
    Mutably borrows from an owned value. Read more
    Calculate the sum over the iterator using checked arithmetic. If an over or underflow would +happen it returns None. Read more
    Calculate the sum over the iterator using checked arithmetic. If an over or underflow would +happen it returns None. Read more

    Returns the argument unchanged.

    +

    Calls U::from(self).

    +

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

    +
    The type of the elements being iterated over.
    Which kind of iterator are we turning this into?
    Creates an iterator from a value. Read more
    Choose one element at random from the iterator. Read more
    Choose one element at random from the iterator. Read more
    Collects values at random from the iterator into a supplied buffer +until that buffer is filled. Read more
    Collects amount values at random from the iterator into a vector. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html index 8c39ebd276..e555296388 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxDescendants.html @@ -1,6 +1,6 @@ -TxDescendants in bdk_chain::tx_graph - Rust
    pub struct TxDescendants<'g, A, F> { /* private fields */ }
    Expand description

    An iterator that traverses transaction descendants.

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

    An iterator that traverses transaction descendants.

    This struct is created by the walk_descendants method of TxGraph.

    -

    Trait Implementations§

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

    Trait Implementations§

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

    Struct bdk_chain::tx_graph::TxGraph

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

    A graph of transactions and spends.

    +TxGraph in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxGraph

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

    A graph of transactions and spends.

    See the module-level documentation for more.

    -

    Implementations§

    Iterate over all tx outputs known by TxGraph.

    +

    Implementations§

    Iterate over all tx outputs known by TxGraph.

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

    -

    Iterate over floating txouts known by TxGraph.

    +

    Iterate over floating txouts known by TxGraph.

    Floating txouts are txouts that do not have the residing full transaction contained in the graph.

    -

    Iterate over all full transactions in the graph.

    -

    Get a transaction by txid. This only returns Some for full transactions.

    +

    Iterate over all full transactions in the graph.

    +

    Get a transaction by txid. This only returns Some for full transactions.

    Refer to get_txout for getting a specific [TxOut].

    -

    Get a transaction node by txid. This only returns Some for full transactions.

    -

    Obtains a single tx output (if any) at the specified outpoint.

    -

    Returns known outputs of a given txid.

    +

    Get a transaction node by txid. This only returns Some for full transactions.

    +

    Obtains a single tx output (if any) at the specified outpoint.

    +

    Returns known outputs of a given txid.

    Returns a BTreeMap of vout to output of the provided txid.

    -

    Calculates the fee of a given transaction. Returns 0 if tx is a coinbase transaction. +

    Calculates the fee of a given transaction. Returns 0 if tx is a coinbase transaction. Returns OK(_) if we have all the [TxOut]s being spent by tx in the graph (either as the full transactions or individual txouts).

    To calculate the fee for a [Transaction] that depends on foreign [TxOut] values you must first manually insert the foreign TxOuts into the tx graph using the insert_txout function. Only insert TxOuts you trust the values for!

    Note tx does not have to be in the graph for this to work.

    -

    The transactions spending from this output.

    +

    The transactions spending from this output.

    TxGraph allows conflicting transactions within the graph. Obviously the transactions in the returned set will never be in the same active-chain.

    -

    Iterates over the transactions spending from txid.

    +

    Iterates over the transactions spending from txid.

    The iterator item is a union of (vout, txid-set) where:

    • vout is the provided txid’s outpoint that is being spent
    • txid-set is the set of txids spending the vout.
    -

    Creates an iterator that filters and maps descendants from the starting txid.

    +

    Creates an iterator that filters and maps ancestor transactions.

    +

    The iterator starts with the ancestors of the supplied tx (ancestor transactions of tx +are transactions spent by tx). The supplied transaction is excluded from the iterator.

    +

    The supplied closure takes in two inputs (depth, ancestor_tx):

    +
      +
    • depth is the distance between the starting Transaction and the ancestor_tx. I.e., if +the Transaction is spending an output of the ancestor_tx then depth will be 1.
    • +
    • ancestor_tx is the Transaction’s ancestor which we are considering to walk.
    • +
    +

    The supplied closure returns an Option<T>, allowing the caller to map each Transaction +it visits and decide whether to visit ancestors.

    +

    Creates an iterator that filters and maps descendants from the starting txid.

    The supplied closure takes in two inputs (depth, descendant_txid):

    • depth is the distance between the starting txid and the descendant_txid. I.e., if the -descendant is spending an output of the starting txid; the depth will be 1.
    • +descendant is spending an output of the starting txid then depth will be 1.
    • descendant_txid is the descendant’s txid which we are considering to walk.
    -

    The supplied closure returns an Option<T>, allowing the caller to map each node it vists +

    The supplied closure returns an Option<T>, allowing the caller to map each node it visits and decide whether to visit descendants.

    -

    Creates an iterator that both filters and maps conflicting transactions (this includes +

    Creates an iterator that both filters and maps conflicting transactions (this includes descendants of directly-conflicting transactions, which are also considered conflicts).

    Refer to Self::walk_descendants for walk_map usage.

    -

    Given a transaction, return an iterator of txids that directly conflict with the given +

    Given a transaction, return an iterator of txids that directly conflict with the given transaction’s inputs (spends). The conflicting txids are returned with the given transaction’s vin (in which it conflicts).

    -

    Note that this only returns directly conflicting txids and does not include descendants of -those txids (which are technically also conflicting).

    -

    Get all transaction anchors known by TxGraph.

    -

    Whether the graph has any transactions or outputs in it.

    -

    Construct a new TxGraph from a list of transactions.

    -

    Inserts the given [TxOut] at [OutPoint].

    +

    Note that this only returns directly conflicting txids and won’t include:

    +
      +
    • descendants of conflicting transactions (which are technically also conflicting)
    • +
    • transactions conflicting with the given transaction’s ancestors
    • +
    +

    Get all transaction anchors known by TxGraph.

    +

    Whether the graph has any transactions or outputs in it.

    +

    Construct a new TxGraph from a list of transactions.

    +

    Inserts the given [TxOut] at [OutPoint].

    Inserting floating txouts are useful for determining fee/feerate of transactions we care about.

    The ChangeSet result will be empty if the outpoint (or a full transaction containing the outpoint) already existed in self.

    -

    Inserts the given transaction into TxGraph.

    +

    Inserts the given transaction into TxGraph.

    The ChangeSet returned will be empty if tx already exists.

    -

    Inserts the given anchor into TxGraph.

    +

    Inserts the given anchor into TxGraph.

    The ChangeSet returned will be empty if graph already knows that txid exists in anchor.

    -

    Inserts the given seen_at for txid into TxGraph.

    +

    Inserts the given seen_at for txid into TxGraph.

    Note that TxGraph only keeps track of the lastest seen_at.

    -

    Extends this graph with another so that self becomes the union of the two sets of +

    Extends this graph with another so that self becomes the union of the two sets of transactions.

    The returned ChangeSet is the set difference between update and self (transactions that exist in update but not in self).

    -

    Determines the ChangeSet between self and an empty TxGraph.

    -

    Applies ChangeSet to TxGraph.

    -

    Find missing block heights of chain.

    +

    Determines the ChangeSet between self and an empty TxGraph.

    +

    Applies ChangeSet to TxGraph.

    +

    Find missing block heights of chain.

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

    -

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

    +

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

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

    Error

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

    -

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

    +

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

    This is the infallible version of try_get_chain_position.

    -

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

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

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

    Error

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

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

    -

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

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

    This is the infallible version of try_get_chain_spend

    -

    List graph transactions that are in chain with chain_tip.

    +

    List graph transactions that are in chain with chain_tip.

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

    Error

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

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

    -

    List graph transactions that are in chain with chain_tip.

    +

    List graph transactions that are in chain with chain_tip.

    This is the infallible version of try_list_chain_txs.

    -

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

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

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

    Error
    fails.

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

    -

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

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

    This is the infallible version of try_filter_chain_txouts.

    -

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

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

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

    Error
    fails.

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

    -

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

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

    This is the infallible version of try_filter_chain_unspents.

    -

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

    +

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

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

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

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

    -

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

    +

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

    This is the infallible version of try_balance.

    -

    Trait Implementations§

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

    Trait Implementations§

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

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

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    -
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file +
    The resulting type after obtaining ownership.
    Creates owned data from borrowed data, usually by cloning. Read more
    Uses borrowed data to replace owned data, usually by cloning. Read more
    The type returned in the event of a conversion error.
    Performs the conversion.
    The type returned in the event of a conversion error.
    Performs the conversion.
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html index b27b193175..1e8bf333aa 100644 --- a/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html +++ b/docs-rs/bdk/nightly/latest/bdk_chain/tx_graph/struct.TxNode.html @@ -1,4 +1,4 @@ -TxNode in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxNode

    source ·
    pub struct TxNode<'a, T, A> {
    +TxNode in bdk_chain::tx_graph - Rust

    Struct bdk_chain::tx_graph::TxNode

    source ·
    pub struct TxNode<'a, T, A> {
         pub txid: Txid,
         pub tx: &'a T,
         pub anchors: &'a BTreeSet<A>,
    @@ -8,11 +8,11 @@
     
    §tx: &'a T

    A partial or full representation of the transaction.

    §anchors: &'a BTreeSet<A>

    The blocks that the transaction is “anchored” in.

    §last_seen_unconfirmed: u64

    The last-seen unix timestamp of the transaction as unconfirmed.

    -

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    The resulting type after dereferencing.
    Dereferences the value.
    This method returns an Ordering between self and other. Read more
    Compares and returns the maximum of two values. Read more
    Compares and returns the minimum of two values. Read more
    Restrict a value to a certain interval. Read more
    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    Returns a copy of the value. Read more
    Performs copy-assignment from source. Read more
    Formats the value using the given formatter. Read more
    The resulting type after dereferencing.
    Dereferences the value.
    This method returns an Ordering between self and other. Read more
    Compares and returns the maximum of two values. Read more
    Compares and returns the minimum of two values. Read more
    Restrict a value to a certain interval. Read more
    This method tests for self and other values to be equal, and is used by ==. Read more
    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason. Read more
    This method returns an ordering between self and other values if one exists. Read more
    This method tests less than (for self and other) and is used by the < operator. Read more
    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason. Read more
    This method returns an ordering between self and other values if one exists. Read more
    This method tests less than (for self and other) and is used by the < operator. Read more
    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    This method tests greater than (for self and other) and is used by the > operator. Read more
    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    +operator. Read more

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs-rs/bdk/nightly/latest/bdk_electrum/index.html b/docs-rs/bdk/nightly/latest/bdk_electrum/index.html index 85804b1f0c..096f78a281 100644 --- a/docs-rs/bdk/nightly/latest/bdk_electrum/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_electrum/index.html @@ -1,7 +1,7 @@ -bdk_electrum - Rust

    Crate bdk_electrum

    source ·
    Expand description

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

    +bdk_electrum - Rust

    Crate bdk_electrum

    source ·
    Expand description

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

    The star of the show is the ElectrumExt::scan method, which scans for relevant blockchain -data (via electrum) and outputs updates for [bdk_chain] structures as a tuple of form:

    -

    ([bdk_chain::local_chain::Update], RelevantTxids, keychain_update)

    +data (via electrum) and outputs updates for bdk_chain structures as a tuple of form:

    +

    (bdk_chain::local_chain::Update, RelevantTxids, keychain_update)

    An RelevantTxids only includes txids and no full transactions. The caller is responsible for obtaining full transactions before applying. This can be done with these steps:

    @@ -16,4 +16,4 @@

    Refer to bdk_electrum_example for a complete example.

    -

    Re-exports

    pub use bdk_chain;
    pub use electrum_client;

    Structs

    Combination of chain and transactions updates from electrum
    Represents updates fetched from an Electrum server, but excludes full transactions.

    Traits

    Trait to extend [Client] functionality.
    \ No newline at end of file +

    Re-exports

    pub use bdk_chain;
    pub use electrum_client;

    Structs

    Combination of chain and transactions updates from electrum
    Represents updates fetched from an Electrum server, but excludes full transactions.

    Traits

    Trait to extend [Client] functionality.
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html b/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html index 51a9491cdc..d623bccceb 100644 --- a/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html +++ b/docs-rs/bdk/nightly/latest/bdk_electrum/struct.ElectrumUpdate.html @@ -1,10 +1,10 @@ ElectrumUpdate in bdk_electrum - Rust
    pub struct ElectrumUpdate {
    -    pub chain_update: Update,
    +    pub chain_update: Update,
         pub relevant_txids: RelevantTxids,
     }
    Expand description

    Combination of chain and transactions updates from electrum

    We have to update the chain and the txids at the same time since we anchor the txids to the same chain tip that we check before and after we gather the txids.

    -

    Fields§

    §chain_update: Update

    Chain update

    +

    Fields§

    §chain_update: Update

    Chain update

    §relevant_txids: RelevantTxids

    Transaction updates from electrum

    Trait Implementations§

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

    diff --git a/docs-rs/bdk/nightly/latest/bdk_electrum/struct.RelevantTxids.html b/docs-rs/bdk/nightly/latest/bdk_electrum/struct.RelevantTxids.html index 7fc36339f6..8ada3a5bb8 100644 --- a/docs-rs/bdk/nightly/latest/bdk_electrum/struct.RelevantTxids.html +++ b/docs-rs/bdk/nightly/latest/bdk_electrum/struct.RelevantTxids.html @@ -1,13 +1,13 @@ RelevantTxids in bdk_electrum - Rust
    pub struct RelevantTxids(_);
    Expand description

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

    -

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

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

    -

    Implementations§

    Determine the full transactions that are missing from graph.

    +

    Implementations§

    Determine the full transactions that are missing from graph.

    Refer to RelevantTxids for more details.

    -

    Finalizes the [TxGraph] update by fetching missing txids from the client.

    +

    Finalizes the TxGraph update by fetching missing txids from the client.

    Refer to RelevantTxids for more details.

    -

    Finalizes RelevantTxids with new_txs and anchors of type -[ConfirmationTimeAnchor].

    +

    Finalizes RelevantTxids with new_txs and anchors of type +ConfirmationTimeAnchor.

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

    diff --git a/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html b/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html index 4da6f4896a..b8e453cde7 100644 --- a/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html +++ b/docs-rs/bdk/nightly/latest/bdk_electrum/trait.ElectrumExt.html @@ -1,19 +1,19 @@ ElectrumExt in bdk_electrum - Rust
    pub trait ElectrumExt {
    -    fn scan<K: Ord + Clone>(
            &self,
            prev_tip: Option<CheckPoint>,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, ScriptBuf)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            batch_size: usize
        ) -> Result<(ElectrumUpdate, BTreeMap<K, u32>), Error>; + fn scan<K: Ord + Clone>(
            &self,
            prev_tip: Option<CheckPoint>,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, ScriptBuf)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            batch_size: usize
        ) -> Result<(ElectrumUpdate, BTreeMap<K, u32>), Error>; - fn scan_without_keychain(
            &self,
            prev_tip: Option<CheckPoint>,
            misc_spks: impl IntoIterator<Item = ScriptBuf>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            batch_size: usize
        ) -> Result<ElectrumUpdate, Error> { ... } + fn scan_without_keychain(
            &self,
            prev_tip: Option<CheckPoint>,
            misc_spks: impl IntoIterator<Item = ScriptBuf>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            batch_size: usize
        ) -> Result<ElectrumUpdate, Error> { ... } }
    Expand description

    Trait to extend [Client] functionality.

    -

    Required Methods§

    Scan the blockchain (via electrum) for the data specified and returns updates for -[bdk_chain] data structures.

    +

    Required Methods§

    Scan the blockchain (via electrum) for the data specified and returns updates for +bdk_chain data structures.

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

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

    -

    Provided Methods§

    Convenience method to call scan without requiring a keychain.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Provided Methods§

    Convenience method to call scan without requiring a keychain.

    +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html index a98137b550..7a0c57f5fd 100644 --- a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html +++ b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html @@ -1,27 +1,27 @@ EsploraAsyncExt in bdk_esplora - Rust
    pub trait EsploraAsyncExt {
    -    fn update_local_chain<'life0, 'async_trait>(
            &'life0 self,
            local_tip: Option<CheckPoint>,
            request_heights: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = u32> + Send> + Send
        ) -> Pin<Box<dyn Future<Output = Result<Update, Error>> + Send + 'async_trait>>
        where
            Self: 'async_trait,
            'life0: 'async_trait
    ; - fn scan_txs_with_keychains<'life0, 'async_trait, K>(
            &'life0 self,
            keychain_spks: BTreeMap<K, impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = (u32, ScriptBuf)> + Send> + Send>,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>> + Send + 'async_trait>>
        where
            K: 'async_trait + Ord + Clone + Send,
            Self: 'async_trait,
            'life0: 'async_trait
    ; + fn update_local_chain<'life0, 'async_trait>(
            &'life0 self,
            local_tip: Option<CheckPoint>,
            request_heights: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = u32> + Send> + Send
        ) -> Pin<Box<dyn Future<Output = Result<Update, Error>> + Send + 'async_trait>>
        where
            Self: 'async_trait,
            'life0: 'async_trait
    ; + fn scan_txs_with_keychains<'life0, 'async_trait, K>(
            &'life0 self,
            keychain_spks: BTreeMap<K, impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = (u32, ScriptBuf)> + Send> + Send>,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>> + Send + 'async_trait>>
        where
            K: 'async_trait + Ord + Clone + Send,
            Self: 'async_trait,
            'life0: 'async_trait
    ; - fn scan_txs<'life0, 'async_trait>(
            &'life0 self,
            misc_spks: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = ScriptBuf> + Send> + Send,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<TxGraph<ConfirmationTimeAnchor>, Error>> + Send + 'async_trait>>
        where
            Self: Sync + 'async_trait,
            'life0: 'async_trait
    , + fn scan_txs<'life0, 'async_trait>(
            &'life0 self,
            misc_spks: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = ScriptBuf> + Send> + Send,
            txids: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = Txid> + Send> + Send,
            outpoints: impl 'async_trait + IntoIterator<IntoIter = impl 'async_trait + Iterator<Item = OutPoint> + Send> + Send,
            parallel_requests: usize
        ) -> Pin<Box<dyn Future<Output = Result<TxGraph<ConfirmationTimeAnchor>, Error>> + Send + 'async_trait>>
        where
            Self: Sync + 'async_trait,
            'life0: 'async_trait
    , { ... } }
    Expand description

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

    Refer to crate-level documentation for more.

    -

    Required Methods§

    Prepare an LocalChain update with blocks fetched from Esplora.

    +

    Required Methods§

    Prepare an LocalChain update with blocks fetched from Esplora.

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

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

    -

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

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

    +

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

    • keychain_spks: keychains that we want to scan transactions for
    • -
    • txids: transactions for which we want updated [ConfirmationTimeAnchor]s
    • +
    • txids: transactions for which we want updated ConfirmationTimeAnchors
    • outpoints: transactions associated with these outpoints (residing, spending) that we want to include in the update

    The scan for each keychain stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the max number of HTTP requests to make in parallel.

    -

    Provided Methods§

    Convenience method to call scan_txs_with_keychains without requiring a keychain.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Provided Methods§

    Convenience method to call scan_txs_with_keychains without requiring a keychain.

    +

    Implementations on Foreign Types§

    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 c1f97cbfcc..7de24ead89 100644 --- a/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html +++ b/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html @@ -1,26 +1,26 @@ EsploraExt in bdk_esplora - Rust
    pub trait EsploraExt {
    -    fn update_local_chain(
            &self,
            local_tip: Option<CheckPoint>,
            request_heights: impl IntoIterator<Item = u32>
        ) -> Result<Update, Error>; - fn scan_txs_with_keychains<K: Ord + Clone>(
            &self,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, ScriptBuf)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>; + fn update_local_chain(
            &self,
            local_tip: Option<CheckPoint>,
            request_heights: impl IntoIterator<Item = u32>
        ) -> Result<Update, Error>; + fn scan_txs_with_keychains<K: Ord + Clone>(
            &self,
            keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, ScriptBuf)>>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            stop_gap: usize,
            parallel_requests: usize
        ) -> Result<(TxGraph<ConfirmationTimeAnchor>, BTreeMap<K, u32>), Error>; - fn scan_txs(
            &self,
            misc_spks: impl IntoIterator<Item = ScriptBuf>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            parallel_requests: usize
        ) -> Result<TxGraph<ConfirmationTimeAnchor>, Error> { ... } + fn scan_txs(
            &self,
            misc_spks: impl IntoIterator<Item = ScriptBuf>,
            txids: impl IntoIterator<Item = Txid>,
            outpoints: impl IntoIterator<Item = OutPoint>,
            parallel_requests: usize
        ) -> Result<TxGraph<ConfirmationTimeAnchor>, Error> { ... } }
    Expand description

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

    Refer to crate-level documentation for more.

    -

    Required Methods§

    Prepare an LocalChain update with blocks fetched from Esplora.

    +

    Required Methods§

    Prepare an LocalChain update with blocks fetched from Esplora.

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

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

    -

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

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

    +

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

    • keychain_spks: keychains that we want to scan transactions for
    • -
    • txids: transactions for which we want updated [ConfirmationTimeAnchor]s
    • +
    • txids: transactions for which we want updated ConfirmationTimeAnchors
    • outpoints: transactions associated with these outpoints (residing, spending) that we want to include in the update

    The scan for each keychain stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the max number of HTTP requests to make in parallel.

    -

    Provided Methods§

    Convenience method to call scan_txs_with_keychains without requiring a keychain.

    -

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file +

    Provided Methods§

    Convenience method to call scan_txs_with_keychains without requiring a keychain.

    +

    Implementations on Foreign Types§

    Implementors§

    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/bdk_file_store/index.html b/docs-rs/bdk/nightly/latest/bdk_file_store/index.html index de9ea6528c..a8ba16633d 100644 --- a/docs-rs/bdk/nightly/latest/bdk_file_store/index.html +++ b/docs-rs/bdk/nightly/latest/bdk_file_store/index.html @@ -1,6 +1,6 @@ bdk_file_store - Rust

    Crate bdk_file_store

    source ·
    Expand description

    BDK File Store

    This is a simple append-only flat file implementation of -Persist.

    +Persist.

    The main structure is Store, which can be used with bdk’s Wallet to persist wallet data into a flat file.

    Structs

    Iterator over entries in a file store.
    Persists an append-only list of changesets (C) to a single file.

    Enums

    Error that occurs due to problems encountered with the file.
    Error type for EntryIter.
    \ 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 23efed5d9d..69715acd93 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,6 +1,6 @@ Store in bdk_file_store - Rust

    Struct bdk_file_store::Store

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

    Persists an append-only list of changesets (C) to a single file.

    The changesets are the results of altering a tracker implementation (T).

    -

    Implementations§

    Creates a new store from a File.

    +

    Implementations§

    Creates a new store from a File.

    The file must have been opened with read and write permissions.

    magic is the expected prefixed bytes of the file. If this does not match, an error will be returned.

    @@ -27,7 +27,7 @@ changeset.

    The truncation is to avoid the possibility of having a valid but inconsistent changeset directly after the appended changeset.

    -

    Trait Implementations§

    Formats the value using the given formatter. Read more
    The error the backend returns when it fails to write.
    The error the backend returns when it fails to load changesets C.
    Writes a changeset to the persistence backend. Read more
    Return the aggregate changeset C from persistence.

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    +

    Trait Implementations§

    Formats the value using the given formatter. Read more
    The error the backend returns when it fails to write.
    The error the backend returns when it fails to load changesets C.
    Writes a changeset to the persistence backend. Read more
    Return the aggregate changeset C from persistence.

    Auto Trait Implementations§

    Blanket Implementations§

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

    Returns the argument unchanged.

    Calls U::from(self).

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

    diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html b/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html index 9d41c1648a..0a30908f95 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 +1 @@ -create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<A: Anchor, O: ChainOracle>(
        graph: &mut KeychainTxGraph<A>,
        chain: &O,
        keymap: &HashMap<DescriptorPublicKey, DescriptorSecretKey>,
        cs_algorithm: CoinSelectionAlgo,
        address: Address,
        value: u64
    ) -> Result<(Transaction, Option<(ChangeSet<Keychain>, (Keychain, u32))>)>where
        O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file +create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<A: Anchor, O: ChainOracle>(
        graph: &mut KeychainTxGraph<A>,
        chain: &O,
        keymap: &HashMap<DescriptorPublicKey, DescriptorSecretKey>,
        cs_algorithm: CoinSelectionAlgo,
        address: Address,
        value: u64
    ) -> Result<(Transaction, Option<(ChangeSet<Keychain>, (Keychain, u32))>)>where
        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 e2df6b16b5..8de3ec1cac 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 +1 @@ -handle_commands in example_cli - Rust
    pub fn handle_commands<S: Subcommand, A: Anchor, O: ChainOracle, C>(
        graph: &Mutex<KeychainTxGraph<A>>,
        db: &Mutex<Database<'_, C>>,
        chain: &Mutex<O>,
        keymap: &HashMap<DescriptorPublicKey, DescriptorSecretKey>,
        network: Network,
        broadcast: impl FnOnce(&Transaction) -> Result<()>,
        cmd: Commands<S>
    ) -> Result<()>where
        O::Error: Error + Send + Sync + 'static,
        C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file +handle_commands in example_cli - Rust
    pub fn handle_commands<S: Subcommand, A: Anchor, O: ChainOracle, C>(
        graph: &Mutex<KeychainTxGraph<A>>,
        db: &Mutex<Database<'_, C>>,
        chain: &Mutex<O>,
        keymap: &HashMap<DescriptorPublicKey, DescriptorSecretKey>,
        network: Network,
        broadcast: impl FnOnce(&Transaction) -> Result<()>,
        cmd: Commands<S>
    ) -> Result<()>where
        O::Error: Error + Send + Sync + 'static,
        C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.init.html b/docs-rs/bdk/nightly/latest/example_cli/fn.init.html index 54bda461d1..10c6e371be 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.init.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.init.html @@ -1 +1 @@ -init in example_cli - Rust

    Function example_cli::init

    source ·
    pub fn init<'m, S: Subcommand, C>(
        db_magic: &'m [u8],
        db_default_path: &str
    ) -> Result<(Args<S>, KeyMap, KeychainTxOutIndex<Keychain>, Mutex<Database<'m, C>>, C)>where
        C: Default + Append + Serialize + DeserializeOwned,
    \ No newline at end of file +init in example_cli - Rust

    Function example_cli::init

    source ·
    pub fn init<'m, S: Subcommand, C>(
        db_magic: &'m [u8],
        db_default_path: &str
    ) -> Result<(Args<S>, KeyMap, KeychainTxOutIndex<Keychain>, Mutex<Database<'m, C>>, C)>where
        C: Default + Append + Serialize + DeserializeOwned,
    \ No newline at end of file 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 5c4f68444c..9fc9667339 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 +1 @@ -planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<A: Anchor, O: ChainOracle, K: Clone + CanDerive>(
        graph: &KeychainTxGraph<A>,
        chain: &O,
        assets: &Assets<K>
    ) -> Result<Vec<(Plan<K>, FullTxOut<A>)>, O::Error>
    \ No newline at end of file +planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<A: Anchor, O: ChainOracle, K: Clone + CanDerive>(
        graph: &KeychainTxGraph<A>,
        chain: &O,
        assets: &Assets<K>
    ) -> Result<Vec<(Plan<K>, FullTxOut<A>)>, O::Error>
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.run_address_cmd.html b/docs-rs/bdk/nightly/latest/example_cli/fn.run_address_cmd.html index e241b64197..860a01bef8 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.run_address_cmd.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.run_address_cmd.html @@ -1 +1 @@ -run_address_cmd in example_cli - Rust
    pub fn run_address_cmd<A, C>(
        graph: &mut KeychainTxGraph<A>,
        db: &Mutex<Database<'_, C>>,
        network: Network,
        cmd: AddressCmd
    ) -> Result<()>where
        C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file +run_address_cmd in example_cli - Rust
    pub fn run_address_cmd<A, C>(
        graph: &mut KeychainTxGraph<A>,
        db: &Mutex<Database<'_, C>>,
        network: Network,
        cmd: AddressCmd
    ) -> Result<()>where
        C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.run_balance_cmd.html b/docs-rs/bdk/nightly/latest/example_cli/fn.run_balance_cmd.html index 00d7f7b45e..52ff7e3cf8 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.run_balance_cmd.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.run_balance_cmd.html @@ -1 +1 @@ -run_balance_cmd in example_cli - Rust
    pub fn run_balance_cmd<A: Anchor, O: ChainOracle>(
        graph: &KeychainTxGraph<A>,
        chain: &O
    ) -> Result<(), O::Error>
    \ No newline at end of file +run_balance_cmd in example_cli - Rust
    pub fn run_balance_cmd<A: Anchor, O: ChainOracle>(
        graph: &KeychainTxGraph<A>,
        chain: &O
    ) -> Result<(), O::Error>
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.run_send_cmd.html b/docs-rs/bdk/nightly/latest/example_cli/fn.run_send_cmd.html index 8091686fb3..bed76d7287 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.run_send_cmd.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.run_send_cmd.html @@ -1 +1 @@ -run_send_cmd in example_cli - Rust

    Function example_cli::run_send_cmd

    source ·
    pub fn run_send_cmd<A: Anchor, O: ChainOracle, C>(
        graph: &Mutex<KeychainTxGraph<A>>,
        db: &Mutex<Database<'_, C>>,
        chain: &O,
        keymap: &HashMap<DescriptorPublicKey, DescriptorSecretKey>,
        cs_algorithm: CoinSelectionAlgo,
        address: Address,
        value: u64,
        broadcast: impl FnOnce(&Transaction) -> Result<()>
    ) -> Result<()>where
        O::Error: Error + Send + Sync + 'static,
        C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file +run_send_cmd in example_cli - Rust

    Function example_cli::run_send_cmd

    source ·
    pub fn run_send_cmd<A: Anchor, O: ChainOracle, C>(
        graph: &Mutex<KeychainTxGraph<A>>,
        db: &Mutex<Database<'_, C>>,
        chain: &O,
        keymap: &HashMap<DescriptorPublicKey, DescriptorSecretKey>,
        cs_algorithm: CoinSelectionAlgo,
        address: Address,
        value: u64,
        broadcast: impl FnOnce(&Transaction) -> Result<()>
    ) -> Result<()>where
        O::Error: Error + Send + Sync + 'static,
        C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/fn.run_txo_cmd.html b/docs-rs/bdk/nightly/latest/example_cli/fn.run_txo_cmd.html index 91d0790610..da06577516 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/fn.run_txo_cmd.html +++ b/docs-rs/bdk/nightly/latest/example_cli/fn.run_txo_cmd.html @@ -1 +1 @@ -run_txo_cmd in example_cli - Rust

    Function example_cli::run_txo_cmd

    source ·
    pub fn run_txo_cmd<A: Anchor, O: ChainOracle>(
        graph: &KeychainTxGraph<A>,
        chain: &O,
        network: Network,
        cmd: TxOutCmd
    ) -> Result<()>where
        O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file +run_txo_cmd in example_cli - Rust

    Function example_cli::run_txo_cmd

    source ·
    pub fn run_txo_cmd<A: Anchor, O: ChainOracle>(
        graph: &KeychainTxGraph<A>,
        chain: &O,
        network: Network,
        cmd: TxOutCmd
    ) -> Result<()>where
        O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/type.Database.html b/docs-rs/bdk/nightly/latest/example_cli/type.Database.html index e95f4fa380..f486b20c1b 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/type.Database.html +++ b/docs-rs/bdk/nightly/latest/example_cli/type.Database.html @@ -1 +1 @@ -Database in example_cli - Rust

    Type Definition example_cli::Database

    source ·
    pub type Database<'m, C> = Persist<Store<'m, C>, C>;
    \ No newline at end of file +Database in example_cli - Rust

    Type Definition example_cli::Database

    source ·
    pub type Database<'m, C> = Persist<Store<'m, C>, C>;
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html b/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html index 6ad4e05f81..f80a161e8f 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html +++ b/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html @@ -1 +1 @@ -KeychainChangeSet in example_cli - Rust

    Type Definition example_cli::KeychainChangeSet

    source ·
    pub type KeychainChangeSet<A> = (ChangeSet, ChangeSet<A, ChangeSet<Keychain>>);
    \ No newline at end of file +KeychainChangeSet in example_cli - Rust

    Type Definition example_cli::KeychainChangeSet

    source ·
    pub type KeychainChangeSet<A> = (ChangeSet, ChangeSet<A, ChangeSet<Keychain>>);
    \ No newline at end of file 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 9796925320..9537676556 100644 --- a/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html +++ b/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html @@ -1 +1 @@ -KeychainTxGraph in example_cli - Rust

    Type Definition example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;
    \ No newline at end of file +KeychainTxGraph in example_cli - Rust

    Type Definition example_cli::KeychainTxGraph

    source ·
    pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html b/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html index 6b884e068a..56a64aace5 100644 --- a/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_electrum - Rust

    Type Definition example_electrum::ChangeSet

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

    Type Definition example_electrum::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html b/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html index 84fb32da0e..9672726ca0 100644 --- a/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html +++ b/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_esplora - Rust

    Type Definition example_esplora::ChangeSet

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

    Type Definition example_esplora::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeAnchor, ChangeSet<Keychain>>);
    \ 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 8659dfcc0d..459a36dac8 100644 --- a/docs-rs/bdk/nightly/latest/help.html +++ b/docs-rs/bdk/nightly/latest/help.html @@ -1 +1 @@ -Rustdoc help

    Rustdoc help

    Back
    \ No newline at end of file +Rustdoc help

    Rustdoc help

    Back
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/implementors/bdk_chain/persist/trait.PersistBackend.js b/docs-rs/bdk/nightly/latest/implementors/bdk_chain/persist/trait.PersistBackend.js index 16f523c3b8..8ca56e88b1 100644 --- a/docs-rs/bdk/nightly/latest/implementors/bdk_chain/persist/trait.PersistBackend.js +++ b/docs-rs/bdk/nightly/latest/implementors/bdk_chain/persist/trait.PersistBackend.js @@ -1,4 +1,4 @@ (function() {var implementors = { "bdk_chain":[], -"bdk_file_store":[["impl<'a, C> PersistBackend<C> for Store<'a, C>where
        C: Default + Append + Serialize + DeserializeOwned,
    "]] +"bdk_file_store":[["impl<'a, C> PersistBackend<C> for Store<'a, C>where
        C: Default + Append + Serialize + DeserializeOwned,
    "]] };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/implementors/bdk_chain/tx_data_traits/trait.Append.js b/docs-rs/bdk/nightly/latest/implementors/bdk_chain/tx_data_traits/trait.Append.js index 2b650fa85a..7b3d82a242 100644 --- a/docs-rs/bdk/nightly/latest/implementors/bdk_chain/tx_data_traits/trait.Append.js +++ b/docs-rs/bdk/nightly/latest/implementors/bdk_chain/tx_data_traits/trait.Append.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"bdk":[["impl Append for ChangeSet"]], +"bdk":[["impl Append for ChangeSet"]], "bdk_chain":[] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js b/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js index 4f5166c566..e2eb65d73a 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.AsRef.js @@ -1,4 +1,4 @@ (function() {var implementors = { -"bdk":[["impl AsRef<[u8]> for KeychainKind"],["impl<D> AsRef<TxGraph<ConfirmationTimeAnchor>> for Wallet<D>"]], +"bdk":[["impl AsRef<[u8]> for KeychainKind"],["impl<D> AsRef<TxGraph<ConfirmationTimeAnchor>> for Wallet<D>"]], "bdk_chain":[["impl<K> AsRef<BTreeMap<K, u32, Global>> for ChangeSet<K>"],["impl<A> AsRef<TxGraph<A>> for TxGraph<A>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js b/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js index 1130bd36d3..5985c975b4 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/convert/trait.From.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk":[["impl From<Error> for Error"],["impl From<PolicyError> for Error"],["impl From<SignerError> for Error"],["impl From<KeyError> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<KeyError> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<PolicyError> for Error"],["impl From<bool> for Satisfaction"],["impl From<SatisfiableItem> for Policy"],["impl<Ctx: ScriptContext> From<ExtendedPubKey> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<ExtendedPrivKey> for ExtendedKey<Ctx>"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Hash> for SignerId"],["impl From<Fingerprint> for SignerId"],["impl From<Error> for SignerError"],["impl From<BTreeMap<u32, Option<BlockHash>, Global>> for ChangeSet"],["impl From<ChangeSet<ConfirmationTimeAnchor, ChangeSet<KeychainKind>>> for ChangeSet"]], +"bdk":[["impl From<Error> for Error"],["impl From<PolicyError> for Error"],["impl From<SignerError> for Error"],["impl From<KeyError> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<KeyError> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<PolicyError> for Error"],["impl From<bool> for Satisfaction"],["impl From<SatisfiableItem> for Policy"],["impl<Ctx: ScriptContext> From<ExtendedPubKey> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<ExtendedPrivKey> for ExtendedKey<Ctx>"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Hash> for SignerId"],["impl From<Fingerprint> for SignerId"],["impl From<Error> for SignerError"],["impl From<BTreeMap<u32, Option<BlockHash>, Global>> for ChangeSet"],["impl From<ChangeSet<ConfirmationTimeAnchor, ChangeSet<KeychainKind>>> for ChangeSet"]], "bdk_chain":[["impl From<ChainPosition<ConfirmationTimeAnchor>> for ConfirmationTime"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<BlockId> for (u32, BlockHash)"],["impl From<(&u32, &BlockHash)> for BlockId"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>"],["impl From<LocalChain> for BTreeMap<u32, BlockHash>"],["impl From<BTreeMap<u32, BlockHash, Global>> for LocalChain"]], "bdk_coin_select":[["impl From<usize> for BnbLimit"],["impl From<Duration> for BnbLimit"]], "bdk_file_store":[["impl From<Error> for IterError"],["impl<'a> From<Error> for FileError<'a>"]], diff --git a/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js b/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js index 7489d3ee54..586312839f 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/iter/traits/iterator/trait.Iterator.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Iterator for CheckPointIter"],["impl<'g, A, F, O> Iterator for TxDescendants<'g, A, F>where
        F: FnMut(usize, Txid) -> Option<O>,
    "],["impl<D> Iterator for SpkIterator<D>where
        D: Borrow<Descriptor<DescriptorPublicKey>>,
    "]], +"bdk_chain":[["impl Iterator for CheckPointIter"],["impl<'g, A, F, O> Iterator for TxAncestors<'g, A, F>where
        F: FnMut(usize, &'g Transaction) -> Option<O>,
    "],["impl<'g, A, F, O> Iterator for TxDescendants<'g, A, F>where
        F: FnMut(usize, Txid) -> Option<O>,
    "],["impl<D> Iterator for SpkIterator<D>where
        D: Borrow<Descriptor<DescriptorPublicKey>>,
    "]], "bdk_coin_select":[["impl<'c, 'f, S: Ord + Copy + Display> Iterator for BnbIter<'c, 'f, S>"]], "bdk_file_store":[["impl<'t, T> Iterator for EntryIter<'t, T>where
        T: DeserializeOwned,
    "]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js index 44cc3cd6ca..658ed9b53e 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Freeze.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Freeze for Error",1,["bdk::error::Error"]],["impl Freeze for Error",1,["bdk::descriptor::error::Error"]],["impl Freeze for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Freeze for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Freeze for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Freeze for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Freeze for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Freeze for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Freeze for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Freeze for P2Pkh<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Freeze for P2Wpkh_P2Sh<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Freeze for P2Wpkh<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Freeze for P2TR<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Freeze for Bip44<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Freeze for Bip44Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Freeze for Bip49<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Freeze for Bip49Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Freeze for Bip84<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Freeze for Bip84Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Freeze for Bip86<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Freeze for Bip86Public<K>where
        K: Freeze,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Freeze for DescriptorKey<Ctx>",1,["bdk::keys::DescriptorKey"]],["impl Freeze for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Freeze for ExtendedKey<Ctx>",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Freeze for GeneratedKey<K, Ctx>where
        K: Freeze,
    ",1,["bdk::keys::GeneratedKey"]],["impl Freeze for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Freeze for KeyError",1,["bdk::keys::KeyError"]],["impl Freeze for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Freeze for FeeRate",1,["bdk::types::FeeRate"]],["impl Freeze for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Freeze for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Freeze for Utxo",1,["bdk::types::Utxo"]],["impl Freeze for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Freeze for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Freeze for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Freeze for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Freeze for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Freeze for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Freeze for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Freeze for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Freeze for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Freeze for SignerWrapper<S>where
        S: Freeze,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Freeze for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Freeze for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Freeze for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Freeze for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Freeze for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Freeze for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> Freeze for TxBuilder<'a, D, Cs, Ctx>where
        Cs: Freeze,
    ",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Freeze for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Freeze for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Freeze for Wallet<D>where
        D: Freeze,
    ",1,["bdk::wallet::Wallet"]],["impl Freeze for Update",1,["bdk::wallet::Update"]],["impl Freeze for ChangeSet",1,["bdk::wallet::ChangeSet"]],["impl Freeze for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Freeze for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Freeze for NewError<P>where
        P: Freeze,
    ",1,["bdk::wallet::NewError"]],["impl Freeze for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Freeze for ChainPosition<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Freeze for FullTxOut<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>where
        I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for ChangeSet<A, IA>where
        IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for ChangeSet<K>",1,["bdk_chain::keychain::ChangeSet"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for Update",1,["bdk_chain::local_chain::Update"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Freeze for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Freeze for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>where
        F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Freeze for Persist<B, C>where
        B: Freeze,
        C: Freeze,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Freeze for SpkIterator<D>where
        D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Freeze for ChainPosition<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Freeze for FullTxOut<A>where
        A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>where
        I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for ChangeSet<A, IA>where
        IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for ChangeSet<K>",1,["bdk_chain::keychain::ChangeSet"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for Update",1,["bdk_chain::local_chain::Update"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Freeze for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Freeze for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Freeze for TxAncestors<'g, A, F>where
        F: Freeze,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>where
        F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Freeze for Persist<B, C>where
        B: Freeze,
        C: Freeze,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Freeze for SpkIterator<D>where
        D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Freeze for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Freeze for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Freeze for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Freeze for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Freeze for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Freeze for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Freeze for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Freeze for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Freeze for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Freeze for Bnb<'c, S>where
        S: Freeze,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> Freeze for BnbIter<'c, 'f, S>where
        S: Freeze,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl Freeze for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl Freeze for RelevantTxids",1,["bdk_electrum::electrum_ext::RelevantTxids"]],["impl Freeze for ElectrumUpdate",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Freeze for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Freeze for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Freeze for Store<'a, C>",1,["bdk_file_store::store::Store"]],["impl<'a> Freeze for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js index 86bc1d0247..3d5bbd47b5 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Send.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Send for Error",1,["bdk::error::Error"]],["impl Send for Error",1,["bdk::descriptor::error::Error"]],["impl Send for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Send for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Send for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Send for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Send for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Send for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Send for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Send for P2Pkh<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Send for P2Wpkh_P2Sh<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Send for P2Wpkh<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Send for P2TR<K>where
        K: Send,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Send for Bip44<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Send for Bip44Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Send for Bip49<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Send for Bip49Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Send for Bip84<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Send for Bip84Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Send for Bip86<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Send for Bip86Public<K>where
        K: Send,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Send for DescriptorKey<Ctx>where
        Ctx: Send,
    ",1,["bdk::keys::DescriptorKey"]],["impl Send for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Send for ExtendedKey<Ctx>where
        Ctx: Send,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Send for GeneratedKey<K, Ctx>where
        Ctx: Send,
        K: Send,
    ",1,["bdk::keys::GeneratedKey"]],["impl Send for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Send for KeyError",1,["bdk::keys::KeyError"]],["impl Send for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Send for FeeRate",1,["bdk::types::FeeRate"]],["impl Send for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Send for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Send for Utxo",1,["bdk::types::Utxo"]],["impl Send for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Send for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Send for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Send for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Send for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Send for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Send for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Send for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Send for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Send for SignerWrapper<S>where
        S: Send,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Send for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Send for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Send for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Send for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Send for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Send for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !Send for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Send for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Send for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Send for Wallet<D>where
        D: Send,
    ",1,["bdk::wallet::Wallet"]],["impl Send for Update",1,["bdk::wallet::Update"]],["impl Send for ChangeSet",1,["bdk::wallet::ChangeSet"]],["impl Send for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Send for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Send for NewError<P>where
        P: Send,
    ",1,["bdk::wallet::NewError"]],["impl Send for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Send for SpkTxOutIndex<I>where
        I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Send for ChainPosition<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Send for FullTxOut<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Send for IndexedTxGraph<A, I>where
        A: Send,
        I: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for ChangeSet<A, IA>where
        A: Send,
        IA: Send,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Send for KeychainTxOutIndex<K>where
        K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for ChangeSet<K>where
        K: Send,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for Update",1,["bdk_chain::local_chain::Update"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Send for TxGraph<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Send for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Send for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Send for ChangeSet<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>where
        A: Sync,
        F: Send,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Send for Persist<B, C>where
        B: Send,
        C: Send,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Send for SpkIterator<D>where
        D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Send for SpkTxOutIndex<I>where
        I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Send for ChainPosition<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Send for FullTxOut<A>where
        A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Send for IndexedTxGraph<A, I>where
        A: Send,
        I: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for ChangeSet<A, IA>where
        A: Send,
        IA: Send,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Send for KeychainTxOutIndex<K>where
        K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for ChangeSet<K>where
        K: Send,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for Update",1,["bdk_chain::local_chain::Update"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Send for TxGraph<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Send for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Send for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Send for ChangeSet<A>where
        A: Send,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Send for TxAncestors<'g, A, F>where
        A: Sync,
        F: Send,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>where
        A: Sync,
        F: Send,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Send for Persist<B, C>where
        B: Send,
        C: Send,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Send for SpkIterator<D>where
        D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Send for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Send for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Send for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Send for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Send for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Send for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Send for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Send for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Send for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Send for Bnb<'c, S>where
        S: Send,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !Send for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl Send for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl Send for RelevantTxids",1,["bdk_electrum::electrum_ext::RelevantTxids"]],["impl Send for ElectrumUpdate",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Send for EntryIter<'t, T>where
        T: Send,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Send for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Send for Store<'a, C>where
        C: Send,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> Send for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js index 42ded74bed..e100729a63 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Sync.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Sync for Error",1,["bdk::error::Error"]],["impl Sync for Error",1,["bdk::descriptor::error::Error"]],["impl Sync for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Sync for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Sync for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Sync for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Sync for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Sync for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Sync for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Sync for P2Pkh<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Sync for P2Wpkh_P2Sh<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Sync for P2Wpkh<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Sync for P2TR<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Sync for Bip44<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Sync for Bip44Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Sync for Bip49<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Sync for Bip49Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Sync for Bip84<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Sync for Bip84Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Sync for Bip86<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Sync for Bip86Public<K>where
        K: Sync,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Sync for DescriptorKey<Ctx>where
        Ctx: Sync,
    ",1,["bdk::keys::DescriptorKey"]],["impl Sync for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Sync for ExtendedKey<Ctx>where
        Ctx: Sync,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Sync for GeneratedKey<K, Ctx>where
        Ctx: Sync,
        K: Sync,
    ",1,["bdk::keys::GeneratedKey"]],["impl Sync for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Sync for KeyError",1,["bdk::keys::KeyError"]],["impl Sync for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Sync for FeeRate",1,["bdk::types::FeeRate"]],["impl Sync for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Sync for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Sync for Utxo",1,["bdk::types::Utxo"]],["impl Sync for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Sync for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Sync for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Sync for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Sync for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Sync for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Sync for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Sync for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Sync for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Sync for SignerWrapper<S>where
        S: Sync,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Sync for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Sync for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Sync for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Sync for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Sync for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Sync for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !Sync for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Sync for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Sync for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Sync for Wallet<D>where
        D: Sync,
    ",1,["bdk::wallet::Wallet"]],["impl Sync for Update",1,["bdk::wallet::Update"]],["impl Sync for ChangeSet",1,["bdk::wallet::ChangeSet"]],["impl Sync for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Sync for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Sync for NewError<P>where
        P: Sync,
    ",1,["bdk::wallet::NewError"]],["impl Sync for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Sync for SpkTxOutIndex<I>where
        I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Sync for ChainPosition<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Sync for FullTxOut<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Sync for IndexedTxGraph<A, I>where
        A: Sync,
        I: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for ChangeSet<A, IA>where
        A: Sync,
        IA: Sync,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Sync for KeychainTxOutIndex<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Sync for ChangeSet<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for Update",1,["bdk_chain::local_chain::Update"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Sync for TxGraph<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Sync for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Sync for ChangeSet<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>where
        A: Sync,
        F: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Sync for Persist<B, C>where
        B: Sync,
        C: Sync,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Sync for SpkIterator<D>where
        D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Sync for SpkTxOutIndex<I>where
        I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Sync for ChainPosition<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Sync for FullTxOut<A>where
        A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Sync for IndexedTxGraph<A, I>where
        A: Sync,
        I: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for ChangeSet<A, IA>where
        A: Sync,
        IA: Sync,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Sync for KeychainTxOutIndex<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Sync for ChangeSet<K>where
        K: Sync,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for Update",1,["bdk_chain::local_chain::Update"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Sync for TxGraph<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>where
        A: Sync,
        T: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Sync for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Sync for ChangeSet<A>where
        A: Sync,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Sync for TxAncestors<'g, A, F>where
        A: Sync,
        F: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>where
        A: Sync,
        F: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Sync for Persist<B, C>where
        B: Sync,
        C: Sync,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Sync for SpkIterator<D>where
        D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Sync for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Sync for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Sync for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Sync for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Sync for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Sync for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Sync for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Sync for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Sync for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Sync for Bnb<'c, S>where
        S: Sync,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !Sync for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl Sync for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl Sync for RelevantTxids",1,["bdk_electrum::electrum_ext::RelevantTxids"]],["impl Sync for ElectrumUpdate",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Sync for EntryIter<'t, T>where
        T: Sync,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Sync for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Sync for Store<'a, C>where
        C: Sync,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> Sync for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js index f0e3606b48..b3c3f46f35 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/marker/trait.Unpin.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl Unpin for Error",1,["bdk::error::Error"]],["impl Unpin for Error",1,["bdk::descriptor::error::Error"]],["impl Unpin for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl Unpin for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl Unpin for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl Unpin for Policy",1,["bdk::descriptor::policy::Policy"]],["impl Unpin for Condition",1,["bdk::descriptor::policy::Condition"]],["impl Unpin for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> Unpin for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> Unpin for P2Pkh<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> Unpin for P2Wpkh_P2Sh<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> Unpin for P2Wpkh<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> Unpin for P2TR<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> Unpin for Bip44<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> Unpin for Bip44Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> Unpin for Bip49<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> Unpin for Bip49Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> Unpin for Bip84<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> Unpin for Bip84Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> Unpin for Bip86<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> Unpin for Bip86Public<K>where
        K: Unpin,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> Unpin for DescriptorKey<Ctx>where
        Ctx: Unpin,
    ",1,["bdk::keys::DescriptorKey"]],["impl Unpin for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> Unpin for ExtendedKey<Ctx>where
        Ctx: Unpin,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> Unpin for GeneratedKey<K, Ctx>where
        Ctx: Unpin,
        K: Unpin,
    ",1,["bdk::keys::GeneratedKey"]],["impl Unpin for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl Unpin for KeyError",1,["bdk::keys::KeyError"]],["impl Unpin for KeychainKind",1,["bdk::types::KeychainKind"]],["impl Unpin for FeeRate",1,["bdk::types::FeeRate"]],["impl Unpin for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl Unpin for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl Unpin for Utxo",1,["bdk::types::Utxo"]],["impl Unpin for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl Unpin for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl Unpin for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl Unpin for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl Unpin for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl Unpin for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl Unpin for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl Unpin for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl Unpin for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> Unpin for SignerWrapper<S>where
        S: Unpin,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl Unpin for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl Unpin for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl Unpin for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl Unpin for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl Unpin for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl Unpin for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> Unpin for TxBuilder<'a, D, Cs, Ctx>where
        Cs: Unpin,
        Ctx: Unpin,
    ",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl Unpin for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl Unpin for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D> Unpin for Wallet<D>where
        D: Unpin,
    ",1,["bdk::wallet::Wallet"]],["impl Unpin for Update",1,["bdk::wallet::Update"]],["impl Unpin for ChangeSet",1,["bdk::wallet::ChangeSet"]],["impl Unpin for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl Unpin for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> Unpin for NewError<P>where
        P: Unpin,
    ",1,["bdk::wallet::NewError"]],["impl Unpin for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> Unpin for SpkTxOutIndex<I>where
        I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Unpin for ChainPosition<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Unpin for FullTxOut<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>where
        I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for ChangeSet<A, IA>where
        IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Unpin for KeychainTxOutIndex<K>where
        K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for ChangeSet<K>",1,["bdk_chain::keychain::ChangeSet"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for Update",1,["bdk_chain::local_chain::Update"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Unpin for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Unpin for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>where
        F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Unpin for Persist<B, C>where
        B: Unpin,
        C: Unpin,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Unpin for SpkIterator<D>where
        D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> Unpin for SpkTxOutIndex<I>where
        I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> Unpin for ChainPosition<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> Unpin for FullTxOut<A>where
        A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>where
        I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for ChangeSet<A, IA>where
        IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> Unpin for KeychainTxOutIndex<K>where
        K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for ChangeSet<K>",1,["bdk_chain::keychain::ChangeSet"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for Update",1,["bdk_chain::local_chain::Update"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl Unpin for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> Unpin for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> Unpin for TxAncestors<'g, A, F>where
        F: Unpin,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>where
        F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> Unpin for Persist<B, C>where
        B: Unpin,
        C: Unpin,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> Unpin for SpkIterator<D>where
        D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl Unpin for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl Unpin for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> Unpin for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl Unpin for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Unpin for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Unpin for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Unpin for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Unpin for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Unpin for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> Unpin for Bnb<'c, S>where
        S: Unpin,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> Unpin for BnbIter<'c, 'f, S>where
        S: Unpin,
        'c: 'f,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl Unpin for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl Unpin for RelevantTxids",1,["bdk_electrum::electrum_ext::RelevantTxids"]],["impl Unpin for ElectrumUpdate",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> Unpin for EntryIter<'t, T>where
        T: Unpin,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl Unpin for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> Unpin for Store<'a, C>where
        C: Unpin,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> Unpin for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 69102b19d0..e64ed039af 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl !RefUnwindSafe for Error",1,["bdk::error::Error"]],["impl RefUnwindSafe for Error",1,["bdk::descriptor::error::Error"]],["impl RefUnwindSafe for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl RefUnwindSafe for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl RefUnwindSafe for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl RefUnwindSafe for Policy",1,["bdk::descriptor::policy::Policy"]],["impl RefUnwindSafe for Condition",1,["bdk::descriptor::policy::Condition"]],["impl RefUnwindSafe for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> RefUnwindSafe for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> RefUnwindSafe for P2Pkh<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> RefUnwindSafe for P2Wpkh_P2Sh<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> RefUnwindSafe for P2Wpkh<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> RefUnwindSafe for P2TR<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> RefUnwindSafe for Bip44<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> RefUnwindSafe for Bip44Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> RefUnwindSafe for Bip49<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> RefUnwindSafe for Bip49Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> RefUnwindSafe for Bip84<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> RefUnwindSafe for Bip84Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> RefUnwindSafe for Bip86<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> RefUnwindSafe for Bip86Public<K>where
        K: RefUnwindSafe,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> RefUnwindSafe for DescriptorKey<Ctx>where
        Ctx: RefUnwindSafe,
    ",1,["bdk::keys::DescriptorKey"]],["impl RefUnwindSafe for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> RefUnwindSafe for ExtendedKey<Ctx>where
        Ctx: RefUnwindSafe,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> RefUnwindSafe for GeneratedKey<K, Ctx>where
        Ctx: RefUnwindSafe,
        K: RefUnwindSafe,
    ",1,["bdk::keys::GeneratedKey"]],["impl RefUnwindSafe for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl RefUnwindSafe for KeyError",1,["bdk::keys::KeyError"]],["impl RefUnwindSafe for KeychainKind",1,["bdk::types::KeychainKind"]],["impl RefUnwindSafe for FeeRate",1,["bdk::types::FeeRate"]],["impl RefUnwindSafe for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl RefUnwindSafe for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl RefUnwindSafe for Utxo",1,["bdk::types::Utxo"]],["impl RefUnwindSafe for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl RefUnwindSafe for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl RefUnwindSafe for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl RefUnwindSafe for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl RefUnwindSafe for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl RefUnwindSafe for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl RefUnwindSafe for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl RefUnwindSafe for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl RefUnwindSafe for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> RefUnwindSafe for SignerWrapper<S>where
        S: RefUnwindSafe,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl RefUnwindSafe for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl !RefUnwindSafe for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl RefUnwindSafe for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl RefUnwindSafe for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl RefUnwindSafe for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl RefUnwindSafe for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !RefUnwindSafe for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl RefUnwindSafe for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl RefUnwindSafe for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D = ()> !RefUnwindSafe for Wallet<D>",1,["bdk::wallet::Wallet"]],["impl RefUnwindSafe for Update",1,["bdk::wallet::Update"]],["impl RefUnwindSafe for ChangeSet",1,["bdk::wallet::ChangeSet"]],["impl RefUnwindSafe for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl RefUnwindSafe for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> RefUnwindSafe for NewError<P>where
        P: RefUnwindSafe,
    ",1,["bdk::wallet::NewError"]],["impl RefUnwindSafe for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> RefUnwindSafe for SpkTxOutIndex<I>where
        I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> RefUnwindSafe for ChainPosition<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> RefUnwindSafe for FullTxOut<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for ChangeSet<A, IA>where
        A: RefUnwindSafe,
        IA: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for ChangeSet<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for Update",1,["bdk_chain::local_chain::Update"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> RefUnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl RefUnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> RefUnwindSafe for ChangeSet<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> RefUnwindSafe for Persist<B, C>where
        B: RefUnwindSafe,
        C: RefUnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> RefUnwindSafe for SpkIterator<D>where
        D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> RefUnwindSafe for SpkTxOutIndex<I>where
        I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> RefUnwindSafe for ChainPosition<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> RefUnwindSafe for FullTxOut<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for ChangeSet<A, IA>where
        A: RefUnwindSafe,
        IA: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for ChangeSet<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for Update",1,["bdk_chain::local_chain::Update"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> RefUnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl RefUnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> RefUnwindSafe for ChangeSet<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> RefUnwindSafe for TxAncestors<'g, A, F>where
        A: RefUnwindSafe,
        F: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> RefUnwindSafe for Persist<B, C>where
        B: RefUnwindSafe,
        C: RefUnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> RefUnwindSafe for SpkIterator<D>where
        D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl RefUnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl RefUnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> RefUnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl RefUnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl RefUnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl RefUnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl RefUnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl RefUnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl RefUnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> RefUnwindSafe for Bnb<'c, S>where
        S: RefUnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !RefUnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl RefUnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl RefUnwindSafe for RelevantTxids",1,["bdk_electrum::electrum_ext::RelevantTxids"]],["impl RefUnwindSafe for ElectrumUpdate",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> RefUnwindSafe for EntryIter<'t, T>where
        T: RefUnwindSafe,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl !RefUnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> RefUnwindSafe for Store<'a, C>where
        C: RefUnwindSafe,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> !RefUnwindSafe for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 6db0aaf79c..75f88b3cab 100644 --- a/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/docs-rs/bdk/nightly/latest/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk":[["impl !UnwindSafe for Error",1,["bdk::error::Error"]],["impl UnwindSafe for Error",1,["bdk::descriptor::error::Error"]],["impl UnwindSafe for PkOrF",1,["bdk::descriptor::policy::PkOrF"]],["impl UnwindSafe for SatisfiableItem",1,["bdk::descriptor::policy::SatisfiableItem"]],["impl UnwindSafe for Satisfaction",1,["bdk::descriptor::policy::Satisfaction"]],["impl UnwindSafe for Policy",1,["bdk::descriptor::policy::Policy"]],["impl UnwindSafe for Condition",1,["bdk::descriptor::policy::Condition"]],["impl UnwindSafe for PolicyError",1,["bdk::descriptor::policy::PolicyError"]],["impl<'a> UnwindSafe for BuildSatisfaction<'a>",1,["bdk::descriptor::policy::BuildSatisfaction"]],["impl<K> UnwindSafe for P2Pkh<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2Pkh"]],["impl<K> UnwindSafe for P2Wpkh_P2Sh<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh_P2Sh"]],["impl<K> UnwindSafe for P2Wpkh<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2Wpkh"]],["impl<K> UnwindSafe for P2TR<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::P2TR"]],["impl<K> UnwindSafe for Bip44<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip44"]],["impl<K> UnwindSafe for Bip44Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip44Public"]],["impl<K> UnwindSafe for Bip49<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip49"]],["impl<K> UnwindSafe for Bip49Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip49Public"]],["impl<K> UnwindSafe for Bip84<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip84"]],["impl<K> UnwindSafe for Bip84Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip84Public"]],["impl<K> UnwindSafe for Bip86<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip86"]],["impl<K> UnwindSafe for Bip86Public<K>where
        K: UnwindSafe,
    ",1,["bdk::descriptor::template::Bip86Public"]],["impl<Ctx> UnwindSafe for DescriptorKey<Ctx>where
        Ctx: UnwindSafe,
    ",1,["bdk::keys::DescriptorKey"]],["impl UnwindSafe for ScriptContextEnum",1,["bdk::keys::ScriptContextEnum"]],["impl<Ctx> UnwindSafe for ExtendedKey<Ctx>where
        Ctx: UnwindSafe,
    ",1,["bdk::keys::ExtendedKey"]],["impl<K, Ctx> UnwindSafe for GeneratedKey<K, Ctx>where
        Ctx: UnwindSafe,
        K: UnwindSafe,
    ",1,["bdk::keys::GeneratedKey"]],["impl UnwindSafe for PrivateKeyGenerateOptions",1,["bdk::keys::PrivateKeyGenerateOptions"]],["impl UnwindSafe for KeyError",1,["bdk::keys::KeyError"]],["impl UnwindSafe for KeychainKind",1,["bdk::types::KeychainKind"]],["impl UnwindSafe for FeeRate",1,["bdk::types::FeeRate"]],["impl UnwindSafe for LocalUtxo",1,["bdk::types::LocalUtxo"]],["impl UnwindSafe for WeightedUtxo",1,["bdk::types::WeightedUtxo"]],["impl UnwindSafe for Utxo",1,["bdk::types::Utxo"]],["impl UnwindSafe for Excess",1,["bdk::wallet::coin_selection::Excess"]],["impl UnwindSafe for CoinSelectionResult",1,["bdk::wallet::coin_selection::CoinSelectionResult"]],["impl UnwindSafe for LargestFirstCoinSelection",1,["bdk::wallet::coin_selection::LargestFirstCoinSelection"]],["impl UnwindSafe for OldestFirstCoinSelection",1,["bdk::wallet::coin_selection::OldestFirstCoinSelection"]],["impl UnwindSafe for BranchAndBoundCoinSelection",1,["bdk::wallet::coin_selection::BranchAndBoundCoinSelection"]],["impl UnwindSafe for FullyNodedExport",1,["bdk::wallet::export::FullyNodedExport"]],["impl UnwindSafe for SignerId",1,["bdk::wallet::signer::SignerId"]],["impl UnwindSafe for SignerError",1,["bdk::wallet::signer::SignerError"]],["impl UnwindSafe for SignerContext",1,["bdk::wallet::signer::SignerContext"]],["impl<S> UnwindSafe for SignerWrapper<S>where
        S: UnwindSafe,
    ",1,["bdk::wallet::signer::SignerWrapper"]],["impl UnwindSafe for SignerOrdering",1,["bdk::wallet::signer::SignerOrdering"]],["impl !UnwindSafe for SignersContainer",1,["bdk::wallet::signer::SignersContainer"]],["impl UnwindSafe for SignOptions",1,["bdk::wallet::signer::SignOptions"]],["impl UnwindSafe for TapLeavesOptions",1,["bdk::wallet::signer::TapLeavesOptions"]],["impl UnwindSafe for CreateTx",1,["bdk::wallet::tx_builder::CreateTx"]],["impl UnwindSafe for BumpFee",1,["bdk::wallet::tx_builder::BumpFee"]],["impl<'a, D, Cs, Ctx> !UnwindSafe for TxBuilder<'a, D, Cs, Ctx>",1,["bdk::wallet::tx_builder::TxBuilder"]],["impl UnwindSafe for TxOrdering",1,["bdk::wallet::tx_builder::TxOrdering"]],["impl UnwindSafe for ChangeSpendPolicy",1,["bdk::wallet::tx_builder::ChangeSpendPolicy"]],["impl<D = ()> !UnwindSafe for Wallet<D>",1,["bdk::wallet::Wallet"]],["impl UnwindSafe for Update",1,["bdk::wallet::Update"]],["impl UnwindSafe for ChangeSet",1,["bdk::wallet::ChangeSet"]],["impl UnwindSafe for AddressIndex",1,["bdk::wallet::AddressIndex"]],["impl UnwindSafe for AddressInfo",1,["bdk::wallet::AddressInfo"]],["impl<P> UnwindSafe for NewError<P>where
        P: UnwindSafe,
    ",1,["bdk::wallet::NewError"]],["impl UnwindSafe for InsertTxError",1,["bdk::wallet::InsertTxError"]]], -"bdk_chain":[["impl<I> UnwindSafe for SpkTxOutIndex<I>where
        I: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> UnwindSafe for ChainPosition<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> UnwindSafe for FullTxOut<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for ChangeSet<A, IA>where
        A: RefUnwindSafe,
        IA: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>where
        K: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> UnwindSafe for ChangeSet<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for Update",1,["bdk_chain::local_chain::Update"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> UnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl UnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> UnwindSafe for ChangeSet<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: UnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> UnwindSafe for Persist<B, C>where
        B: UnwindSafe,
        C: UnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> UnwindSafe for SpkIterator<D>where
        D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], +"bdk_chain":[["impl<I> UnwindSafe for SpkTxOutIndex<I>where
        I: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<A> UnwindSafe for ChainPosition<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeAnchor",1,["bdk_chain::chain_data::ConfirmationTimeAnchor"]],["impl<A> UnwindSafe for FullTxOut<A>where
        A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>where
        A: RefUnwindSafe,
        I: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for ChangeSet<A, IA>where
        A: RefUnwindSafe,
        IA: UnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>where
        K: UnwindSafe + RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> UnwindSafe for ChangeSet<K>where
        K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::ChangeSet"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for Update",1,["bdk_chain::local_chain::Update"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for InsertBlockError",1,["bdk_chain::local_chain::InsertBlockError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl<A> UnwindSafe for TxGraph<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>where
        A: RefUnwindSafe,
        T: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl UnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl<A> UnwindSafe for ChangeSet<A>where
        A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<'g, A, F> UnwindSafe for TxAncestors<'g, A, F>where
        A: RefUnwindSafe,
        F: UnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>where
        A: RefUnwindSafe,
        F: UnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<B, C> UnwindSafe for Persist<B, C>where
        B: UnwindSafe,
        C: UnwindSafe,
    ",1,["bdk_chain::persist::Persist"]],["impl<D> UnwindSafe for SpkIterator<D>where
        D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]]], "bdk_coin_select":[["impl UnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl UnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl<'a> UnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl UnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl UnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl UnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl UnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl UnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl UnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl<'c, S> UnwindSafe for Bnb<'c, S>where
        S: UnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]],["impl<'c, 'f, S> !UnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl UnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]]], "bdk_electrum":[["impl UnwindSafe for RelevantTxids",1,["bdk_electrum::electrum_ext::RelevantTxids"]],["impl UnwindSafe for ElectrumUpdate",1,["bdk_electrum::electrum_ext::ElectrumUpdate"]]], "bdk_file_store":[["impl<'t, T> !UnwindSafe for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl !UnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'a, C> UnwindSafe for Store<'a, C>where
        C: UnwindSafe,
    ",1,["bdk_file_store::store::Store"]],["impl<'a> !UnwindSafe for FileError<'a>",1,["bdk_file_store::FileError"]]], diff --git a/docs-rs/bdk/nightly/latest/search-index.js b/docs-rs/bdk/nightly/latest/search-index.js index c45e154b4b..96ce0ccb9a 100644 --- a/docs-rs/bdk/nightly/latest/search-index.js +++ b/docs-rs/bdk/nightly/latest/search-index.js @@ -1,6 +1,6 @@ var searchIndex = JSON.parse('{\ "bdk":{"doc":"bdk","t":[13,13,13,13,13,4,13,3,13,13,13,13,13,2,13,13,13,13,13,13,4,13,3,13,13,13,13,13,13,13,2,13,13,13,13,2,13,4,8,2,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,0,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,0,11,12,11,11,11,0,11,12,11,11,2,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,10,5,11,11,11,11,11,11,0,11,12,12,12,12,12,12,13,6,4,2,4,6,8,6,8,16,4,3,13,13,2,8,4,13,13,6,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,10,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,10,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,5,5,5,5,13,13,4,13,13,13,13,13,13,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,4,13,3,6,13,13,6,13,13,13,13,13,13,13,13,13,13,13,4,3,4,13,13,13,13,13,4,4,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,3,3,3,3,3,3,3,3,8,6,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,8,4,4,4,16,16,8,4,13,8,8,3,8,13,13,13,16,4,6,13,13,13,13,13,16,13,3,13,8,4,13,13,13,3,3,4,3,13,6,13,13,13,5,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,5,11,10,11,11,5,10,11,11,12,12,11,11,11,11,11,11,10,12,11,11,11,11,11,10,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,8,10,10,10,4,3,3,3,13,13,4,8,13,13,4,13,13,3,3,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,10,11,11,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,5,12,12,3,13,8,3,6,4,3,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,5,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,3,6,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,13,13,13,13,13,13,8,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,8,4,4,4,3,3,3,13,4,8,13,11,12,12,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,10,11,11,11,10,11,12,11,12,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,13,3,13,13,4,3,13,13,3,8,4,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Bip32","BnBNoExactMatch","BnBTotalTriesExceeded","ChecksumMismatch","Descriptor","Error","External","FeeRate","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","Foreign","Generic","HdKeyPaths","InsufficientFunds","Internal","InvalidOutpoint","InvalidPolicyPathError","IrreplaceableTransaction","Key","KeychainKind","Local","LocalUtxo","Miniscript","MiniscriptPsbt","MissingKeyOrigin","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","Psbt","SignOptions","Signer","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","TxBuilder","UnknownUtxo","Utxo","Vbytes","Wallet","WeightedUtxo","as_byte","as_ref","as_sat_per_vb","base32_len","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","check_base32","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","confirmation_time","default","default_min_relay_fee","derivation_index","descriptor","descriptor","deserialize","deserialize","eq","eq","eq","eq","eq","fee_vb","fee_wu","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fragment","from","from","from","from","from","from","from","from","from","from","from","from","from","from_btc_per_kvb","from_sat_per_kvb","from_sat_per_kwu","from_sat_per_vb","from_vb","from_wu","hash","hash","into","into","into","into","into","into","is_spent","keychain","keys","outpoint","outpoint","partial_cmp","partial_cmp","provide","psbt","sat_per_kwu","satisfaction_weight","serialize","serialize","signer","sub","template","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_into","try_into","try_into","try_into","try_into","try_into","txout","txout","type_id","type_id","type_id","type_id","type_id","type_id","utxo","vbytes","version","vzip","vzip","vzip","vzip","vzip","vzip","wallet","write_base32","available","needed","required","required","outpoint","psbt_input","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Policy","ScriptContext","Segwitv0","Sh","Single","TapKeyOrigins","Tr","Wpkh","Wsh","XPub","address","as_enum","as_enum","as_inner","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_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","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","calc_checksum_bytes","get_checksum","get_checksum_bytes","Base58","Bip32","Error","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","provide","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","provide","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","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","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","generate","generate_default","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_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","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","provide","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","AddressIndex","AddressInfo","Balance","ChangeSet","ConfirmationHeightCannotBeGreaterThanTip","Descriptor","InsertTxError","IsDust","LastUnused","New","NewError","Peek","Persist","Update","Wallet","add","add_signer","address","append","apply_update","as_ref","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","checkpoints","clone","clone","clone","clone_into","clone_into","clone_into","coin_selection","commit","confirmed","default","default","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","deserialize","eq","eq","eq","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","get_address","get_balance","get_descriptor_for_keychain","get_internal_address","get_psbt_input","get_signers","get_tx","get_utxo","graph","immature","index","indexed_tx_graph","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","is_dust","is_empty","is_mine","keychain","keychains","last_active_indices","latest_checkpoint","list_unspent","local_chain","network","new","new_no_persist","next_derivation_index","policies","provide","public_descriptor","secp_ctx","sent_and_received","serialize","serialize","sign","signer","spk_index","spks_of_all_keychains","spks_of_keychain","staged","to_owned","to_owned","to_owned","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","tip_height","tx_height","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Excess","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","amount","change_fee","dust_threshold","fee","remaining_amount","FullyNodedExport","WalletExport","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","from","from_str","into","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Segwitv0","SighashError","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","provide","remove","remove_partial_sigs","sign_input","sign_input","sign_input","sign_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","Bip69Lexicographic","BumpFee","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","CreateTx","OnlyChange","Shuffle","TxBuilder","TxBuilderContext","TxOrdering","Untouched","add_data","add_foreign_utxo","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","allow_shrinking","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","current_height","default","default","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip"],"q":["bdk","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::Error","","","","bdk::Utxo","","bdk::descriptor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::checksum","","","","bdk::descriptor::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::descriptor::policy::BuildSatisfaction","","","bdk::descriptor::policy::Satisfaction","","","","","","","","","","","bdk::descriptor::policy::SatisfiableItem","","","","","","","","","","bdk::descriptor::template","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::keys","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::psbt","","","","bdk::wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::InsertTxError","","bdk::wallet::coin_selection","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::coin_selection::Excess","","","","","bdk::wallet::export","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk::wallet::signer::SignerContext","bdk::wallet::tx_builder","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["BIP32 error","Branch and bound coin selection tries to avoid needing a …","Branch and bound coin selection possible attempts with …","Descriptor checksum mismatch","Error related to the parsing and usage of descriptors","Errors that can be thrown by the Wallet","External keychain, used for deriving recipient addresses.","Fee rate","When bumping a tx the fee rate requested is lower than …","Node doesn’t have data to estimate a fee rate","When bumping a tx the absolute fee requested is lower than …","A UTXO owned by another wallet.","Generic error","","Wallet’s UTXO set is not enough to cover recipient’s …","Internal keychain, used for deriving change addresses.","Requested outpoint doesn’t exist in the tx (vout greater …","Error while extracting and manipulating policies","Trying to replace a tx that has a sequence >= 0xFFFFFFFE","Error while working with keys","Types of keychains","A UTXO owned by the local wallet.","An unspent output owned by a Wallet.","Miniscript error","Miniscript PSBT error","In order to use the TxBuilder::add_global_xpubs option …","Cannot build a tx without recipients","manually_selected_only option is selected but no utxo has …","Output created is under the dust limit, 546 satoshis","Partially signed bitcoin transaction error","","Signing error","Spending policy is not compatible with this KeychainKind","Happens when trying to bump a transaction that is already …","Thrown when a tx is not found in the internal database","","Happens when trying to spend an UTXO that is not in the …","An unspent transaction output (UTXO).","Trait implemented by types that can be used to measure …","","A Utxo with its satisfaction_weight.","Return KeychainKind as a byte","","Return the value as satoshi/vbyte","","","","","","","","","","","","","","","","","","","","","","","","","","","The confirmation time for transaction containing this utxo","","Create a new FeeRate with the default min relay fee value","The derivation index for the script pubkey in the wallet","Descriptors","Macro to write full descriptors with code","","","","","","","","Calculate absolute fee in Satoshis using size in virtual …","Calculate absolute fee in Satoshis using size in weight …","","","","","","","","Macro to write descriptor fragments with code","","Returns the argument unchanged.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Create a new instance of FeeRate given a float fee rate in …","Calculate fee rate from fee and vbytes.","Calculate fee rate from fee and weight units (wu).","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Whether this UTXO is spent or not","Type of keychain","Key formats","Get the location of the UTXO","Reference to a transaction output","","","","Additional functions on the rust-bitcoin …","Return the value as satoshi/kwu","The weight of the witness data and scriptSig expressed in …","","","","","","","","","","","","","","","","","","","","","","","","Get the TxOut of the UTXO","Transaction output","","","","","","","The UTXO","Convert weight units to virtual bytes.","Get the version of BDK at runtime","","","","","","","Wallet","","Sats available for spending","Sats needed for some transaction","Required fee rate (satoshi/vbyte)","Required fee absolute value (satoshi)","The location of the output.","The information about the input we require to add it to a …","A raw scriptpubkey (including pay-to-pubkey) under Legacy …","Alias for a Descriptor that contains extended derived keys","Script descriptor","","The descriptor pubkey, either a single pubkey or an xpub.","Alias for a Descriptor that can contain extended keys …","Trait implemented on Descriptors to add a method to …","Alias for the type of maps that represent derivation paths …","Trait for types which can be converted into an …","The consensus key associated with the type. Must be a …","Legacy ScriptContext To be used as P2SH scripts For …","Top-level script AST type","Multiple extended public keys.","Pay-to-PubKey-Hash","","The ScriptContext for Miniscript. Additional type …","Segwitv0 ScriptContext","Pay-to-ScriptHash(includes nested wsh/wpkh/sorted multi)","Single public key.","Alias for the type of maps that represent taproot key …","Pay-to-Taproot","Pay-to-Witness-PubKey-Hash","Pay-to-Witness-ScriptHash with Segwitv0 context","Extended public key (xpub).","Computes the Bitcoin address of the descriptor, if one …","","","Get a reference to the inner AstElem representing the root …","Replaces all wildcards (i.e. /*) in the descriptor with a …","","","","","","","","","Enumerates all child nodes of the current AST node (self) …","","Depending on script Context, some of the Terminals might …","","","Depending on script Context, some of the script resource …","","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","","","Policy rules at the Miniscript satisfaction time. It is …","","","Check the consensus + policy(if not disabled) rules …","Each context has slightly different rules on what Pks are …","","","Depending on ScriptContext, fragments can be malleable. …","","","Check whether the given satisfaction is valid under the …","","","Descriptor checksum","","","","","","","","","","","","","Whether the given miniscript contains a raw pkh fragment","Deprecated name for Self::at_derivation_index.","Convert all the public keys in the descriptor to …","Convert all the public keys in the descriptor to …","Get the DescriptorType of Descriptor","","","","Encode as a Bitcoin script","","","","","Descriptor errors","Computes the the underlying script before any hashing is …","Additional information helpful for extra analysis.","Check whether the miniscript follows the given Extra …","Extract the spending policy","","","Utility method for deriving the descriptor at each index …","","","","","","","","","Returns the argument unchanged.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Add type information(Type and Extdata) to Miniscript based …","Create a new Miniscript from a Terminal node and a Type …","","Parse a Miniscript from string and perform sanity checks …","Attempt to parse an Miniscripts that don’t follow the …","Attempt to parse an insane(scripts don’t clear sanity …","Parse an expression tree into a descriptor.","Parse an expression tree into a Miniscript. As a general …","Returns child node with given index, if any","Returns Option::Some with cloned n’th public key from …","Returns satisfying non-malleable witness and scriptSig to …","Returns a possilbly mallable satisfying non-malleable …","Whether the miniscript contains a combination of timelocks","Whether the miniscript has repeated Pk or Pkh","Whether or not the descriptor has any wildcards i.e. /*.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Extracts the AstElem representing the root of the …","Get as many descriptors as different paths in this …","Convert to wallet descriptor","","Whether or not the descriptor has any wildcards","Whether this descriptor contains a key that has multiple …","Whether the miniscript is malleable","Creates a new Iter iterator that will iterate over all …","Creates a new PkIter iterator that will iterate over all …","","","Lifting corresponds conversion of miniscript into Policy […","Depending on script context, the size of a satifaction …","","","Maximum size, in bytes, of a satisfying witness. For …","Computes an upper bound on the weight of a satisfying …","Maximum number of witness elements used to satisfy the …","Computes an upper bound on the difference between a …","Local helper function to display error messages with …","","","Create a new bare descriptor from witness script Errors …","Create a new pk descriptor","Create a new PkH descriptor","Create a new sh for a given redeem script Errors when …","Create a new sh sortedmulti descriptor with threshold k …","Create a new sh wrapper for the given wpkh descriptor","Create a new sh wrapper for the given wsh descriptor","Create a new sh wrapped wpkh from Pk. Errors when …","Create a new sh wrapped wsh descriptor with witness script …","Create a new sh wrapped wsh sortedmulti descriptor from …","Create new tr descriptor Errors when miniscript exceeds …","Create a new Wpkh descriptor Will return Err if …","Create a new wsh descriptor from witness script Errors …","Create a new wsh sorted multi descriptor Errors when …","A node in the Abstract Syntax Tree(","Other top level checks that are context specific","Attempt to parse a Script into Miniscript representation.","Parse a descriptor that may contain secret keys","Attempt to parse an insane(scripts don’t clear sanity …","Attempt to parse an miniscript with extra features that …","","","","","Get the len of public key when serialized based on context …","","","Descriptor policy","Whether all spend paths of miniscript require a signature","Checks whether the descriptor is safe.","Check whether the underlying Miniscript is safe under the …","Attempts to produce a non-malleable satisfying witness and …","Attempt to produce non-malleable satisfying witness for the","Attempt to produce a malleable satisfying witness for the …","Computes the scriptCode of a transaction output.","Computes the scriptpubkey of the descriptor.","Size, in bytes of the script-pubkey. If this Miniscript is …","","","The type of signature required for satisfaction","","","Descriptor templates","","","","","","","Serialize a descriptor to string with its secret keys","Check top level consensus rules.","Check whether the top-level is type B","Converts a descriptor using abstract keys to one using …","Translates a struct from one generic to another where the …","","","","","","","","","The correctness and malleability type information for the …","","","","","Computes the scriptSig that will be in place for an …","","","","","Whether the miniscript can exceed the resource …","Compute the checksum of a descriptor, excludes any …","Compute the checksum bytes of a descriptor, excludes any …","Compute the checksum of a descriptor","Compute the checksum bytes of a descriptor","Error during base58 decoding","BIP32 error","Errors related to the parsing and usage of descriptors","The descriptor contains hardened derivation steps on …","Hex decoding error","Invalid byte found in the descriptor checksum","The provided descriptor doesn’t match its checksum","Invalid HD Key path, such as having a wildcard but a …","Error thrown while working with keys","Miniscript error","The descriptor contains multipath keys","Key-related error","Error while extracting and manipulating policies","","","","","","Returns the argument unchanged.","","","","","","","Calls U::from(self).","","","","","","","Absolute timeclock timestamp","Can not add to an item that is Satisfaction::None or …","Can not add to an item that is …","Options to build the satisfaction field in the policy","Can satisfy the policy item","An extra condition that must be satisfied but that is out …","Type for a map of sets of Condition items keyed by each set…","ECDSA Signature for a raw public key","An extended key fingerprint","Type for a map of folded sets of Condition items keyed by …","SHA256 then RIPEMD160 preimage hash","Double SHA256 preimage hash","Incompatible conditions (not currently used)","Index out of range for an item to satisfy a …","Can not merge CSV or timelock values unless both are less …","Multi-signature public keys with threshold count","Cannot satisfy or contribute to the policy item","Don’t generate satisfaction field","Not enough items are selected to satisfy a …","Only a partial satisfaction of some kind of threshold …","Can reach the threshold of some kind of threshold policy","A unique identifier for a key","Descriptor spending policy","Errors that can happen while extracting and manipulating …","Analyze the given PSBT to check for existing signatures","Like Psbt variant and also check for expired timelocks","A legacy public key","Relative timelock locktime","RIPEMD160 preimage hash","Represent if and how much a policy item is satisfied by …","An item that needs to be satisfied","Schnorr Signature for a raw public key","SHA256 preimage hash","Threshold items with threshold count","A x-only public key","","","","","","","","","","","","","","","","","","","","","","","","","","","How the wallet’s descriptor can satisfy this policy node","Optional CheckSequenceVerify condition","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return the conditions that are set by the spending policy …","","","Returns a unique id for the SatisfiableItem","Identifier for this policy node","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the SatisfiableItem is a leaf item","Returns whether the Satisfaction is a leaf item","Returns true if there are no extra conditions to verify","Type of this policy node","","","Return whether or not a specific path in the policy tree …","How much a given PSBT already satisfies this policy node …","","","","","","Optional timelock condition","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current blockchain height","The highest confirmation height between the inputs CSV …","Given PSBT","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","Extra conditions that also need to be satisfied","The items that can be satisfied by the descriptor or are …","The items that can be satisfied by the descriptor","Threshold","Threshold","Total number of items","Total number of items","Whether the items are sorted in lexicographic order (used …","Whether the items are sorted in lexicographic order (used …","The digest value","The digest value","The digest value","The digest value","The policy items","The raw public key or extended key fingerprint","The required threshold count","The required threshold count","The timelock value","The timelock value","BIP44 template. Expands to pkh(key/44'/{0,1}'/0'/{0,1}/*)","BIP44 public template. Expands to pkh(key/{0,1}/*)","BIP49 template. Expands to …","BIP49 public template. Expands to sh(wpkh(key/{0,1}/*))","BIP84 template. Expands to wpkh(key/84'/{0,1}'/0'/{0,1}/*)","BIP84 public template. Expands to wpkh(key/{0,1}/*)","BIP86 template. Expands to tr(key/86'/{0,1}'/0'/{0,1}/*)","BIP86 public template. Expands to tr(key/{0,1}/*)","Trait for descriptor templates that can be built into a …","Type alias for the return type of DescriptorTemplate, …","P2PKH template. Expands to a descriptor pkh(key)","P2TR template. Expands to a descriptor tr(key)","P2WPKH template. Expands to a descriptor wpkh(key)","P2WPKH-P2SH template. Expands to a descriptor sh(wpkh(key))","","","","","","","","","","","","","","","","","","","","","","","","","Build the complete descriptor","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","BIP32 error","Trait for keys that can be derived.","Container for public or secret keys","The descriptor pubkey, either a single pubkey or an xpub.","The descriptor secret key, either a single private key or …","Type specifying the amount of entropy required e.g. [u8;32]","Returned error in case of failure","Trait that adds extra useful methods to ScriptContexts","Enum for extended keys that can be either xprv or xpub","A bitcoin public key (compressed or uncompressed).","Trait that allows generating a key with the default options","Trait for keys that can be generated","Output of a GeneratableKey key generation","Trait for objects that can be turned into a public or …","The key has an invalid checksum","The key is not valid for the given network","The key cannot exist in the given script context","The consensus key associated with the type. Must be a …","Errors thrown while working with keys","Alias type for a map of public key to secret key","Legacy scripts","Custom error message","Miniscript error","Multiple extended private keys.","Multiple extended public keys.","Extra options required by the generate_with_entropy","A private extended key, aka an xprv","Options for generating a PrivateKey","A public extended key, aka an xpub","The ScriptContext for Miniscript. Additional type …","Enum representation of the known valid ScriptContexts","Segwitv0 scripts","Single public key.","Single private key.","A descriptor bitcoin::PrivateKey with optional origin …","A descriptor SinglePubKey with optional origin information.","Single public key without any origin or range information.","Contents of a “sortedmulti” descriptor","Taproot scripts","Set of valid networks for a key","An xonly public key.","Extended private key (xpriv).","Extended public key (xpub).","Create a set containing mainnet, testnet, signet, and …","Returns the ScriptContext as a ScriptContextEnum","Replaces any wildcard (i.e. /*) in the key with a …","","","","","","","","","","","","","","","","","","","","","","","","","Depending on script Context, some of the Terminals might …","Depending on script Context, some of the script resource …","Check the consensus + policy(if not disabled) rules that …","Consensus rules at the Miniscript satisfaction time. It is …","Policy rules at the Miniscript satisfaction time. It is …","Check the consensus + policy(if not disabled) rules …","Each context has slightly different rules on what Pks are …","Depending on ScriptContext, fragments can be malleable. …","Check whether the given satisfaction is valid under the …","","","","","","","","","","","","","","","","","","","","","","","Whether the generated key should be “compressed” or not","","","Deprecated name for Self::at_derivation_index.","","Encode as a Bitcoin script","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Create an instance given a public key and a set of valid …","Create an instance given a secret key and a set of valid …","","","Parse an expression tree into a SortedMultiVec","Full path, from the master key","Generate a key given the options with a random entropy","Generate a key with the default options and a random …","Generate a key given the extra options and the entropy","Generate a key with the default options and a given entropy","Return whether or not the key contains the private data","Whether or not the key has a wildcard","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Turn the key into a DescriptorKey within the requested …","Consume self and turn it into a DescriptorKey by adding …","","","","","","Consume self and turn it into an ExtendedKey","","","Consumes self and returns the key","Get as many keys as derivation paths in this key.","Get as many keys as derivation paths in this key.","Transform the ExtendedKey into an ExtendedPrivKey for the …","Transform the ExtendedKey into an ExtendedPubKey for the …","Whether or not the key has a wildcard","Returns whether the script context is Legacy","Returns whether the script context is …","Whether or not this key has multiple derivation paths.","Whether or not this key has multiple derivation paths.","Returns whether the script context is Segwitv0","Returns whether the script context is …","Returns whether the script context is Tap, aka Taproot or …","Returns whether the script context is …","","","signatures required","The public key.","The private key.","","Create a set only containing mainnet","The fingerprint of the master key associated with this …","Depending on script context, the size of a satifaction …","Maximum size, in bytes, of a satisfying witness. In …","Maximum number of witness elements used to satisfy the …","Compute the intersection of two sets","Local helper function to display error messages with …","Create a new instance of SortedMultiVec given a list of …","","Origin information (fingerprint and derivation path).","Origin information (fingerprint and derivation path).","Other top level checks that are context specific","Override the computed set of valid networks","","","","","Get the len of public key when serialized based on context …","public keys inside sorted Multi","","utility function to sanity a sorted multi vec","Attempt to produce a satisfying witness for the witness …","Size, in bytes of the script-pubkey. If this Miniscript is …","","The type of signature required for satisfaction","Create Terminal::Multi containing sorted pubkeys","Create a set containing testnet and regtest","","","","","","","","","","Returns the public version of this key.","","","","","Check top level consensus rules.","Check whether the top-level is type B","This will panic if fpk returns an uncompressed key when …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Trait to add functions to extract utxos and calculate fees.","The total transaction fee amount, sum of input amounts …","The transaction’s fee rate. This value will only be …","Get the TxOut for the specified input index, if it doesn’…","The address index selection strategy to use to derived an …","A derived address and the index it was found at. For …","Balance, differentiated into various categories.","The changes made to a wallet by applying an Update.","The error variant that occurs when the caller attempts to …","There was problem with the descriptors passed in","An error that may occur when inserting a transaction into …","Trait to check if a value is below the dust limit. We are …","Return the address for the current descriptor index if it …","Return a new address after incrementing the current …","Error returned from Wallet::new","Return the address for a specific descriptor index. Does …","We were unable to load the wallet’s data from the …","An update to Wallet.","A Bitcoin wallet","","Add an external signer","Address","","Applies an update to the wallet and stages the changes …","","","","","","","","","","","","","","","","","","Bump the fee of a transaction previously created with this …","Start building a transaction.","Calculates the fee of a given transaction. Returns 0 if tx …","Calculate the FeeRate for a given transaction.","Informs the wallet that you no longer intend to broadcast …","Update for the wallet’s internal LocalChain.","Changes to the LocalChain.","Get all the checkpoints the wallet is currently storing …","","","","","","","Coin selection","Commits all currently staged changed to the persistence …","Confirmed and immediately spendable balance","","","","","The derivation index of this wallet. It will return None …","Finds how the wallet derived the script pubkey spk.","Return the checksum of the public descriptor associated to …","","","","","","Wallet export","Finalize a PSBT, i.e., for each input determine if …","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Return a derived address using the external descriptor, …","Return the balance, separated into available, …","Returns the descriptor used to create addresses for a …","Return a derived address using the internal (change) …","get the corresponding PSBT Input for a LocalUtxo","Get the signers","Get a single transaction from the wallet as a CanonicalTx …","Returns the utxo owned by this wallet corresponding to …","Update for the wallet’s internal TxGraph.","All coinbase outputs not yet matured","Child index of this address","Changes to IndexedTxGraph.","Add a new checkpoint to the wallet’s internal view of …","Add a transaction to the wallet’s internal view of the …","Inserts a TxOut at OutPoint into the wallet’s …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Check whether or not a value is below dust limit","","Return whether or not a script is part of this wallet …","Type of keychain","Iterator over all keychains in this wallet","Contains the last active derivation indices per keychain (K…","Returns the latest checkpoint.","Return the list of unspent outputs of this wallet","Get a reference to the inner LocalChain.","Get the Bitcoin network the wallet is using.","Create a wallet from a descriptor (and an optional …","Creates a wallet that does not persist data.","The index of the next address that you would get if you …","Return the spending policies for the wallet’s descriptor","","Return the “public” version of the wallet’s …","Return the secp256k1 context used for all signing …","Computes total input value going from script pubkeys in …","","","Sign a transaction with all the wallet’s signers, in the …","Generalized signers","Get a reference to the inner KeychainTxOutIndex.","Returns a iterators of all the script pubkeys for the …","Gets an iterator over all the script pubkeys in a single …","Returns the changes that will be staged with the next call …","","","","","","","Get the whole balance visible to the wallet.","Iterate over the transactions in the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","","","","","","","","","","","Transaction builder","Get a reference to the inner TxGraph.","","","","","","","","","Unconfirmed UTXOs received from an external wallet","","","","","","","","","Deterministically generate a unique name given the …","The internal chain’s tip height.","The introduced transaction’s confirmation height.","Branch and bound coin selection","It’s possible to create spendable output from excess …","Trait for generalized coin selection algorithms","Result of a successful coin selection","Default coin selection algorithm used by TxBuilder if not …","Remaining amount after performing coin selection","Simple and dumb coin selection","It’s not possible to create spendable output from excess …","OldestFirstCoinSelection always picks the utxo with the …","","","","","","","","","","","","","","","","","Perform the coin selection","","","","Decide if change can be created","","","","Remaining amount after deducing fees and outgoing outputs","Total fee amount for the selected utxos in satoshis","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The total value of the inputs selected from the local …","Create new instance with target size for change output","List of outputs selected for use as inputs","The total value of the inputs selected.","","","","","","","","","","","","","","","","","","","","","","","","Effective amount available to create change after …","The calculated fee for the drain TxOut with the selected …","Threshold to consider amount as dust for this particular …","The deducted change output fee","Exceeding amount of current selection over outgoing value …","Structure that contains the export of a wallet","Alias for FullyNodedExport","Earliest block to rescan when looking for the wallet’s …","","","Return the internal descriptor, if present","Return the external descriptor","","Export a wallet","","Returns the argument unchanged.","","Calls U::from(self).","Arbitrary label for the wallet","","","","","","","The signer will sign all the leaves it has a key for.","Dummy identifier","The signer won’t sign the specified leaves.","The fingerprint of a BIP32 extended key","The signer won’t sign leaves other than the ones …","Input index is out of range","PSBT Input signer","The private key in use has the right fingerprint but …","The non_witness_utxo specified is invalid","Invalid SIGHASH for the signing context in use","Legacy context","The fingerprint and derivation path are missing from the …","The private key is missing for the required public key","The non_witness_utxo field of the transaction is required …","The witness_script field of the transaction is required to …","The witness_utxo field of the transaction is required to …","The psbt contains a non-SIGHASH_ALL sighash in one of its …","The signer won’t sign any leaf.","Bitcoin HASH160 (RIPEMD160 after SHA256) hash of an ECDSA …","Segwit v0 context (BIP 143)","Error while computing the hash to sign","Options for a software signer","Common signer methods","Signing context","Signing error","Identifier of a signer in the SignersContainers. Used as a …","Defines the order in which signers are called","Wrapper structure to pair a signer with its context","Container for multiple signers","Taproot context (BIP 340)","Customize which taproot script-path leaves the signer …","PSBT signer","The user canceled the operation","Adds an external signer to the container for the specified …","Whether the signer should use the sighash_type set in the …","Whether we should grind ECDSA signature to ensure signing …","Create a map of public keys to secret keys","Whether the wallet should assume a specific height has …","","","","","","","","","","","","","","","","","Build a new signer container from a KeyMap","","","","","","","","","","","","","","","","","","","","","","Return the secret key for the signer","","","","","","","","Finds the signer with lowest ordering for a given id in …","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Return the SignerId for this signer","","","","Returns the list of identifiers of all the signers in the …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Create a wrapped signer from a signer and a context","Default constructor","","","","Removes a signer from the container and returns it","Whether to remove partial signatures from the PSBT inputs …","Sign a single psbt input","","","","Sign all the inputs of the psbt","","Whether we should try to sign a taproot transaction with …","Returns the list of signers in the container, sorted by …","Specifies which Taproot script-spend leaves we should sign …","","","","","","","","","Whether the signer should trust the witness_utxo, if the …","Whether to try finalizing the PSBT after the inputs are …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Whether the signer can sign for the internal key or not","BIP69 / Lexicographic","Marker type to indicate the TxBuilder is being used to …","Use both change and non-change outputs (default)","Only use non-change outputs (see …","Policy regarding the use of change outputs when creating a …","Marker type to indicate the TxBuilder is being used to …","Only use change outputs (see TxBuilder::only_spend_change)","Randomized (default)","A transaction builder","Context in which the TxBuilder is valid","Ordering of the transaction’s inputs and outputs","Unchanged","Add data as an output, using OP_RETURN","Add a foreign UTXO i.e. a UTXO not owned by this wallet.","Fill-in the PSBT_GLOBAL_XPUB field with the extended keys …","Add a recipient to the internal list","Add a utxo to the internal list of unspendable utxos","Add a utxo to the internal list of utxos that must be spent","Add the list of outpoints to the internal list of UTXOs …","Set whether or not the dust limit is checked.","Explicitly tells the wallet that it is allowed to reduce …","","","","","","","","","","","Set a specific ChangeSpendPolicy. See …","","","","","","","","","","","","","Choose the coin selection algorithm","Set the current blockchain height.","","","","","Do not spend change outputs","Sets the address to drain excess coins to.","Spend all the available inputs. This respects filters like …","Enable signaling RBF","Enable signaling RBF with a specific nSequence value","","","Set an absolute fee The fee_absolute method refers to the …","Set a custom fee rate The fee_rate method sets the mining …","Finish building the transaction.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Fill-in the psbt::Output::redeem_script and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Only spend utxos added by add_utxo.","Use a specific nLockTime while creating the transaction","Only spend change outputs","Only Fill-in the psbt::Input::witness_utxo field when …","Choose the ordering for inputs and outputs of the …","","","Set the policy path to use while creating the transaction …","Replace the recipients already added with a new list","Sign with a specific sig hash","Sort transaction inputs and outputs by TxOrdering variant","","","","","","","","","","","","","","","","","","","","","Replace the internal list of unspendable utxos with a new …","Build a transaction with a specific version","","","","",""],"i":[17,17,17,17,17,0,1,0,17,17,17,12,17,0,17,1,17,17,17,17,0,12,0,17,17,17,17,17,17,17,0,17,17,17,17,0,17,0,0,0,0,1,1,3,1,17,1,3,10,11,12,17,1,3,10,11,12,0,1,1,3,10,11,12,1,3,10,11,12,1,10,3,3,10,0,0,1,10,1,3,10,11,12,3,3,17,17,1,3,10,11,12,0,17,17,17,17,17,17,17,17,1,3,10,11,12,3,3,3,3,3,3,1,10,17,1,3,10,11,12,10,10,0,12,10,1,3,17,0,3,11,1,10,0,3,0,1,3,10,11,12,17,17,1,3,10,11,12,17,1,3,10,11,12,12,10,17,1,3,10,11,12,11,185,0,17,1,3,10,11,12,0,1,186,186,187,188,189,189,34,0,0,0,0,0,0,0,0,57,0,0,41,34,0,0,0,34,41,0,34,34,34,41,34,46,47,39,34,34,46,47,39,34,46,47,39,39,0,57,46,47,57,47,57,57,46,47,57,46,47,57,57,46,47,57,46,47,57,46,47,0,34,46,47,39,34,46,47,39,34,46,47,39,39,34,34,34,34,34,39,34,39,34,46,47,39,0,34,39,39,190,34,39,34,34,34,46,47,39,39,34,39,34,34,34,34,34,34,34,46,47,39,39,39,34,39,39,39,34,39,39,39,34,34,39,39,34,34,46,47,39,34,46,47,39,39,34,159,70,34,34,39,39,39,34,39,39,57,46,47,39,34,39,34,57,46,47,34,34,34,34,34,34,34,34,34,34,34,34,34,34,39,57,39,34,39,39,34,46,47,39,57,46,47,0,39,34,39,34,39,39,34,34,39,34,39,57,46,47,0,34,46,47,39,34,39,34,57,57,34,39,34,46,47,39,34,46,47,39,39,34,46,47,39,34,34,46,47,39,39,0,0,0,0,21,21,0,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,85,22,22,0,86,0,0,85,84,0,85,85,22,22,22,85,86,55,22,86,86,0,0,0,55,55,84,85,85,0,0,85,85,85,84,84,85,86,56,87,22,55,84,85,86,56,87,22,55,84,85,86,56,87,55,84,85,86,56,87,55,56,87,87,84,85,86,56,87,22,84,85,86,56,87,22,22,55,84,85,86,86,56,56,87,22,55,56,84,87,85,56,84,85,86,56,87,22,55,85,86,87,56,87,22,56,56,84,85,86,56,87,87,84,85,86,56,87,55,22,84,85,86,56,87,22,55,84,85,86,56,87,22,55,84,85,86,56,87,22,55,84,85,86,56,87,22,55,191,191,191,192,193,194,193,194,193,194,193,194,193,194,195,196,197,198,199,200,200,199,201,202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,203,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,89,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,91,92,93,95,97,98,99,100,101,102,103,104,24,0,0,0,0,204,204,0,0,113,0,0,0,0,24,24,24,57,0,0,38,24,24,110,41,204,117,0,117,0,0,38,41,110,0,0,0,0,38,0,113,110,41,0,205,41,117,107,115,38,108,24,109,41,110,111,112,113,117,107,115,38,108,24,109,41,110,111,112,113,57,57,57,57,57,57,57,57,57,107,38,108,109,41,110,111,112,113,107,38,108,109,41,110,111,112,113,109,41,111,113,108,108,107,41,41,109,38,109,41,110,111,112,113,115,38,108,24,24,109,109,41,41,110,110,111,112,113,109,117,117,117,107,115,38,108,24,24,24,109,41,41,110,111,112,113,115,115,41,110,109,41,204,206,204,206,117,41,109,41,111,113,117,107,115,38,108,24,109,41,110,111,112,113,90,96,107,107,115,41,110,96,117,107,107,41,110,117,117,41,205,38,41,110,205,38,205,38,41,41,109,111,112,109,0,41,57,109,109,0,57,109,41,111,112,57,115,109,41,111,113,57,109,24,109,109,109,41,57,109,0,107,38,108,109,41,110,111,112,113,110,24,109,41,110,57,57,109,117,107,115,38,108,24,109,41,110,111,112,113,117,107,115,38,108,24,109,41,110,111,112,113,117,107,115,38,108,24,109,41,110,111,112,113,117,107,115,38,108,24,109,41,110,111,112,113,0,207,207,207,0,0,0,0,145,144,0,0,143,143,0,143,144,0,0,123,124,140,128,124,124,123,124,129,128,143,140,144,145,123,124,129,128,143,140,144,145,124,124,124,124,124,129,128,124,123,129,128,123,129,128,0,124,123,123,129,128,140,124,124,124,123,128,123,128,140,0,124,123,123,124,129,128,143,140,140,144,144,145,123,124,129,128,128,128,143,140,144,145,124,124,124,124,124,124,124,124,129,123,140,128,124,124,124,123,124,129,128,143,140,144,145,208,128,124,140,124,129,124,124,124,124,124,124,124,124,144,124,124,124,123,128,124,0,124,124,124,124,123,129,128,123,140,144,123,124,123,123,123,124,129,128,143,140,144,145,123,124,129,128,143,140,144,145,0,124,123,124,129,128,143,140,144,145,123,123,124,129,128,143,140,144,145,0,209,209,0,165,0,0,0,0,0,165,0,165,164,161,162,163,165,164,161,162,163,161,162,163,161,162,163,178,161,162,163,0,161,162,163,164,164,165,164,161,162,163,165,164,161,162,163,165,164,161,162,163,164,163,164,164,161,162,163,165,164,161,162,163,165,164,161,162,163,165,164,161,162,163,165,164,161,162,163,210,211,211,210,211,0,0,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,172,167,172,167,172,23,0,23,23,23,169,23,23,23,23,23,23,172,167,169,23,0,0,0,0,0,0,0,0,169,0,0,23,54,142,142,54,142,167,23,169,171,125,54,142,172,167,23,169,171,125,54,142,172,54,167,169,171,125,54,142,172,167,169,171,125,54,142,172,167,125,125,54,142,172,171,212,171,171,171,167,169,125,172,54,167,23,23,169,171,125,54,142,172,167,167,167,23,23,169,171,125,54,142,172,167,212,171,171,171,54,167,23,169,171,125,54,142,172,171,54,167,125,23,54,142,213,171,171,171,126,171,142,54,142,167,169,171,125,54,142,172,23,142,142,167,23,169,171,125,54,142,172,167,23,169,171,125,54,142,172,167,23,169,171,125,54,142,172,167,23,169,171,125,54,142,172,214,181,0,180,180,0,0,180,181,0,0,0,181,135,135,135,135,135,135,135,135,135,136,134,135,181,180,136,134,135,181,180,135,136,134,135,181,180,136,134,135,181,180,181,180,135,135,136,134,181,180,135,135,135,135,135,181,180,135,135,135,136,134,135,181,180,136,134,135,181,180,181,180,135,136,134,135,181,180,135,135,135,135,135,181,180,135,135,135,181,136,134,135,181,180,136,134,135,181,180,136,134,135,181,180,136,134,135,181,180,135,135,136,134,135,181,180],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,2],[1],[3,4],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],[[9,[[8,[6,7]]]]]],[1,1],[3,3],[10,10],[11,11],[12,12],[[]],[[]],[[]],[[]],[[]],[[1,1],13],0,[[],3],[[],3],0,0,0,[[],[[9,[1]]]],[[],[[9,[10]]]],[[1,1],14],[[3,3],14],[[10,10],14],[[11,11],14],[[12,12],14],[[3,5],15],[[3,16],15],[[17,18],19],[[17,18],19],[[1,18],19],[[3,18],19],[[10,18],19],[[11,18],19],[[12,18],19],0,[20,17],[[]],[21,17],[22,17],[23,17],[24,17],[25,17],[26,17],[[]],[[]],[[]],[[]],[[]],[4,3],[4,3],[4,3],[4,3],[[15,5],3],[[15,16],3],[1],[10],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[12,27],0,[[1,1],[[28,[13]]]],[[3,3],[[28,[13]]]],[29],0,[3,4],0,[1,9],[10,9],0,[[3,3]],0,[[]],[[]],[[]],[[]],[[]],[[],30],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[12,31],0,[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],0,[[],5],[[],33],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],9],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[34,35],[[9,[[37,[36]],25]]]],[[],38],[[],38],[39,40],[[[34,[41]],42],[[9,[[34,[43]],44]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[39,[[8,[39,7]]]],0,[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[[],[[9,[45]]]],[[],[[9,[45]]]],[[],[[9,[45]]]],[40,[[9,[45]]]],[40,[[9,[45]]]],[40,[[9,[45]]]],[[],[[9,[45]]]],[[],[[9,[45]]]],[[],[[9,[45]]]],0,[34,34],[46,46],[47,47],[39,39],[[]],[[]],[[]],[[]],[[34,34],13],[[46,46],13],[[47,47],13],[[39,39],13],[39,14],[[[34,[41]],42],[[9,[[34,[43]],44]]]],[[[34,[41]],48,42],[[9,[[34,[49]],44]]]],[[[34,[43]],48],[[9,[[34,[49]],44]]]],[34,50],[[],[[9,[34]]]],[[],[[9,[39]]]],[[[34,[41]]],15],[39,51],[[34,34],14],[[46,46],14],[[47,47],14],[[39,39],14],0,[34,[[9,[51,25]]]],0,[[39,52],[[9,[53]]]],[[54,55,48],[[9,[[28,[56]],21]]]],[[[34,[41]],54,55,48],[[9,[[28,[56]],21]]]],[[[39,[41,57]],54,55,48],[[9,[[28,[56]],21]]]],[[[34,[41]],48,58,[59,[42]]],[[9,[28,44]]]],[[34,18],[[9,[60]]]],[[34,18],[[9,[60]]]],[[46,18],[[9,[60]]]],[[47,18],[[9,[60]]]],[[39,18],[[9,[60]]]],[[39,18],[[9,[60]]]],[34,14],[39,14],[[]],[61,34],[62,34],[63,34],[64,34],[65,34],[66,34],[[]],[[]],[[]],[40,[[9,[39,25]]]],[[40,67,68],39],[33,[[9,[34,25]]]],[33,[[9,[39,25]]]],[[33,52],[[9,[39,25]]]],[33,[[9,[39,25]]]],[69,[[9,[34,25]]]],[69,[[9,[39,25]]]],[[39,5],[[28,[39]]]],[[39,5],28],[34,[[9,[25]]]],[34,[[9,[25]]]],[39,14],[39,14],[[[34,[41]]],14],[34],[46],[47],[39],[[]],[[]],[[]],[[]],[39,40],[[[34,[41]]],[[9,[[8,[[34,[41]],7]],25]]]],[[48,35],[[9,[21]]]],[[70,48,35],[[9,[21]]]],[[[34,[41]]],14],[[[34,[41]]],14],[39,14],[39,71],[39,72],[34,[[9,[73,25]]]],[39,[[9,[73,25]]]],[39,[[9,[74]]]],[39,[[28,[5]]]],[39,[[28,[5]]]],[39,[[28,[5]]]],[39,[[9,[5,25]]]],[34,[[9,[5,25]]]],[39,[[9,[5,25]]]],[34,[[9,[5,25]]]],[[],33],[[],33],[[],33],[[[39,[75]]],[[9,[34,25]]]],[[],34],[[],[[9,[34,25]]]],[[[39,[46]]],[[9,[34,25]]]],[[5,[8,[7]]],[[9,[34,25]]]],[62,34],[65,34],[[],[[9,[34,25]]]],[[[39,[47]]],[[9,[34,25]]]],[[5,[8,[7]]],[[9,[34,25]]]],[[[28,[76]]],[[9,[34,25]]]],[[],[[9,[34,25]]]],[[[39,[47]]],[[9,[34,25]]]],[[5,[8,[7]]],[[9,[34,25]]]],0,[39,[[9,[25]]]],[58,[[9,[39,25]]]],[[48,33],[[9,[25]]]],[58,[[9,[39,25]]]],[[58,52],[[9,[39,25]]]],[[34,34],[[28,[13]]]],[[46,46],[[28,[13]]]],[[47,47],[[28,[13]]]],[[39,39],[[28,[13]]]],[[],5],[[],5],[[],5],0,[39,14],[34,[[9,[25]]]],[39,[[9,[53]]]],[[34,77],[[9,[25]]]],[39,[[9,[[8,[[8,[2,7]],7]],25]]]],[39,[[9,[[8,[[8,[2,7]],7]],25]]]],[34,[[9,[51,25]]]],[34,51],[39,5],[34,9],[39,9],[[],78],[[],78],[[],78],0,[[]],[[]],[[]],[[]],[[],30],[[],30],[[[34,[41]],79],30],[39,[[9,[25]]]],[39,[[9,[25]]]],[34,[[9,[80]]]],[39,[[9,[80]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[[],32],[[],32],[[],32],[[],32],[34,51],[[]],[[]],[[]],[[]],[39,14],[33,[[9,[30,21]]]],[33,[[9,[21]]]],[33,[[9,[30,21]]]],[33,[[9,[21]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[21,18],19],[[21,18],19],[81,21],[[]],[22,21],[82,21],[25,21],[83,21],[20,21],[24,21],[[]],[29],[[],30],[[],9],[[],9],[[],32],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[84,84],[85,85],[86,86],[56,56],[87,87],[55,55],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],87],[[84,84],14],[[85,85],14],[[86,86],14],[[56,56],14],[[87,87],14],[[22,22],14],[[84,18],19],[[85,18],19],[[86,18],19],[[56,18],19],[[87,18],19],[[22,18],19],[[22,18],19],[[55,18],19],[[]],[[]],[14,86],[[]],[[]],[85,56],[[]],[[]],[[]],[[56,88],[[9,[87,22]]]],[84],[87],[85,30],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[85,14],[86,14],[87,14],0,[[87,87],[[28,[13]]]],[29],[56,14],0,[84,9],[85,9],[86,9],[56,9],[87,9],0,[[]],[[]],[[]],[[]],[[]],[[]],[[],30],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[35,[[9,[89,21]]]],[[[91,[[90,[46]]]],35],[[9,[89,21]]]],[[[92,[[90,[47]]]],35],[[9,[89,21]]]],[[[93,[[90,[47]]]],35],[[9,[89,21]]]],[[[95,[[90,[94]]]],35],[[9,[89,21]]]],[[[97,[[96,[46]]]],35],[[9,[89,21]]]],[[[98,[[96,[46]]]],35],[[9,[89,21]]]],[[[99,[[96,[47]]]],35],[[9,[89,21]]]],[[[100,[[96,[47]]]],35],[[9,[89,21]]]],[[[101,[[96,[47]]]],35],[[9,[89,21]]]],[[[102,[[96,[47]]]],35],[[9,[89,21]]]],[[[103,[[96,[94]]]],35],[[9,[89,21]]]],[[[104,[[96,[94]]]],35],[[9,[89,21]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[89,48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[48,35],[[9,[21]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],105],[[],38],[[41,42],[[9,[43,44]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[39,[[9,[45]]]],[[],[[9,[45]]]],[40,[[9,[45]]]],[[],[[9,[45]]]],[[[107,[106,57]]],[[107,[106,57]]]],[38,38],[108,108],[109,109],[41,41],[110,110],[111,111],[112,112],[113,113],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[109,109],13],[[41,41],13],[[111,111],13],[[113,113],13],0,[[],108],[[[107,[57]]]],[[41,42],[[9,[43,44]]]],[[],[[9,[41]]]],[109,51],[[38,38],14],[[109,109],14],[[41,41],14],[[110,110],14],[[111,111],14],[[112,112],14],[[113,113],14],[[[115,[[0,[114,57]]]],18],19],[[38,18],19],[[108,18],19],[[24,18],19],[[24,18],19],[[109,18],[[9,[60]]]],[[109,18],[[9,[60]]]],[[41,18],[[9,[60]]]],[[41,18],[[9,[60]]]],[[110,18],[[9,[60]]]],[[110,18],[[9,[60]]]],[[111,18],[[9,[60]]]],[[112,18],[[9,[60]]]],[[113,18],[[9,[60]]]],[109,14],[116,[[117,[57]]]],[118,[[117,[57]]]],[[]],[[]],[[]],[[]],[[]],[[]],[25,24],[20,24],[[]],[[]],[43,41],[[]],[[]],[[]],[[]],[[41,105],[[115,[57]]]],[[110,105],[[115,[57]]]],[33,[[9,[41]]]],[33,[[9,[110]]]],[69,[[9,[109,25]]]],[41,[[28,[119]]]],[[],[[9,[107]]]],[[],[[9,[107]]]],[[],[[9,[107]]]],[[],[[9,[107]]]],[[[117,[57]]],14],[41,14],[109],[41],[111],[113],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[9,[115,24]]]],[[[28,[120]],119],[[9,[115,24]]]],[[107,[28,[120]],119],[[9,[115,24]]]],[107,[[9,[115,24]]]],[[[115,[57]]],[[9,[[115,[57]],24]]]],[41,[[9,[[115,[57]],24]]]],[110,[[9,[[115,[57]],24]]]],[[],[[9,[117,24]]]],[[[117,[57]]],[[9,[[117,[57]],24]]]],[107,[[9,[117,24]]]],[[[107,[57]]]],[41,[[8,[41,7]]]],[110,[[8,[110,7]]]],[[[117,[57]],35],[[28,[116]]]],[[[117,[57]],35,48],118],[41,14],[[],14],[38,14],[41,14],[110,14],[[],14],[38,14],[[],14],[38,14],[41,14],[41,14],0,0,0,[109,[[9,[73,25]]]],[[],105],[41,121],[39,[[28,[5]]]],[109,5],[109,5],[[105,105],105],[[],33],[[5,[8,[7]]],[[9,[109,25]]]],[41,5],0,0,[39,[[9,[25]]]],[[[115,[57]],105],[[115,[57]]]],[[109,109],[[28,[13]]]],[[41,41],[[28,[13]]]],[[111,111],[[28,[13]]]],[[113,113],[[28,[13]]]],[[],5],0,[29],[109,[[9,[25]]]],[109,[[9,[[8,[[8,[2,7]],7]],25]]]],[109,5],[41,9],[[],78],[109,40],[[],105],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[110,48],[[9,[41,122]]]],[[],30],[[],30],[[],30],[[],30],[39,[[9,[25]]]],[39,[[9,[25]]]],[109,[[9,[109,80]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],[[28,[15]]]],[[],[[28,[3]]]],[5,[[28,[31]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[123,123],123],[[124,1,125,[127,[126]]]],0,[[128,128]],[[124,129],[[9,[130]]]],[124,131],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[124,132],[[9,[[135,[133,134]],17]]]],[124,[[135,[133,136]]]],[[124,137],[[9,[15,138]]]],[[124,137],[[9,[3,138]]]],[[124,137]],0,0,[124,139],[123,123],[129,129],[128,128],[[]],[[]],[[]],0,[124,[[9,[14]]]],0,[[],123],[[],129],[[],128],[140],[[124,1],[[28,[42]]]],[[124,58],28],[[124,1],30],[[],[[9,[123]]]],[[],[[9,[128]]]],[[123,123],14],[[128,128],14],[[140,140],14],0,[[124,141,142],[[9,[14,17]]]],[[123,18],[[9,[60]]]],[[123,18],[[9,[60]]]],[[[124,[114]],18],19],[[129,18],19],[[128,18],19],[[143,18],19],[[140,18],19],[[140,18],19],[[144,18],19],[[[144,[114]],18],19],[[145,18],19],[[]],[[]],[[]],[146,128],[[[149,[147,[148,[1]]]]],128],[[]],[[]],[[]],[[]],[[]],[[124,143],140],[124,123],[[124,1],70],[[124,143],140],[[124,10,[28,[150]],14],[[9,[151,17]]]],[[124,1],[[127,[54]]]],[[124,132],[[28,[[152,[137,147]]]]]],[[124,27],[[28,[10]]]],0,0,0,0,[[124,153],[[9,[14,154]]]],[[124,137,155],[[9,[14,145]]]],[[124,27,31]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[58,14],[128,14],[[124,58],14],0,[124,88],0,[124,[[28,[156]]]],[124,157],[124,158],[124,35],[[159,[28,[159]],35],[[9,[124,144]]]],[[159,[28,[159]],35],[[9,[124,21]]]],[[124,1],42],[[124,1],[[9,[[28,[56]],17]]]],[29],[[124,1],[[28,[70]]]],[124,48],[[124,137]],[123,9],[128,9],[[124,141,142],[[9,[14,17]]]],0,[124,160],[124,[[88,[1,[0,[157,106]]]]]],[[124,1],[[0,[157,106]]]],[124,128],[[]],[[]],[[]],[[],30],[[],30],[[],30],[123,15],[124,157],0,[123,15],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],0,[124,131],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[28,35,48],[[9,[30,17]]]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[161,161],[162,162],[163,163],[[]],[[]],[[]],[[[8,[11]],[8,[11]],3,15,58],[[9,[164,17]]]],[[161,[8,[11]],[8,[11]],3,15,58],[[9,[164,17]]]],[[162,[8,[11]],[8,[11]],3,15,58],[[9,[164,17]]]],[[163,[8,[11]],[8,[11]],3,15,58],[[9,[164,17]]]],[[15,3,58],165],[[],161],[[],162],[[],163],0,0,[[165,18],19],[[164,18],19],[[161,18],19],[[162,18],19],[[163,18],19],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[164,15],[15,163],0,[164,15],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[166,[[28,[30]]]],[166,30],[[],[[9,[166]]]],[[124,33,14],[[9,[166,33]]]],[[166,18],19],[[]],[33,[[9,[166]]]],[[]],0,[166,9],[166,30],[[],9],[[],9],[[],32],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[54,167,125,[127,[126]]],[[28,[[127,[126]]]]]],0,0,[[54,48],168],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[168,34,48],54],[167,167],[169,169],[[[171,[[0,[106,170,114,106]]]]],[[171,[[0,[106,170,114,106]]]]]],[125,125],[54,54],[142,142],[172,172],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[167,167],13],[[125,125],13],[[],125],[[],54],[[],142],[[],172],[[[171,[[0,[170,114,106]]]]]],[[],[[28,[110]]]],[[[171,[173]]],[[28,[110]]]],[[[171,[[174,[116]]]]],[[28,[110]]]],[[[171,[[175,[116]]]]],[[28,[110]]]],[[167,167],14],[[169,169],14],[[125,125],14],[[172,172],14],[[54,167],[[28,[127]]]],[[167,18],19],[[23,18],19],[[23,18],19],[[169,18],19],[[[171,[[0,[114,170,114,106]]]],18],19],[[125,18],19],[[54,18],19],[[142,18],19],[[172,18],19],[[]],[176,167],[121,167],[177,23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[167],[48,167],[[[171,[[174,[116]]]],48],167],[[[171,[[175,[116]]]],48],167],[[[171,[173]],48],167],[54,[[8,[167]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[0,[170,114,106]],169],[[171,[[0,[170,114,106]]]]]],[[],54],[[167,167],[[28,[13]]]],[[125,125],[[28,[13]]]],[29],[[54,167,125],[[28,[[127,[126]]]]]],0,[[141,5,142,48],[[9,[23]]]],[[[171,[[175,[116]]]],141,5,142,48],[[9,[23]]]],[[[171,[[174,[116]]]],141,5,142,48],[[9,[23]]]],[[[171,[173]],141,5,142,48],[[9,[23]]]],[[141,142,48],[[9,[23]]]],[[141,142,48],[[9,[23]]]],0,[54,[[8,[127]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],30],0,0,[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[],32],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,[[[135,[178,136]]],[[135,[178,136]]]],[[[135,[178,179]],27,151,5],[[9,[[135,[178,179]],17]]]],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,136]],51,15],[[135,[178,136]]]],[[[135,[178,179]],27],[[135,[178,179]]]],[[[135,[178,179]],27],[[9,[[135,[178,179]],17]]]],[[[135,[178,179]]],[[9,[[135,[178,179]],17]]]],[[[135,[178,179]],14],[[135,[178,179]]]],[[[135,[133,134]],51],[[9,[[135,[133,134]],17]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[135,[178,179]],180],[[135,[178,179]]]],[136,136],[134,134],[[[135,[106]]],[[135,[106]]]],[181,181],[180,180],[[]],[[]],[[]],[[]],[[]],[[181,181],13],[[180,180],13],[[[135,[178,179]],178],[[135,[178,179]]]],[[[135,[178,179]],42],[[135,[178,179]]]],[[],136],[[],134],[[],181],[[],180],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,136]],51],[[135,[178,136]]]],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,179]],182],[[135,[178,179]]]],[[181,181],14],[[180,180],14],[[[135,[178,179]],15],[[135,[178,179]]]],[[[135,[178,179]],3],[[135,[178,179]]]],[[[135,[178,179]]],[[9,[141,17]]]],[[136,18],19],[[134,18],19],[[[135,[114,114,114]],18],19],[[181,18],19],[[180,18],19],[[]],[[]],[[]],[[]],[[]],[181],[180],[[[135,[178,179]]],[[135,[178,179]]]],[[]],[[]],[[]],[[]],[[]],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,179]],183],[[135,[178,179]]]],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,179]]],[[135,[178,179]]]],[[[135,[178,179]],181],[[135,[178,179]]]],[[181,181],[[28,[13]]]],[[180,180],[[28,[13]]]],[[[135,[178,179]],[88,[30,[8,[5]]]],1],[[135,[178,179]]]],[[[135,[178,136]],8],[[135,[178,136]]]],[[[135,[178,179]],150],[[135,[178,179]]]],[[181,137]],[[]],[[]],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],32],[[],32],[[],32],[[],32],[[],32],[[[135,[178,179]],[8,[27]]],[[135,[178,179]]]],[[[135,[178,179]],184],[[135,[178,179]]]],[[]],[[]],[[]],[[]],[[]]],"p":[[4,"KeychainKind"],[15,"u8"],[3,"FeeRate"],[15,"f32"],[15,"usize"],[3,"u5"],[3,"Global"],[3,"Vec"],[4,"Result"],[3,"LocalUtxo"],[3,"WeightedUtxo"],[4,"Utxo"],[4,"Ordering"],[15,"bool"],[15,"u64"],[3,"Weight"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"Error"],[4,"Error"],[4,"PolicyError"],[4,"SignerError"],[4,"KeyError"],[4,"Error"],[4,"Error"],[3,"OutPoint"],[4,"Option"],[3,"Demand"],[3,"String"],[3,"TxOut"],[3,"TypeId"],[15,"str"],[4,"Descriptor"],[4,"Network"],[4,"NetworkChecked"],[3,"Address"],[4,"ScriptContextEnum"],[3,"Miniscript"],[4,"Terminal"],[4,"DescriptorPublicKey"],[15,"u32"],[3,"DefiniteDescriptorKey"],[4,"ConversionError"],[4,"ScriptContextError"],[4,"Legacy"],[4,"Segwitv0"],[3,"Secp256k1"],[3,"PublicKey"],[4,"DescriptorType"],[3,"ScriptBuf"],[3,"ExtParams"],[4,"AnalysisError"],[3,"SignersContainer"],[4,"BuildSatisfaction"],[3,"Policy"],[8,"ScriptContext"],[3,"Script"],[3,"Range"],[3,"Error"],[3,"Tr"],[3,"Wpkh"],[3,"Sh"],[3,"Bare"],[3,"Wsh"],[3,"Pkh"],[3,"Type"],[3,"ExtData"],[3,"Tree"],[6,"ExtendedDescriptor"],[3,"Iter"],[3,"PkIter"],[4,"Policy"],[4,"LiftError"],[4,"BareCtx"],[4,"TapTree"],[3,"TxIn"],[4,"SigType"],[3,"HashMap"],[4,"TranslateErr"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"PkOrF"],[4,"SatisfiableItem"],[4,"Satisfaction"],[3,"Condition"],[3,"BTreeMap"],[6,"DescriptorTemplateOut"],[8,"IntoDescriptorKey"],[3,"P2Pkh"],[3,"P2Wpkh_P2Sh"],[3,"P2Wpkh"],[4,"Tap"],[3,"P2TR"],[8,"DerivableKey"],[3,"Bip44"],[3,"Bip44Public"],[3,"Bip49"],[3,"Bip49Public"],[3,"Bip84"],[3,"Bip84Public"],[3,"Bip86"],[3,"Bip86Public"],[6,"ValidNetworks"],[8,"Clone"],[3,"GeneratedKey"],[3,"PrivateKeyGenerateOptions"],[3,"SortedMultiVec"],[4,"DescriptorSecretKey"],[3,"SinglePub"],[3,"SinglePriv"],[4,"SinglePubKey"],[8,"Debug"],[4,"DescriptorKey"],[3,"ExtendedPrivKey"],[4,"ExtendedKey"],[3,"ExtendedPubKey"],[3,"DerivationPath"],[6,"KeySource"],[3,"Fingerprint"],[3,"DescriptorKeyParseError"],[3,"Balance"],[3,"Wallet"],[3,"SignerOrdering"],[8,"TransactionSigner"],[3,"Arc"],[3,"ChangeSet"],[3,"Update"],[3,"CannotConnectError"],[3,"TxGraph"],[3,"Txid"],[6,"DefaultCoinSelectionAlgorithm"],[3,"BumpFee"],[3,"TxBuilder"],[3,"CreateTx"],[3,"Transaction"],[4,"CalculateFeeError"],[3,"CheckPointIter"],[3,"AddressInfo"],[3,"PartiallySignedTransaction"],[3,"SignOptions"],[4,"AddressIndex"],[4,"NewError"],[4,"InsertTxError"],[6,"ChangeSet"],[3,"ConfirmationTimeAnchor"],[3,"ChangeSet"],[3,"ChangeSet"],[3,"PsbtSighashType"],[3,"Input"],[3,"CanonicalTx"],[3,"BlockId"],[3,"InsertBlockError"],[4,"ConfirmationTime"],[3,"CheckPoint"],[8,"Iterator"],[3,"LocalChain"],[8,"IntoWalletDescriptor"],[3,"KeychainTxOutIndex"],[3,"LargestFirstCoinSelection"],[3,"OldestFirstCoinSelection"],[3,"BranchAndBoundCoinSelection"],[3,"CoinSelectionResult"],[4,"Excess"],[3,"FullyNodedExport"],[4,"SignerId"],[6,"KeyMap"],[4,"SignerContext"],[8,"Sized"],[3,"SignerWrapper"],[4,"TapLeavesOptions"],[3,"PrivateKey"],[3,"DescriptorMultiXKey"],[3,"DescriptorXKey"],[3,"Hash"],[4,"Error"],[8,"CoinSelectionAlgorithm"],[8,"TxBuilderContext"],[4,"ChangeSpendPolicy"],[4,"TxOrdering"],[3,"Sequence"],[4,"LockTime"],[15,"i32"],[8,"Vbytes"],[13,"InsufficientFunds"],[13,"FeeRateTooLow"],[13,"FeeTooLow"],[13,"Foreign"],[8,"ExtractPolicy"],[13,"PsbtTimelocks"],[13,"Complete"],[13,"Partial"],[13,"PartialComplete"],[13,"Sha256Preimage"],[13,"Hash256Preimage"],[13,"Ripemd160Preimage"],[13,"Hash160Preimage"],[13,"Thresh"],[13,"Multisig"],[13,"AbsoluteTimelock"],[13,"RelativeTimelock"],[8,"DescriptorTemplate"],[8,"GeneratableKey"],[8,"ExtScriptContext"],[8,"GeneratableDefaultOptions"],[8,"PsbtUtils"],[8,"IsDust"],[13,"ConfirmationHeightCannotBeGreaterThanTip"],[13,"Change"],[13,"NoChange"],[8,"SignerCommon"],[8,"InputSigner"],[13,"Tap"]]},\ -"bdk_chain":{"doc":"This crate is a collection of core structures for Bitcoin …","t":[8,8,17,3,17,8,4,3,4,3,13,13,8,16,3,2,16,3,8,3,3,2,13,13,16,11,10,11,11,11,12,12,10,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,12,12,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,10,11,12,11,11,11,0,10,0,11,2,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,12,12,12,3,16,3,8,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,10,10,12,10,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,3,6,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,4,3,3,13,13,3,3,3,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Anchor","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeAnchor","Confirmed","Confirmed","DescriptorExt","Error","FullTxOut","IndexedTxGraph","LoadError","Persist","PersistBackend","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","WriteError","all_spks","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","apply_changeset","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","commit","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","deserialize","deserialize","deserialize","deserialize","dust_value","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","get_chain_tip","hash","hash","hash","hash","hash","hash","height","index_of_spk","index_tx","index_txout","indexed_tx_graph","initial_changeset","insert_spk","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","load_from_persistence","local_chain","mark_used","miniscript","net_value","new","new","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serialize","serialize","serialize","serialize","spent_by","spk_at_index","stage","staged","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write_changes","height","last_seen","time","ChangeSet","ChangeSet","IndexedTxGraph","Indexer","append","apply_changeset","apply_changeset","apply_update","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph","index","index_tx","index_txout","indexer","initial_changeset","initial_changeset","insert_relevant_txs","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","ChangeSet","KeychainTxOutIndex","add","add_keychain","append","apply_changeset","apply_changeset","as_inner","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","confirmed","default","default","default","deref","deserialize","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","immature","index_tx","index_txout","initial_changeset","inner","into","into","into","is_empty","is_tx_relevant","keychains","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead_to_target","lookahead_to_target_multi","lookaheads","mark_used","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_spks_of_all_keychains","revealed_spks_of_keychain","serialize","serialize","set_lookahead","set_lookahead_for_all","spks_of_all_keychains","spks_of_keychain","to_owned","to_owned","to_owned","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_into","try_into","try_into","txouts_of_keychain","type_id","type_id","type_id","unmark_used","untrusted_pending","unused_spks_of_keychain","vzip","vzip","vzip","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InsertBlockError","LocalChain","Update","apply_changeset","apply_update","block_id","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","default","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_blocks","from_changeset","from_tip","get_chain_tip","hash","height","height","initial_changeset","insert_block","into","into","into","into","into","into","into_iter","into_iter","introduce_older_blocks","is_block_in_chain","is_empty","iter","iter_checkpoints","new","next","original_hash","prev","provide","provide","push","tip","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","append","apply_changeset","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts_of_tx","eq","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into_iter","is_empty","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_chain_txs","missing_heights","missing_heights_from","new","next","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_list_chain_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txs","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","walk_conflicts","walk_descendants"],"q":["bdk_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::ConfirmationTime","","","bdk_chain::indexed_tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::keychain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::local_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Trait that “anchors” blockchain data to a specific …","Trait that makes an object appendable.","Maximum BIP32 derivation index.","A reference to a block in the canonical chain.","How many confirmations are needed f or a coinbase output …","Represents a service that tracks the blockchain.","Represents the observed position of some chain data.","An Anchor implementation that also records the exact …","Block height and timestamp at which a transaction is …","An Anchor implementation that also records the exact …","The chain data is seen as confirmed, and in anchored by A.","The confirmed variant.","A trait to extend the functionality of a miniscript …","Error type.","A TxOut with as much data as we can retrieve about it","","The error the backend returns when it fails to load …","Persist wraps a PersistBackend (B) to create a convenient …","A persistence backend for Persist.","An iterator for derived script pubkeys.","An index storing TxOuts that have a script pubkey that …","","The chain data is seen in mempool at this given timestamp.","The unconfirmed variant.","The error the backend returns when it fails to write.","The script pubkeys that are being tracked by the index.","Returns the BlockId that the associated blockchain data is …","","","","The anchor block.","The anchor block.","Append another object of the same type onto self.","","","","","","","","","","","","","","","","","","","","","The position of the transaction in outpoint in the overall …","","","","","","","","","","","","","","","","","Maps a ChainPosition<&A> into a ChainPosition<A> by …","","","","","","","Commit the staged changes to the underlying persistence …","The exact confirmation height of the transaction.","The confirmation height of the chain data being anchored.","Get the upper bound of the chain data’s confirmation …","Get the upper bound of the chain data’s confirmation …","Determines the upper bound of the confirmation height.","","","The confirmation time of the chain data being anchored.","","","","","","","","","Returns the minimum value (in satoshis) at which an output …","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the best chain’s chain tip.","","","","","","The hash of the block.","The height of the block.","Returns the index associated with the script pubkey.","","","Contains the IndexedTxGraph structure and associated types.","","Adds a script pubkey to scan for. Returns false and does …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Determines whether block of BlockId exists as an ancestor …","Returns whether ChainPosition is confirmed or not.","Returns whether ConfirmationTime is the confirmed variant.","Whether the utxo is/was/will be spendable with chain tip.","Returns whether the structure is considered empty.","Whether the txout is considered mature.","Whether this output is on a coinbase transaction.","Whether any of the inputs of this transaction spend a …","","Returns whether the script pubkey at index has been used …","Module for keychain related structures.","Return the aggregate changeset C from persistence.","The LocalChain is a local implementation of ChainOracle.","Marks the script pubkey at index as used even though it …","","Computes the net value that this transaction gives to the …","Create a new Persist from PersistBackend.","Creates a new script pubkey iterator starting at 0 from a …","","","The location of the TxOut.","Get a reference to the set of indexed outpoints.","Iterates over all the outputs with script pubkeys in an …","","","","","","","Scans a transaction’s outputs for matching script …","Scan a single TxOut for a matching script pubkey and …","Computes total input value going from script pubkeys in …","","","","","The txid and chain position of the transaction (if any) …","Returns the script that has been inserted at the index.","Stage a changeset to be committed later with commit.","Get the changes that have not been committed yet.","","","","","","","","","","","","","","","","","","","","","","","","","","","Module for structures that store and traverse transactions.","Returns the txout and script pubkey index of the TxOut at …","The TxOut.","Iterate over all known txouts that spend to tracked script …","Finds all txouts on a transaction that has previously been …","","","","","","","","","","Construct an unconfirmed variant using the given last_seen …","Undoes the effect of mark_used. Returns whether the index …","Iterates over all unused script pubkeys in an index range.","","","","","","","","","","Writes a changeset to the persistence backend.","Confirmation height.","The last-seen timestamp in unix seconds.","Confirmation time in unix seconds.","A structure that represents changes to an IndexedTxGraph.","The resultant “changeset” when new transaction data is …","A struct that combines TxGraph and an Indexer …","Utilities for indexing transaction data.","","Apply changeset to itself.","Applies the ChangeSet to the IndexedTxGraph.","Apply an update directly.","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Get a reference of the internal transaction graph.","TxGraph changeset.","Transaction index.","Scans a transaction for relevant outpoints, which are …","Scan and index the given outpoint and txout.","Indexer changeset.","Determines the ChangeSet between self and an empty Indexer.","Determines the ChangeSet between self and an empty …","Insert relevant transactions from the given txs iterator.","Insert and index a transaction into the graph.","Insert a floating txout of given outpoint.","Calls U::from(self).","Calls U::from(self).","","Determines whether the transaction should be included in …","Construct a new IndexedTxGraph with a given index.","","","","","","","","","","","Balance, differentiated into various categories.","Represents updates to the derivation index of a …","A convenient wrapper around SpkTxOutIndex that relates …","","Add a keychain to the tracker’s txout_index with a …","Append another ChangeSet into self.","","Applies the derivation changeset to the KeychainTxOutIndex…","Get the inner map of the keychain to its new derivation …","","","","","","","","","","","","","","Confirmed and immediately spendable balance","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","All coinbase outputs not yet matured","","","","Return a reference to the internal SpkTxOutIndex.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the changeset are empty.","","Return a reference to the internal map of the keychain to …","Get the last derivation index revealed for keychain.","Get the last derivation index that is revealed for each …","Returns the highest derivation index of the keychain where …","Returns the highest derivation index of each keychain that …","Store lookahead scripts until target_index.","Convenience method to call lookahead_to_target for …","Return the lookahead setting for each keychain.","Marks the script pubkey at index as used even though the …","Get the next derivation index for keychain. The next index …","Gets the next unused script pubkey in the keychain. I.e., …","Get a reference to the set of indexed outpoints.","Attempts to reveal the next script pubkey for keychain.","Reveals script pubkeys of the keychain’s descriptor up …","Convenience method to call Self::reveal_to_target on …","Convenience method to get revealed_spks_of_keychain of all …","Iterates over the script pubkeys revealed by this index …","","","Set the lookahead count for keychain.","Convenience method to call set_lookahead for all keychains.","Generates script pubkey iterators for every keychain. The …","Generates a script pubkey iterator for the given keychain…","","","","","Get the whole balance visible to the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","Iterates over all the OutPoint that have a TxOut with a …","","","","Undoes the effect of mark_used. Returns whether the index …","Unconfirmed UTXOs received from an external wallet","Iterates over all unused script pubkeys for a keychain …","","","","Occurs when an update does not have a common checkpoint …","A structure that represents changes to LocalChain.","A LocalChain checkpoint is used to find the agreement …","A structure that iterates over checkpoints backwards.","Represents a failure when trying to insert a checkpoint …","This is a local implementation of ChainOracle.","A struct to update LocalChain.","Apply the given changeset.","Applies the given update to the chain.","Get the BlockId of the checkpoint.","Get a reference to the internal index mapping the height …","","","","","","","","","","","","","","","","","","","","","","","","","","","Extends the checkpoint linked list by a iterator of block …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Constructs a LocalChain from a BTreeMap of height to …","Construct a LocalChain from an initial changeset.","Construct a LocalChain from a given checkpoint tip.","","Get the block hash of the checkpoint.","Get the height of the checkpoint.","The checkpoints’ height.","Derives an initial ChangeSet, meaning that it can be …","Insert a BlockId.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Whether the update allows for introducing older blocks.","","Returns whether the LocalChain is empty (has no …","Iterate from this checkpoint in descending height.","Iterate over checkpoints in descending height order.","Construct a new base block at the front of a linked list.","","Original checkpoint’s block hash.","Get the previous checkpoint in the chain","","","Puts another checkpoint onto the linked list representing …","Get the highest checkpoint.","The update chain’s new tip.","","","","","","","","","","","","","","The suggested checkpoint to include to connect the two …","","","","","","","","","","","","","Update checkpoint’s block hash.","","","","","","","Errors returned by TxGraph::calculate_fee.","An outwards-facing view of a transaction that is part of …","A structure that represents changes to a TxGraph.","Missing TxOut for one or more of the inputs of the tx","When the transaction is invalid according to the graph it …","An iterator that traverses transaction descendants.","A graph of transactions and spends.","An outward-facing view of a (transaction) node in the …","Get all transaction anchors known by TxGraph.","Iterate over all tx outputs known by TxGraph.","Iterates over the heights of that the new transaction …","The blocks that the transaction is “anchored” in.","Added anchors.","","Applies ChangeSet to TxGraph.","Extends this graph with another so that self becomes the …","","Get the total balance of outpoints that are in chain of …","","","","","","","","","","","","","Calculates the fee of a given transaction. Returns 0 if tx …","How the transaction is observed as (confirmed or …","","","","","","","","","","","","","","","","","Given a transaction, return an iterator of txids that …","","","","","","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","Iterate over floating txouts known by TxGraph.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Iterate over all full transactions in the graph.","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","Get a transaction by txid. This only returns Some for full …","Get a transaction node by txid. This only returns Some for …","Obtains a single tx output (if any) at the specified …","Determines the ChangeSet between self and an empty TxGraph.","Inserts the given anchor into TxGraph.","Inserts the given seen_at for txid into TxGraph.","Inserts the given transaction into TxGraph.","Inserts the given TxOut at OutPoint.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Whether the graph has any transactions or outputs in it.","Returns true if the ChangeSet is empty (no transactions or …","","Added last-seen unix timestamps of transactions.","The last-seen unix timestamp of the transaction as …","List graph transactions that are in chain with chain_tip.","Find missing block heights of chain.","Returns an iterator for the anchor_heights in this …","Construct a new TxGraph from a list of transactions.","","The transactions spending from this output.","","","","","","","","Get the total balance of outpoints that are in chain of …","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","","","","","","","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","","","","","","","List graph transactions that are in chain with chain_tip.","A partial or full representation of the transaction.","The transaction node (as part of the graph).","Returns known outputs of a given txid.","Iterates over the transactions spending from txid.","Txid of the transaction.","Iterates over all outpoints contained within ChangeSet.","Added txouts.","Added transactions.","","","","","","","","","","","","","Creates an iterator that both filters and maps conflicting …","Creates an iterator that filters and maps descendants from …"],"i":[0,0,0,0,0,0,0,0,0,0,8,9,0,71,0,0,72,0,0,0,0,0,8,9,72,3,17,5,6,7,6,7,39,3,0,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,10,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,11,8,8,9,5,6,7,10,13,6,7,17,17,8,6,7,7,3,5,6,7,9,5,6,7,73,8,9,5,6,7,10,3,8,9,5,6,7,10,13,3,8,9,9,5,5,5,6,7,10,13,11,71,8,9,5,6,7,5,5,3,3,3,0,3,3,3,8,9,5,6,7,10,13,11,11,71,8,9,10,39,10,10,3,3,3,0,72,0,3,0,3,13,11,11,11,10,3,3,8,9,5,6,7,10,3,3,3,9,5,6,7,10,3,13,13,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,0,3,10,3,3,3,8,9,5,6,7,10,13,11,9,3,3,3,8,9,5,6,7,10,13,11,72,74,75,74,0,41,0,0,40,41,42,42,42,40,42,40,40,40,42,40,40,40,42,40,42,40,40,40,42,40,42,41,41,40,41,42,42,42,42,42,40,40,41,42,40,40,42,40,42,40,42,40,42,40,0,0,0,48,49,46,49,49,46,46,49,46,48,49,46,48,49,46,48,49,46,48,48,49,46,48,49,46,48,46,48,49,46,48,48,49,46,48,48,49,49,49,49,49,46,48,46,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,46,48,49,49,49,49,49,46,48,48,48,48,48,49,46,48,49,46,48,49,49,46,48,49,48,49,49,46,48,0,0,0,0,0,0,0,54,54,58,54,61,58,56,54,59,57,61,58,56,54,59,57,58,56,54,59,57,58,56,54,59,57,54,54,59,57,58,58,56,54,59,59,57,57,61,58,56,54,54,59,57,54,54,54,54,58,58,59,54,54,61,58,56,54,59,57,61,58,56,54,54,58,54,58,61,59,58,59,57,58,54,56,58,56,54,59,57,59,57,61,58,56,54,59,57,57,61,58,56,54,59,57,61,58,56,54,59,57,59,61,58,56,54,59,57,0,0,0,64,64,0,0,0,43,43,45,67,45,45,43,43,43,43,69,43,67,68,64,45,69,43,67,68,64,45,43,68,69,69,43,67,68,45,43,67,68,45,67,68,43,45,67,45,43,43,67,68,64,45,43,43,43,43,67,68,64,45,69,43,67,68,64,45,43,43,43,43,43,43,43,43,43,43,43,69,43,67,68,64,45,69,43,45,45,45,67,43,43,45,43,69,43,67,68,45,43,67,68,45,43,43,43,69,43,67,68,64,45,43,43,69,43,67,68,64,45,43,67,68,43,43,67,45,45,45,69,43,67,68,64,45,69,43,67,68,64,45,43,43],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[3,[[0,[1,2]]]]],4],[[],5],[5,5],[6,5],[7,5],0,0,[[]],[[[3,[[0,[1,2]]]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[3,[1]]],[[3,[1]]]],[[[8,[1]]],[[8,[1]]]],[9,9],[5,5],[6,6],[7,7],[[[10,[1]]],[[10,[1]]]],[[[11,[1]]],[[11,[1]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,[[8,[1]]]],[[[8,[2]],8],12],[[9,9],12],[[5,5],12],[[6,6],12],[[7,7],12],[[[10,[2]],10],12],[13,[[15,[14]]]],0,0,[[],16],[[],16],[[[8,[17]]],[[14,[16]]]],[6,16],[7,16],0,[[],3],[[],5],[[],6],[[],7],[[],[[15,[9]]]],[[],[[15,[5]]]],[[],[[15,[6]]]],[[],[[15,[7]]]],[[],18],[[[8,[19]],8],20],[[9,9],20],[[5,5],20],[[6,6],20],[[7,7],20],[[[10,[19]],10],20],[[[3,[21]],22],23],[[[8,[21]],22],23],[[9,22],23],[[5,22],23],[[6,22],23],[[7,22],23],[[[10,[21]],22],23],[[[13,[21,21]],22],23],[[]],[[]],[[]],[[[8,[7]]],9],[[],5],[[]],[[],5],[[]],[[]],[[]],[[]],[[]],[[],[[15,[[14,[5]]]]]],[[[8,[24]]]],[9],[5],[6],[7],0,0,[[[3,[[0,[1,2]]]],25],14],[[[3,[[0,[1,2]]]],26]],[[[3,[[0,[1,2]]]],27,28]],0,[[[3,[[0,[1,2]]]]]],[[[3,[[0,[1,2]]]],[0,[1,2]],29],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,5],[[15,[[14,[20]]]]]],[8,20],[9,20],[[[10,[17]],16],20],[[],20],[[[10,[17]],16],20],0,[[[3,[[0,[1,2]]]],26],20],[[[3,[[0,[1,2]]]],26],20],[[[3,[[0,[1,2]]]]],20],0,[[],15],0,[[[3,[[0,[1,2]]]]],20],0,[[[3,[[0,[1,2]]]],26],30],[[],13],[[],11],[11,14],[[11,31],14],0,[[[3,[[0,[1,2]]]]],32],[[[3,[[0,[1,2]]]],[33,[[0,[1,2]]]]],34],[[[8,[35]],8],[[14,[12]]]],[[9,9],[[14,[12]]]],[[5,5],[[14,[12]]]],[[6,6],[[14,[12]]]],[[7,7],[[14,[12]]]],[[[10,[35]],10],[[14,[12]]]],[[[3,[[0,[1,2]]]],26],[[32,[[0,[1,2]]]]]],[[[3,[[0,[1,2]]]],27,28],14],[[[3,[[0,[1,2]]]],26]],[9,15],[5,15],[6,15],[7,15],0,[[[3,[[0,[1,2]]]]],[[14,[25]]]],[13],[13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[[3,[[0,[1,2]]]],27],14],0,[[[3,[[0,[1,2]]]]],[[0,[34,36]]]],[[[3,[[0,[1,2]]]],37],34],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[18,9],[[[3,[[0,[1,2]]]]],20],[[[3,[[0,[1,2]]]]],34],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],0,0,0,0,0,0,0,[[[40,[17,39]],[40,[17,39]]]],[[]],[[[42,[17,41]],[40,[17]]]],[[[42,[17,41]],[43,[17]]],[[40,[17]]]],[[]],[[]],[[]],[[]],[[[40,[1,1]]],[[40,[1,1]]]],[[]],[[],[[42,[44]]]],[[],[[40,[44]]]],[[],[[15,[40]]]],[[[40,[19,19]],40],20],[[[42,[21,21]],22],23],[[[40,[21,21]],22],23],[[]],[[]],[45,[[40,[44]]]],[46,[[40,[46]]]],[42,43],0,0,[26],[[27,28]],0,[[]],[[[42,[17,41]]],[[40,[17]]]],[[[42,[17,41]],47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],26,47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],27,28],[[40,[17]]]],[[]],[[]],[[[40,[17,39]]],20],[26,20],[[],42],[40,15],[[]],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[]],[[]],0,0,0,[[48,48],48],[[[49,[[0,[1,2,21]]]],[0,[1,2,21]],[51,[50]]]],[[[46,[2]],[46,[2]]]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],[46,[[0,[1,2,21]]]]]],[46,4],[46,4],[[]],[[]],[[]],[[]],[[]],[[]],[[[49,[1]]],[[49,[1]]]],[[[46,[1]]],[[46,[1]]]],[48,48],[[]],[[]],[[]],0,[[],49],[[],46],[[],48],[49],[[],[[15,[46]]]],[[],[[15,[48]]]],[[[46,[19]],46],20],[[48,48],20],[[[49,[21]],22],23],[[[46,[21]],22],23],[[48,22],23],[[48,22],23],[[]],[[]],[[]],0,[[[49,[[0,[1,2,21]]]],26]],[[[49,[[0,[1,2,21]]]],27,28]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]],3],[[]],[[]],[[]],[[[46,[2]]],20],[[[49,[[0,[1,2,21]]]],26],20],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]],16],20],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]],32],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],4]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[0,[52,1]]]]]],[[[49,[[0,[1,2,21]]]]],[[0,[34,1]]]],[46,15],[48,15],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[11,[[51,[50]]]]]]]],[[[49,[[0,[1,2,21]]]]],[[11,[[51,[50]]]]]],[[]],[[]],[[]],[[],53],[48,18],0,[48,18],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[49,[[0,[1,2,21]]]]],34],[[],38],[[],38],[[],38],[[[49,[[0,[1,2,21]]]],16],20],0,[[[49,[[0,[1,2,21]]]]],34],[[]],[[]],[[]],0,0,0,0,0,0,0,[[54,55]],[[54,56],[[15,[55,57]]]],[58,5],[54,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[58,58],[56,56],[54,54],[59,59],[57,57],[[]],[[]],[[]],[[]],[[]],[[],54],[[54,54],20],[[59,59],20],[[57,57],20],[[58,47],[[15,[58,58]]]],[[58,22],23],[[56,22],23],[[54,22],23],[[59,22],23],[[59,22],23],[[57,22],23],[[57,22],23],[[]],[[]],[[]],[[[4,[16,60]]],54],[[]],[[]],[[]],[[[4,[16,60]]],54],[55,54],[58,54],[54,[[15,[[14,[5]]]]]],[58,60],[58,16],0,[54,55],[[54,5],[[15,[55,59]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[58],0,[[54,5,5],[[15,[[14,[20]]]]]],[54,20],[58,61],[54,61],[5,58],[61,14],0,[58,[[14,[58]]]],[62],[62],[[58,5],[[15,[58,58]]]],[54,[[14,[58]]]],0,[[]],[[]],[[]],[[]],[[]],[[],53],[[],53],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[43,32],[43,52],[45,52],0,0,[[[45,[2]],[45,[2]]]],[[[43,[[0,[1,2]]]],[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],[43,[[0,[1,2]]]]],[[45,[[0,[1,2]]]]]],[43,43],[[[43,[17]],5,47,63],48],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,26],[[15,[18,64]]]],0,[[],[[14,[65]]]],[[],[[14,[66]]]],[[[43,[1]]],[[43,[1]]]],[[[67,[1,1]]],[[67,[1,1]]]],[[[68,[1,1]]],[[68,[1,1]]]],[[[45,[1]]],[[45,[1]]]],[[]],[[]],[[]],[[]],[[[67,[2,2]],67],12],[[[68,[2,2]],68],12],[[],43],[[],45],[67],[[],[[15,[45]]]],[[43,26],52],[[[43,[19]],43],20],[[[67,[19,19]],67],20],[[[68,[19,19]],68],20],[[64,64],20],[[[45,[19]],45],20],[[[43,[17]],5,47],52],[[[43,[17]],5,47],52],[43,52],[[[43,[21]],22],23],[[[67,[21,21]],22],23],[[[68,[21,21]],22],23],[[64,22],23],[[[45,[21]],22],23],[[]],[[]],[[]],[[]],[[]],[[]],[43,52],[[[43,[17]],5,37],[[14,[8]]]],[[[43,[17]],5,27],14],[[43,37],[[14,[26]]]],[[43,37],[[14,[[67,[26]]]]]],[[43,27],[[14,[28]]]],[[[43,[[0,[1,2]]]]],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,[0,[1,2]]],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,18],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],26],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],27,28],[[45,[[0,[1,2]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[43,20],[45,20],[[[45,[2]]],20],0,0,[[[43,[17]],5],52],[[[43,[17]],54],52],[[45,54],52],[47,[[43,[[0,[1,2]]]]]],[69,14],[[43,27],70],[[[67,[35,35]],67],[[14,[12]]]],[[[68,[35,35]],68],[[14,[12]]]],[45,15],[[]],[[]],[[]],[[]],[[[43,[17]],5,47,63],[[15,[48]]]],[[[43,[17]],5,47],52],[[[43,[17]],5,47],52],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5,37],[[15,[[14,[8]]]]]],[[[43,[17]],5,27],[[15,[14]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5],52],0,0,[[43,37],[[14,[[4,[16,28]]]]]],[[43,37],34],0,[45,52],0,0,[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[]],[[]],[[]],[[]],[[]],[[]],[[43,26],69],[[43,37],69]],"p":[[8,"Clone"],[8,"Ord"],[3,"SpkTxOutIndex"],[3,"BTreeMap"],[3,"BlockId"],[3,"ConfirmationHeightAnchor"],[3,"ConfirmationTimeAnchor"],[4,"ChainPosition"],[4,"ConfirmationTime"],[3,"FullTxOut"],[3,"SpkIterator"],[4,"Ordering"],[3,"Persist"],[4,"Option"],[4,"Result"],[15,"u32"],[8,"Anchor"],[15,"u64"],[8,"PartialEq"],[15,"bool"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[8,"Hash"],[3,"Script"],[3,"Transaction"],[3,"OutPoint"],[3,"TxOut"],[3,"ScriptBuf"],[15,"i64"],[15,"usize"],[3,"BTreeSet"],[8,"RangeBounds"],[8,"DoubleEndedIterator"],[8,"PartialOrd"],[8,"ExactSizeIterator"],[3,"Txid"],[3,"TypeId"],[8,"Append"],[3,"ChangeSet"],[8,"Indexer"],[3,"IndexedTxGraph"],[3,"TxGraph"],[8,"Default"],[3,"ChangeSet"],[3,"ChangeSet"],[8,"IntoIterator"],[3,"Balance"],[3,"KeychainTxOutIndex"],[4,"DescriptorPublicKey"],[4,"Descriptor"],[8,"Iterator"],[3,"String"],[3,"LocalChain"],[6,"ChangeSet"],[3,"Update"],[3,"CannotConnectError"],[3,"CheckPoint"],[3,"InsertBlockError"],[3,"BlockHash"],[3,"CheckPointIter"],[3,"Demand"],[8,"FnMut"],[4,"CalculateFeeError"],[3,"Amount"],[3,"SignedAmount"],[3,"TxNode"],[3,"CanonicalTx"],[3,"TxDescendants"],[3,"HashSet"],[8,"ChainOracle"],[8,"PersistBackend"],[8,"DescriptorExt"],[13,"Confirmed"],[13,"Unconfirmed"]]},\ +"bdk_chain":{"doc":"This crate is a collection of core structures for Bitcoin …","t":[8,8,17,3,17,8,4,3,4,3,13,13,8,16,3,2,16,3,8,3,3,2,13,13,16,11,10,11,11,11,12,12,10,11,2,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,12,12,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,10,11,12,11,11,11,0,10,0,11,2,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,12,12,12,3,16,3,8,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,10,10,12,10,11,11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,3,6,3,3,3,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,4,3,3,13,13,3,3,3,3,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11],"n":["Anchor","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeAnchor","Confirmed","Confirmed","DescriptorExt","Error","FullTxOut","IndexedTxGraph","LoadError","Persist","PersistBackend","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","WriteError","all_spks","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","apply_changeset","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","commit","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","deserialize","deserialize","deserialize","deserialize","dust_value","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","get_chain_tip","hash","hash","hash","hash","hash","hash","height","index_of_spk","index_tx","index_txout","indexed_tx_graph","initial_changeset","insert_spk","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","load_from_persistence","local_chain","mark_used","miniscript","net_value","new","new","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serialize","serialize","serialize","serialize","spent_by","spk_at_index","stage","staged","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","write_changes","height","last_seen","time","ChangeSet","ChangeSet","IndexedTxGraph","Indexer","append","apply_changeset","apply_changeset","apply_update","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph","index","index_tx","index_txout","indexer","initial_changeset","initial_changeset","insert_relevant_txs","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","ChangeSet","KeychainTxOutIndex","add","add_keychain","append","apply_changeset","apply_changeset","as_inner","as_ref","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","confirmed","default","default","default","deref","deserialize","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","immature","index_tx","index_txout","initial_changeset","inner","into","into","into","is_empty","is_tx_relevant","keychains","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead_to_target","lookahead_to_target_multi","lookaheads","mark_used","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_spks_of_all_keychains","revealed_spks_of_keychain","serialize","serialize","set_lookahead","set_lookahead_for_all","spks_of_all_keychains","spks_of_keychain","to_owned","to_owned","to_owned","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_into","try_into","try_into","txouts_of_keychain","type_id","type_id","type_id","unmark_used","untrusted_pending","unused_spks_of_keychain","vzip","vzip","vzip","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InsertBlockError","LocalChain","Update","apply_changeset","apply_update","block_id","blocks","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","default","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_blocks","from_changeset","from_tip","get_chain_tip","hash","height","height","initial_changeset","insert_block","into","into","into","into","into","into","into_iter","into_iter","introduce_older_blocks","is_block_in_chain","is_empty","iter","iter_checkpoints","new","next","original_hash","prev","provide","provide","push","tip","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","append","apply_changeset","apply_update","as_ref","balance","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_of_tx","eq","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_chain_txs","missing_heights","missing_heights_from","new","next","next","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_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_chain_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txs","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":["bdk_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::ConfirmationTime","","","bdk_chain::indexed_tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::keychain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::local_chain","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","bdk_chain::tx_graph","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Trait that “anchors” blockchain data to a specific …","Trait that makes an object appendable.","Maximum BIP32 derivation index.","A reference to a block in the canonical chain.","How many confirmations are needed f or a coinbase output …","Represents a service that tracks the blockchain.","Represents the observed position of some chain data.","An Anchor implementation that also records the exact …","Block height and timestamp at which a transaction is …","An Anchor implementation that also records the exact …","The chain data is seen as confirmed, and in anchored by A.","The confirmed variant.","A trait to extend the functionality of a miniscript …","Error type.","A TxOut with as much data as we can retrieve about it","","The error the backend returns when it fails to load …","Persist wraps a PersistBackend (B) to create a convenient …","A persistence backend for Persist.","An iterator for derived script pubkeys.","An index storing TxOuts that have a script pubkey that …","","The chain data is seen in mempool at this given timestamp.","The unconfirmed variant.","The error the backend returns when it fails to write.","The script pubkeys that are being tracked by the index.","Returns the BlockId that the associated blockchain data is …","","","","The anchor block.","The anchor block.","Append another object of the same type onto self.","","","","","","","","","","","","","","","","","","","","","The position of the transaction in outpoint in the overall …","","","","","","","","","","","","","","","","","Maps a ChainPosition<&A> into a ChainPosition<A> by …","","","","","","","Commit the staged changes to the underlying persistence …","The exact confirmation height of the transaction.","The confirmation height of the chain data being anchored.","Get the upper bound of the chain data’s confirmation …","Get the upper bound of the chain data’s confirmation …","Determines the upper bound of the confirmation height.","","","The confirmation time of the chain data being anchored.","","","","","","","","","Returns the minimum value (in satoshis) at which an output …","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the best chain’s chain tip.","","","","","","The hash of the block.","The height of the block.","Returns the index associated with the script pubkey.","","","Contains the IndexedTxGraph structure and associated types.","","Adds a script pubkey to scan for. Returns false and does …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Determines whether block of BlockId exists as an ancestor …","Returns whether ChainPosition is confirmed or not.","Returns whether ConfirmationTime is the confirmed variant.","Whether the utxo is/was/will be spendable with chain tip.","Returns whether the structure is considered empty.","Whether the txout is considered mature.","Whether this output is on a coinbase transaction.","Whether any of the inputs of this transaction spend a …","","Returns whether the script pubkey at index has been used …","Module for keychain related structures.","Return the aggregate changeset C from persistence.","The LocalChain is a local implementation of ChainOracle.","Marks the script pubkey at index as used even though it …","","Computes the net value that this transaction gives to the …","Create a new Persist from PersistBackend.","Creates a new script pubkey iterator starting at 0 from a …","","","The location of the TxOut.","Get a reference to the set of indexed outpoints.","Iterates over all the outputs with script pubkeys in an …","","","","","","","Scans a transaction’s outputs for matching script …","Scan a single TxOut for a matching script pubkey and …","Computes total input value going from script pubkeys in …","","","","","The txid and chain position of the transaction (if any) …","Returns the script that has been inserted at the index.","Stage a changeset to be committed later with commit.","Get the changes that have not been committed yet.","","","","","","","","","","","","","","","","","","","","","","","","","","","Module for structures that store and traverse transactions.","Returns the txout and script pubkey index of the TxOut at …","The TxOut.","Iterate over all known txouts that spend to tracked script …","Finds all txouts on a transaction that has previously been …","","","","","","","","","","Construct an unconfirmed variant using the given last_seen …","Undoes the effect of mark_used. Returns whether the index …","Iterates over all unused script pubkeys in an index range.","","","","","","","","","","Writes a changeset to the persistence backend.","Confirmation height.","The last-seen timestamp in unix seconds.","Confirmation time in unix seconds.","A structure that represents changes to an IndexedTxGraph.","The resultant “changeset” when new transaction data is …","A struct that combines TxGraph and an Indexer …","Utilities for indexing transaction data.","","Apply changeset to itself.","Applies the ChangeSet to the IndexedTxGraph.","Apply an update directly.","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","Get a reference of the internal transaction graph.","TxGraph changeset.","Transaction index.","Scans a transaction for relevant outpoints, which are …","Scan and index the given outpoint and txout.","Indexer changeset.","Determines the ChangeSet between self and an empty Indexer.","Determines the ChangeSet between self and an empty …","Insert relevant transactions from the given txs iterator.","Insert and index a transaction into the graph.","Insert a floating txout of given outpoint.","Calls U::from(self).","Calls U::from(self).","","Determines whether the transaction should be included in …","Construct a new IndexedTxGraph with a given index.","","","","","","","","","","","Balance, differentiated into various categories.","Represents updates to the derivation index of a …","A convenient wrapper around SpkTxOutIndex that relates …","","Add a keychain to the tracker’s txout_index with a …","Append another ChangeSet into self.","Applies the derivation changeset to the KeychainTxOutIndex…","","Get the inner map of the keychain to its new derivation …","","","","","","","","","","","","","","Confirmed and immediately spendable balance","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","All coinbase outputs not yet matured","","","","Return a reference to the internal SpkTxOutIndex.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns whether the changeset are empty.","","Return a reference to the internal map of the keychain to …","Get the last derivation index revealed for keychain.","Get the last derivation index that is revealed for each …","Returns the highest derivation index of the keychain where …","Returns the highest derivation index of each keychain that …","Store lookahead scripts until target_index.","Convenience method to call lookahead_to_target for …","Return the lookahead setting for each keychain.","Marks the script pubkey at index as used even though the …","Get the next derivation index for keychain. The next index …","Gets the next unused script pubkey in the keychain. I.e., …","Get a reference to the set of indexed outpoints.","Attempts to reveal the next script pubkey for keychain.","Reveals script pubkeys of the keychain’s descriptor up …","Convenience method to call Self::reveal_to_target on …","Convenience method to get revealed_spks_of_keychain of all …","Iterates over the script pubkeys revealed by this index …","","","Set the lookahead count for keychain.","Convenience method to call set_lookahead for all keychains.","Generates script pubkey iterators for every keychain. The …","Generates a script pubkey iterator for the given keychain…","","","","","Get the whole balance visible to the wallet.","Unconfirmed UTXOs generated by a wallet tx","Get sum of trusted_pending and confirmed coins.","","","","","","","Iterates over all the OutPoint that have a TxOut with a …","","","","Undoes the effect of mark_used. Returns whether the index …","Unconfirmed UTXOs received from an external wallet","Iterates over all unused script pubkeys for a keychain …","","","","Occurs when an update does not have a common checkpoint …","A structure that represents changes to LocalChain.","A LocalChain checkpoint is used to find the agreement …","A structure that iterates over checkpoints backwards.","Represents a failure when trying to insert a checkpoint …","This is a local implementation of ChainOracle.","A struct to update LocalChain.","Apply the given changeset.","Applies the given update to the chain.","Get the BlockId of the checkpoint.","Get a reference to the internal index mapping the height …","","","","","","","","","","","","","","","","","","","","","","","","","","","Extends the checkpoint linked list by a iterator of block …","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Constructs a LocalChain from a BTreeMap of height to …","Construct a LocalChain from an initial changeset.","Construct a LocalChain from a given checkpoint tip.","","Get the block hash of the checkpoint.","Get the height of the checkpoint.","The checkpoints’ height.","Derives an initial ChangeSet, meaning that it can be …","Insert a BlockId.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Whether the update allows for introducing older blocks.","","Returns whether the LocalChain is empty (has no …","Iterate from this checkpoint in descending height.","Iterate over checkpoints in descending height order.","Construct a new base block at the front of a linked list.","","Original checkpoint’s block hash.","Get the previous checkpoint in the chain","","","Puts another checkpoint onto the linked list representing …","Get the highest checkpoint.","The update chain’s new tip.","","","","","","","","","","","","","","The suggested checkpoint to include to connect the two …","","","","","","","","","","","","","Update checkpoint’s block hash.","","","","","","","Errors returned by TxGraph::calculate_fee.","An outwards-facing view of a transaction that is part of …","A structure that represents changes to a TxGraph.","Missing TxOut for one or more of the inputs of the tx","When the transaction is invalid according to the graph it …","An iterator that traverses ancestors of a given root …","An iterator that traverses transaction descendants.","A graph of transactions and spends.","An outward-facing view of a (transaction) node in the …","Get all transaction anchors known by TxGraph.","Iterate over all tx outputs known by TxGraph.","Iterates over the heights of that the new transaction …","The blocks that the transaction is “anchored” in.","Added anchors.","","Applies ChangeSet to TxGraph.","Extends this graph with another so that self becomes the …","","Get the total balance of outpoints that are in chain of …","","","","","","","","","","","","","","","Calculates the fee of a given transaction. Returns 0 if tx …","How the transaction is observed as (confirmed or …","","","","","","","","","","","","","","","","","","","Given a transaction, return an iterator of txids that …","","","","","","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","Iterate over floating txouts known by TxGraph.","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Iterate over all full transactions in the graph.","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","Get a transaction by txid. This only returns Some for full …","Get a transaction node by txid. This only returns Some for …","Obtains a single tx output (if any) at the specified …","Determines the ChangeSet between self and an empty TxGraph.","Inserts the given anchor into TxGraph.","Inserts the given seen_at for txid into TxGraph.","Inserts the given transaction into TxGraph.","Inserts the given TxOut at OutPoint.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Whether the graph has any transactions or outputs in it.","","Returns true if the ChangeSet is empty (no transactions or …","Added last-seen unix timestamps of transactions.","The last-seen unix timestamp of the transaction as …","List graph transactions that are in chain with chain_tip.","Find missing block heights of chain.","Returns an iterator for the anchor_heights in this …","Construct a new TxGraph from a list of transactions.","","","The transactions spending from this output.","","","","","","","","Get the total balance of outpoints that are in chain of …","Get a filtered list of outputs from the given outpoints …","Get a filtered list of unspent outputs (UTXOs) from the …","","","","","","","","Get the position of the transaction in chain with tip …","Get the txid of the spending transaction and where the …","","","","","","","","List graph transactions that are in chain with chain_tip.","A partial or full representation of the transaction.","The transaction node (as part of the graph).","Returns known outputs of a given txid.","Iterates over the transactions spending from txid.","Txid of the transaction.","Iterates over all outpoints contained within ChangeSet.","Added txouts.","Added transactions.","","","","","","","","","","","","","","","Creates an iterator that filters and maps ancestor …","Creates an iterator that both filters and maps conflicting …","Creates an iterator that filters and maps descendants from …"],"i":[0,0,0,0,0,0,0,0,0,0,8,9,0,72,0,0,73,0,0,0,0,0,8,9,73,3,17,5,6,7,6,7,39,3,0,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,10,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,11,8,8,9,5,6,7,10,13,6,7,17,17,8,6,7,7,3,5,6,7,9,5,6,7,74,8,9,5,6,7,10,3,8,9,5,6,7,10,13,3,8,9,9,5,5,5,6,7,10,13,11,72,8,9,5,6,7,5,5,3,3,3,0,3,3,3,8,9,5,6,7,10,13,11,11,72,8,9,10,39,10,10,3,3,3,0,73,0,3,0,3,13,11,11,11,10,3,3,8,9,5,6,7,10,3,3,3,9,5,6,7,10,3,13,13,3,8,9,5,6,7,10,11,3,8,9,5,6,7,10,13,11,3,8,9,5,6,7,10,13,11,0,3,10,3,3,3,8,9,5,6,7,10,13,11,9,3,3,3,8,9,5,6,7,10,13,11,73,75,76,75,0,41,0,0,40,41,42,42,42,40,42,40,40,40,42,40,40,40,42,40,42,40,40,40,42,40,42,41,41,40,41,42,42,42,42,42,40,40,41,42,40,40,42,40,42,40,42,40,42,40,0,0,0,48,49,46,49,49,46,46,49,46,48,49,46,48,49,46,48,49,46,48,48,49,46,48,49,46,48,46,48,49,46,48,48,49,46,48,48,49,49,49,49,49,46,48,46,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,46,48,49,49,49,49,49,46,48,48,48,48,48,49,46,48,49,46,48,49,49,46,48,49,48,49,49,46,48,0,0,0,0,0,0,0,54,54,58,54,61,58,56,54,59,57,61,58,56,54,59,57,58,56,54,59,57,58,56,54,59,57,54,54,59,57,58,58,56,54,59,59,57,57,61,58,56,54,54,59,57,54,54,54,54,58,58,59,54,54,61,58,56,54,59,57,61,58,56,54,54,58,54,58,61,59,58,59,57,58,54,56,58,56,54,59,57,59,57,61,58,56,54,59,57,57,61,58,56,54,59,57,61,58,56,54,59,57,59,61,58,56,54,59,57,0,0,0,64,64,0,0,0,0,43,43,45,67,45,45,43,43,43,43,69,70,43,67,68,64,45,69,70,43,67,68,64,45,43,68,69,69,70,70,43,67,68,45,43,67,68,45,67,68,43,45,67,45,43,43,67,68,64,45,43,43,43,43,67,68,64,45,69,70,43,67,68,64,45,43,43,43,43,43,43,43,43,43,43,43,69,70,43,67,68,64,45,69,70,43,45,45,45,67,43,43,45,43,69,70,43,67,68,45,43,67,68,45,43,43,43,69,70,43,67,68,64,45,43,43,69,70,43,67,68,64,45,43,67,68,43,43,67,45,45,45,69,70,43,67,68,64,45,69,70,43,67,68,64,45,43,43,43],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[3,[[0,[1,2]]]]],4],[[],5],[5,5],[6,5],[7,5],0,0,[[]],[[[3,[[0,[1,2]]]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[3,[1]]],[[3,[1]]]],[[[8,[1]]],[[8,[1]]]],[9,9],[5,5],[6,6],[7,7],[[[10,[1]]],[[10,[1]]]],[[[11,[1]]],[[11,[1]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,[[8,[1]]]],[[[8,[2]],8],12],[[9,9],12],[[5,5],12],[[6,6],12],[[7,7],12],[[[10,[2]],10],12],[13,[[15,[14]]]],0,0,[[],16],[[],16],[[[8,[17]]],[[14,[16]]]],[6,16],[7,16],0,[[],3],[[],5],[[],6],[[],7],[[],[[15,[9]]]],[[],[[15,[5]]]],[[],[[15,[6]]]],[[],[[15,[7]]]],[[],18],[[[8,[19]],8],20],[[9,9],20],[[5,5],20],[[6,6],20],[[7,7],20],[[[10,[19]],10],20],[[[3,[21]],22],23],[[[8,[21]],22],23],[[9,22],23],[[5,22],23],[[6,22],23],[[7,22],23],[[[10,[21]],22],23],[[[13,[21,21]],22],23],[[]],[[]],[[]],[[[8,[7]]],9],[[]],[[],5],[[],5],[[]],[[]],[[]],[[]],[[]],[[],[[15,[[14,[5]]]]]],[[[8,[24]]]],[9],[5],[6],[7],0,0,[[[3,[[0,[1,2]]]],25],14],[[[3,[[0,[1,2]]]],26]],[[[3,[[0,[1,2]]]],27,28]],0,[[[3,[[0,[1,2]]]]]],[[[3,[[0,[1,2]]]],[0,[1,2]],29],20],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,5],[[15,[[14,[20]]]]]],[8,20],[9,20],[[[10,[17]],16],20],[[],20],[[[10,[17]],16],20],0,[[[3,[[0,[1,2]]]],26],20],[[[3,[[0,[1,2]]]],26],20],[[[3,[[0,[1,2]]]]],20],0,[[],15],0,[[[3,[[0,[1,2]]]]],20],0,[[[3,[[0,[1,2]]]],26],30],[[],13],[[],11],[11,14],[[11,31],14],0,[[[3,[[0,[1,2]]]]],32],[[[3,[[0,[1,2]]]],[33,[[0,[1,2]]]]],34],[[[8,[35]],8],[[14,[12]]]],[[9,9],[[14,[12]]]],[[5,5],[[14,[12]]]],[[6,6],[[14,[12]]]],[[7,7],[[14,[12]]]],[[[10,[35]],10],[[14,[12]]]],[[[3,[[0,[1,2]]]],26],[[32,[[0,[1,2]]]]]],[[[3,[[0,[1,2]]]],27,28],14],[[[3,[[0,[1,2]]]],26]],[9,15],[5,15],[6,15],[7,15],0,[[[3,[[0,[1,2]]]]],[[14,[25]]]],[13],[13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[[3,[[0,[1,2]]]],27],14],0,[[[3,[[0,[1,2]]]]],[[0,[34,36]]]],[[[3,[[0,[1,2]]]],37],34],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[18,9],[[[3,[[0,[1,2]]]]],20],[[[3,[[0,[1,2]]]]],34],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],0,0,0,0,0,0,0,[[[40,[17,39]],[40,[17,39]]]],[[]],[[[42,[17,41]],[40,[17]]]],[[[42,[17,41]],[43,[17]]],[[40,[17]]]],[[]],[[]],[[]],[[]],[[[40,[1,1]]],[[40,[1,1]]]],[[]],[[],[[42,[44]]]],[[],[[40,[44]]]],[[],[[15,[40]]]],[[[40,[19,19]],40],20],[[[42,[21,21]],22],23],[[[40,[21,21]],22],23],[[]],[45,[[40,[44]]]],[[]],[46,[[40,[46]]]],[42,43],0,0,[26],[[27,28]],0,[[]],[[[42,[17,41]]],[[40,[17]]]],[[[42,[17,41]],47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],26,47,[14,[18]]],[[40,[17]]]],[[[42,[17,41]],27,28],[[40,[17]]]],[[]],[[]],[[[40,[17,39]]],20],[26,20],[[],42],[40,15],[[]],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[]],[[]],0,0,0,[[48,48],48],[[[49,[[0,[1,2,21]]]],[0,[1,2,21]],[51,[50]]]],[[[46,[2]],[46,[2]]]],[[[49,[[0,[1,2,21]]]],[46,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[46,4],[46,4],[[]],[[]],[[]],[[]],[[]],[[]],[[[49,[1]]],[[49,[1]]]],[[[46,[1]]],[[46,[1]]]],[48,48],[[]],[[]],[[]],0,[[],49],[[],46],[[],48],[49],[[],[[15,[46]]]],[[],[[15,[48]]]],[[[46,[19]],46],20],[[48,48],20],[[[49,[21]],22],23],[[[46,[21]],22],23],[[48,22],23],[[48,22],23],[[]],[[]],[[]],0,[[[49,[[0,[1,2,21]]]],26]],[[[49,[[0,[1,2,21]]]],27,28]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]],3],[[]],[[]],[[]],[[[46,[2]]],20],[[[49,[[0,[1,2,21]]]],26],20],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]]],[[14,[16]]]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],[4,[[0,[1,2,21]],16]]]],[[[49,[[0,[1,2,21]]]]],4],[[[49,[[0,[1,2,21]]]],16],20],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]]],32],[[[49,[[0,[1,2,21]]]]]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],4]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[0,[52,1]]]]]],[[[49,[[0,[1,2,21]]]]],[[0,[34,1]]]],[46,15],[48,15],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]],16]],[[[49,[[0,[1,2,21]]]]],[[4,[[0,[1,2,21]],[11,[[51,[50]]]]]]]],[[[49,[[0,[1,2,21]]]]],[[11,[[51,[50]]]]]],[[]],[[]],[[]],[[],53],[48,18],0,[48,18],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[49,[[0,[1,2,21]]]]],34],[[],38],[[],38],[[],38],[[[49,[[0,[1,2,21]]]],16],20],0,[[[49,[[0,[1,2,21]]]]],34],[[]],[[]],[[]],0,0,0,0,0,0,0,[[54,55]],[[54,56],[[15,[55,57]]]],[58,5],[54,4],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[58,58],[56,56],[54,54],[59,59],[57,57],[[]],[[]],[[]],[[]],[[]],[[],54],[[54,54],20],[[59,59],20],[[57,57],20],[[58,47],[[15,[58,58]]]],[[58,22],23],[[56,22],23],[[54,22],23],[[59,22],23],[[59,22],23],[[57,22],23],[[57,22],23],[[]],[[]],[[]],[[[4,[16,60]]],54],[[]],[[]],[[]],[[[4,[16,60]]],54],[55,54],[58,54],[54,[[15,[[14,[5]]]]]],[58,60],[58,16],0,[54,55],[[54,5],[[15,[55,59]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[58],0,[[54,5,5],[[15,[[14,[20]]]]]],[54,20],[58,61],[54,61],[5,58],[61,14],0,[58,[[14,[58]]]],[62],[62],[[58,5],[[15,[58,58]]]],[54,[[14,[58]]]],0,[[]],[[]],[[]],[[]],[[]],[[],53],[[],53],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],0,[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],0,[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[43,32],[43,52],[45,52],0,0,[[[45,[2]],[45,[2]]]],[[[43,[[0,[1,2]]]],[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],[43,[[0,[1,2]]]]],[[45,[[0,[1,2]]]]]],[43,43],[[[43,[17]],5,47,63],48],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,26],[[15,[18,64]]]],0,[[],[[14,[65]]]],[[],[[14,[66]]]],[[],[[14,[66]]]],[[],[[14,[65]]]],[[[43,[1]]],[[43,[1]]]],[[[67,[1,1]]],[[67,[1,1]]]],[[[68,[1,1]]],[[68,[1,1]]]],[[[45,[1]]],[[45,[1]]]],[[]],[[]],[[]],[[]],[[[67,[2,2]],67],12],[[[68,[2,2]],68],12],[[],43],[[],45],[67],[[],[[15,[45]]]],[[43,26],52],[[[43,[19]],43],20],[[[67,[19,19]],67],20],[[[68,[19,19]],68],20],[[64,64],20],[[[45,[19]],45],20],[[[43,[17]],5,47],52],[[[43,[17]],5,47],52],[43,52],[[[43,[21]],22],23],[[[67,[21,21]],22],23],[[[68,[21,21]],22],23],[[64,22],23],[[[45,[21]],22],23],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[43,52],[[[43,[17]],5,37],[[14,[8]]]],[[[43,[17]],5,27],14],[[43,37],[[14,[26]]]],[[43,37],[[14,[[67,[26]]]]]],[[43,27],[[14,[28]]]],[[[43,[[0,[1,2]]]]],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,[0,[1,2]]],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],37,18],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],26],[[45,[[0,[1,2]]]]]],[[[43,[[0,[1,2]]]],27,28],[[45,[[0,[1,2]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[43,20],[[[45,[2]]],20],[45,20],0,0,[[[43,[17]],5],52],[[[43,[17]],54],52],[[45,54],52],[47,[[43,[[0,[1,2]]]]]],[69,14],[70,14],[[43,27],71],[[[67,[35,35]],67],[[14,[12]]]],[[[68,[35,35]],68],[[14,[12]]]],[45,15],[[]],[[]],[[]],[[]],[[[43,[17]],5,47,63],[[15,[48]]]],[[[43,[17]],5,47],52],[[[43,[17]],5,47],52],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5,37],[[15,[[14,[8]]]]]],[[[43,[17]],5,27],[[15,[14]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[[43,[17]],5],52],0,0,[[43,37],[[14,[[4,[16,28]]]]]],[[43,37],34],0,[45,52],0,0,[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,26],69],[[43,26],70],[[43,37],70]],"p":[[8,"Clone"],[8,"Ord"],[3,"SpkTxOutIndex"],[3,"BTreeMap"],[3,"BlockId"],[3,"ConfirmationHeightAnchor"],[3,"ConfirmationTimeAnchor"],[4,"ChainPosition"],[4,"ConfirmationTime"],[3,"FullTxOut"],[3,"SpkIterator"],[4,"Ordering"],[3,"Persist"],[4,"Option"],[4,"Result"],[15,"u32"],[8,"Anchor"],[15,"u64"],[8,"PartialEq"],[15,"bool"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[8,"Hash"],[3,"Script"],[3,"Transaction"],[3,"OutPoint"],[3,"TxOut"],[3,"ScriptBuf"],[15,"i64"],[15,"usize"],[3,"BTreeSet"],[8,"RangeBounds"],[8,"DoubleEndedIterator"],[8,"PartialOrd"],[8,"ExactSizeIterator"],[3,"Txid"],[3,"TypeId"],[8,"Append"],[3,"ChangeSet"],[8,"Indexer"],[3,"IndexedTxGraph"],[3,"TxGraph"],[8,"Default"],[3,"ChangeSet"],[3,"ChangeSet"],[8,"IntoIterator"],[3,"Balance"],[3,"KeychainTxOutIndex"],[4,"DescriptorPublicKey"],[4,"Descriptor"],[8,"Iterator"],[3,"String"],[3,"LocalChain"],[6,"ChangeSet"],[3,"Update"],[3,"CannotConnectError"],[3,"CheckPoint"],[3,"InsertBlockError"],[3,"BlockHash"],[3,"CheckPointIter"],[3,"Demand"],[8,"FnMut"],[4,"CalculateFeeError"],[3,"SignedAmount"],[3,"Amount"],[3,"TxNode"],[3,"CanonicalTx"],[3,"TxAncestors"],[3,"TxDescendants"],[3,"HashSet"],[8,"ChainOracle"],[8,"PersistBackend"],[8,"DescriptorExt"],[13,"Confirmed"],[13,"Unconfirmed"]]},\ "bdk_coin_select":{"doc":"","t":[3,3,4,4,3,3,13,6,13,3,4,13,13,13,3,4,3,13,13,17,13,13,13,13,13,3,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,12,11,12,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,12,12,12,12,11,11,11,11,12,11,12,12,11,12,12,12,11,11,11,11,12,11,11,11,11,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11],"n":["Bnb","BnbIter","BnbLimit","BranchStrategy","CoinSelector","CoinSelectorOpt","Continue","DecideStrategy","Duration","ExcessStrategy","ExcessStrategyKind","MinAbsoluteFee","MinDrainValue","Rounds","Selection","SelectionConstraint","SelectionError","SkipBoth","SkipInclusion","TXIN_BASE_WEIGHT","TargetFee","TargetValue","ToDrain","ToFee","ToRecipient","WeightedValue","advertise_new_score","all_selected","apply_selection","backtrack","base_weight","best_score","best_strategy","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","candidate","candidates","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_select_bnb","current_excess","current_weight","deselect","drain_value","drain_waste","drain_weight","effective_target","effective_value","eq","eq","excess","excess_strategies","fee","feerate","finish","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward","from","from","from","from","from","from","from","from","from","from","from","from","from","from","fund_outputs","hash","input_count","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_segwit","is_selected","long_term_feerate","long_term_feerate","max_extra_target","min_absolute_fee","min_drain_value","new","new","new","next","opts","partial_cmp","pool","pool_pos","provide","recipient_value","rem_abs","rem_eff","select","select_all","select_until_finished","selected","selected","selected_absolute_value","selected_count","selected_effective_value","selected_indexes","selected_waste","selected_weight","selection","spend_drain_weight","target_feerate","target_value","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unselected","unselected_indexes","value","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","waste","weight","weight","will_continue"],"q":["bdk_coin_select","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Bnb represents the current state of the BnB algorithm.","","Determines how we should limit rounds of branch and bound.","Strategy in which we should branch.","CoinSelector selects and deselects from a set of …","","We continue exploring subtrees of this node, starting with …","Closure to decide the branching strategy, alongside a …","","","","Min absolute fee is not met","Min drain value is not met","","","","","We skip both the inclusion and omission branches of this …","We continue exploring ONLY the omission branch of this …","Txin “base” fields include outpoint (32+4) and …","The target fee (given the feerate) is not met","The target is not met","","","","A WeightedValue represents an input candidate for …","Compare the advertised score with the current best. The …","","","Attempt to backtrack to the previously selected node’s …","The weight of the template transaction, including fixed …","","Returns the ExcessStrategy that results in the least waste.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","This is a variation of the Branch and Bound Coin Selection …","Current excess.","Current weight of template tx + selected inputs.","","","","Additional weight if we include the drain (change) output.","This is the effective target value.","Effective value of this input candidate: …","","","","","","Returns feerate in sats/wu.","","","","","","","","","","","","","Continue down this branch and skip the inclusion branch if …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","The total number of inputs; so we can calculate extra …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Turns our Bnb state into an iterator.","","","Whether this WeightedValue contains at least one segwit …","","","The feerate","Additional leeway for the target value.","The minimum absolute fee. I.e., needed for RBF.","Minimum value allowed for a drain (change) output.","Creates a new Bnb.","Create a new WeightedValue that represents a single input.","","","","","","","","","","","","","","","","Absolute value sum of all selected inputs.","","Effective value sum of all selected inputs.","","Waste sum of all selected inputs.","Weight sum of all selected inputs.","","Weight of spending the drain (change) output in the future.","The feerate we should try and achieve in sats per weight …","The value we need to select. If the value is None, then …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Total value of the UTXO(s) that this WeightedValue …","","","","","","","","","","","","","","Total weight of including this/these UTXO(s). txin fields: …","",""],"i":[0,0,0,0,0,0,34,0,22,0,0,11,11,22,0,0,0,34,34,0,11,11,12,12,12,0,2,4,5,2,9,2,5,34,2,26,22,8,9,4,10,11,5,12,13,34,2,26,22,8,9,4,10,11,5,12,13,4,4,8,9,4,10,11,5,12,13,8,9,4,10,11,5,12,13,12,0,4,4,4,13,9,9,4,8,11,12,5,5,13,13,4,8,9,4,10,10,11,11,5,12,12,13,2,34,2,26,22,22,22,8,9,4,10,11,5,12,13,9,12,8,34,2,26,22,8,9,4,10,11,5,12,13,2,26,4,8,4,9,9,9,9,9,2,8,4,26,4,12,2,2,10,13,2,2,4,4,4,4,5,4,4,4,4,4,4,2,9,9,9,8,9,4,10,11,5,12,13,10,11,12,34,2,26,22,8,9,4,10,11,5,12,13,34,2,26,22,8,9,4,10,11,5,12,13,34,2,26,22,8,9,4,10,11,5,12,13,4,4,8,34,2,26,22,8,9,4,10,11,5,12,13,13,8,13,34],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[[2,[1]],1],3],[4,3],[5,6],[[[2,[1]]],3],0,0,[5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[4,7],8],0,[8,8],[9,9],[4,4],[10,10],[11,11],[5,5],[12,12],[13,13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[12,12],14],[4,[[15,[4]]]],[4,16],[4,17],[[4,7],3],0,[9,16],0,[4,16],[[8,18],16],[[11,11],3],[[12,12],3],0,0,0,[13,18],[4,[[19,[5,10]]]],[[8,20],21],[[9,20],21],[[4,20],21],[[10,20],21],[[10,20],21],[[11,20],21],[[11,20],21],[[5,20],21],[[12,20],21],[[12,20],21],[[13,20],21],[[[2,[1]],3]],[[]],[[]],[[]],[[]],[7,22],[23,22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[24,17],9],[12],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]],25],[[26,[1]]]],[[]],[4,3],0,[[4,7],3],[9,18],0,0,0,0,[[4,27,1],[[2,[1]]]],[[28,17,3],8],[[27,9],4],[[[26,[[0,[1,29,30]]]]],15],0,[[12,12],[[15,[14]]]],0,0,[31],0,0,0,[[4,7],3],[4],[4,[[19,[5,10]]]],[4,6],0,[4,28],[4,7],[4,16],[4,6],[4,16],[4,17],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],32],[[],32],[[],32],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[[],33],[4,6],[4,6],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[34,3]],"p":[[8,"Ord"],[3,"Bnb"],[15,"bool"],[3,"CoinSelector"],[3,"Selection"],[8,"Iterator"],[15,"usize"],[3,"WeightedValue"],[3,"CoinSelectorOpt"],[3,"SelectionError"],[4,"SelectionConstraint"],[4,"ExcessStrategyKind"],[3,"ExcessStrategy"],[4,"Ordering"],[4,"Option"],[15,"i64"],[15,"u32"],[15,"f32"],[4,"Result"],[3,"Formatter"],[6,"Result"],[4,"BnbLimit"],[3,"Duration"],[3,"TxOut"],[6,"DecideStrategy"],[3,"BnbIter"],[3,"Vec"],[15,"u64"],[8,"Copy"],[8,"Display"],[3,"Demand"],[3,"String"],[3,"TypeId"],[4,"BranchStrategy"]]},\ "bdk_electrum":{"doc":"This crate is used for updating structures of the bdk_chain…","t":[8,3,3,2,11,11,11,11,12,11,11,11,2,11,11,11,11,11,11,11,11,11,12,10,11,11,11,11,11,11,11,11,11,11,11],"n":["ElectrumExt","ElectrumUpdate","RelevantTxids","bdk_chain","borrow","borrow","borrow_mut","borrow_mut","chain_update","clone","clone_into","default","electrum_client","fmt","fmt","from","from","into","into","into_confirmation_time_tx_graph","into_tx_graph","missing_full_txs","relevant_txids","scan","scan_without_keychain","scan_without_keychain","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip"],"q":["bdk_electrum","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["Trait to extend Client functionality.","Combination of chain and transactions updates from electrum","Represents updates fetched from an Electrum server, but …","","","","","","Chain update","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Finalizes RelevantTxids with new_txs and anchors of type …","Finalizes the TxGraph update by fetching missing txids …","Determine the full transactions that are missing from graph…","Transaction updates from electrum","Scan the blockchain (via electrum) for the data specified …","Convenience method to call scan without requiring a …","Convenience method to call scan without requiring a …","","","","","","","","",""],"i":[0,0,0,0,1,4,1,4,4,1,1,1,0,1,4,1,4,1,4,1,1,1,4,22,22,22,1,1,4,1,4,1,4,1,4],"f":[0,0,0,0,[[]],[[]],[[]],[[]],0,[1,1],[[]],[[],1],0,[[1,2],3],[[4,2],3],[[]],[[]],[[]],[[]],[[1,5,[7,[6]],[9,[8]]],[[13,[[11,[10]],12]]]],[[1,5,[7,[6]],[9,[8]]],[[13,[[11,[14]],12]]]],[[1,11],[[9,[8]]]],0,[[[7,[15]],[19,[[0,[16,17]],18]],18,18,20,20],[[13,[12]]]],[[[7,[15]],18,18,18,20],[[13,[4,12]]]],[[[7,[15]],18,18,18,20],[[13,[4,12]]]],[[]],[[],13],[[],13],[[],13],[[],13],[[],21],[[],21],[[]],[[]]],"p":[[3,"RelevantTxids"],[3,"Formatter"],[6,"Result"],[3,"ElectrumUpdate"],[3,"Client"],[15,"u64"],[4,"Option"],[3,"Txid"],[3,"Vec"],[3,"ConfirmationTimeAnchor"],[3,"TxGraph"],[4,"Error"],[4,"Result"],[3,"ConfirmationHeightAnchor"],[3,"CheckPoint"],[8,"Ord"],[8,"Clone"],[8,"IntoIterator"],[3,"BTreeMap"],[15,"usize"],[3,"TypeId"],[8,"ElectrumExt"]]},\ "bdk_esplora":{"doc":"BDK Esplora","t":[8,8,2,11,11,11,11,10,10,10,10],"n":["EsploraAsyncExt","EsploraExt","esplora_client","scan_txs","scan_txs","scan_txs","scan_txs","scan_txs_with_keychains","scan_txs_with_keychains","update_local_chain","update_local_chain"],"q":["bdk_esplora","","","","","","","","","",""],"d":["Trait to extend the functionality of …","Trait to extend the functionality of …","","Convenience method to call scan_txs_with_keychains without …","Convenience method to call scan_txs_with_keychains without …","Convenience method to call scan_txs_with_keychains without …","Convenience method to call scan_txs_with_keychains without …","Scan Esplora for the data specified and return a TxGraph …","Scan Esplora for the data specified and return a TxGraph …","Prepare an LocalChain update with blocks fetched from …","Prepare an LocalChain update with blocks fetched from …"],"i":[0,0,0,17,17,18,18,17,18,17,18],"f":[0,0,0,[[1,1,1,2],[[6,[[4,[3]],5]]]],[[1,1,1,2],[[6,[[4,[3]],5]]]],[[[0,[1,7]],[0,[1,7]],[0,[1,7]],2],[[10,[[9,[8]]]]]],[[[0,[1,7]],[0,[1,7]],[0,[1,7]],2],[[10,[[9,[8]]]]]],[[[13,[[0,[11,12]],1]],1,1,2,2],[[6,[5]]]],[[[13,[[0,[1,7]]]],[0,[1,7]],[0,[1,7]],2,2],[[10,[[9,[8]]]]]],[[[15,[14]],1],[[6,[16,5]]]],[[[15,[14]],[0,[1,7]]],[[10,[[9,[8]]]]]]],"p":[[8,"IntoIterator"],[15,"usize"],[3,"ConfirmationTimeAnchor"],[3,"TxGraph"],[4,"Error"],[4,"Result"],[8,"Send"],[8,"Future"],[3,"Box"],[3,"Pin"],[8,"Ord"],[8,"Clone"],[3,"BTreeMap"],[3,"CheckPoint"],[4,"Option"],[3,"Update"],[8,"EsploraExt"],[8,"EsploraAsyncExt"]]},\ diff --git a/docs-rs/bdk/nightly/latest/settings.html b/docs-rs/bdk/nightly/latest/settings.html index 84a9af5c58..ba5aa36ad1 100644 --- a/docs-rs/bdk/nightly/latest/settings.html +++ b/docs-rs/bdk/nightly/latest/settings.html @@ -1 +1 @@ -Rustdoc settings

    Rustdoc settings

    Back
    \ No newline at end of file +Rustdoc settings

    Rustdoc settings

    Back
    \ No newline at end of file diff --git a/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html b/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html index dca84bbf03..d1813dd886 100644 --- a/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html +++ b/docs-rs/bdk/nightly/latest/src/bdk_chain/tx_graph.rs.html @@ -1254,6 +1254,206 @@ 1254 1255 1256 +1257 +1258 +1259 +1260 +1261 +1262 +1263 +1264 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283 +1284 +1285 +1286 +1287 +1288 +1289 +1290 +1291 +1292 +1293 +1294 +1295 +1296 +1297 +1298 +1299 +1300 +1301 +1302 +1303 +1304 +1305 +1306 +1307 +1308 +1309 +1310 +1311 +1312 +1313 +1314 +1315 +1316 +1317 +1318 +1319 +1320 +1321 +1322 +1323 +1324 +1325 +1326 +1327 +1328 +1329 +1330 +1331 +1332 +1333 +1334 +1335 +1336 +1337 +1338 +1339 +1340 +1341 +1342 +1343 +1344 +1345 +1346 +1347 +1348 +1349 +1350 +1351 +1352 +1353 +1354 +1355 +1356 +1357 +1358 +1359 +1360 +1361 +1362 +1363 +1364 +1365 +1366 +1367 +1368 +1369 +1370 +1371 +1372 +1373 +1374 +1375 +1376 +1377 +1378 +1379 +1380 +1381 +1382 +1383 +1384 +1385 +1386 +1387 +1388 +1389 +1390 +1391 +1392 +1393 +1394 +1395 +1396 +1397 +1398 +1399 +1400 +1401 +1402 +1403 +1404 +1405 +1406 +1407 +1408 +1409 +1410 +1411 +1412 +1413 +1414 +1415 +1416 +1417 +1418 +1419 +1420 +1421 +1422 +1423 +1424 +1425 +1426 +1427 +1428 +1429 +1430 +1431 +1432 +1433 +1434 +1435 +1436 +1437 +1438 +1439 +1440 +1441 +1442 +1443 +1444 +1445 +1446 +1447 +1448 +1449 +1450 +1451 +1452 +1453 +1454 +1455 +1456
    //! Module for structures that store and traverse transactions.
     //!
     //! [`TxGraph`] is a monotone structure that inserts transactions and indexes the spends. The
    @@ -1310,6 +1510,7 @@
         collections::*, keychain::Balance, local_chain::LocalChain, Anchor, Append, BlockId,
         ChainOracle, ChainPosition, FullTxOut,
     };
    +use alloc::collections::vec_deque::VecDeque;
     use alloc::vec::Vec;
     use bitcoin::{OutPoint, Script, Transaction, TxOut, Txid};
     use core::{
    @@ -1575,15 +1776,39 @@
                 .map(|(outpoint, spends)| (outpoint.vout, spends))
         }
     
    +    /// Creates an iterator that filters and maps ancestor transactions.
    +    ///
    +    /// The iterator starts with the ancestors of the supplied `tx` (ancestor transactions of `tx`
    +    /// are transactions spent by `tx`). The supplied transaction is excluded from the iterator.
    +    ///
    +    /// The supplied closure takes in two inputs `(depth, ancestor_tx)`:
    +    ///
    +    /// * `depth` is the distance between the starting `Transaction` and the `ancestor_tx`. I.e., if
    +    ///    the `Transaction` is spending an output of the `ancestor_tx` then `depth` will be 1.
    +    /// * `ancestor_tx` is the `Transaction`'s ancestor which we are considering to walk.
    +    ///
    +    /// The supplied closure returns an `Option<T>`, allowing the caller to map each `Transaction`
    +    /// it visits and decide whether to visit ancestors.
    +    pub fn walk_ancestors<'g, F, O>(
    +        &'g self,
    +        tx: &'g Transaction,
    +        walk_map: F,
    +    ) -> TxAncestors<'g, A, F>
    +    where
    +        F: FnMut(usize, &'g Transaction) -> Option<O> + 'g,
    +    {
    +        TxAncestors::new_exclude_root(self, tx, walk_map)
    +    }
    +
         /// Creates an iterator that filters and maps descendants from the starting `txid`.
         ///
         /// The supplied closure takes in two inputs `(depth, descendant_txid)`:
         ///
         /// * `depth` is the distance between the starting `txid` and the `descendant_txid`. I.e., if the
    -    ///     descendant is spending an output of the starting `txid`; the `depth` will be 1.
    +    ///     descendant is spending an output of the starting `txid` then `depth` will be 1.
         /// * `descendant_txid` is the descendant's txid which we are considering to walk.
         ///
    -    /// The supplied closure returns an `Option<T>`, allowing the caller to map each node it vists
    +    /// The supplied closure returns an `Option<T>`, allowing the caller to map each node it visits
         /// and decide whether to visit descendants.
         pub fn walk_descendants<'g, F, O>(&'g self, txid: Txid, walk_map: F) -> TxDescendants<A, F>
         where
    @@ -1612,8 +1837,9 @@
         /// transaction's inputs (spends). The conflicting txids are returned with the given
         /// transaction's vin (in which it conflicts).
         ///
    -    /// Note that this only returns directly conflicting txids and does not include descendants of
    -    /// those txids (which are technically also conflicting).
    +    /// Note that this only returns directly conflicting txids and won't include:
    +    /// - descendants of conflicting transactions (which are technically also conflicting)
    +    /// - transactions conflicting with the given transaction's ancestors
         pub fn direct_conflicts_of_tx<'g>(
             &'g self,
             tx: &'g Transaction,
    @@ -1927,8 +2153,9 @@
                 }
             }
     
    -        // The tx is not anchored to a block which is in the best chain, let's check whether we can
    -        // ignore it by checking conflicts!
    +        // The tx is not anchored to a block which is in the best chain, which means that it
    +        // might be in mempool, or it might have been dropped already.
    +        // Let's check conflicts to find out!
             let tx = match tx_node {
                 TxNodeInternal::Whole(tx) => tx,
                 TxNodeInternal::Partial(_) => {
    @@ -1937,17 +2164,70 @@
                 }
             };
     
    -        // If a conflicting tx is in the best chain, or has `last_seen` higher than this tx, then
    -        // this tx cannot exist in the best chain
    -        for conflicting_tx in self.walk_conflicts(tx, |_, txid| self.get_tx_node(txid)) {
    -            for block in conflicting_tx.anchors.iter().map(A::anchor_block) {
    -                if chain.is_block_in_chain(block, chain_tip)? == Some(true) {
    -                    // conflicting tx is in best chain, so the current tx cannot be in best chain!
    -                    return Ok(None);
    +        // We want to retrieve all the transactions that conflict with us, plus all the
    +        // transactions that conflict with our unconfirmed ancestors, since they conflict with us
    +        // as well.
    +        // We only traverse unconfirmed ancestors since conflicts of confirmed transactions
    +        // cannot be in the best chain.
    +
    +        // First of all, we retrieve all our ancestors. Since we're using `new_include_root`, the
    +        // resulting array will also include `tx`
    +        let unconfirmed_ancestor_txs =
    +            TxAncestors::new_include_root(self, tx, |_, ancestor_tx: &Transaction| {
    +                let tx_node = self.get_tx_node(ancestor_tx.txid())?;
    +                // We're filtering the ancestors to keep only the unconfirmed ones (= no anchors in
    +                // the best chain)
    +                for block in tx_node.anchors {
    +                    match chain.is_block_in_chain(block.anchor_block(), chain_tip) {
    +                        Ok(Some(true)) => return None,
    +                        Err(e) => return Some(Err(e)),
    +                        _ => continue,
    +                    }
    +                }
    +                Some(Ok(tx_node))
    +            })
    +            .collect::<Result<Vec<_>, C::Error>>()?;
    +
    +        // We determine our tx's last seen, which is the max between our last seen,
    +        // and our unconf descendants' last seen.
    +        let unconfirmed_descendants_txs =
    +            TxDescendants::new_include_root(self, tx.txid(), |_, descendant_txid: Txid| {
    +                let tx_node = self.get_tx_node(descendant_txid)?;
    +                // We're filtering the ancestors to keep only the unconfirmed ones (= no anchors in
    +                // the best chain)
    +                for block in tx_node.anchors {
    +                    match chain.is_block_in_chain(block.anchor_block(), chain_tip) {
    +                        Ok(Some(true)) => return None,
    +                        Err(e) => return Some(Err(e)),
    +                        _ => continue,
    +                    }
    +                }
    +                Some(Ok(tx_node))
    +            })
    +            .collect::<Result<Vec<_>, C::Error>>()?;
    +
    +        let tx_last_seen = unconfirmed_descendants_txs
    +            .iter()
    +            .max_by_key(|tx| tx.last_seen_unconfirmed)
    +            .map(|tx| tx.last_seen_unconfirmed)
    +            .expect("descendants always includes at least one transaction (the root tx");
    +
    +        // Now we traverse our ancestors and consider all their conflicts
    +        for tx_node in unconfirmed_ancestor_txs {
    +            // We retrieve all the transactions conflicting with this specific ancestor
    +            let conflicting_txs = self.walk_conflicts(tx_node.tx, |_, txid| self.get_tx_node(txid));
    +
    +            // If a conflicting tx is in the best chain, or has `last_seen` higher than this ancestor, then
    +            // this tx cannot exist in the best chain
    +            for conflicting_tx in conflicting_txs {
    +                for block in conflicting_tx.anchors {
    +                    if chain.is_block_in_chain(block.anchor_block(), chain_tip)? == Some(true) {
    +                        return Ok(None);
    +                    }
    +                }
    +                if conflicting_tx.last_seen_unconfirmed > tx_last_seen {
    +                    return Ok(None);
                     }
    -            }
    -            if conflicting_tx.last_seen_unconfirmed > *last_seen {
    -                return Ok(None);
                 }
             }
     
    @@ -2393,6 +2673,126 @@
         }
     }
     
    +/// An iterator that traverses ancestors of a given root transaction.
    +///
    +/// The iterator excludes partial transactions.
    +///
    +/// This `struct` is created by the [`walk_ancestors`] method of [`TxGraph`].
    +///
    +/// [`walk_ancestors`]: TxGraph::walk_ancestors
    +pub struct TxAncestors<'g, A, F> {
    +    graph: &'g TxGraph<A>,
    +    visited: HashSet<Txid>,
    +    queue: VecDeque<(usize, &'g Transaction)>,
    +    filter_map: F,
    +}
    +
    +impl<'g, A, F> TxAncestors<'g, A, F> {
    +    /// Creates a `TxAncestors` that includes the starting `Transaction` when iterating.
    +    pub(crate) fn new_include_root(
    +        graph: &'g TxGraph<A>,
    +        tx: &'g Transaction,
    +        filter_map: F,
    +    ) -> Self {
    +        Self {
    +            graph,
    +            visited: Default::default(),
    +            queue: [(0, tx)].into(),
    +            filter_map,
    +        }
    +    }
    +
    +    /// Creates a `TxAncestors` that excludes the starting `Transaction` when iterating.
    +    pub(crate) fn new_exclude_root(
    +        graph: &'g TxGraph<A>,
    +        tx: &'g Transaction,
    +        filter_map: F,
    +    ) -> Self {
    +        let mut ancestors = Self {
    +            graph,
    +            visited: Default::default(),
    +            queue: Default::default(),
    +            filter_map,
    +        };
    +        ancestors.populate_queue(1, tx);
    +        ancestors
    +    }
    +
    +    /// Creates a `TxAncestors` from multiple starting `Transaction`s that includes the starting
    +    /// `Transaction`s when iterating.
    +    #[allow(unused)]
    +    pub(crate) fn from_multiple_include_root<I>(
    +        graph: &'g TxGraph<A>,
    +        txs: I,
    +        filter_map: F,
    +    ) -> Self
    +    where
    +        I: IntoIterator<Item = &'g Transaction>,
    +    {
    +        Self {
    +            graph,
    +            visited: Default::default(),
    +            queue: txs.into_iter().map(|tx| (0, tx)).collect(),
    +            filter_map,
    +        }
    +    }
    +
    +    /// Creates a `TxAncestors` from multiple starting `Transaction`s that excludes the starting
    +    /// `Transaction`s when iterating.
    +    #[allow(unused)]
    +    pub(crate) fn from_multiple_exclude_root<I>(
    +        graph: &'g TxGraph<A>,
    +        txs: I,
    +        filter_map: F,
    +    ) -> Self
    +    where
    +        I: IntoIterator<Item = &'g Transaction>,
    +    {
    +        let mut ancestors = Self {
    +            graph,
    +            visited: Default::default(),
    +            queue: Default::default(),
    +            filter_map,
    +        };
    +        for tx in txs {
    +            ancestors.populate_queue(1, tx);
    +        }
    +        ancestors
    +    }
    +
    +    fn populate_queue(&mut self, depth: usize, tx: &'g Transaction) {
    +        let ancestors = tx
    +            .input
    +            .iter()
    +            .map(|txin| txin.previous_output.txid)
    +            .filter(|&prev_txid| self.visited.insert(prev_txid))
    +            .filter_map(|prev_txid| self.graph.get_tx(prev_txid))
    +            .map(|tx| (depth, tx));
    +        self.queue.extend(ancestors);
    +    }
    +}
    +
    +impl<'g, A, F, O> Iterator for TxAncestors<'g, A, F>
    +where
    +    F: FnMut(usize, &'g Transaction) -> Option<O>,
    +{
    +    type Item = O;
    +
    +    fn next(&mut self) -> Option<Self::Item> {
    +        loop {
    +            // we have exhausted all paths when queue is empty
    +            let (ancestor_depth, tx) = self.queue.pop_front()?;
    +            // ignore paths when user filters them out
    +            let item = match (self.filter_map)(ancestor_depth, tx) {
    +                Some(item) => item,
    +                None => continue,
    +            };
    +            self.populate_queue(ancestor_depth + 1, tx);
    +            return Some(item);
    +        }
    +    }
    +}
    +
     /// An iterator that traverses transaction descendants.
     ///
     /// This `struct` is created by the [`walk_descendants`] method of [`TxGraph`].
    @@ -2401,7 +2801,7 @@
     pub struct TxDescendants<'g, A, F> {
         graph: &'g TxGraph<A>,
         visited: HashSet<Txid>,
    -    stack: Vec<(usize, Txid)>,
    +    queue: VecDeque<(usize, Txid)>,
         filter_map: F,
     }
     
    @@ -2412,7 +2812,7 @@
             Self {
                 graph,
                 visited: Default::default(),
    -            stack: [(0, txid)].into(),
    +            queue: [(0, txid)].into(),
                 filter_map,
             }
         }
    @@ -2422,14 +2822,14 @@
             let mut descendants = Self {
                 graph,
                 visited: Default::default(),
    -            stack: Default::default(),
    +            queue: Default::default(),
                 filter_map,
             };
    -        descendants.populate_stack(1, txid);
    +        descendants.populate_queue(1, txid);
             descendants
         }
     
    -    /// Creates a `TxDescendants` from multiple starting transactions that include the starting
    +    /// Creates a `TxDescendants` from multiple starting transactions that includes the starting
         /// `txid`s when iterating.
         pub(crate) fn from_multiple_include_root<I>(
             graph: &'g TxGraph<A>,
    @@ -2442,7 +2842,7 @@
             Self {
                 graph,
                 visited: Default::default(),
    -            stack: txids.into_iter().map(|txid| (0, txid)).collect(),
    +            queue: txids.into_iter().map(|txid| (0, txid)).collect(),
                 filter_map,
             }
         }
    @@ -2461,25 +2861,25 @@
             let mut descendants = Self {
                 graph,
                 visited: Default::default(),
    -            stack: Default::default(),
    +            queue: Default::default(),
                 filter_map,
             };
             for txid in txids {
    -            descendants.populate_stack(1, txid);
    +            descendants.populate_queue(1, txid);
             }
             descendants
         }
     }
     
     impl<'g, A, F> TxDescendants<'g, A, F> {
    -    fn populate_stack(&mut self, depth: usize, txid: Txid) {
    +    fn populate_queue(&mut self, depth: usize, txid: Txid) {
             let spend_paths = self
                 .graph
                 .spends
                 .range(tx_outpoint_range(txid))
                 .flat_map(|(_, spends)| spends)
                 .map(|&txid| (depth, txid));
    -        self.stack.extend(spend_paths);
    +        self.queue.extend(spend_paths);
         }
     }
     
    @@ -2491,8 +2891,8 @@
     
         fn next(&mut self) -> Option<Self::Item> {
             let (op_spends, txid, item) = loop {
    -            // we have exhausted all paths when stack is empty
    -            let (op_spends, txid) = self.stack.pop()?;
    +            // we have exhausted all paths when queue is empty
    +            let (op_spends, txid) = self.queue.pop_front()?;
                 // we do not want to visit the same transaction twice
                 if self.visited.insert(txid) {
                     // ignore paths when user filters them out
    @@ -2502,7 +2902,7 @@
                 }
             };
     
    -        self.populate_stack(op_spends + 1, txid);
    +        self.populate_queue(op_spends + 1, txid);
             Some(item)
         }
     }
    diff --git a/examples/index.html b/examples/index.html
    index ff929fa322..45aaa78d48 100644
    --- a/examples/index.html
    +++ b/examples/index.html
    @@ -29,7 +29,7 @@
         
         
         
    -    
    +    
         
       
       
    @@ -61,7 +61,7 @@
       GitHub
        (opens new window)
    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/getting-started/index.html b/getting-started/index.html index a99f1749da..80c586edc7 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -31,7 +31,7 @@ - + @@ -113,7 +113,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).

    Supporters
    - + diff --git a/index.html b/index.html index 81b640c97b..cf95a04eff 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@ - + @@ -84,6 +84,6 @@
    Supporters
    - + diff --git a/supporters/index.html b/supporters/index.html index fbc7203fae..c5e80d9fba 100644 --- a/supporters/index.html +++ b/supporters/index.html @@ -29,7 +29,7 @@ - + @@ -71,7 +71,7 @@ Brink Sponsor Kraken Kraken -
    - + diff --git a/tutorials/bdk-cli_basics_multisig_2of3/index.html b/tutorials/bdk-cli_basics_multisig_2of3/index.html index 0f0133acf2..a6c5e516e5 100644 --- a/tutorials/bdk-cli_basics_multisig_2of3/index.html +++ b/tutorials/bdk-cli_basics_multisig_2of3/index.html @@ -30,7 +30,7 @@ - + @@ -123,7 +123,7 @@

    # Step 12: Broadcast Transaction

    ▶️ bdk-cli wallet --wallet wallet_name_msd01 --descriptor $MULTI_DESCRIPTOR_01 broadcast --psbt $SECONDSIG_PSBT

    {
       "txid": "61da2451874a483aa8d1d0787c7680d157639f284840de8885098cac43f6cc2f"
     }
    -

    # Verify Transaction

    Verify transcation in the memory pool on testnet Mempool-testnet! (opens new window)

    # Verify Transaction

    Verify transcation in the memory pool on testnet Mempool-testnet! (opens new window)

    Supporters
    - + diff --git a/tutorials/bdk_cli_basics/index.html b/tutorials/bdk_cli_basics/index.html index 4a922214a5..64a35a7552 100644 --- a/tutorials/bdk_cli_basics/index.html +++ b/tutorials/bdk_cli_basics/index.html @@ -30,7 +30,7 @@ - + @@ -158,7 +158,7 @@ bdk-cli wallet --descriptor $env:my_descriptor broadcast --psbt $env:PSBTSIGNED

    👍 The output below confirms the command was successful.

    {
       "txid": "a0877b7ce91ea6d141ba63277673f5bdf0edfdd45f91a39ba1a1ace15f839b52"
     }
    -

    TIP

    Run sync one more time and see that the balance has decreased.


    # Resources

    TIP

    Run sync one more time and see that the balance has decreased.


    # Resources

    Supporters
    - + diff --git a/tutorials/bdk_with_tor/index.html b/tutorials/bdk_with_tor/index.html index 3fb75654ae..297c0624db 100644 --- a/tutorials/bdk_with_tor/index.html +++ b/tutorials/bdk_with_tor/index.html @@ -30,7 +30,7 @@ - + @@ -303,7 +303,7 @@ }

    In this example we start Tor first, then use the address returned by start_tor() function as proxy address.

    We omitted find_string_in_log() and truncate_log() for brevity. You -can find their implementations in esplora_backend_with_tor.rs (opens new window)

    Supporters
    - + diff --git a/tutorials/compact_filters_demo/index.html b/tutorials/compact_filters_demo/index.html index 68437b1ec6..acec96e114 100644 --- a/tutorials/compact_filters_demo/index.html +++ b/tutorials/compact_filters_demo/index.html @@ -30,7 +30,7 @@ - + @@ -183,7 +183,7 @@ "satoshi": 299999859 }

    If you see the balance updated, voila!

    What happened here is:

    # Shutdown Docker

    You may now shutdown the regtest docker container.

    Note: This will also clean up any data in the bitcoin core, including the wallet.

    $ docker kill bdk-box
    -

    # End Words

    In this tutorial we went through the process of receiving, creating, signing and broadcasting transaction using the BDK wallet with compact_filters feature. This demonstrates how BDK capabilities can be used to create SPV light wallets with integrated BIP157 type compact_filters node.

    # End Words

    In this tutorial we went through the process of receiving, creating, signing and broadcasting transaction using the BDK wallet with compact_filters feature. This demonstrates how BDK capabilities can be used to create SPV light wallets with integrated BIP157 type compact_filters node.

    Supporters
    - + diff --git a/tutorials/descriptor_based_paper_wallet/index.html b/tutorials/descriptor_based_paper_wallet/index.html index 8b06d66802..616dcd5796 100644 --- a/tutorials/descriptor_based_paper_wallet/index.html +++ b/tutorials/descriptor_based_paper_wallet/index.html @@ -30,7 +30,7 @@ - + @@ -138,7 +138,7 @@ Rusty Paper Wallet (opens new window) and then sweep the funds from our example paper wallet to a new address. If you found this post interesting please comment below. Or give it a try yourself and if you run into any problems or would like to suggest improvements leave an issue in the Rusty Paper Wallet (opens new window) or -bdk-cli (opens new window) github repos. Thanks!


    1. Wallet Input Format, a string encoding a ECDSA private key https://en.bitcoin.it/wiki/Wallet_import_format ↩︎

    2. Unless the user import the WIF directly into bitcoin core ↩︎

    3. 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. ↩︎

    4. 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. ↩︎

    Supporters
    - + diff --git a/tutorials/descriptors_in_the_wild/index.html b/tutorials/descriptors_in_the_wild/index.html index 6b35216ebd..059fa301c7 100644 --- a/tutorials/descriptors_in_the_wild/index.html +++ b/tutorials/descriptors_in_the_wild/index.html @@ -30,7 +30,7 @@ - + @@ -194,7 +194,7 @@

    # Conclusion

    We have built an HDM and we have used it with two indipendent wallets, which are compatible with BIP 174 (opens new window) and Output Descriptors (opens new window). Hopefully we will see many other compatible wallets beyound Bitcoin Core (opens new window) and BDK (opens new window), -with which we will be able to easily set up multi signature schemes.

    Supporters
    - + diff --git a/tutorials/exploring_bdk_flutter/index.html b/tutorials/exploring_bdk_flutter/index.html index 1fa1f7a15b..e2453f9812 100644 --- a/tutorials/exploring_bdk_flutter/index.html +++ b/tutorials/exploring_bdk_flutter/index.html @@ -30,7 +30,7 @@ - + @@ -451,7 +451,7 @@ ) ) -

    We should now be able to send a transaction as long as there is sufficient balance.

    # Conclusion

    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 bdk-flutter allowing us to focus on the product, functionality, and user journey. This is how bdk and bdk-flutter intend to make Rapid Bitcoin Application Development possible by allowing product and application developers to focus on what they know best while bdk handles bitcoin complexity.

    bdk-flutter intends to expose functionality and APIs from bdk which has a wide variety of APIs with granular details allowing for many interesting use cases to be implemented. bdk-flutter and bdk are constantly updated and enhanced based on feedback from product teams and developers in the bitcoin community.

    Stay tuned for more APIs and enhancements coming to bdk-flutter 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-flutter.

    In the meantime keep in touch with the project by following us on GitHub (opens new window) and Twitter (opens new window)

    # References:

    We should now be able to send a transaction as long as there is sufficient balance.

    # Conclusion

    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 bdk-flutter allowing us to focus on the product, functionality, and user journey. This is how bdk and bdk-flutter intend to make Rapid Bitcoin Application Development possible by allowing product and application developers to focus on what they know best while bdk handles bitcoin complexity.

    bdk-flutter intends to expose functionality and APIs from bdk which has a wide variety of APIs with granular details allowing for many interesting use cases to be implemented. bdk-flutter and bdk are constantly updated and enhanced based on feedback from product teams and developers in the bitcoin community.

    Stay tuned for more APIs and enhancements coming to bdk-flutter 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-flutter.

    In the meantime keep in touch with the project by following us on GitHub (opens new window) and Twitter (opens new window)

    # References:

    Supporters
    - + diff --git a/tutorials/exploring_bdk_rn/index.html b/tutorials/exploring_bdk_rn/index.html index 996d9b59c0..4cfa0aa2ff 100644 --- a/tutorials/exploring_bdk_rn/index.html +++ b/tutorials/exploring_bdk_rn/index.html @@ -30,7 +30,7 @@ - + @@ -361,7 +361,7 @@ /> </Fragment> </View> -

    We should now be able to send a transaction as long as there is sufficient balance.

    # Conclusion

    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 bdk-rn allowing us to focus on the product, functionality and user journey. This is how bdk and bdk-rn intend to make Rapid Bitcoin Application Development possible by allowing product and application developers to focus on what they know best while bdk handles bitcoin complexity.

    bdk-rn intends to expose functionality and APIs from bdk which has a wide variety of API with granular details allowing for many interesting use cases to be implemented. bdk-rn and bdk are constantly updated and enhanced based on feedback from product teams and developers in the bitcoin community.

    Stay tuned for more APIs and enhancements coming to bdk-rn 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.

    In the meantime keep in touch with the project by following on GitHub (opens new window) and Twitter (opens new window)

    # References:

    We should now be able to send a transaction as long as there is sufficient balance.

    # Conclusion

    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 bdk-rn allowing us to focus on the product, functionality and user journey. This is how bdk and bdk-rn intend to make Rapid Bitcoin Application Development possible by allowing product and application developers to focus on what they know best while bdk handles bitcoin complexity.

    bdk-rn intends to expose functionality and APIs from bdk which has a wide variety of API with granular details allowing for many interesting use cases to be implemented. bdk-rn and bdk are constantly updated and enhanced based on feedback from product teams and developers in the bitcoin community.

    Stay tuned for more APIs and enhancements coming to bdk-rn 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.

    In the meantime keep in touch with the project by following on GitHub (opens new window) and Twitter (opens new window)

    # References:

    Supporters
    - + diff --git a/tutorials/hidden-power-of-bitcoin/index.html b/tutorials/hidden-power-of-bitcoin/index.html index 07213d4a5a..02dd6c62ca 100644 --- a/tutorials/hidden-power-of-bitcoin/index.html +++ b/tutorials/hidden-power-of-bitcoin/index.html @@ -30,7 +30,7 @@ - + @@ -397,7 +397,7 @@ Hence, we saw that we can generate some smart contracts using Bitcoin.

    # Inspirations

    1. Descriptors from Bitcoin Core (opens new window)
    2. Miniscript (opens new window)
    3. Output Script Descriptors (opens new window)
    4. Descriptors in Bitcoin Dev Kit (opens new window)
    5. Role of Descriptors (opens new window)
    6. Making a Taproot Descriptor Wallet using bitcoin-cli (opens new window)
    7. Miniscripts SBC '19 - Video (opens new window)
    8. Rethinking Wallet Architecture: Native Descriptor Wallets - Video (opens new window)

    Special thanks to my mentor Steve Myers (opens new window) for the constant motivation and support he gave me and for clearing so many doubts! Immense thanks to Raj (opens new window) for reviewing this blog and giving such detailed suggestions. Many of the lines added here are his. -Also, thanks to the folks at the #miniscript IRC channel to help me out with the Retention Bonus policy.

    This blog was written during Summer of Bitcoin 2021 (opens new window) by Sandipan Dey (opens new window).

    Supporters
    - + diff --git a/tutorials/spending_policy_demo/index.html b/tutorials/spending_policy_demo/index.html index 7664340551..f94d88344b 100644 --- a/tutorials/spending_policy_demo/index.html +++ b/tutorials/spending_policy_demo/index.html @@ -30,7 +30,7 @@ - + @@ -314,7 +314,7 @@ { "satoshi": 0 } -

    # Done again!

    In this demo we showed how to receive and spend bitcoin using two different descriptor wallet policies using the bdk library and bdk-cli wallet tool.

    # Done again!

    In this demo we showed how to receive and spend bitcoin using two different descriptor wallet policies using the bdk library and bdk-cli wallet tool.

    Supporters
    - + diff --git a/tutorials/using_bdk_with_hardware_wallets/index.html b/tutorials/using_bdk_with_hardware_wallets/index.html index 877f630152..139836d4fa 100644 --- a/tutorials/using_bdk_with_hardware_wallets/index.html +++ b/tutorials/using_bdk_with_hardware_wallets/index.html @@ -30,7 +30,7 @@ - + @@ -178,7 +178,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!

    # 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!

    Supporters
    - +