#36481 wallet, rpc, gui: Allow users to manually rebroadcast a wallet transaction

ReviewabilityReviewsAgreementSize
#36481 achow101 wallet, rpc, gui: Allow users to manually rebroadcast a wallet transactionCI failing0Blocked99 + 24 tests
  • Let users manually rebroadcast unconfirmed wallet transactions through RPC or the GUI
  • Avoids needing to extract raw transaction hex and call sendrawtransaction manually
  • CI is failing, so verify whether failures relate to this PR before deep review
  • Broad concept support for manual transaction rebroadcast (mzumsande, polespinasa, murchandamus, jpk68)
  • Approach ACK with suggestions on error handling and RPC docs (vasild)
  • Unaddressed objection: fails with empty error if feerate exceeds maxfeerate (fametrano)
  • 99 lines added or modified outside tests
  • 24 lines added or modified in tests
  • 4 lines removed in total
  • 9 files, 2 commits
Wallet#57 of 92
P3 · new feature
  • P3 because it gives users an in-wallet way to rebroadcast stuck transactions
  • Saves users from manually extracting raw hex, but remains a deferrable convenience feature
  • Ranking pass: Moved down: convenience wrapper over existing sendrawtransaction, below the feature work with linked user demand.
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

Adds a `rebroadcastwallettx` RPC method and a GUI context menu action to allow manual rebroadcasting of unconfirmed wallet transactions. The wallet extracts broadcast eligibility checks into a helper and submits the transaction to the mempool with immediate peer broadcast. It exposes these checks through the node-wallet interface to enable or disable the GUI context menu action.

Problem: Users have no direct way in the wallet interface or RPC to manually rebroadcast an unconfirmed transaction that failed to propagate or dropped out of mempools. Today, doing so requires extracting the raw transaction hex and invoking `sendrawtransaction`.

Evidence of importance:

  • PR description: 'From the discussion in #36403, it is clear that there needs to be a way for users to rebroadcast a transaction. Currently, the way to do so requires getting the raw transaction, getting the hex, and using `sendrawtransaction`.'

Risk of a mistake: medium (wallet, rpc_api, gui). A bug in rebroadcast eligibility or submission logic could broadcast unwanted, abandoned, or conflicted transactions across the network.

Changed since the previous assessment: Diff provided; commits and functionality are unchanged.

Reviewability

Ready · CI failing

CI is red; check whether the failure is the PR's before a deep review.

Waiting on (from the thread read):

  • author: addressing fametrano's objection regarding feerate exceeding -maxfeerate 2026-10-25
  • author: responding to vasild's review comments and question 2026-10-27

Agreement

Blocked

objection that needs a change, nobody has replied (fametrano)

Thread notes: vasild gave an Approach ACK and opened several review comments, including a question regarding Qt menu accelerators and suggestions on error handling and RPC documentation.

Objections, suggestions, and questions:

ReviewerTypeHarm, request, or questionStatusMust beAuthor repliedQuote
fametrano (none)objection, correctnessrebroadcastwallettx fails with code -1 and an empty message when the transaction feerate exceeds -maxfeerateopenchangedno2026-10-25: 'rebroadcastwallettx fails with code -1 and an empty message when the transaction is out of the mempool and its feerate is above the wallet's `-maxfeerate`'
vasild (member)question, interfacewhat is the purpose of the ampersand in menu items like 'Re&broadcast'?openansweredno2026-10-27: 'What is the `&` in `Re&broadcast`? It is also in `A&bandon`.'
vasild (member)suggestion, interfaceextend TransactionCanBeBroadcast() to return the specific reason why a transaction cannot be broadcastopenansweredno2026-10-27: 'Consider extending `TransactionCanBeBroadcast()` to return the reason why the transaction can not be broadcast:'
vasild (member)suggestion, interfacethrow a JSONRPCError instead of returning null when no wallet is foundopenansweredno2026-10-27: 'Should we not throw here? `UniValue::VNULL` is for "If rebroadcast is successfully initiated".'
vasild (member)suggestion, interfaceadd a sentence directing users to listtransactions RPC in the help textopenansweredno2026-10-27: 'I think it would be useful to add the sentence `Use the listtransactions RPC to see the wallet transactions` here.'

Support:

  • polespinasa (member) (Concept ACK, 2026-10-08): (no reason given) [not substantive]
  • mzumsande (member) (Concept ACK, 2026-10-09): giving the users the option to rebroadcast transactions manually is useful in all scenarios
  • murchandamus (member) (Concept ACK, 2026-10-21): (no reason given) [not substantive]
  • jpk68 (contributor) (Concept ACK, 2026-10-22): (no reason given) [not substantive]
  • fametrano (none) (Concept ACK, 2026-10-25): (no reason given) [not substantive]
  • vasild (member) (Approach ACK, 2026-10-27): (no reason given) [not substantive]

Participants:

  • polespinasa (member, support, 1 statements 2026-10-08 to 2026-10-08): Concept ACK
  • mzumsande (member, support, 1 statements 2026-10-09 to 2026-10-09): Concept ACK: manual rebroadcast is useful regardless of the ultimate rebroadcast solution
  • murchandamus (member, support, 1 statements 2026-10-21 to 2026-10-21): Concept ACK
  • jpk68 (contributor, support, 1 statements 2026-10-22 to 2026-10-22): Concept ACK
  • fametrano (none, objection, 1 statements 2026-10-25 to 2026-10-25): Concept ACK, but noted that rebroadcastwallettx fails with an empty error message when feerate exceeds -maxfeerate
  • vasild (member, support, 9 statements 2026-10-27 to 2026-10-27): Approach ACK, suggested improvements to error reporting and RPC handling

Files

24 lines under test/bench/ci.

  • src/wallet/wallet.cpp +35/-4
  • src/wallet/rpc/transactions.cpp +28/-0
  • test/functional/wallet_resendwallettransactions.py +24/-0
  • src/qt/transactionview.cpp +16/-0
  • src/interfaces/wallet.h +6/-0
  • src/wallet/interfaces.cpp +6/-0
  • src/wallet/wallet.h +4/-0
  • src/qt/transactionview.h +2/-0
  • src/wallet/rpc/wallet.cpp +2/-0

Card

The short text the ranking pass compares across PRs.

Adds a rebroadcastwallettx RPC command and a GUI context menu item allowing users to manually rebroadcast an unconfirmed wallet transaction by txid. Previously, manual rebroadcast required fetching the raw transaction hex and submitting it via sendrawtransaction. The wallet validates eligibility by ensuring the transaction is not abandoned, coinbase, or confirmed before submitting it to the mempool and relaying it to all peers. The addition was motivated by broader transaction rebroadcasting discussions in issue 36403.

Data

dossier JSON · extract JSON · model ledger, generated 2026-10-28T01:23, confidence high, input hash 79768378a1e7cd63
thread read through 2026-10-27 (14 statements), head 648450039a
labels: CI failed

Categories

Wallet

P3 · new feature (ranking pass: Moved down: convenience wrapper over existing sendrawtransaction, below the feature work with linked user demand.)

Adds a direct RPC and GUI mechanism for users to rebroadcast unconfirmed wallet transactions without manual hex extraction. As noted in the description, 'there needs to be a way for users to rebroadcast a transaction' without having to resort to getting the hex and calling sendrawtransaction; this is a clear user-facing improvement that remains reasonably deferrable.

Membership: Implements a new wallet RPC rebroadcastwallettx, exposes wallet rebroadcast eligibility logic, and adds a GUI context menu action.

Factors: security/stability 0, bug 0, performance 0, user value 2, leverage 0