Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The Great Reset #99

Merged
merged 5 commits into from
Jul 6, 2022
Merged

Conversation

rajarshimaitra
Copy link
Contributor

@rajarshimaitra rajarshimaitra commented Jun 15, 2022

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 Unleash the power of Bitcoin Core into bdk-cli #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 Bug in help doc #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:

  • 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

@rajarshimaitra
Copy link
Contributor Author

Currently trying to pass the CI.. Might require few more updates..

@rajarshimaitra rajarshimaitra force-pushed the restructure branch 3 times, most recently from 21a9b51 to 124356b Compare June 15, 2022 23:02
@rajarshimaitra
Copy link
Contributor Author

rajarshimaitra commented Jun 15, 2022

I think I have hit a dead lock..

Our Previous CI had reserves with other blockchains features.. But the way reserve command is written it cannot be used with anything other than electrum. I am not sure why it wasn't failing before..

So Either we need to enforce that in build.rs or update the reserve command to work with any backend (not sure if possible, bdk-reserves uses the Electrum Api for the job)..

I have updated the CI file to keep only the reserve, electrum test..

But I think it won't be reflected in the CI of this PR.. So tests will now always fail here..

One easy way out now is to make another PR with the CI change, get that merged, and rebase this one on top of the new CI..

Any suggestion @notmandatory ?

Update: All other tests are passing except the reverses, esplora/comapct_filters.

@rajarshimaitra
Copy link
Contributor Author

CI fix PR opened here #100

@rajarshimaitra
Copy link
Contributor Author

cc @notmandatory

Waiting for some concept ack on this so I can start rebasing #92 on top of this.. That will take some no trivial refactoring..

@rajarshimaitra
Copy link
Contributor Author

rajarshimaitra commented Jun 17, 2022

Rebased on top of #100 to make this dependent on it..

@rajarshimaitra
Copy link
Contributor Author

Removed bdk-reserves patch after v0,19.0 update..

@notmandatory
Copy link
Member

Concept ACK, but looks like some tests still broken. I'm going to be tied up with a PlebFi here in LA this weekend but can spend some time reviewing next week!

@rajarshimaitra
Copy link
Contributor Author

No issues.. I will work on fixing the tests, and then move #92 on top of it too..

@rajarshimaitra
Copy link
Contributor Author

Pushed some minor doc fixes..

@rajarshimaitra
Copy link
Contributor Author

rajarshimaitra commented Jun 27, 2022

Added a commit to remove external base64 dependency + some clippy nits..

This PR moves all the components into different module.
Checkout PR description for more details.
We don't need base64 because rust-bitcoin already exposes a version of
that crate that we can use. Removing one more parallel dependency.
@rajarshimaitra
Copy link
Contributor Author

Rebased on master and removed author list changes..

@rajarshimaitra rajarshimaitra mentioned this pull request Jun 27, 2022
3 tasks
Copy link
Member

@notmandatory notmandatory left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't review all the code in details since most of it is existing code that was moved. But the general reorganization makes sense.

I tested the commands help and it looked OK. But the repl command doesn't seem to be working, it won't take any command including exit, it just shows the help.

src/backend.rs Outdated Show resolved Hide resolved
Cargo.toml Outdated Show resolved Hide resolved
Cargo.toml Outdated Show resolved Hide resolved
@notmandatory
Copy link
Member

My suggestion for the changelog is something like this, based on your PR comments:

  • Reorganize existing code into new modules
  • Rewrite relevant doc comments as structopt help documentation
  • Update bdk and bdk-reserves to v0.19.0
  • Change default database to sqlite

@rajarshimaitra
Copy link
Contributor Author

Thanks @notmandatory for the look.. Sorry it took me some time to get back to this.. ACK on all the comments.. Updated with a new commit for easier review..

@notmandatory
Copy link
Member

notmandatory commented Jul 6, 2022

I pushed a commit to fix a couple little typos and a problem I found in repl mode with command parsing, probably wasn't a new issue but noticed it when testing, had to enable clap::AppSettings::NoBinaryName.

https://docs.rs/structopt/latest/structopt/trait.StructOpt.html#method.from_iter_safe

Copy link
Member

@notmandatory notmandatory left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK 292dd1e

@notmandatory notmandatory merged commit d8e93ab into bitcoindevkit:master Jul 6, 2022
waterst0ne pushed a commit to waterst0ne/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
@notmandatory notmandatory added the enhancement New feature or request label Jul 14, 2022
rajarshimaitra added a commit that referenced this pull request Sep 20, 2022
f8a5999 Minor grammar and puctuation fixes (Steve Myers)
e7b6854 Update with Readme fixes (rajarshimaitra)
52e8c61 Add all `possible_values` to network command option (Leonardo Lima)
179618c Update crate documentation (rajarshimaitra)

Pull request description:

  ### Description

  After #99 the previous documentation have been removed and new docs as per `structopts` documentation. This PR adds more documentation across the crate..

  This PR is above #102 , to accommodate all the further refactoring changes.

  The Readme About section have been updated with more details.. Readme format made aligned with the BDK project itself..

  The Readme file is used itself as the crate level documentation in docs.rs too..

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

Tree-SHA512: 26c5b3903b0215aa9841c4d1079bbdeb9f9d9d458c7e27dddb625db24eb364b73ca978bb2018f486215878f3601b5572ca58d5c202cb74325c992f3e7107d850
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

2 participants