-
Notifications
You must be signed in to change notification settings - Fork 38.7k
ui: make send a wizard #16966
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
ui: make send a wizard #16966
Conversation
|
Concept ACK. Not sure if the tab view is the best container for the send wizard. Have you considered back/next buttons? |
|
I went back and for myself on the view style and ultimately did settle on a tab view. Ultimately there's never actually a need to press the Back and Next buttons unless you're doing something wrong (or a trivial demo) -- each step of the process will happen on a different machine. I like the idea of a "load PSBT" menu item taking you to the right tab. In my implementation, there is an "offline" menu from which you have to select "sign" or "broadcast" to open the dialog to the right tab; then you load from there. There's a lot of stuff that came up in the process of implementing this which I don't know if you've run into yet. For example, the signing wallet may not be able to put up the usual form of the confirmation display, as shown here, unless it has some trustworthy way to know which output is change, which it doesn't except maybe if you're using descriptors to tell it so. Jumping back to Draft, much like having back/next buttons, is probably mostly not going to get used in real life, where the signing is happening on a different machine from the drafting. Honestly I think the main reason to have the steps of this flow be one dialog are to help the user have a sense of their place in the process, even though I expect probably they will be mostly used separately and on separate machines. |
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
I have a hardware wallet GUI PR #16549 which is built on top of native descriptor wallets #16528. I'm also thinking of replacing Re tab view: I briefly looked at QWizard but that doesn't give the user an overview of where they are in the flow. The good news is that QTabWidget can easily be swapped with QStackedWidget which can be completely customized, e.g. into something like this: I'll probably disable the other tabs, so that all "navigation" happens through the buttons at the bottom of the screen.
I'm thinking more of the hardware wallet use case. In the simplest configuration of 1 hardware wallet that's physically connected, the Sign tab is a nice place to show it. In case of something like ColdCard or the new BitBox this is where you would save the unsigned PSBT to SD drive. |
c30429d to
19f56ca
Compare
19f56ca to
f1813c8
Compare
|
Added RBF. If a followup PR splits fee selection out of Tab 1 then bump fee could also support a custom amount, rather the current take it or leave it fee. I'm considering squashing this into a single commit; current commit history is probably more confusing than useful. |
|
Concept ACK |
d893a54 to
6e05d5d
Compare
a649cc6 Change sendcoins dialogue Yes to Send (Gregory Sanders) Pull request description: It's more self-explanatory, matches "cancel" better, and makes future extensions such as #16944 more directly understandable to the user. ACKs for top commit: Sjors: Trivial code review ACK a649cc6. I also used Send in #16966 (`ui - make send a wizard`) laanwj: ACK a649cc6 jonatack: Code review ACK a649cc6 Tree-SHA512: fe4993bc7ac653d28f3d399ade046bcfd405511aec06ff041bb5aef47e0736faf3e3112a6db660cd761af56392dc6b97f2c2341ed3eff4490079c5eb8a0d465a
This makes them available in GUI coin selection.
For wallets with WALLET_FLAG_DISABLE_PRIVATE_KEYS.
6e05d5d to
9e11c17
Compare
Review hint: git show -w --color-moved=dimmed-zebra Co-authored-by: Glenn Willen <[email protected]>
8ba63bb to
fa1cd32
Compare
|
Concept NACK. Sorry, this looks ugly, much worse than the current flow. (Also, normal users probably shouldn't see txids...) |
|
That's subjective. I think it looks better, because it's less cluttered and gets rid of a popup. Happy to hide the transaction id. The current sign screen (which is a popup) doesn't have space to list hardware wallets. There's also not much room for PSBT creation and/or signing, other than just magically putting it on a clipboard (see #16944). If you have a better design I'd love to see it. |
To be clear, I think the current design with popup is better... |
Concept ACK on motivation for this. I don't have a view on its ugliness. For these UI redesigns it seems totally dependent on the regular users of the GUI. Personally I support the goal of the GUI being an educational stepping stone to using the CLI. There will be always be better GUIs for the non technically curious which aren't subject to the constraints of Core. |
|
My view is almost entirely the opposite: The JSON-RPC server isn't meant for end users, but for software developers to interface with. The GUI is the primary method for end users to use Bitcoin Core, not some mere "stepping stone" to a half-baked JSON-RPC client... P.S. In addition to being a developer, I am a regular user of the GUI. |
|
I think @michaelfolkson was referring to having independently developed wallet applications that use the RPC (somewhat limited atm) or IPC (#10102). I use the GUI as well. |
|
I'm not entirely sure who this GUI is being designed for. Long time contributors like Sjors, Luke? Complete Bitcoin beginners? Someone like me who is technically curious and would ideally want to transition from any reliance on the GUI? All of us? (fiendishly difficult as you are making design compromises all over the place). If it is complete Bitcoin beginners then none of us are the target audience. But this is a meta point and this discussion has probably been rehashed multiple times over the years so I won't clog up this PR with it. I've opened an issue #17395. I don't want to derail review of this particular PR. |
What current design allows you to generate PSBT's from the GUI of offline versions of Bitcoin Core for secure multisig? AFAIK, #16944, #16954, and this PR are the only discussions/PRs around this (#16546, #16549, and #16895 for HWWs). The UI isn't beautiful (neither is the rest of Core), but it's not ugly. And I don't believe that's the point, especially from reading #17395, that seems to be the consensus. The point is to be secure, power-user friendly, and mistake-minimizing. |
|
Closing this in favor of more incremental changes, e.g. #17509. |
a649cc6 Change sendcoins dialogue Yes to Send (Gregory Sanders) Pull request description: It's more self-explanatory, matches "cancel" better, and makes future extensions such as bitcoin#16944 more directly understandable to the user. ACKs for top commit: Sjors: Trivial code review ACK a649cc6. I also used Send in bitcoin#16966 (`ui - make send a wizard`) laanwj: ACK a649cc6 jonatack: Code review ACK a649cc6 Tree-SHA512: fe4993bc7ac653d28f3d399ade046bcfd405511aec06ff041bb5aef47e0736faf3e3112a6db660cd761af56392dc6b97f2c2341ed3eff4490079c5eb8a0d465a
a649cc6 Change sendcoins dialogue Yes to Send (Gregory Sanders) Pull request description: It's more self-explanatory, matches "cancel" better, and makes future extensions such as bitcoin#16944 more directly understandable to the user. ACKs for top commit: Sjors: Trivial code review ACK a649cc6. I also used Send in bitcoin#16966 (`ui - make send a wizard`) laanwj: ACK a649cc6 jonatack: Code review ACK a649cc6 Tree-SHA512: fe4993bc7ac653d28f3d399ade046bcfd405511aec06ff041bb5aef47e0736faf3e3112a6db660cd761af56392dc6b97f2c2341ed3eff4490079c5eb8a0d465a

Implements #16954 for the current functionality + #16944 (
gui: create PSBT with watch-only wallet). This PR splits the send screen into three tabs, like a wizard.This frees up UI real estate where we can add support for PSBT, hardware wallets and education.
I renamed
SendCoinsDialogtoSendComposeandSendConfirmationDialogtoSendSignfor clarity, which ended up (trivially) touching lots ofsrc/qt/locale/bitcoin_##.tsfiles. This is contained in two move-only commits.Tab 1: Draft
Same as the current send screen: enter destination, do coin selection, set fee etc. This can be split further in future PRs for a less cluttered experience, e.g. one tab for coin selection (if enabled), one for destination(s) and one for fees. Having a separate tab for fees also provides an entry point for RBF, which currently doesn't let the user pick an amount.
Tab 2: Sign
This asks to unlock the wallet if needed.
Display transaction details like the current popup does.
Edit jumps back to Draft. Send jumps to Finish, unless something goes wrong.
Bump fee jumps straight to this tab:

For watch-only wallets it displays the same text as #16944.
Tab 3: Finish
This is where the actual broadcast takes place, or where the PSBT is copied to the clipboard. In a followup we can add support for saving the PSBT to disk, or for copying a signed transaction hex to clipboard if the user wants to broadcast that elsewhere.
Bump fee shows both the previous and new transaction index:

The manual "Show" button has the nice side-effect of fixing #16875 / #16876 in two out of three places.
Todo:
Followups: