#36539 gui: Use PSBT v0
| Reviewability | Reviews | Agreement | Size | ||||
|---|---|---|---|---|---|---|---|
| #36539 gui: Use PSBT v0 | Ready | 2 | Positive | 19 + 5 tests | |||
|
|
|
| ||||
Reviewability: ReadyStalePaused Agreement: StrongPositivePositive w/ caveatsNeutralMildDisputedBlockedCrickets Reviews: current code-review ACKs, then (+stale ACKs) and -NACKs; greener = more ACKs. Size: lines added or modified outside tests, then in tests; greener = smaller. | |||||||
Goal
Switches PSBTs created by the GUI for unsigned sends and watch-only fee bumping back to PSBTv0. External signer flows explicitly retain PSBTv2, and the PartiallySignedTransaction constructor default version argument is removed to require explicit version specification at call sites.
Problem: Bitcoin Core 32.0 started defaulting newly created PSBTs to PSBTv2. Many third-party wallet tools and signing hardware used with watch-only GUI wallets only support PSBTv0, causing clipboard-exported unsigned transactions to be rejected.
Evidence of importance:
- Fixes #36518 (reported in description: 'This fixes: https://github.com/bitcoin/bitcoin/issues/36518')
- Commit 23dcb03a2c notes: 'PSBTv2 is not very interesting for current GUI users, and defaulting to it causes issues for existing users.'
Scope: Small diff across GUI, wallet feebumper, and tests, accompanied by a release note documenting external signer PSBTv2 requirements (HWI >= 2.1.0).
Risk of a mistake: medium (gui, wallet). Mistakes in PSBT serialization version selection or construction could break transaction signing workflows for watch-only or external signer users.
Changed since the previous assessment: External signer PSBT creation is explicitly set to version 2 rather than version 0, and a release note documenting the HWI 2.1.0 minimum version requirement was added.
Reviewability
Ready
Nothing known that would invalidate a review now.
Waiting on (from the thread read):
- nothing: no pending reviews or author action needed
Agreement
Positive
support without stated reasons, no open objection (Sjors, w0xlt)
Thread notes: Sjors and w0xlt both ACKed the PR. hebasto restarted cancelled CI jobs.
Objections, suggestions, and questions:
| Reviewer | Type | Harm, request, or question | Status | Must be | Author replied | Quote |
|---|---|---|---|---|---|---|
| achow101 (member) | objection, scope | Adding GUI elements and new translation strings is inappropriate for a PR intended for backporting; GUI should just default to v0 without adding new UI controls. | fixed · fix pushed · author pushed to make GUI return v0 PSBTs without new UI controls | changed | yes | 2026-10-16: 'I don't think we should be adding any GUI elements for a PR targeting a backport, particularly as it adds strings for translation. We can do v0 only in the GUI I guess.' Status from: 2026-10-18: davidgumberg: 'I've pushed so that the GUI just returns v0 PSBT's.' |
| Sjors (member) | suggestion, maintenance | Add a release note mentioning that RPC can be used for v2 if the GUI is restricted to v0. | fixed · fix pushed · author added a release note | answered | yes | 2026-10-17: 'There could be a (release) note to use the RPC for v2 when needed.' Status from: 2026-10-26: davidgumberg: 'so I've added a release note about that.' |
| Sjors (member) | suggestion, approach | Consistently use PSBT v2 for external signers from both GUI and RPC. | fixed · fix pushed · author modified external signer PSBTs to use v2 | answered | yes | 2026-10-20: 'I think it's better to consistently use v2 for external signers, both from the GUI and RPC.' Status from: 2026-10-26: davidgumberg: 'I've modified this so that the external signer PSBT's are v2' |
| w0xlt (contributor) | suggestion, approach | Add a psbt_version parameter to feebumper::SignTransaction/signBumpTransaction so the GUI fee bump can pass v0 while RPC retains v2. | fixed · fix pushed · author adopted the suggested change | answered | yes | 2026-10-20: 'Suggestion: a psbt_version param can be added to feebumper::SignTransaction/signBumpTransaction, with the GUI passing 0 and RPC keeping 2.' Status from: 2026-10-26: davidgumberg: 'Taken, thanks' |
Support:
- Sjors (member) (ACK, 2026-10-27): (no reason given) [not substantive]
- w0xlt (contributor) (ACK, 2026-10-27): (no reason given) [not substantive]
Participants:
- achow101 (member, objection, 1 statements 2026-10-16 to 2026-10-16): objected to adding GUI elements and translation strings in a PR intended for backporting
- fanquake (member, neutral, 2 statements 2026-10-16 to 2026-10-21): pinged another reviewer and set the milestone to 32.1
- Sjors (member, support, 4 statements 2026-10-17 to 2026-10-27): ACKed the PR
- w0xlt (contributor, support, 2 statements 2026-10-20 to 2026-10-27): crACKed the PR
- hebasto (member, neutral, 1 statements 2026-10-27 to 2026-10-27): re-ran cancelled CI jobs
Files
9 lines under test/bench/ci.
- doc/release-notes-hwi-minver.md +10/-0
- src/qt/sendcoinsdialog.cpp +4/-2
- src/test/psbt_tests.cpp +3/-3
- src/wallet/feebumper.cpp +3/-2
- src/psbt.h +1/-1
- src/qt/walletmodel.cpp +1/-1
- src/test/fuzz/psbt.cpp +1/-1
- src/qt/test/wallettests.cpp +1/-0
Card
The short text the ranking pass compares across PRs.
Switches PSBT generation in the GUI back to version 0 for watch-only sends and fee bumps, while keeping PSBTv2 for external signer flows and removing the default version parameter from the PartiallySignedTransaction constructor. This addresses issue #36518, where exporting PSBTv2 transactions from the GUI broke compatibility with external software and hardware signers that only parse PSBTv0. A release note is added documenting the minimum HWI version (2.1.0) needed for external signers.
Data
thread read through 2026-10-27 (14 statements), head 3fdc45d1fa
labels: GUI, Needs Backport (32.x)
Categories
Wallet
P2 · bug fix (ranking pass: Moved up: it fixes a shipped 32.0 interoperability regression, which outranks the feature-oriented P2s.)
Fixes an interoperability regression introduced in 32.0 where defaulting GUI unsigned transactions to PSBTv2 caused third-party wallet tools and hardware signers to reject them (#36518).
Membership: Modifies PSBT generation logic in src/wallet/feebumper.cpp, src/psbt.h, and GUI wallet controllers.
Factors: security/stability 0, bug 2, performance 0, user value 2, leverage 0