From 14e50746f683361f4d511d384d6f1dc44ed2bf10 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Wed, 1 Jun 2022 14:14:17 -0400 Subject: 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. --- src/wallet/coincontrol.h | 2 ++ src/wallet/spend.cpp | 7 +++++++ 2 files changed, 9 insertions(+) (limited to 'src') 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 m_locktime; + //! Version + std::optional 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 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); -- cgit v1.2.3