Return txid even if ATMP fails for new transaction
Github-Pull: #9302
Rebased-From: b3a74100b8
This commit is contained in:
parent
35174a0280
commit
f5d606e5ab
|
@ -1442,7 +1442,8 @@ void CWallet::ReacceptWalletTransactions()
|
|||
CWalletTx& wtx = *(item.second);
|
||||
|
||||
LOCK(mempool.cs);
|
||||
wtx.AcceptToMemoryPool(false, maxTxFee);
|
||||
CValidationState state;
|
||||
wtx.AcceptToMemoryPool(false, maxTxFee, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1451,8 +1452,9 @@ bool CWalletTx::RelayWalletTransaction()
|
|||
assert(pwallet->GetBroadcastTransactions());
|
||||
if (!IsCoinBase() && !isAbandoned() && GetDepthInMainChain() == 0)
|
||||
{
|
||||
CValidationState state;
|
||||
/* GetDepthInMainChain already catches known conflicts. */
|
||||
if (InMempool() || AcceptToMemoryPool(false, maxTxFee)) {
|
||||
if (InMempool() || AcceptToMemoryPool(false, maxTxFee, state)) {
|
||||
LogPrintf("Relaying wtx %s\n", GetHash().ToString());
|
||||
RelayTransaction((CTransaction)*this);
|
||||
return true;
|
||||
|
@ -2482,14 +2484,14 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey)
|
|||
|
||||
if (fBroadcastTransactions)
|
||||
{
|
||||
CValidationState state;
|
||||
// Broadcast
|
||||
if (!wtxNew.AcceptToMemoryPool(false, maxTxFee))
|
||||
{
|
||||
// This must not fail. The transaction has already been signed and recorded.
|
||||
LogPrintf("CommitTransaction(): Error: Transaction not valid\n");
|
||||
return false;
|
||||
if (!wtxNew.AcceptToMemoryPool(false, maxTxFee, state)) {
|
||||
LogPrintf("CommitTransaction(): Transaction cannot be broadcast immediately, %s\n", state.GetRejectReason());
|
||||
// TODO: if we expect the failure to be long term or permanent, instead delete wtx from the wallet and return failure.
|
||||
} else {
|
||||
wtxNew.RelayWalletTransaction();
|
||||
}
|
||||
wtxNew.RelayWalletTransaction();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -3595,8 +3597,7 @@ int CMerkleTx::GetBlocksToMaturity() const
|
|||
}
|
||||
|
||||
|
||||
bool CMerkleTx::AcceptToMemoryPool(bool fLimitFree, CAmount nAbsurdFee)
|
||||
bool CMerkleTx::AcceptToMemoryPool(bool fLimitFree, CAmount nAbsurdFee, CValidationState& state)
|
||||
{
|
||||
CValidationState state;
|
||||
return ::AcceptToMemoryPool(mempool, state, *this, fLimitFree, NULL, false, nAbsurdFee);
|
||||
}
|
||||
|
|
|
@ -213,7 +213,7 @@ public:
|
|||
bool IsInMainChain() const { const CBlockIndex *pindexRet; return GetDepthInMainChain(pindexRet) > 0; }
|
||||
int GetBlocksToMaturity() const;
|
||||
/** Pass this transaction to the mempool. Fails if absolute fee exceeds absurd fee. */
|
||||
bool AcceptToMemoryPool(bool fLimitFree, const CAmount nAbsurdFee);
|
||||
bool AcceptToMemoryPool(bool fLimitFree, const CAmount nAbsurdFee, CValidationState& state);
|
||||
bool hashUnset() const { return (hashBlock.IsNull() || hashBlock == ABANDON_HASH); }
|
||||
bool isAbandoned() const { return (hashBlock == ABANDON_HASH); }
|
||||
void setAbandoned() { hashBlock = ABANDON_HASH; }
|
||||
|
|
Loading…
Reference in New Issue