aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/transaction.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wallet/transaction.h')
-rw-r--r--src/wallet/transaction.h31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/wallet/transaction.h b/src/wallet/transaction.h
index 0d0821e857..ddeb931112 100644
--- a/src/wallet/transaction.h
+++ b/src/wallet/transaction.h
@@ -5,22 +5,27 @@
#ifndef BITCOIN_WALLET_TRANSACTION_H
#define BITCOIN_WALLET_TRANSACTION_H
-#include <bitset>
-#include <cstdint>
+#include <attributes.h>
#include <consensus/amount.h>
#include <primitives/transaction.h>
-#include <serialize.h>
-#include <wallet/types.h>
-#include <threadsafety.h>
#include <tinyformat.h>
+#include <uint256.h>
#include <util/overloaded.h>
#include <util/strencodings.h>
#include <util/string.h>
+#include <wallet/types.h>
-#include <list>
+#include <bitset>
+#include <cstdint>
+#include <map>
+#include <utility>
#include <variant>
#include <vector>
+namespace interfaces {
+class Chain;
+} // namespace interfaces
+
namespace wallet {
//! State of transaction confirmed in a block.
struct TxStateConfirmed {
@@ -160,7 +165,7 @@ public:
std::vector<uint256> vMerkleBranch;
int nIndex;
- s >> tx >> hashBlock >> vMerkleBranch >> nIndex;
+ s >> TX_WITH_WITNESS(tx) >> hashBlock >> vMerkleBranch >> nIndex;
}
};
@@ -271,7 +276,7 @@ public:
bool dummy_bool = false; //!< Used to be fSpent
uint256 serializedHash = TxStateSerializedBlockHash(m_state);
int serializedIndex = TxStateSerializedIndex(m_state);
- s << tx << serializedHash << dummy_vector1 << serializedIndex << dummy_vector2 << mapValueCopy << vOrderForm << fTimeReceivedIsTxTime << nTimeReceived << fFromMe << dummy_bool;
+ s << TX_WITH_WITNESS(tx) << serializedHash << dummy_vector1 << serializedIndex << dummy_vector2 << mapValueCopy << vOrderForm << fTimeReceivedIsTxTime << nTimeReceived << fFromMe << dummy_bool;
}
template<typename Stream>
@@ -284,7 +289,7 @@ public:
bool dummy_bool; //! Used to be fSpent
uint256 serialized_block_hash;
int serializedIndex;
- s >> tx >> serialized_block_hash >> dummy_vector1 >> serializedIndex >> dummy_vector2 >> mapValue >> vOrderForm >> fTimeReceivedIsTxTime >> nTimeReceived >> fFromMe >> dummy_bool;
+ s >> TX_WITH_WITNESS(tx) >> serialized_block_hash >> dummy_vector1 >> serializedIndex >> dummy_vector2 >> mapValue >> vOrderForm >> fTimeReceivedIsTxTime >> nTimeReceived >> fFromMe >> dummy_bool;
m_state = TxStateInterpretSerialized({serialized_block_hash, serializedIndex});
@@ -325,13 +330,17 @@ public:
template<typename T> const T* state() const { return std::get_if<T>(&m_state); }
template<typename T> T* state() { return std::get_if<T>(&m_state); }
+ //! Update transaction state when attaching to a chain, filling in heights
+ //! of conflicted and confirmed blocks
+ void updateState(interfaces::Chain& chain);
+
bool isAbandoned() const { return state<TxStateInactive>() && state<TxStateInactive>()->abandoned; }
bool isConflicted() const { return state<TxStateConflicted>(); }
bool isInactive() const { return state<TxStateInactive>(); }
bool isUnconfirmed() const { return !isAbandoned() && !isConflicted() && !isConfirmed(); }
bool isConfirmed() const { return state<TxStateConfirmed>(); }
- const uint256& GetHash() const { return tx->GetHash(); }
- const uint256& GetWitnessHash() const { return tx->GetWitnessHash(); }
+ const Txid& GetHash() const LIFETIMEBOUND { return tx->GetHash(); }
+ const Wtxid& GetWitnessHash() const LIFETIMEBOUND { return tx->GetWitnessHash(); }
bool IsCoinBase() const { return tx->IsCoinBase(); }
private: