]> Untitled Git - bdk-cli/log
bdk-cli
64 min agoMerge bitcoindevkit/bdk-cli#289: test: Implement integration tests master github/master
merge-script [Wed, 8 Jul 2026 21:54:54 +0000 (22:54 +0100)]
Merge bitcoindevkit/bdk-cli#289: test: Implement integration tests

6000dd52a79f04752f758e444925afcdc72b19e5 test: Add tests for dns payment instn feature (Vihiga Tyonum)
b4e10817018a901487058f81c031da88323eea7d fix(Justfile): fix test-threads to max 2 (Vihiga Tyonum)
f809a7e3ab10183c663144767d7a87188dc3a55a test: add more tests for createtx, bip322 (Vihiga Tyonum)
a993315dfdbe1ed8450dc5aae974061d43c091e1 test: Add sp createtx test (Vihiga Tyonum)
d71083897a9e61097228b957f8b0ea425297a3df test: add test for multiple recipients and sp code (Vihiga Tyonum)
a040a55ced7b9eda8f20ff7de122c13bd34e0be1 test: add tests for repl, transactions & send_all (Vihiga Tyonum)
f17a7ef871f6cec7c662d582bd46e11cba072c55 fix(repl): Remove null printed after repl output (Vihiga Tyonum)
d425f5b253e861bc5f3432dc9a3f327abbec02f1 test: split tests according to typestate (Vihiga Tyonum)
32937645ea217fe3f2bb512a9511c13f58b674c1 fix(proxy_opts): add saving and reading proxy_opts (Vihiga Tyonum)
3465513c1ebfde2fd35d7a29a748f771f2a9bb0e ref(verbose): Drop `verbose` flag from tests (Vihiga Tyonum)
702d2594afa804aa7985a32dc55559fff7b06da4 test(online): Add test transaction full cycle (Vihiga Tyonum)
c013da05706caff3266aee776024361a35afdea1 test: Add integration tests for offline wallet ops (Vihiga Tyonum)
0d3c1a957457489412be37e0c6a48b8e83795798 test: Add wallets, descriptor, compile & config (Vihiga Tyonum)
d8e2887ec41f3c182131e19e8f1f19f982516f3a test: Add helper fns & integration tests for key (Vihiga Tyonum)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  This PR builds on #278 and introduces integration tests for bdk-cli. It replaces manual `std::process::Command` boilerplate with the `assert_cmd` library, allowing us to perform black-box testing against the compiled binary.

  Features covered so far include:

  - key: generate, derive, and restore
  - wallets: list wallets
  - wallet config: save config, read config.
  - descriptor: generate descriptor
  - compile: policy compiler
  - offline wallet operations: new_address, unused_address, balance, unspent, transactions, policies, public_descriptor, create_tx, combine_psbt

  ### Notes to the reviewers

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->

  ## Changelog notice

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->
  - Introduces the BdkCli helper struct to inject context state into base commands.
  - Dropped `verbose` flag from wallets as it was applicable to only `Pbst`

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

Top commit has no ACKs.

Tree-SHA512: ea4adf734310f4ec494564f75b904835520b4625547859bf25c529b96f2f7fef823dc220dbe4eaf4856e2dd6fe06daa9f97bddc7a565f5e19185fdeea963202e

70 min agotest: Add tests for dns payment instn feature
Vihiga Tyonum [Wed, 8 Jul 2026 18:55:23 +0000 (19:55 +0100)]
test: Add tests for dns payment instn feature

70 min agofix(Justfile): fix test-threads to max 2
Vihiga Tyonum [Tue, 7 Jul 2026 19:54:21 +0000 (20:54 +0100)]
fix(Justfile): fix test-threads to max 2

- The problem: When running `cargo test --all-
features`, the backends (electrum, rpc, esplora
from TestEnv) run in parallel at the number of
cpus available and exhaust the processes/ports
available, thereby resulting in os error 35.

This fix limits the number of threads that are
available for the tests to run in parallel.

70 min agotest: add more tests for createtx, bip322
Vihiga Tyonum [Tue, 7 Jul 2026 16:04:38 +0000 (17:04 +0100)]
test: add more tests for createtx, bip322

- add tests for OP_RETURN in createtx
- add tests for coin selection in createtx
- add test for esplora client full_scan
- fix clippy issues

70 min agotest: Add sp createtx test
Vihiga Tyonum [Tue, 7 Jul 2026 09:03:51 +0000 (10:03 +0100)]
test: Add sp createtx test

70 min agotest: add test for multiple recipients and sp code
Vihiga Tyonum [Tue, 7 Jul 2026 08:21:50 +0000 (09:21 +0100)]
test: add test for multiple recipients and sp code

70 min agotest: add tests for repl, transactions & send_all
Vihiga Tyonum [Mon, 6 Jul 2026 15:57:04 +0000 (15:57 +0000)]
test: add tests for repl, transactions & send_all

70 min agofix(repl): Remove null printed after repl output
Vihiga Tyonum [Mon, 6 Jul 2026 15:36:33 +0000 (15:36 +0000)]
fix(repl): Remove null printed after repl output

70 min agotest: split tests according to typestate
Vihiga Tyonum [Sun, 5 Jul 2026 21:23:42 +0000 (22:23 +0100)]
test: split tests according to typestate

Multi-line description of commit,
feel free to be detailed.

[Ticket: X]

70 min agofix(proxy_opts): add saving and reading proxy_opts
Vihiga Tyonum [Thu, 25 Jun 2026 17:58:41 +0000 (18:58 +0100)]
fix(proxy_opts): add saving and reading proxy_opts

- add saving proxy_opts for electrum and esplora
clients to config and reading values
- fix prepare_home_dir util fn

70 min agoref(verbose): Drop `verbose` flag from tests
Vihiga Tyonum [Wed, 24 Jun 2026 19:10:27 +0000 (20:10 +0100)]
ref(verbose): Drop `verbose` flag from tests

70 min agotest(online): Add test transaction full cycle
Vihiga Tyonum [Mon, 22 Jun 2026 21:18:00 +0000 (22:18 +0100)]
test(online): Add test transaction full cycle

- Add test for creating, signing, broadcasting tx
- Add test for combining psbt, fee bump and other
psbt related commands
- Add bip322 tests

70 min agotest: Add integration tests for offline wallet ops
Vihiga Tyonum [Fri, 12 Jun 2026 13:10:20 +0000 (14:10 +0100)]
test: Add integration tests for offline wallet ops

- add integration tests for offline wallet
operations

70 min agotest: Add wallets, descriptor, compile & config
Vihiga Tyonum [Fri, 12 Jun 2026 07:05:06 +0000 (08:05 +0100)]
test: Add wallets, descriptor, compile & config

- Add integration tests for wallets, descriptor,
compile and config modules

70 min agotest: Add helper fns & integration tests for key
Vihiga Tyonum [Thu, 11 Jun 2026 12:38:52 +0000 (13:38 +0100)]
test: Add helper fns & integration tests for key

- add BdkCli helper struct and impl methods
- add integration tests for the key subcommand
operations

113 min agoMerge bitcoindevkit/bdk-cli#278: Refactor bdk-cli structure
merge-script [Wed, 8 Jul 2026 21:06:40 +0000 (22:06 +0100)]
Merge bitcoindevkit/bdk-cli#278: Refactor bdk-cli structure

