mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-11 12:22:39 -03:00
Merge #18842: wallet: Mark replaced tx to not be in the mempool anymore
fa4e088cba
wallet: Mark replaced tx to not be in the mempool anymore (MarcoFalke) Pull request description: The wallet does not mark the replaced tx as out-of-mempool. This causes failures in user scripts, because later RPCs may depend on this state change from `bumpfee`. For example, the following might fail on current master: ``` txid = sendtoaddress(...) bumpfee(txid) abandontransaction(txid) # fails because txid is still marked as "in mempool" ``` Fixes #18831 ACKs for top commit: meshcollider: utACKfa4e088cba
ryanofsky: Code review ACKfa4e088cba
, and previous ACK faeedff5c87091fd83d2fb2b29eb49c948363f29 is also still valid in case there's a preference for the original fix Tree-SHA512: 9858f40f5fb5a43a7b584b5c4268b6befa82e6a84583be5206fe721bcb6c255e8d35479d347d0b9aed72703df49887c02b14ab680e8efdd28b90dd6b93d9439a
This commit is contained in:
commit
6c156e49cb
3 changed files with 15 additions and 0 deletions
|
@ -159,6 +159,9 @@ public:
|
|||
//! Check if transaction is RBF opt in.
|
||||
virtual RBFTransactionState isRBFOptIn(const CTransaction& tx) = 0;
|
||||
|
||||
//! Check if transaction is in mempool.
|
||||
virtual bool isInMempool(const uint256& txid) = 0;
|
||||
|
||||
//! Check if transaction has descendants in mempool.
|
||||
virtual bool hasDescendantsInMempool(const uint256& txid) = 0;
|
||||
|
||||
|
|
|
@ -526,6 +526,12 @@ public:
|
|||
LOCK(m_node.mempool->cs);
|
||||
return IsRBFOptIn(tx, *m_node.mempool);
|
||||
}
|
||||
bool isInMempool(const uint256& txid) override
|
||||
{
|
||||
if (!m_node.mempool) return false;
|
||||
LOCK(m_node.mempool->cs);
|
||||
return m_node.mempool->exists(txid);
|
||||
}
|
||||
bool hasDescendantsInMempool(const uint256& txid) override
|
||||
{
|
||||
if (!m_node.mempool) return false;
|
||||
|
|
|
@ -791,6 +791,12 @@ bool CWallet::MarkReplaced(const uint256& originalHash, const uint256& newHash)
|
|||
|
||||
wtx.mapValue["replaced_by_txid"] = newHash.ToString();
|
||||
|
||||
// Refresh mempool status without waiting for transactionRemovedFromMempool
|
||||
// notification so the wallet is in an internally consistent state and
|
||||
// immediately knows the old transaction should not be considered trusted
|
||||
// and is eligible to be abandoned
|
||||
wtx.fInMempool = chain().isInMempool(originalHash);
|
||||
|
||||
WalletBatch batch(GetDatabase());
|
||||
|
||||
bool success = true;
|
||||
|
|
Loading…
Reference in a new issue