Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory
, '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

Unleash the power of Bitcoin Core into bdk-cli - #92

Closed
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2
Closed

Unleash the power of Bitcoin Core into bdk-cli#92
rajarshimaitra wants to merge 10 commits into
bitcoindevkit:masterfrom
rajarshimaitra:node-update-2

Conversation

@rajarshimaitra

@rajarshimaitrarajarshimaitra commented May 13, 2022

Copy link
Copy Markdown
Contributor

Description

fixes#62
fixes#76

This PR does the following

  • Bump bdk version to 0.19.
  • Opens up some basic bitcoin-core commands via a new sub-command bdk-cli node <command> [<args>]. The API of the node commands are kept very similar to bitcoin-cli api. This allows us to control the auto deployed backend node via regtest-* features from bdk-cli itself.
  • The Integration tests are written with std::Command from rust. That can be used to simulate various wallet transaction situations with bdk-cli, like Test watch-only LND wallet and signing PSBT #87.
  • These apis are also exposed in repl mode so now bdk-cli can have real time communication between a backend and a wallet in repl shell itself. Which can be very useful for quick runs of different testing conditions.

Notes to the reviewers

@sandipndev@krtk6160. This is the PR you guys can start working on top of to simulate the intended test situations. At least with bitcoind it can be done with all existing toolings. For LND some other wrapper needes to be built.

@notmandatory let me know what you think about the whole framework.

Also looking for more integration test ideas too add into.

basic node usage looks like this

$ ./target/debug/bdk-cli node --help
bdk-cli-node 0.5.0
Regtest Node mode
USAGE:
bdk-cli node <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
generate Generate blocks
getbalance Get Wallet balance
getinfo Get info
getnewaddress Get new address from node's test wallet
help Prints this message or the help of the given subcommand(s)
sendtoaddress Send to an external wallet address

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • 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

@rajarshimaitrarajarshimaitra changed the title Unleas the power of Bitcoin Core into bdk-cliUnleash the power of Bitcoin Core into bdk-cliMay 13, 2022
@notmandatory

Copy link
Copy Markdown
Member

Hey @rajarshimaitra concept ACK! but I need to focus on the next bdk release (taproot!) so won't be able to do a through review until that's out.

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Ya thanks @notmandatory no issues.. I opened this early for discussion.. This can wait till other major things are done..

 - Update BDK to v0.19
- update electrsd to v0.19 to get latest required upstream changes
Note that `regtest-esplora-*` features aren't working as of now. Some
issues in `elctrsd/esplora` feature. Thus removed from CI tests.
Add a separate subcommand list for for node operation related commands.
Right now they only include basic operations, but can be extended later
as per need.
Add a Backend struct that will hold the running bitcoind or electrsd
process in the background. The electrsd and bitcoind will be connected
together. And the wallet will connect to the backend electrsd via
electrum blockchain config. So in case of `regtest-electrum` too we will
operate the backend via rpc to the underlying core node.
Update the lib tests to accommodate changes of the previous commit.
The database creation functions are broken up and chained together to
create the right database directory for the right context and not reuse
code.
Update the Backend handling logic for new_blockchain() function.
The Backend doesn't contain connection data anymore but the full
bitcoind and electrsd instance.
The Backend struct definition is moved into lib.rs.
Update the Backend handling logic in main() to the new Backend struct.
Update the handle_command() function to handle node command that operates
on the Backend.
Add node commands in REPL mode too to get regtest-* features available
in repl.
This is a simple test framework to using std::Cmd to test custom built
bdk-cli with `regtest-*` feature to quickly simulate integration testing
of any kind of situation involving one/many bdk wallets, and one bitcoind
or electrsd process on the background.
All the bdk-cli command line commands can be used in this framework to
operate all kind of tests. The `bdk-cli wallet <cmd>` and
`bdk-cli node <cmd>` makes bdk-cli the complete integration testing
environment itself.
Each tests can be manually played in the `bdk-cli repl` mode too.
@rajarshimaitra

rajarshimaitra commented Jun 14, 2022

Copy link
Copy Markdown
ContributorAuthor
  • Done some major refactoring.
  • Updated all the pending dependencies.
  • Updated to bdk v0.19.0
  • Broken down the commits into smaller chunks for easier review
  • Refactored the existing Backend struct
  • Backend now can be both bitcoind and electrum
  • Some minor update in the integration testing..