63f769a68f72855c0de7fd7a6f5c459e0ace1b2d revert parallel request wallet parameter (Vihiga Tyonum)
8dc0503ab8887c119ac49d4b490aecb0170aab64 drop verbose flag (Vihiga Tyonum)
5da76608fcd5e0ae340010f19a778750a68a86e1 feat(handlers): mv feats into subdirs in handlers (Vihiga Tyonum)
5951c17152d64f44e5a38deaf369ce8795b81893 feat(dns-payment): port dns payment instruction (Vihiga Tyonum)
b3fe86098e6b35e5280a715e0ff2902161975c4b feat(sp): fix command_requires_db fn match arm (Vihiga Tyonum)
c2ca2ddbdfea5bcc7b8aaeed79bfd39798a2165c ref(payjoin): add payjoin persistence (Vihiga Tyonum)
249948eac1ceb7b83b76d03751669ed0dbde7a35 ref(compile):compile tr desc with rand unspend key (Vihiga Tyonum)
6a6390fcc5b823e1901a7105fa424689947e7dbf feat(WalletEvents): Add wallet events to clients (Vihiga Tyonum)
cb9634fd71d494e27648ca2bfc99013e0e0991f7 ref(create_tx): enforce single recp for sendall (Vihiga Tyonum)
188e68d147f7c548041c802dab2f7c425c3732b8 refactor(runtime): Add address and createtx to db (Vihiga Tyonum)
75b51413d9bdc4f981831cb91dc966318b0dc0a4 refactor(sp-payment): Rebase silent payment feat (Vihiga Tyonum)
aa8876d192d773e9f431bebbc6397f78868661aa refactor(main): add runtime wallet module (Vihiga Tyonum)
63162bed1ba9804486048a401b2c927a66060ce2 refactor(handlers): Apply app context (Vihiga Tyonum)
f3deed85868f15f9b97355d1680d2df6d1432120 Refactor(handlers): Define app context states (Vihiga Tyonum)
5ced5aa764407d0b117b43ddeb6a9addfa15c8ed refactor(output): apply generics to output mod (Vihiga Tyonum)
1b05c0309670574bec54f88aa1354332aed3e452 ref(handlers): fix offline, online and desc mod (Vihiga Tyonum)
dcaeb5534b45e0fd9f46126d9f45556fd0121a92 ref(handlers): refactor config, descr and key mods (Vihiga Tyonum)
f77ddccb9b01ce0fa77e576ca7513554c8e98772 ref(main): add run to handle routing (Vihiga Tyonum)
528956d244a1eb83b255c8e6a37fef66fa3967ea ref(pretty): remove `--pretty` flag (Vihiga Tyonum)
cf9d13bd0974e2eb73a956915e30edf86660feaa ref(persister): collapse wallet subdir to persister (Vihiga Tyonum)
7a0e68bd3379cfe880cc7d25f57e7aaccc1e0ed4 update namespace and update types (Vihiga Tyonum)
eaa4e11428b6443be09afb30b9c8db642f39adad revert mod names for command and clients (Vihiga Tyonum)
ada34858d7e2d2a29dfa7d3ccfd311ff19a919f6 ref(utils): use types in desc output in utils (Vihiga Tyonum)
90017cdf87538b8f4f14496e55c9ee92f7f96d74 ref(handlers): rebase bip322 feature (Vihiga Tyonum)
990f30a7da5e840f3b2d1e68a94dc45235f7874f ref(types): add simple table helper (Vihiga Tyonum)
055e1fd48e993bfe94d83e97b7c66bdcc0aa9930 ref(handlers): add types for desc, key & wallets (Vihiga Tyonum)
a9732732e4d55547489a9768134cdb4093b54fa7 refactor(handlers): Add types for outputting data (Vihiga Tyonum)
3e2eec8e24883fe68a9a25f534793aaf0538b1bb ref(main): update main entry point (Vihiga Tyonum)
0bf3e66c7f733fed152171e0dab63f070d24ff10 ref(handlers): split handler fns into repl (Vihiga Tyonum)
bf0551b71c5da8cce5b3200f47202dd787e46a65 ref(handlers):mv handler fns into offline & others (Vihiga Tyonum)
03307c96cf6e19238021949da9b805a0b3aafdd2 ref(handlers): split handlers into config, key (Vihiga Tyonum)
eb3a6aa7798a9994b4a69a85abc65a32163b945f ref(persister): mv persister into wallet subdir (Vihiga Tyonum)
24820444164026b47d0b8909b6e795872e6b92c8 ref(utils): refactor utils into utils subdir (Vihiga Tyonum)
739dec3f3f46330416d2395bf1f992f1abd531c4 ref(config): move config into config subdir (Vihiga Tyonum)
5c286d64aec3f1b34a889047222dd1c559e9d4a6 ref(commands): mv commands & clients into subdirs (Vihiga Tyonum)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  This PR restructures the bdk-cli codebase to move away from a monolithic handling model towards a modular architecture. The primary goal is to improve code readability, simplify the addition of new features, and decouple core logic into smaller modules.

  Fixes #273

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  ### Notes to the reviewers

  While trying to achieve the above-stated goal, I took maximum care to avoid introducing new bugs. As a result, the existing execution logic was preserved as much as possible.

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->

  This PR introduces two new subdirectories under `src`:

   - handlers: This contains all the subcommands' execution logic grouped logically according to the top-level commands.  Modules include the `config`, `descriptor`, `key`, `offline`, `online` and `repl` modules. They each contain structures for the subcommand, execution logic, and implementation of the top-level enum.
   - utils: This subdirectory contains helper functions used across the app. They are also grouped logically according to related functionality. So far, we have the descriptor-related module, the output that formats responses, and the `types` module that defines response structures.

   **Other notable changes**

   - main module is retained with added functionality of routing requests to the right module for execution.
   - All client-related functionalities have been moved from various modules into the `client` module, and it defines the enum that holds all the available clients, as well as implements the functionalities such as broadcasting transactions and syncing operations.
   - The `AppCommand` trait that defines how each subcommand should be structured and the `execute` method they should implement.
   - The `AppContext` struct that holds the universal parameters that subcommands may need. Each subcommand's `execute` method accepts this struct and uses the params for its execution.
   - The output module in the util subdirectory attempts to present a uniform presentation layer by having an output trait, the `FormatOutput` trait, which is implemented by all `types` presenting data response to the user.
   - Collapsed the `wallet` subdirectory into the `persister` module that defines all structures and functionalities related to persistence.
   - Introduced a type state pattern for the AppContext: To minimise runtime errors, the `Init`, `OfflineOperations` and `OnlineOperations` state structs were introduced, and AppContext is generic over these states. This moved the validation from runtime to compile time.
  - Introduced `FormatOutput::write_out` and made it generic over the Write trait to allow for flexibility in testing
  - Extracted all initialisation logic (database, config loading and persistence initialisation) into `runtime` module. Also, added the `RuntimeWallet` enum to return options of a persisted wallet and a standard non-persisted wallet. The WalletRuntime struct is a wrapper that determines the type of wallet needed and initialises it and handles loading of a wallet from config.

  **Request-Response Cycle**

  The following outlines how requests are handled and responses are generated after introducing changes to the structure:

  1. When a user enters a set of commands, those commands are received and parsed by the Clap library into Rust structures, such as `CliOpts`, `WalletOpts`, and subcommands. This process takes place in the `commands` module.

  2. The parsed request is then passed to the `main` module. The main module uses the `runtime` module to interpret the request and initialize any necessary resources (such as wallets, databases, and clients) needed to fulfill the request. It then routes the request to the appropriate handler for execution.

  3. Once a particular handler receives the request along with all the required resources, it processes the specific command using the `AppContext` and prepares a response.

  4. After processing is complete, the handler calls the `output` module to format the result, serialize it into JSON, and return it to the terminal.

  ## Changelog notice

     - In the `key derive` subcommand, when printing help message, the clap arg for env=“PATH” often pull all system and displays all system paths. This has been changed to derivation_path I.e. env=“DERIVATION_PATH” to prevent clap from picking the system paths and rendering it
     - Moved the wallet subdirectory that served as persister into the persister module
     - Moved DatabaseType enum from commands module into persister module
     - Removed the —pretty flag

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

