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

Update BDK version to 0.12.0 #41

Merged
merged 8 commits into from
Oct 4, 2021

Conversation

rajarshimaitra
Copy link
Contributor

@rajarshimaitra rajarshimaitra commented Aug 26, 2021

Description

This PR updates the upstream BDK version to latest release (v0.10.0).

Notes to the reviewers

The latest release of BDK includes some breaking changes, some of which are handled here. A previously available function in BDK, maintain_single_recipient() is changed into allow_shrinking() which requires a scriptpubkey to be specified. So far I couldn't find any public API in BDK using which a scriptpubkey (or the transaction) can be retrieved from the wallet given a TxID. Marked the code with a TODO. It probably needs some additional API in BDK. Made an issue (bitcoindevkit/bdk#427) to track this.

BDK esplora blockchain module has been divided into two types using-ureq and using-reqwest. reqwest is an async feature in BDK, which produces Future related errors in bdk-cli (#36 (comment)). Trying to solve that error creates more complexity (async related weridness). Thus decided to scrap reqwest and go with blocking ureq version, which I think is adequate for the usecases of bdk-cli.

Updated electrum cli args.

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

Bugfixes:

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

Updating the BDK version creates some breaking change.

One of such change probably requires modification of BDK to expose a
new function to fetch scriptpubkey from a txid.

Used ureq version of esplora to remove async related complexities.
@rajarshimaitra rajarshimaitra changed the title Dep update Update BDK version to 0.10.0 Aug 26, 2021
Cargo.toml Outdated
@@ -12,7 +12,7 @@ readme = "README.md"
license = "MIT"

[dependencies]
bdk = { version = "^0.7", default-features = false, features = ["all-keys"]}
bdk = { version = "0.10.0", default-features = false, features = ["all-keys"]}
Copy link
Member

Choose a reason for hiding this comment

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

I wasn't able to connect to the blockstream esplora server via https (and http redirects to https) because bdk disables ureq default features. @tcharding was disabling the tls feature intentional?

@rajarshimaitra If having the ureq tls feature disabled by default is intentional I think it makes sense to add a ureq-tls = [ "ureq/tls" ] feature to bdk so we can enable it from the bdk-cli project (or for others who need it).

Copy link
Contributor Author

@rajarshimaitra rajarshimaitra Aug 28, 2021

Choose a reason for hiding this comment

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

Good Idea. Better to enable tls in ureq if we use it. IMO connecting https will be quite a generic requirement. Will open a PR if we all agree the same.

We don't need another feature flag for this, just add tls in ureq's feature list.

Copy link
Member

Choose a reason for hiding this comment

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

True, maybe best of have tls feature enabled by default in bdk, but first I'd like to get @tcharding's input since he originally added the ureq dependency and may have an argument for leaving tls off by default.

Choose a reason for hiding this comment

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

I have no problem with enabling TLS by default. As for why I disabled it, I can't remember exactly why, I probably just disabled default features during a debugging session and never turned TLS back on. Thanks for checking in with me and thanks for giving it the thought to realize we should enable it by default!

Cargo.toml Outdated
@@ -32,7 +32,7 @@ default = ["cli", "repl"]
cli = ["bdk/key-value-db", "clap", "dirs-next", "env_logger"]
repl = ["regex", "rustyline"]
electrum = ["bdk/electrum"]
esplora = ["bdk/esplora"]
esplora = ["bdk/use-esplora-ureq"]
Copy link
Member

Choose a reason for hiding this comment

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

I'm trying to use this to test bitcoindevkit/bdk#429: to get bdk-cli to work in the browser we need a way to enable bdk/use-esplora-reqwest. I would suggest maybe adding another feature esplora-reqwest that we can use from wasm32

Copy link
Member

Choose a reason for hiding this comment

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

Or maybe even better: async-esplora

Copy link
Member

Choose a reason for hiding this comment

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

I think this PR may be blocked until @tcharding and @LLFourn work out things out with bitcoindevkit/bdk#433.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes. I am not really sure how big the httpclient fix would be. If it takes much longer, can we consider merging bitcoindevkit/bdk#430 in the mean time? #36 is also pending on this one.

And I think that will fix @afilini 's issue too.

Copy link
Member

Choose a reason for hiding this comment

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

In the meantime I made this branch just to test the playground: https://github.com/afilini/bdk-cli/tree/update-with-reqwest

@rajarshimaitra
Copy link
Contributor Author

rajarshimaitra commented Sep 14, 2021

Added esplora-reqwest into bdk-cli.

@notmandatory we have to use bdk-master for now, until the esplora-fix is released upstream. This can be changed in next bdk release.

@afilini please check if this meets your requirement, or something more to be done? To use request compile with esplora-reqwest feature.

@notmandatory
Copy link
Member

When bdk release 0.12.0 is out ~Sept-29 I think this one will be ready to merge. I've updated the title. 😉

@notmandatory notmandatory changed the title Update BDK version to 0.10.0 Update BDK version to 0.12.0 Sep 17, 2021
@rajarshimaitra
Copy link
Contributor Author

@notmandatory just FYI, the rest of the open PRs builds on top of this. So this needs to go first before they can be merged.. :)

@notmandatory
Copy link
Member

I just made the bdk 0.12.0 release, so you're good to go on this one.

BDK v0.10.0 adds a stop_gap parameter to electrum config.
Esplora ureq version requires having new cli args.
Adds esplora-reqwest capability from bdk.
Allows to use async https connections with esplora from bdk-cli.
Recent update in BDK esplora backend allows it to connect with SOCKS5
proxy.

This change adds proxy option to esplora configuration.
Updates Proxy_Opts feature guard to enable it for esplora feature.
@rajarshimaitra
Copy link
Contributor Author

rajarshimaitra commented Oct 3, 2021

Rebased with bdk v0.12.

FYI, I am not updating #42 and #36 right now. For simplicity of merging this needs to be merged first. Then the rest two can be rebased on top of updated master. I think that will simplify the review process as all these PRs are interdependent.

This one is the biggest change among all other as it handles all the update from bdk v0.10 to v0.12. So keeping this one separate from review of the rest.

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.

re-ACK f9a9606

I manually tested and works fine as long as correct esplora server URL is used. Either README needs to be updated, defaults need to be changed for testnet or maybe something else. Will merge this now so other PRs can proceed and we can fix the esplora server URL issue in a subsequent PR.

@notmandatory notmandatory merged commit f9a9606 into bitcoindevkit:master Oct 4, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants