5#ifndef BITCOIN_WALLET_TRANSACTION_H
6#define BITCOIN_WALLET_TRANSACTION_H
78using TxState = std::variant<TxStateConfirmed, TxStateInMempool, TxStateBlockConflicted, TxStateInactive, TxStateUnrecognized>;
81using SyncTxState = std::variant<TxStateConfirmed, TxStateInMempool, TxStateInactive>;
90 }
else if (
data.index >= 0) {
92 }
else if (
data.index == -1) {
104 [](
const TxStateConfirmed& confirmed) {
return confirmed.confirmed_block_hash; },
114 [](
const TxStateInactive& inactive) {
return inactive.abandoned ? -1 : 0; },
116 [](
const TxStateConfirmed& confirmed) {
return confirmed.position_in_block; },
126 return std::visit([](
const auto&
s) {
return s.toString(); }, state);
160 template<
typename Stream>
165 std::vector<uint256> vMerkleBranch;
205 std::vector<std::pair<std::string, std::string> >
vOrderForm;
269 template<
typename Stream>
274 mapValueCopy[
"fromaccount"] =
"";
282 std::vector<uint8_t> dummy_vector1;
283 std::vector<uint8_t> dummy_vector2;
284 bool dummy_bool =
false;
290 template<
typename Stream>
295 std::vector<uint256> dummy_vector1;
296 std::vector<CMerkleTx> dummy_vector2;
304 const auto it_op =
mapValue.find(
"n");
305 nOrderPos = (it_op !=
mapValue.end()) ? LocaleIndependentAtoi<int64_t>(it_op->second) : -1;
306 const auto it_ts =
mapValue.find(
"timesmart");
307 nTimeSmart = (it_ts !=
mapValue.end()) ?
static_cast<unsigned int>(LocaleIndependentAtoi<int64_t>(it_ts->second)) : 0;
338 template<
typename T>
const T*
state()
const {
return std::get_if<T>(&
m_state); }
345 bool isAbandoned()
const {
return state<TxStateInactive>() && state<TxStateInactive>()->abandoned; }
int64_t CAmount
Amount in satoshis (Can be negative)
std::string ToString() const
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
static const uint256 ZERO
Legacy class used for deserializing vtxPrev for backwards compatibility.
void Unserialize(Stream &s)
A transaction with a bunch of additional info that only the owner cares about.
bool isBlockConflicted() const
const Txid & GetHash() const LIFETIMEBOUND
bool IsEquivalentTo(const CWalletTx &tx) const
True if only scriptSigs are different.
std::vector< std::pair< std::string, std::string > > vOrderForm
std::set< Txid > mempool_conflicts
mapValue_t mapValue
Key/value map with information about the transaction.
void updateState(interfaces::Chain &chain)
Update transaction state when attaching to a chain, filling in heights of conflicted and confirmed bl...
@ AMOUNTTYPE_ENUM_ELEMENTS
void Serialize(Stream &s) const
int64_t nOrderPos
position in ordered transaction list
bool isUnconfirmed() const
void CopyFrom(const CWalletTx &)
bool fFromMe
From me flag is set to 1 for transactions that were created by the wallet on this bitcoin node,...
unsigned int nTimeReceived
time received by this node
void Unserialize(Stream &s)
void SetTx(CTransactionRef arg)
bool isMempoolConflicted() const
unsigned int fTimeReceivedIsTxTime
CachableAmount m_amounts[AMOUNTTYPE_ENUM_ELEMENTS]
CWalletTx & operator=(const CWalletTx &)=default
int64_t GetTxTime() const
CWalletTx(CTransactionRef tx, const TxState &state)
bool m_is_cache_empty
This flag is true if all m_amounts caches are empty.
std::multimap< int64_t, CWalletTx * >::const_iterator m_it_wtxOrdered
CWalletTx(const CWalletTx &)=default
unsigned int nTimeSmart
Stable timestamp that never changes, and reflects the order a transaction was added to the wallet.
const Wtxid & GetWitnessHash() const LIFETIMEBOUND
void MarkDirty()
make sure balances are recalculated
#define T(expected, seed, data)
std::string ToString(const T &t)
Locale-independent version of std::to_string.
std::variant< TxStateConfirmed, TxStateInMempool, TxStateInactive > SyncTxState
Subset of states transaction sync logic is implemented to handle.
std::variant< TxStateConfirmed, TxStateInMempool, TxStateBlockConflicted, TxStateInactive, TxStateUnrecognized > TxState
All possible CWalletTx states.
std::map< std::string, std::string > mapValue_t
static int TxStateSerializedIndex(const TxState &state)
Get TxState serialized block index. Inverse of TxStateInterpretSerialized.
std::underlying_type< isminetype >::type isminefilter
used for bitflags of isminetype
static TxState TxStateInterpretSerialized(TxStateUnrecognized data)
Try to interpret deserialized TxStateUnrecognized data as a recognized state.
static uint256 TxStateSerializedBlockHash(const TxState &state)
Get TxState serialized block hash. Inverse of TxStateInterpretSerialized.
std::string TxStateString(const T &state)
Return TxState or SyncTxState as a string for logging or debugging.
static constexpr TransactionSerParams TX_WITH_WITNESS
std::shared_ptr< const CTransaction > CTransactionRef
Overloaded helper for std::visit.
Cachable amount subdivided into watchonly and spendable parts.
void Set(isminefilter filter, CAmount value)
CAmount m_value[ISMINE_ENUM_ELEMENTS]
std::bitset< ISMINE_ENUM_ELEMENTS > m_cached
State of rejected transaction that conflicts with a confirmed block.
std::string toString() const
int conflicting_block_height
uint256 conflicting_block_hash
TxStateBlockConflicted(const uint256 &block_hash, int height)
State of transaction confirmed in a block.
int confirmed_block_height
std::string toString() const
TxStateConfirmed(const uint256 &block_hash, int height, int index)
uint256 confirmed_block_hash
State of transaction added to mempool.
std::string toString() const
State of transaction not confirmed or conflicting with a known block and not in the mempool.
std::string toString() const
TxStateInactive(bool abandoned=false)
State of transaction loaded in an unrecognized state with unexpected hash or index values.
TxStateUnrecognized(const uint256 &block_hash, int index)
std::string toString() const
bool operator()(const CWalletTx *a, const CWalletTx *b) const
is a home for public enum and struct type definitions that are used by internally by wallet code,...