Top commit has no ACKs.

Tree-SHA512: e63ed0693e2580fe80fca278e0ad1f7feacccda32f3e7262d57cff1bdf4e9850e2463dfeee1cbcfad4ce1502fd19d3861d5012705e051d19831def8832b6780a

2 hours agorevert parallel request wallet parameter
Vihiga Tyonum [Wed, 8 Jul 2026 17:24:01 +0000 (18:24 +0100)]
revert parallel request wallet parameter

- remove braces for unit type structs

5 hours agodrop verbose flag
Vihiga Tyonum [Wed, 8 Jul 2026 16:32:39 +0000 (17:32 +0100)]
drop verbose flag

5 hours agofeat(handlers): mv feats into subdirs in handlers
Vihiga Tyonum [Wed, 8 Jul 2026 15:22:46 +0000 (16:22 +0100)]
feat(handlers): mv feats into subdirs in handlers

5 hours agofeat(dns-payment): port dns payment instruction
Vihiga Tyonum [Wed, 8 Jul 2026 12:42:01 +0000 (13:42 +0100)]
feat(dns-payment): port dns payment instruction

- migrate dns payment instruction feature

5 hours agoMerge branch 'master' into ref/restructure-project
Vihiga Tyonum [Wed, 8 Jul 2026 09:48:41 +0000 (10:48 +0100)]
Merge branch 'master' into ref/restructure-project

14 hours agoMerge bitcoindevkit/bdk-cli#236: feat: add BIP353 DNS payment instructions
merge-script [Wed, 8 Jul 2026 08:28:33 +0000 (09:28 +0100)]
Merge bitcoindevkit/bdk-cli#236: feat: add BIP353 DNS payment instructions

943b4b648f89c1958cbf5bcd085b28e80e1077a1 fix: separate CreateTx from CreateDnsTx (Sonkeng Maldini)
550918c1c83fbdd941880a7a837fce29550b0a77 fix: unifying recipients before send (Sonkeng Maldini)
6ea1b217a695ba4bb9f1a27b4b2ca1e49fc68801 fix: add log when resolving (Sonkeng Maldini)
e3c8efcf6d805beff974fc0c1dfa7545f42045c1 discard pretty flag and apply reviews (Sonkeng Maldini)
7a2c5dfef61885494391a88d23ebc6edd14add3e feat: integrate BIP 353 dns payment instructions (Sonkeng Maldini)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  This PR adds support for BIP353 payment instructions.
  The following notable changes are done:

  - Adding of an option `resolve_dns_recipient` which receives a Human Readable Name (HRN) and returns the associated address
  - Modify the `create_tx` for it to support user specifying recipients as `HRN`.

  ### Notes to the reviewers

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->
  Here is a list of HRN that could be used to test the implementation:
  - pay@dunxen.dev: Supports BOLT 12 Payment method only (CAUTION: mainnet)
  - send.some@satsto.me: Supports BOLT 12 payment and On Chain (CAUTION: mainnet)
  - Testing resolving: `bdk-cli -n testnet resolve_dns_recipient testnet@bitdevsyde.org`
  - Testing create tx: `bdk-cli -n testnet wallet -w regtest_default_wallet create_tx --to "bcrt1qe497k549sgw9trzym50tdlegq3xx4apjqynjqm:1000" --to_dns "testnet@bitdevsyde.org:5000"`

  ## Changelog notice

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  - Add top level command `resolve_dns_recipient` to resolve the DNS payment instructions
  - Add option `--to_dns` to `create_tx` command to allow sending to a Human Readable Name (HRN)

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [ ] I've added tests for the new feature
  * [ ] I've added docs for the new feature
  * [ ] I've updated `CHANGELOG.md`

Top commit has no ACKs.

Tree-SHA512: 1bd0d0b26e80f3a271c647cd81ae5e7ab9e6813c7b1776141f05765519bcbc27025801f69f3f9cb72e1ecbe4314373d5e9c3262dfd8a4a1511d176a04bedad3d

14 hours agofix: separate CreateTx from CreateDnsTx
Sonkeng Maldini [Mon, 6 Jul 2026 20:06:10 +0000 (21:06 +0100)]
fix: separate CreateTx from CreateDnsTx

14 hours agofix: unifying recipients before send
Sonkeng Maldini [Wed, 17 Jun 2026 16:53:17 +0000 (17:53 +0100)]
fix: unifying recipients before send

14 hours agofix: add log when resolving
Sonkeng Maldini [Tue, 26 May 2026 11:14:17 +0000 (12:14 +0100)]
fix: add log when resolving

14 hours agodiscard pretty flag and apply reviews
Sonkeng Maldini [Mon, 25 May 2026 17:37:28 +0000 (18:37 +0100)]
discard pretty flag and apply reviews

14 hours agofeat: integrate BIP 353 dns payment instructions
Sonkeng Maldini [Wed, 7 Jan 2026 21:56:11 +0000 (22:56 +0100)]
feat: integrate BIP 353 dns payment instructions

34 hours agofeat(sp): fix command_requires_db fn match arm
Vihiga Tyonum [Sun, 5 Jul 2026 02:37:46 +0000 (03:37 +0100)]
feat(sp): fix command_requires_db fn match arm

3 days agoMerge 'master' into refactor/restructure-project
Vihiga Tyonum [Sun, 5 Jul 2026 02:33:06 +0000 (03:33 +0100)]
Merge 'master' into refactor/restructure-project

3 days agoref(payjoin): add payjoin persistence
Vihiga Tyonum [Sun, 5 Jul 2026 02:07:10 +0000 (03:07 +0100)]
ref(payjoin): add payjoin persistence

- Adds payjoin persistence

4 days agoref(compile):compile tr desc with rand unspend key
Vihiga Tyonum [Sat, 4 Jul 2026 11:01:20 +0000 (12:01 +0100)]
ref(compile):compile tr desc with rand unspend key

- add compile taproot descriptor with randomized
unspendable internal key

4 days agofeat(WalletEvents): Add wallet events to clients
Vihiga Tyonum [Sat, 4 Jul 2026 10:38:46 +0000 (11:38 +0100)]
feat(WalletEvents): Add wallet events to clients

- Update bdk_wallet to v2.4.0 and other deps
- Add wallet events to RPC, electrum, esplora and
kyoto clients

4 days agoref(create_tx): enforce single recp for sendall
Vihiga Tyonum [Sat, 4 Jul 2026 10:13:21 +0000 (11:13 +0100)]
ref(create_tx): enforce single recp for sendall

6 days agoMerge bitcoindevkit/bdk-cli#242: Payjoin persistence
merge-script [Thu, 2 Jul 2026 11:45:01 +0000 (12:45 +0100)]
Merge bitcoindevkit/bdk-cli#242: Payjoin persistence

