aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Chow <achow101-github@achow101.com>2022-06-01 14:14:17 -0400
committerAndrew Chow <github@achow101.com>2023-12-08 14:55:14 -0500
commit14e50746f683361f4d511d384d6f1dc44ed2bf10 (patch)
tree387ef67ab3661f02ea8b4b5d09f4f8e6936981f5 /src
parent0fefcbb776063b7fcc03c28e544d830a2f540250 (diff)
downloadbitcoin-14e50746f683361f4d511d384d6f1dc44ed2bf10.tar.xz
wallet: Explicitly preserve transaction version in CreateTransaction
We provide the preset nVersion to CCoinControl so that CreateTransactionInternal can be aware of it and set it in the produced transaction.
Diffstat (limited to 'src')
-rw-r--r--src/wallet/coincontrol.h2
-rw-r--r--src/wallet/spend.cpp7
2 files changed, 9 insertions, 0 deletions
diff --git a/src/wallet/coincontrol.h b/src/wallet/coincontrol.h
index c99a3bfd0f..66f9dcb53c 100644
--- a/src/wallet/coincontrol.h
+++ b/src/wallet/coincontrol.h
@@ -93,6 +93,8 @@ public:
FlatSigningProvider m_external_provider;
//! Locktime
std::optional<uint32_t> m_locktime;
+ //! Version
+ std::optional<uint32_t> m_version;
CCoinControl();
diff --git a/src/wallet/spend.cpp b/src/wallet/spend.cpp
index 9dfc8c2879..c560c71137 100644
--- a/src/wallet/spend.cpp
+++ b/src/wallet/spend.cpp
@@ -977,6 +977,10 @@ static util::Result<CreatedTransactionResult> CreateTransactionInternal(
FastRandomContext rng_fast;
CMutableTransaction txNew; // The resulting transaction that we make
+ if (coin_control.m_version) {
+ txNew.nVersion = coin_control.m_version.value();
+ }
+
CoinSelectionParams coin_selection_params{rng_fast}; // Parameters for coin selection, init with dummy
coin_selection_params.m_avoid_partial_spends = coin_control.m_avoid_partial_spends;
coin_selection_params.m_include_unsafe_inputs = coin_control.m_include_unsafe_inputs;
@@ -1349,6 +1353,9 @@ bool FundTransaction(CWallet& wallet, CMutableTransaction& tx, CAmount& nFeeRet,
// Set the user desired locktime
coinControl.m_locktime = tx.nLockTime;
+ // Set the user desired version
+ coinControl.m_version = tx.nVersion;
+
// Acquire the locks to prevent races to the new locked unspents between the
// CreateTransaction call and LockCoin calls (when lockUnspents is true).
LOCK(wallet.cs_wallet);