mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
[wallet] Construct CWalletTx objects in CommitTransaction
Construct CWalletTx objects in CWallet::CommitTransaction, instead of having callers do it. This ensures CWalletTx objects are constructed in a uniform way and all fields are set. This also makes it possible to avoid confusing and wasteful CWalletTx copies in https://github.com/bitcoin/bitcoin/pull/9381 There is no change in behavior.
This commit is contained in:
@@ -262,23 +262,20 @@ Result CommitTransaction(CWallet* wallet, const uint256& txid, CMutableTransacti
|
||||
return result;
|
||||
}
|
||||
|
||||
CWalletTx wtxBumped(wallet, MakeTransactionRef(std::move(mtx)));
|
||||
// commit/broadcast the tx
|
||||
CTransactionRef tx = MakeTransactionRef(std::move(mtx));
|
||||
mapValue_t mapValue = oldWtx.mapValue;
|
||||
mapValue["replaces_txid"] = oldWtx.GetHash().ToString();
|
||||
|
||||
CReserveKey reservekey(wallet);
|
||||
wtxBumped.mapValue = oldWtx.mapValue;
|
||||
wtxBumped.mapValue["replaces_txid"] = oldWtx.GetHash().ToString();
|
||||
wtxBumped.vOrderForm = oldWtx.vOrderForm;
|
||||
wtxBumped.strFromAccount = oldWtx.strFromAccount;
|
||||
wtxBumped.fTimeReceivedIsTxTime = true;
|
||||
wtxBumped.fFromMe = true;
|
||||
CValidationState state;
|
||||
if (!wallet->CommitTransaction(wtxBumped, reservekey, g_connman.get(), state)) {
|
||||
if (!wallet->CommitTransaction(tx, std::move(mapValue), oldWtx.vOrderForm, oldWtx.strFromAccount, reservekey, g_connman.get(), state)) {
|
||||
// NOTE: CommitTransaction never returns false, so this should never happen.
|
||||
errors.push_back(strprintf("The transaction was rejected: %s", FormatStateMessage(state)));
|
||||
return Result::WALLET_ERROR;
|
||||
}
|
||||
|
||||
bumped_txid = wtxBumped.GetHash();
|
||||
bumped_txid = tx->GetHash();
|
||||
if (state.IsInvalid()) {
|
||||
// This can happen if the mempool rejected the transaction. Report
|
||||
// what happened in the "errors" response.
|
||||
@@ -286,7 +283,7 @@ Result CommitTransaction(CWallet* wallet, const uint256& txid, CMutableTransacti
|
||||
}
|
||||
|
||||
// mark the original tx as bumped
|
||||
if (!wallet->MarkReplaced(oldWtx.GetHash(), wtxBumped.GetHash())) {
|
||||
if (!wallet->MarkReplaced(oldWtx.GetHash(), bumped_txid)) {
|
||||
// TODO: see if JSON-RPC has a standard way of returning a response
|
||||
// along with an exception. It would be good to return information about
|
||||
// wtxBumped to the caller even if marking the original transaction
|
||||
|
||||
Reference in New Issue
Block a user