2f14a368158dbeacfc9420587a85fb7b29e2ab07 Retry Payjoin requests with other relays (Mshehu5)
6fb0ecd00e089a8cd2d8eecf46e8f6ac48dc4033 Restrict payjoin inputs to confirmed UTXOs (Mshehu5)
262ce86573a98bfe33cb92d52d2da0acece32538 Add payjoin persistence test (Mshehu5)
e85a92cd655b7d44a401f01ca86dad782e04e54b Prune stale payjoin sessions on DB open (Mshehu5)
181d1325ae5fae60c47c47df7c079abebc84c595 chore(deps): Bump payjoin and enable reqwest rustls (Mshehu5)
b9ca88ff6fbd8846d9f6122a7695cc129b71ad8a Document payjoin recovery commands and SQLite setup (Mshehu5)
559ba76255adaa2ab129c5df63d796ae53f5ac67 Add commands to resume and view payjoin history (Mshehu5)
4f71144a49047c9debd481cbb2a75cd86d462906 Integrate payjoin session persistence into workflow (Mshehu5)
c2bdb3d53f503d9ce58cb2c43771320a89aefdf4 Add SQLite backing store for payjoin sessions (Mshehu5)

Pull request description:

  ### Description
  https://github.com/bitcoindevkit/bdk-cli/pull/230 needed to be merged for this to go through
  Address https://github.com/bitcoindevkit/bdk-cli/issues/149 also follow up to #200
  This PR adds persistance to existing async payjoin integration
  This introduces neccessary database model and tables also  add commad for resume to allow interrupted sessions to be continued also a particular session either send or receive.
  A history commad to view payjoin history and status has been added

  ### Notes to the reviewers

  Step to review this include making a payjoin transaction

  Run a receiver to get a BIP21 URI then pass it to the sender as seen in docs https://github.com/bitcoindevkit/bdk-cli/blob/b9cf2acc5f10db46fa30777ff0910b8610a5fc33/README.md?plain=1#L121-L141

  To test resumption, interrupt either side with Ctrl+C mid-session then run resume on that side to continue. A few scenarios worth covering: receiver resuming after interrupt and sender resuming after interrupt. Use history after each scenario to confirm the session state was persisted correctly.

  docs for this can be seen in 7e4ffd1d3ad1165a7d9187bcacb0bdab3303dbb3

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:
  * [x] I've added docs for the new feature

Top commit has no ACKs.

Tree-SHA512: 1e8be24fbf7d894687389192381242cebafcaffd8601418e197cfb7942917cbcd5ae308ed5e9fcc644c1dacb78abed9aa23c49c5ff08151b4657956e89d14217

6 days agoRetry Payjoin requests with other relays
Mshehu5 [Sun, 28 Jun 2026 16:01:25 +0000 (17:01 +0100)]
Retry Payjoin requests with other relays

Payjoin currently keeps using the relay selected during OHTTP key
bootstrapping. If that relay goes offline, the session fails even when
other relay URLs were supplied.

Select from the available relays for each OHTTP request and remember
failures for the rest of the command. Build a fresh request for every
attempt so failover does not reuse linkable OHTTP ciphertext.

6 days agoRestrict payjoin inputs to confirmed UTXOs
Mshehu5 [Sat, 6 Jun 2026 11:24:36 +0000 (12:24 +0100)]
Restrict payjoin inputs to confirmed UTXOs

Prevent wallet failures caused by selecting unconfirmed coins for
payjoin inputs.

Without this filter, the wallet can fail with an "unconfirmed
coins" error during payjoin processing.

6 days agoAdd payjoin persistence test
Mshehu5 [Fri, 29 May 2026 10:53:44 +0000 (11:53 +0100)]
Add payjoin persistence test

Cover the new payjoin persistence paths with focused unit tests.

Exercise replay protection, sender and receiver event persistence,
session pruning and history rendering.

These cases were chosen because the PR's new behavior is
concentrated in the persistence layer and session history path

6 days agoPrune stale payjoin sessions on DB open
Mshehu5 [Tue, 14 Apr 2026 14:54:06 +0000 (15:54 +0100)]
Prune stale payjoin sessions on DB open

Delete payjoin sessions older than 30 days when the payjoin database is accessed. Remove related event rows in the same cleanup pass.

6 days agochore(deps): Bump payjoin and enable reqwest rustls
Mshehu5 [Mon, 13 Apr 2026 11:26:28 +0000 (12:26 +0100)]
chore(deps): Bump payjoin and enable reqwest rustls

Move to payjoin 0.25.0 to stay closer to the latest release.

Enable rustls for the direct reqwest client because Payjoin
polling uses bdk-cli's own HTTPS client and without a TLS
backend the first relay poll fails.

Refine the skipped monitoring status message for the receiver
flow.

6 days agoDocument payjoin recovery commands and SQLite setup
Mshehu5 [Mon, 16 Feb 2026 13:51:18 +0000 (14:51 +0100)]
Document payjoin recovery commands and SQLite setup

Update the README to cover the new `resume` and `history` commands
so users can recover interrupted payjoin sessions and inspect saved
session state. Also add the SQLite dependency needed for the
payjoin persistence workflow.

This keeps the user-facing setup and command documentation aligned
with the new persistence and recovery behavior.

6 days agoAdd commands to resume and view payjoin history
Mshehu5 [Mon, 16 Feb 2026 13:50:06 +0000 (14:50 +0100)]
Add commands to resume and view payjoin history

Expose persisted payjoin session state through CLI commands so users
can recover interrupted sessions and review prior session progress.
Add `resume` to continue pending sender and receiver sessions,
`history` to list saved sessions, status text helpers for clearer
output, and session ID filtering to target a specific session.

This improves recovery and troubleshooting for long-running async
payjoin flows by making persisted session state available from the
CLI.

6 days agoIntegrate payjoin session persistence into workflow
Mshehu5 [Mon, 16 Feb 2026 13:48:33 +0000 (14:48 +0100)]
Integrate payjoin session persistence into workflow

Wire the payjoin persistence layer into the existing send and receive
flows so session state is saved during normal operation and can be
replayed later. Initialize the database from the handlers, replace
the noop persisters with SQLite-backed persisters, resume existing
sessions, and record seen inputs in the receiver flow for replay
protection.

This moves persistence from a standalone storage layer into the
runtime payjoin workflow so interrupted sessions can continue from
saved state instead of starting over. It also simplifies error
handling by relying on `?` once the storage errors map cleanly into
the CLI error type.

6 days agoAdd SQLite backing store for payjoin sessions
Mshehu5 [Mon, 16 Feb 2026 13:31:08 +0000 (14:31 +0100)]
Add SQLite backing store for payjoin sessions

Persist payjoin sender and receiver state in SQLite so interrupted
payjoin sessions can be resumed after the CLI exits. Add dedicated
tables for send and receive sessions, append-only event logs for
state replay, receiver pubkey lookup for sender sessions, and
seen-input tracking for replay protection.

This follows the intended async payjoin design by persisting session
state across interruptions. SQLite keeps the initial persistence
backend simple and builds on existing rusqlite support, at the cost
of a small payjoin-specific schema and serialization layer.

8 days agoMerge bitcoindevkit/bdk-cli#248: Update Wallet to 2.4.0 and other deps
merge-script [Tue, 30 Jun 2026 19:38:29 +0000 (20:38 +0100)]
Merge bitcoindevkit/bdk-cli#248: Update Wallet to 2.4.0 and other deps

eea5ba9a44cf82a10eca47f77a66c2e0822e1d3f chore: update bdk_electrum and bdk_esplora (Vihiga Tyonum)
4b6094a4b7b379c589e00bd7cad4756a874c83c0 feat(WalletEvent): Add WalletEvent to rpc and cbf (Vihiga Tyonum)
3aa50416de33cb795210b71087da0c9682f90997 chore(update-deps): Fix clippy warnings (Vihiga Tyonum)
a3c6d6eb83e10324723c820b40e6adbe55e652c2 chore: Update project dependencies (Vihiga Tyonum)
06b049d7aba5919446a7851f0dc9efdd9a654052 chore: Update bdk_wallet to v2.3 (Vihiga Tyonum)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description
  This PR updates the Wallet API to v2.4.0 and other dependencies. It also adds WalletEvent to both sync and full_scan for all backends.

  Fixes #243

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  ## Changelog notice
  - Update bdk_wallet to v2.4.0
  - Add WalletEvents to all backends Esplora, Electrum, Rpc and CBF.
  - Add `print_wallet_events` function to print wallet events to the terminal during sync
  - Update bdk_bitcoind_rpc to v0.22.0
  - Update bdk_electrum to v0.24.0
  - Update bdk_kyoto to v0.15.4
  - Update bdk_esplora to v0.22.2

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

Top commit has no ACKs.

Tree-SHA512: 2c3c2beb66d1f23fd3e0e30a86622625a51ae5a4092540a9393188cf46523977a05936f893d06149459a65877527b9d52dd9eca00b08a86d59b2ed671b469a2c

8 days agochore: update bdk_electrum and bdk_esplora
Vihiga Tyonum [Sun, 28 Jun 2026 19:40:46 +0000 (20:40 +0100)]
chore: update bdk_electrum and bdk_esplora

- update bdk_electrum to v0.24.0
- update bdk_esplora to v0.22.2

8 days agofeat(WalletEvent): Add WalletEvent to rpc and cbf
Vihiga Tyonum [Sun, 28 Jun 2026 18:31:15 +0000 (19:31 +0100)]
feat(WalletEvent): Add WalletEvent to rpc and cbf

- add WalletEvent to rpc and cbf clients
- Update Wallet to v2.4.0

8 days agochore(update-deps): Fix clippy warnings
Vihiga Tyonum [Tue, 31 Mar 2026 21:13:40 +0000 (22:13 +0100)]
chore(update-deps): Fix clippy warnings

8 days agochore: Update project dependencies
Vihiga Tyonum [Fri, 13 Mar 2026 13:13:09 +0000 (14:13 +0100)]
chore: Update project dependencies

- update bdk_bitcoind_rpc to v0.22.0
- update bdk_electrum to v0.23.2
- update bdk_kyoto to v0.15.4

8 days agochore: Update bdk_wallet to v2.3
Vihiga Tyonum [Wed, 11 Feb 2026 16:34:15 +0000 (17:34 +0100)]
chore: Update bdk_wallet to v2.3

- Add wallet events to full_scan and sync
subcommands

9 days agoMerge bitcoindevkit/bdk-cli#291: fix(create_tx): enforce single recipient for send_all
merge-script [Mon, 29 Jun 2026 08:51:35 +0000 (09:51 +0100)]
Merge bitcoindevkit/bdk-cli#291: fix(create_tx): enforce single recipient for send_all

50d248cfc482bf5d7807b84182e7f19b104ab49b fix(create_tx): enforce single recipient for send_all (Artemiy)

Pull request description:

  Closes #290

  ### Description

  Previously, passing multiple `--to` arguments with `--send_all` would silently drain the wallet to only the first recipient, ignoring the rest. This was inconsistent with the silent-payments `create_tx`, which already validates the recipient count.

  Now returns an error unless exactly one recipient is provided.

  ### Notes to the reviewers

  - The fix mirrors the validation logic already present in the silent-payments `create_tx` branch of the same file, so behavior is now consistent between the two code paths.

  ## Changelog notice
  - Fixed create_tx --send_all to reject multiple recipients instead of silently using only the first one

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  * [x] I've updated `CHANGELOG.md`

  #### Bugfixes:

  * [ ] This pull request breaks the existing API
  * [ ] I've added tests to reproduce the issue which are now passing
  * [x] I'm linking the issue being fixed by this PR

ACKs for top commit:
  tvpeter:
    ACK 50d248cfc482bf5d7807b84182e7f19b104ab49b
  va-an:
    ACK 50d248cfc482bf5d7807b84182e7f19b104ab49b

Tree-SHA512: c462aebe4ba046e875f8a9981aef01eb85bc1f24ab122c6c9efb9f4569daf9349f7aefcbe42dad7bb2b144d06bae62da7af7419a392bde19d58980305b6ebaf9

10 days agoMerge bitcoindevkit/bdk-cli#225: feat(compile): compile taproot descriptor with rando...
merge-script [Sun, 28 Jun 2026 02:59:56 +0000 (03:59 +0100)]
Merge bitcoindevkit/bdk-cli#225: feat(compile): compile taproot descriptor with randomized unspendable internal key

03f6b98d4b0af77fc8a60104a4e1f5cdae3b0c1c test(handlers): drop redundant cfg gate on test module (Vadim Anufriev)
be6bb4b4049ced27ac6d937dd3e47dc5e0182303 docs: add pre-push recipe description to README (Vadim Anufriev)
6e113b1325e264cc4547bd6c3bad890ea6006722 docs(contributing): update CONTRIBUTING.md (Vadim Anufriev)
29ef2e2912a6503086682c33b7ffda21f4c0eed7 refactor(compile): lazy compilation and use pipe for readability (Vadim Anufriev)
a3ca537661dbb80620355b6dae296a836701f93c feat(compile): randomize unspendable internal key for taproot descriptor (Vadim Anufriev)
dd125049ca17f40aae28dead441660b2c201b495 chore(deps): make shlex a non-optional dependency (Vadim Anufriev)

Pull request description:

  ### Description

  Part of #218

  Implements randomization of the unspendable internal key for taproot descriptors. This is the first part of #218, which consists of two parts:
  1. **This PR**: Randomize unspendable internal key for taproot descriptor
  2. **Follow-up**: Add verification command to ensure internal key is derived from NUMS key

  Split into separate PRs for easier review and iteration, and to allow independent discussion of the verification command implementation, as one of the possible approaches could introduce breaking changes.

  ### Notes to the reviewers
  The `compile` command now returns an additional `r` field for taproot descriptors (`-t tr`), containing the randomly generated internal key. Each compilation will produce a different internal key instead of using a fixed NUMS key.

  Example output for taproot (first execution):
  ```
  -> % bdk-cli compile "pk(A)" -t tr
  {
    "descriptor": "tr(2dd09dd0355f4b2d5a4886de599786f3c0211652373221c87aba1cd1f7f1e593,pk(A))#anvu48aj",
    "r": "275a58827bd0ad459d6f92e083ddc3d99a03076155691680eb8f3b06380cdcfd"
  }
  ```

  Same descriptor compiled again produces different `r` and internal key:
  ```
  -> % bdk-cli compile "pk(A)" -t tr
  {
    "descriptor": "tr(801078f69dae7d95631723d4d13e6c32911633d227dcfc24c6b7e32e1e533e6c,pk(A))#f79rr82j",
    "r": "5e3ac63bb20d6a4bfff645279cc63a7472e18066da8826b13cbcb23aecb5c401"
  }
  ```

  Other descriptor types remain unchanged:
  ```
  -> % bdk-cli compile "pk(A)" -t sh
  {
    "descriptor": "sh(pk(A))#k80zhe7s"
  }
  ```

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [x] I've added tests for the new feature
  * [ ] I've added docs for the new feature
  * [ ] I've updated `CHANGELOG.md`

