Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

BDK-CLI

A Command-line Bitcoin Wallet App in pure rust using BDK

Crate InfoMIT or Apache-2.0 LicensedCI StatusAPI DocsRustc Version 1.56+Chat on Discord

About

This project provides a command-line Bitcoin wallet application using the latest BDK APIs. This might look tiny and innocent, but by harnessing the power of BDK it provides a powerful generic descriptor based command line wallet tool. And yes, it can do Taproot!!

This crate can be used for the following purposes:

  • Instantly create a miniscript based wallet and connect to your backend of choice (Electrum, Esplora, Core RPC, CBF etc) and quickly play around with your own complex bitcoin scripting workflow. With one or many wallets, connected with one or many backends.
  • The tests/integration.rs module is used to document high level complex workflows between BDK and different Bitcoin infrastructure systems, like Core, Electrum and Lightning(soon TM).
  • (Planned) Expose the basic command handler via wasm to integrate bdk-cli functionality natively into the web platform. See also the playground page.

If you are considering using BDK in your own wallet project bdk-cli is a nice playground to get started with. It allows easy testnet and regtest wallet operations, to try out what's possible with descriptors, miniscript, and BDK APIs. For more information on BDK refer to the website and the rust docs

bdk-cli can be compiled with different features to suit your experimental needs.

  • Database Options
    • key-value-db : Sets the wallet database to a sled db.
    • sqlite-db : Sets the wallet database to a sqlite3 db.
  • Blockchain Options
    • rpc : Connects the wallet to bitcoin core via RPC.
    • electrum : Connects the wallet to an electrum server.
    • compact_filters : Deploy a BIP157 node to get blockchain data from the bitcoin p2p network.
    • esplora-ureq or esplora-reqwest : Connects the wallet to an esplora server synchronously or asynchronously.
  • Extra Utility Tools
    • repl : use bdk-cli as a REPL shell (useful for quick manual testing of wallet operations).
    • compiler : opens up bdk-cli policy compiler commands.
    • verify : uses bitcoinconsensus to verify transactions at every sync call of the wallet.
    • reserves : opens up bdk-cli Proof of Reserves operation commands using the bdk-reserves plugin. (requires the electrum feature)
  • Automated Node Backend
    • regtest-bitcoin : Auto deploys a regtest bitcoind node, connects the wallet, and exposes core rpc commands via bdk-cli node subcommands.
    • regtest-electrum : Auto deploys electrsd and connected bitcoind nodes, exposes core rpc commands via bdk-cli node and provides a wallet connected to the local electrsd.

The default feature set is repl and sqlite-db. With the default features, bdk-cli can be used as an air-gapped wallet, and can do everything that doesn't require a network connection.

Install bdk-cli

From source

To install a dev version of bdk-cli from a local git repo with the electrum blockchain client enabled:

cd<bdk-cli git repo directory>
cargo install --path . --features electrum
bdk-cli help# to verify it worked

If no blockchain client feature is enabled online wallet commands sync and broadcast will be disabled. To enable these commands a blockchain client feature such as electrum or another blockchain client feature must be enabled. Below is an example of how to run the bdk-cli binary with the esplora-ureq blockchain client feature.

RUST_LOG=debug cargo run --features esplora-ureq -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

At most one blockchain feature can be enabled, available blockchain client features are: electrum, esplora-ureq (blocking), esplora-reqwest (async), compact_filters and rpc.

From crates.io

You can install the binary for the latest tag of bdk-cli with online wallet features directly from crates.io with a command as below:

cargo install bdk-cli --features electrum

bdk-cli bin usage examples

To get usage information for the bdk-cli binary use the below command which returns a list of available wallet options and commands:

cargo run

To sync a wallet to the default electrum server:

cargo run --features electrum -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18443) using the core rpc:

cargo run --features rpc -- --network regtest wallet --node 127.0.0.1:18443 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To sync a wallet to a Bitcoin Core node (assuming a regtest node at 127.0.0.1:18444) serving compact filters: Note:

  • This will increase build time by few minutes for the binaries because of librocksdb.
  • Bitcoin Core v0.21.0 or higher is required to serve compact filters.
cargo run --features compact_filters -- --network regtest wallet --node 127.0.0.1:18444 --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" sync

To get a wallet balance with customized logging:

RUST_LOG=debug,sled=info,rustls=info cargo run -- wallet --descriptor "wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)" get_balance

To generate a new extended master key, suitable for use in a descriptor:

cargo run -- key generate

Resources

Docs: bitcoindevkit.org CLI Section
Episode on the Bitcoin Developers Show: Youtube
Video Tutorials: Youtube Playlist

About

A CLI wallet library and REPL tool to demo and test the BDK library

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages