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

Add Taproot support #91

Open
craigraw opened this issue Jul 16, 2021 · 10 comments
Open

Add Taproot support #91

craigraw opened this issue Jul 16, 2021 · 10 comments

Comments

@craigraw
Copy link

Although I expect this will require some of the dependencies to be updated first, I would like to start by adding this issue to request support for Taproot (P2TR) wallets.

I am currently getting the following two errors when connecting Sparrow v1.4.3 to Bitcoin Core 0.21.1 over BWT:

dev.bwt.libbwt.BwtException: JSON-RPC error: JSON decode error: bech32: invalid checksum
dev.bwt.libbwt.BwtException: Invalid config: unexpected «tr(1 args) while parsing Miniscript» at line 1 column 817
@dunxen
Copy link

dunxen commented Oct 2, 2021

Yes, looks like taproot descriptor support in rust-miniscript is still in progress: rust-bitcoin/rust-miniscript#267
I think I'll be able to help out when there's a new release for it.

@benma
Copy link

benma commented Mar 25, 2022

Yes, looks like taproot descriptor support in rust-miniscript is still in progress: rust-bitcoin/rust-miniscript#267 I think I'll be able to help out when there's a new release for it.

Seems like the linked PR is merged.

@dunxen
Copy link

dunxen commented Mar 25, 2022

Seems like the linked PR is merged.

Yeah, I've started working on it while waiting on a new release of rust-miniscript.

@craigraw
Copy link
Author

craigraw commented Jun 2, 2022

Any progress on this? rust-miniscript 7.0.0 was released on 20 April with support for tr descriptors. It also includes the type system bug fix, so it seems like a good idea to upgrade. It would be good to support Taproot wallets on Bitcoin Core in Sparrow :)

@dunxen
Copy link

dunxen commented Jun 2, 2022

It also includes the type system bug fix, so it seems like a good idea to upgrade.

Yes, I think that was the last issue I ran into. Edit: Nope different issue with rust-bitcoin but I recall it's also sorted.

I'm going to tackle this from today again. I think everything upstream should be good now 🤞

@dunxen
Copy link

dunxen commented Jun 2, 2022

We're currently blocked by rust-bitcoin/rust-bitcoincore-rpc#216 when using Bitcoin Core 23.0+. I'm working with 22.0 for now but it would be great to have that merged so there's no confusion there for users.

@dunxen
Copy link

dunxen commented Jun 3, 2022

So it looks like there's no way to import bech32m addresses at all in legacy wallets. Descriptor wallets must be used for all taproot transactions and they're the default in Core v23.0. rust-bitcoincore-rpc does not yet have any descriptor wallet RPCs (such as importdescriptors) so we'd need to wait for that and a few other loose ends or just add them to bitcoincore_ext.rs and do a bit of refactoring (which can be awkward if we want to keep supporting the legacy wallet type).

@craigraw
Copy link
Author

craigraw commented Jun 6, 2022

It would be good to support descriptor-based wallets in BWT. I believe all ways of adding addresses (descriptors, xpubs and addresses) could be supported. There may need to be a way of resolving a conflict if an existing, non-descriptor-based wallet already exists with the same name, possibly by allowing a client to specify whether to update (by deleting and re-adding) an existing wallet if present, providing the version of Core supports it. I'd also be happy with dropping legacy wallet support altogether if necessary.

@dunxen
Copy link

dunxen commented Jun 6, 2022

It would be good to support descriptor-based wallets in BWT. I believe all ways of adding addresses (descriptors, xpubs and addresses) could be supported. There may need to be a way of resolving a conflict if an existing, non-descriptor-based wallet already exists with the same name, possibly by allowing a client to specify whether to update (by deleting and re-adding) an existing wallet if present, providing the version of Core supports it. I'd also be happy with dropping legacy wallet support altogether if necessary.

Yes, I do agree. Descriptor wallets will support all of those. We're actually waiting on rust-bitcoin/rust-bitcoincore-rpc#199 (with requested changes) and then I think it's good to go. The easiest is to drop support for legacy wallets entirely. I like the idea of helping resolve conflicts in that case.

Edit: I'll base off the above with changes and start working with that branch on something useable and see how we like/dislike the handling of legacy wallets.

@craigraw
Copy link
Author

It appears that bitcoin/bitcoin#25504 (and thus Bitcoin Core 24.0 or higher) will be necessary if using the descriptors passed to BWT and not just adding raw addresses to a descriptor wallet. Without the include_change parameter that has been added, listsinceblock does not return self-transfers within a wallet.

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

No branches or pull requests

3 participants