Top commit has no ACKs.

Tree-SHA512: 333a7e82007dfe2344f14fb8e1fb7b3f5c19d99677251a97f7909a285607c399aeacfbbca089117677a859da6dfc55a4853b36f1773ed3e70292433e27bfcfd0

12 days agofix(create_tx): enforce single recipient for send_all
Artemiy [Sun, 21 Jun 2026 07:11:17 +0000 (10:11 +0300)]
fix(create_tx): enforce single recipient for send_all

Previously, passing multiple --to arguments with --send_all would
silently drain the wallet to only the first recipient, ignoring the
rest. This was inconsistent with the silent-payments create_tx, which
already validates the recipient count.

Now returns an error unless exactly one recipient is provided

2 weeks agorefactor(runtime): Add address and createtx to db
Vihiga Tyonum [Mon, 22 Jun 2026 15:07:28 +0000 (16:07 +0100)]
refactor(runtime): Add address and createtx to db

- Add new address, unused address and createtx
commands to list of commands that require
loading existing db
- adding persisting changes in offline and online
commands

4 weeks agorefactor(sp-payment): Rebase silent payment feat
Vihiga Tyonum [Sat, 6 Jun 2026 11:12:01 +0000 (12:12 +0100)]
refactor(sp-payment): Rebase silent payment feat

- rebase silent payment feature

4 weeks agorefactor(main): add runtime wallet module
Vihiga Tyonum [Sun, 31 May 2026 11:00:52 +0000 (12:00 +0100)]
refactor(main): add runtime wallet module

- add wallet runtime module to serve as context
manager
- fix clippy errors

4 weeks agorefactor(handlers): Apply app context
Vihiga Tyonum [Fri, 29 May 2026 03:24:41 +0000 (04:24 +0100)]
refactor(handlers): Apply app context

- apply app context with state to all the modules
- cover case for commands when db is not required

4 weeks agoRefactor(handlers): Define app context states
Vihiga Tyonum [Fri, 29 May 2026 03:17:56 +0000 (04:17 +0100)]
Refactor(handlers): Define app context states

- Define Init state for when an execution does
not need either the wallet or client for execution
- Define the Offline wallet operations state
for app context when an execution envt needs
 a wallet
- Define the online wallet operations state for
appcontext when an execution needs both the
wallet and client
- make app context generic over the state
- make the app command and async app command
generic over the execution context
- deleted shorten fn as it was applicable to the
pretty flag
- removed tests for pretty flag

4 weeks agorefactor(output): apply generics to output mod
Vihiga Tyonum [Tue, 26 May 2026 08:27:26 +0000 (09:27 +0100)]
refactor(output): apply generics to output mod

4 weeks agoref(handlers): fix offline, online and desc mod
Vihiga Tyonum [Thu, 21 May 2026 15:23:38 +0000 (16:23 +0100)]
ref(handlers): fix offline, online and desc mod

- fix execution logic for subcommands under
offline and online wallet subcommands

4 weeks agoref(handlers): refactor config, descr and key mods
Vihiga Tyonum [Thu, 21 May 2026 15:22:04 +0000 (16:22 +0100)]
ref(handlers): refactor config, descr and key mods

- move execution logic into config, desc and key
modules

4 weeks agoref(main): add run to handle routing
Vihiga Tyonum [Thu, 21 May 2026 15:20:00 +0000 (16:20 +0100)]
ref(main): add run to handle routing

- add run fn in main to handle routing

4 weeks agoref(pretty): remove `--pretty` flag
Vihiga Tyonum [Thu, 21 May 2026 15:17:39 +0000 (16:17 +0100)]
ref(pretty): remove `--pretty` flag

- remove --pretty flag
- move types to utils
- update commands

4 weeks agoref(persister): collapse wallet subdir to persister
Vihiga Tyonum [Thu, 21 May 2026 14:59:56 +0000 (15:59 +0100)]
ref(persister): collapse wallet subdir to persister

- move wallet subdir into the persister module
to simplify the structure as wallet was confusing

4 weeks agoupdate namespace and update types
Vihiga Tyonum [Thu, 14 May 2026 10:13:27 +0000 (11:13 +0100)]
update namespace and update types

4 weeks agorevert mod names for command and clients
Vihiga Tyonum [Thu, 14 May 2026 10:09:22 +0000 (11:09 +0100)]
revert mod names for command and clients

4 weeks agoref(utils): use types in desc output in utils
Vihiga Tyonum [Wed, 29 Apr 2026 15:35:19 +0000 (16:35 +0100)]
ref(utils): use types in desc output in utils

4 weeks agoref(handlers): rebase bip322 feature
Vihiga Tyonum [Wed, 29 Apr 2026 14:07:54 +0000 (15:07 +0100)]
ref(handlers): rebase bip322 feature

- rebase master for bip322 feature
- update types to use simple table helper

4 weeks agoref(types): add simple table helper
Vihiga Tyonum [Wed, 29 Apr 2026 08:11:33 +0000 (09:11 +0100)]
ref(types): add simple table helper

- add simple table helper fn for creating tables
- refactor types to use simple table helper
- add type defs for key, wallets and descriptors

4 weeks agoref(handlers): add types for desc, key & wallets
Vihiga Tyonum [Wed, 29 Apr 2026 08:09:01 +0000 (09:09 +0100)]
ref(handlers): add types for desc, key & wallets

- add types for descriptor, key and wallets mods

4 weeks agorefactor(handlers): Add types for outputting data
Vihiga Tyonum [Fri, 24 Apr 2026 18:41:23 +0000 (19:41 +0100)]
refactor(handlers): Add types for outputting data

- add trait for formatting outputs
- add types for presenting data to the output
- refactor offline mod to use types

4 weeks agoref(main): update main entry point
Vihiga Tyonum [Tue, 21 Apr 2026 10:39:06 +0000 (11:39 +0100)]
ref(main): update main entry point

4 weeks agoref(handlers): split handler fns into repl
Vihiga Tyonum [Tue, 21 Apr 2026 10:25:55 +0000 (11:25 +0100)]
ref(handlers): split handler fns into repl

- split handler fns into repl
- add entry point to the handlers subdir
- add wallet subdir entry point

4 weeks agoref(handlers):mv handler fns into offline & others
Vihiga Tyonum [Tue, 21 Apr 2026 10:19:03 +0000 (11:19 +0100)]
ref(handlers):mv handler fns into offline & others

- move handler fns into offline, online, wallets
modules

4 weeks agoref(handlers): split handlers into config, key
Vihiga Tyonum [Tue, 21 Apr 2026 10:15:43 +0000 (11:15 +0100)]
ref(handlers): split handlers into config, key

- split handlers into top level commands config,
key and descriptors

4 weeks agoref(persister): mv persister into wallet subdir
Vihiga Tyonum [Tue, 21 Apr 2026 10:08:44 +0000 (11:08 +0100)]
ref(persister): mv persister into wallet subdir

- move persister into wallet subdirectory
- update imports in payjoin module

4 weeks agoref(utils): refactor utils into utils subdir
Vihiga Tyonum [Tue, 21 Apr 2026 10:05:04 +0000 (11:05 +0100)]
ref(utils): refactor utils into utils subdir

- split util fns into `descriptors` and `common`

4 weeks agoref(config): move config into config subdir
Vihiga Tyonum [Tue, 21 Apr 2026 10:03:00 +0000 (11:03 +0100)]
ref(config): move config into config subdir