@notmandatory this PR is now ready for review..

Edit: The tests failure is due to version conflicts in bdk ocuring from bdk-reserves.. Working on a fix for that.. The PR can be code reviewed in the mean time..

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Updated the PR doc..

The current test failure at cargo build --features reserves,electrum --locked fixes with https://github.com/weareseba/bdk-reserves/pull/5

@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Opened an alternate version of the same PR in #102.

Not closing this one yet, in case we need to revert back to previous crate structure..

@notmandatorynotmandatory removed this from the Release 0.6.0 milestone Jun 21, 2022
@notmandatorynotmandatory added this to the Release 0.7.0 milestone Jun 21, 2022
notmandatory added a commit that referenced this pull request Jun 27, 2022
5b20283 update CI to remove some features (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
Currently the way `ExternalReserves` functionality is written, it can only be used with `electrum` feature. The tests should fail if the implementation behavior is enforced.. Disabling the tests in CI.
Also removing the `regtest-esplora` features from the tests, because they won't work when #92 lands.
### 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 -->
### 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:
notmandatory:
ACK 5b20283.
Tree-SHA512: 09e875376e2a8b1a43c318b66849abdeb518deee32ca39ba1e10c9b9230b4af61a3391e5a1dcad0586643a820eb66fabfea9d2af95f0d97fe8383524c5e050d9
notmandatory added a commit that referenced this pull request Jul 6, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with #92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves #93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
logosstone pushed a commit to logosstone/bdk-cli that referenced this pull request Jul 7, 2022
292dd1e Fix repl mode command parsing (Steve Myers)
073f1c3 Update with review comments (rajarshimaitra)
4e8f830 revert author list change (rajarshimaitra)
b09c405 Remove base64 dependency (rajarshimaitra)
1e70ff9 Refactor everything (rajarshimaitra)
Pull request description:
<!-- You can erase any parts of this template not applicable to your Pull Request. -->
### Description
This is a massive refactoring PR that changes the whole structure of the crate. Previously it was written like a library
to be used to create the bdk-cli app. But eventually the crate itself became the app. This PR attempts to remove the remaining
lib like patterns in the code, and make it a pure binary crate.
This makes the code more modular and makes it look like a typical binary rust crate.
There was no real good way to structure the change into separate commits, so I made one single big one.. The best way to review is to look at the final structure of the code itself, not the change set.
The crate has following modules now
- `main` : The main app runtime
- `commands`: Includes all the structopt commands used by bdk-cli.
- `handlers`: Include all the command handlers used buy the app.
- `utils`: Include all the utility and helper functions
- `Backend` : Defines the backend node process, and its related methods. (This will be filled more with bitcoindevkit#92).
Apart from the structure changes there are few other changes that took place
- Almost all of the previous doc comments are removed. As they were written to use bdk-cli as a lib. Instead new structopts "comments" are added to describe the app functionality better. As a result the app `--help` commands are more elaborate and descriptive now. I have also removed few redundant description messages used before, that would mess up the help comments. And as a by product it solves bitcoindevkit#93.
- bdk is updated to v0.19.0
- bdk-reserves is updated with current version pointing to bdk v0.19.0.
- Default database is now sqlite.
Overall I think I managed not to break anything.
Currently this change will remove most of the previous documentation on the crate. But those aren't useful to context of bdk-cli after this change.. My proposal would be reproduce the README instructions itself in doc.rs landing page.
We also need to update the README to reflect these changes.. I will open that up in a separate PR.
I also haven't updated changelog yet.. Not sure yet how to describe the change in short.. Will do that once this is almost finalized..
### Notes to the reviewers
### 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`
ACKs for top commit:
notmandatory:
ACK 292dd1e
Tree-SHA512: 895d8088bf93a481fd776e2ac5fe85926f13b7b4535f17b9edd3c0363a89dc3689e28c6e13dbcac3970bc00e3ff206f402e94406f3b3688c9e4a7f9d31b20e40
@rajarshimaitra

Copy link
Copy Markdown
ContributorAuthor

Closing this as we are moving ahead with #102

@notmandatorynotmandatory removed this from the Release 0.7.0 milestone Jul 14, 2022
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Open up rpc control for auto deployed regtest mode Create Integration tests for bdk-cli

2 participants

@rajarshimaitra@notmandatory