4 weeks agoref(commands): mv commands & clients into subdirs
Vihiga Tyonum [Tue, 21 Apr 2026 09:52:35 +0000 (10:52 +0100)]
ref(commands): mv commands & clients into subdirs

- move all blockchain clients code into the
backend subdirectory
- move commands.rs content into commands
subdirectory

6 weeks agotest(handlers): drop redundant cfg gate on test module
Vadim Anufriev [Thu, 7 May 2026 20:53:32 +0000 (00:53 +0400)]
test(handlers): drop redundant cfg gate on test module

6 weeks agodocs: add pre-push recipe description to README
Vadim Anufriev [Thu, 2 Apr 2026 20:53:27 +0000 (00:53 +0400)]
docs: add pre-push recipe description to README

6 weeks agodocs(contributing): update CONTRIBUTING.md
Vadim Anufriev [Sun, 29 Mar 2026 14:52:52 +0000 (18:52 +0400)]
docs(contributing): update CONTRIBUTING.md

- Remove MSRV mention as the project no longer enforces it
- Add Conventional Commits and GPG signing links to align with other repos

6 weeks agorefactor(compile): lazy compilation and use pipe for readability
Vadim Anufriev [Tue, 24 Mar 2026 20:12:30 +0000 (00:12 +0400)]
refactor(compile): lazy compilation and use pipe for readability

Move miniscript compilation inside match arms to avoid compiling
for all script contexts when only one is needed. Use `tap::Pipe`
for concise method chaining in sh/wsh/sh-wsh branches.

6 weeks agofeat(compile): randomize unspendable internal key for taproot descriptor
Vadim Anufriev [Tue, 24 Mar 2026 17:59:39 +0000 (21:59 +0400)]
feat(compile): randomize unspendable internal key for taproot descriptor

Instead of using a fixed NUMS key as the internal key for taproot
descriptors, generate a randomized unspendable key (H + rG) for each
compilation. This improves privacy by preventing observers from
determining whether key path spending is disabled.

The randomness factor `r` is included in the output so the user can
verify that the internal key is derived from the NUMS point.

Also applies `shorten()` globally in pretty mode and uses `?` operator
via dedicated error variants instead of `map_err`.

Tests verify descriptor structure and `r` field uniqueness across
randomized compilations.

6 weeks agochore(deps): make shlex a non-optional dependency
Vadim Anufriev [Tue, 24 Mar 2026 17:43:08 +0000 (21:43 +0400)]
chore(deps): make shlex a non-optional dependency

Although not directly related to this PR's changes, during review
we agreed to make shlex non-optional since it's used by the default
`repl` feature and the package is under 20 KiB.

See: https://github.com/bitcoindevkit/bdk-cli/pull/225#discussion_r2671741961

7 weeks agoMerge bitcoindevkit/bdk-cli#220: Add experimental silent payment transaction creation...
merge-script [Tue, 19 May 2026 18:15:42 +0000 (19:15 +0100)]
Merge bitcoindevkit/bdk-cli#220: Add experimental silent payment transaction creation support

c57985475172fc610b3ce996338a43baef1c52d6 feat(silentpayments): add experimental silent-payments sending support (nymius)

Pull request description:

  **Description**

  This PR adds experimental support for creating silent payment transactions through a new `CreateSpTx` command. The implementation integrates the `bdk_sp` crate to enable sending Bitcoin to silent payment addresses.

  Key changes:
  - Adds `bdk_sp` dependency as an optional feature
  - Implements `CreateSpTx` command with support for silent payment recipients
  - Includes parser for silent payment `address:amount` pairs
  - Returns signed transactions ready for broadcast (not PSBTs due to silent payment derivation constraints)

  **Notes to the reviewers**

  - This feature is marked as **EXPERIMENTAL** and includes warnings against mainnet use
  - The command returns signed transactions directly rather than PSBTs because silent payment script pubkey derivation cannot be performed securely in a trustless manner with standard PSBT workflows
  - RBF is disabled for silent payment transactions (sequence set to MAX)
  - The implementation handles both single key and extended key signers
  - Error handling uses temporary `.expect()` calls that should be addressed in future iterations

  **Changelog notice**

  **Added**: Experimental silent payment transaction creation via `CreateSpTx` command (feature-gated behind `sp` flag)

  **Checklists**

  **All Submissions**

  * [x] I've signed all my commits
  * [x] I followed the [conventional commit guidelines](https://www.conventionalcommits.org/en/v1.0.0/)
  * [x] I ran cargo fmt, clippy and test before committing

  **New Features**

  ~~* [ ] I've added tests for the new feature~~
  * [x] I've added docs for the new feature

ACKs for top commit:
  tvpeter:
    tACK c57985475172fc610b3ce996338a43baef1c52d6

Tree-SHA512: 0d5e2064b2eacab4fa2c0161bb1d9fd73c17401900c80a665a8ba3feb2025ddd6896efd0c30f7ceab361a88c397010965442bc9689df85383aaa9a0ec95fec0c

8 weeks agofeat(silentpayments): add experimental silent-payments sending support
nymius [Wed, 20 Aug 2025 16:42:12 +0000 (13:42 -0300)]
feat(silentpayments): add experimental silent-payments sending support

- Adds CreateSpTx command to create transactions with silent payment
  outputs: this command creates signed transactions directly rather than
  PSBTs due to current limitations in secure shared derivation.

  It supports mixed recipients: regular addresses + silent payments.
  It DOES NOT support RBF for the created transactions.
  It generates signed transactions ready for broadcasting.

- Adds SilentPaymentCode command to create silent payment codes from
  public keys and network: the silent payment code generated is
  independent from any of the other stateful features of bdk-cli.

  This command is mainly intended for experimental use, do not lock any
  funds to the generated code if you don't know what you are doing and
  don't have the keys matching the public keys used.

- Adds bdk_sp dependency with "silent-payments" feature flag.
- Adds silent payment recipient parsing utility.
- Add README section for new silent payment commands.

Note: This is experimental functionality for testing only, not
recommended for mainnet use.

Signed-off-by: nymius <155548262+nymius@users.noreply.github.com>
2 months agoMerge bitcoindevkit/bdk-cli#179: Feature/bip322 integration
merge-script [Fri, 24 Apr 2026 18:48:53 +0000 (19:48 +0100)]
Merge bitcoindevkit/bdk-cli#179: Feature/bip322 integration

7c33b33a2bfd9065cbe0768bcb00ce0ec1653686 chore(deps): switch bdk_bip322 from git to crates.io release (Abiodun Awoyemi)
e03f123c480d50517be98cae9b34c4dfa0ff5f92 fix: rename BIP322 commands, validate address ownership before signing and add Bip322Error variant (Abiodun)
2eab75c167d5609e1e96374ffb08cdf22a12a09a bip322: update proof handling for new bdk-bip322 API (aagbotemi)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description
  This PR added [BIP322](https://bips.xyz/322) feature into BDK CLI.
  It also has a usage file for testing purposes

  ### Notes to the reviewers

  <!-- In this section you can include notes directed to the reviewers, like explaining why some parts
  of the PR were done in a specific way -->

  ## Changelog notice

  <!-- Notice the release manager should include in the release tag message changelog -->
  <!-- See https://keepachangelog.com/en/1.0.0/ for examples -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

  #### New Features:

  * [x] I've added docs for the new feature
  * [x] I've updated `CHANGELOG.md`

ACKs for top commit:
  notmandatory:
    ACK 7c33b33a2bfd9065cbe0768bcb00ce0ec1653686

Tree-SHA512: a3e16b86c2259eb74f243721f9b54589322066d293ca0ba3ba74de13de264289426e5019ba16514797aa34a3f17a6bed574d0b5cc66d2ff51b68830152616696

2 months agochore(deps): switch bdk_bip322 from git to crates.io release
Abiodun Awoyemi [Thu, 23 Apr 2026 06:25:01 +0000 (07:25 +0100)]
chore(deps): switch bdk_bip322 from git to crates.io release

2 months agoMerge bitcoindevkit/bdk-cli#270: fix: fix RUSTSEC-2026-0097 for rand 0.9
merge-script [Tue, 21 Apr 2026 13:05:09 +0000 (14:05 +0100)]
Merge bitcoindevkit/bdk-cli#270: fix: fix RUSTSEC-2026-0097 for rand 0.9

77dc466ca54eb8466e8670428c384fc34c6a81ac chore: update rand 0.9.2 -> 0.9.3 (Vadim Anufriev)

Pull request description:

  Fixes #269

  Update transitive dependency `rand` from 0.9.2 to 0.9.3 via `cargo update -p rand@0.9.2` to resolve RUSTSEC-2026-0097.

  Note: #268 (`rand 0.8.5` via `secp256k1` and others) remains unaffected by this change and needs to be fixed upstream.

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

Top commit has no ACKs.

Tree-SHA512: b1acee0469b25b8c3e334af0c045df426652995ce8e0da9cff99d391768ef0fb75f99e50f8dfef36a840b2d6f5e7fb0b125e8bfed46952236595b7c81d0f52b1

2 months agofix: rename BIP322 commands, validate address ownership before signing and add Bip322...
Abiodun [Thu, 19 Feb 2026 08:12:42 +0000 (09:12 +0100)]
fix: rename BIP322 commands, validate address ownership before signing and add Bip322Error variant

2 months agobip322: update proof handling for new bdk-bip322 API
aagbotemi [Sat, 26 Apr 2025 12:07:37 +0000 (13:07 +0100)]
bip322: update proof handling for new bdk-bip322 API

2 months agochore: update rand 0.9.2 -> 0.9.3
Vadim Anufriev [Sun, 12 Apr 2026 19:51:27 +0000 (23:51 +0400)]
chore: update rand 0.9.2 -> 0.9.3

3 months agoMerge bitcoindevkit/bdk-cli#265: Bump version to 3.0.0 v3.0.0
merge-script [Thu, 26 Mar 2026 15:23:12 +0000 (16:23 +0100)]
Merge bitcoindevkit/bdk-cli#265: Bump version to 3.0.0

07fd32f8a70bc24463e58c8ffd63fbcaae9930f2 Bump version to 3.0.0 (Vihiga Tyonum)
83499d70ea137c69aea47389de6da20cfc3cddd4 docs: Update changelog for v3.0.0 release (Vihiga Tyonum)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  This PR bumps the crate version to 3.0.0

  Closes #257

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  ### Checklists

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  va-an:
    ACK 07fd32f8a70bc24463e58c8ffd63fbcaae9930f2

Tree-SHA512: 60c753c7637749971fd695cfce08a9a0abac5b2ea3ed470a6d42cfb8f4861f35fee510af174956d213fb3cde8cc4a907a9fc309d23bf42befd909deadfd1aa22

3 months agoBump version to 3.0.0
Vihiga Tyonum [Thu, 26 Mar 2026 10:25:38 +0000 (11:25 +0100)]
Bump version to 3.0.0

3 months agodocs: Update changelog for v3.0.0 release
Vihiga Tyonum [Thu, 26 Mar 2026 10:08:56 +0000 (11:08 +0100)]
docs: Update changelog for v3.0.0 release

3 months agoMerge bitcoindevkit/bdk-cli#251: Deps: Update transitive dependencies `quinn-proto...
merge-script [Wed, 25 Mar 2026 22:21:20 +0000 (23:21 +0100)]
Merge bitcoindevkit/bdk-cli#251: Deps: Update transitive dependencies `quinn-proto` and `aws-lc-sys`

fb9fe29cee11a414f747c0c6f480ddccbb78a6d2 chore: update project deps (Vihiga Tyonum)
5c63453f5d310b6e55cfcae6fa0cf344c21c5c32 deps: Update rustls-webpki to 0.103.10 (Vihiga Tyonum)
88cdceea26903c6023fe1fd0426fd04c533ea5b2 deps: Update aws-lc-sys to v0.39.0 & parent crate (Vihiga Tyonum)
5980919a637842c7615566737d90d7390f395524 deps: Update quinn-proto to v0.11.14 (Vihiga Tyonum)

Pull request description:

  <!-- You can erase any parts of this template not applicable to your Pull Request. -->

  ### Description

  This PR updates transitive dependencies `quinn-proto` and `aws-lc-sys` to fix identified vulnerabilities.
  Other `aws-lc-sys` linked vulnerabilities fixed by this update include:
  - AWS-LC has Timing Side-Channel in AES-CCM Tag Verification
  - AWS-LC has PKCS7_verify Signature Validation Bypass
  - CRLs not considered authorative by Distribution Point due to faulty matching logic in `rustls-webpki` v0.103.8

  This PR also update:
  - clap to v4.6
  - clap_complete to v4.6
  - env_logger to v0.11.10
  - thiserror to v2.0.18
  - tracing to v0.1.44
  - toml to v1.1.0
  - bdk_electrum to v0.23.2
  - bdk_kyoto to v0.15.4
  - bdk_redb to v0.1.1
  - reqwest to v0.13.2
  - url to v2.5.8

   Fixes #249, #250, #258, #259, #260, #261, #262 and #264

  <!-- Describe the purpose of this PR, what's being adding and/or fixed -->

  #### All Submissions:

  * [x] I've signed all my commits
  * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk-cli/blob/master/CONTRIBUTING.md)
  * [x] I ran `cargo fmt` and `cargo clippy` before committing

ACKs for top commit:
  notmandatory:
    tACK fb9fe29cee11a414f747c0c6f480ddccbb78a6d2

Tree-SHA512: d637dbea336c518f8511b83f3b343cb3b8e01ed4c3a2b946b3f607ef6f848d15dab6289232b0d2cf0acc8dcd99075b0d418ad8c4386c33ecc7636ea5eeb5a933

3 months agochore: update project deps
Vihiga Tyonum [Wed, 25 Mar 2026 05:34:44 +0000 (06:34 +0100)]
chore: update project deps

This PR also update:
- clap to v4.6
- clap_complete to v4.6
- env_logger to v0.11.10
- thiserror to v2.0.18
- tracing to v0.1.44
- toml to v1.1.0
- bdk_electrum to v0.23.2
- bdk_kyoto to v0.15.4
- bdk_redb to v0.1.1
- reqwest to v0.13.2
- url to v2.5.8

3 months agodeps: Update rustls-webpki to 0.103.10
Vihiga Tyonum [Tue, 24 Mar 2026 15:58:14 +0000 (16:58 +0100)]
deps: Update rustls-webpki to 0.103.10

Because we have different versions of rustls-webpki
in the project dependency, this updated version
is a dependency of `rustls``

3 months agodeps: Update aws-lc-sys to v0.39.0 & parent crate
Vihiga Tyonum [Mon, 16 Mar 2026 11:26:49 +0000 (12:26 +0100)]
deps: Update aws-lc-sys to v0.39.0 & parent crate

3 months agodeps: Update quinn-proto to v0.11.14
Vihiga Tyonum [Mon, 16 Mar 2026 10:49:16 +0000 (11:49 +0100)]
deps: Update quinn-proto to v0.11.14