Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
transaction.cpp
Go to the documentation of this file.
1// Copyright (c) 2021-present The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
6
7#include <interfaces/chain.h>
8
10
11namespace wallet {
13{
14 CMutableTransaction tx1 {*this->tx};
16 for (auto& txin : tx1.vin) {
17 txin.scriptSig = CScript();
18 txin.scriptWitness.SetNull();
19 }
20 for (auto& txin : tx2.vin) {
21 txin.scriptSig = CScript();
22 txin.scriptWitness.SetNull();
23 }
24 return CTransaction(tx1) == CTransaction(tx2);
25}
26
28{
30}
31
33{
35 return n ? n : nTimeReceived;
36}
37
39{
40 bool active;
41 auto lookup_block = [&](const uint256& hash, int& height, TxState& state) {
42 // If tx block (or conflicting block) was reorged out of chain
43 // while the wallet was shutdown, change tx status to UNCONFIRMED
44 // and reset block height, hash, and index. ABANDONED tx don't have
45 // associated blocks and don't need to be updated. The case where a
46 // transaction was reorged out while online and then reconfirmed
47 // while offline is covered by the rescan logic.
48 if (!chain.findBlock(hash, FoundBlock().inActiveChain(active).height(height)) || !active) {
50 }
51 };
52 if (auto* conf = state<TxStateConfirmed>()) {
53 lookup_block(conf->confirmed_block_hash, conf->confirmed_block_height, m_state);
54 } else if (auto* conf = state<TxStateBlockConflicted>()) {
55 lookup_block(conf->conflicting_block_hash, conf->conflicting_block_height, m_state);
56 }
57}
58
60{
61 *this = _tx;
62}
63} // namespace wallet
Serialized script, used inside transaction inputs and outputs.
Definition script.h:405
The basic transaction that is broadcasted on the network and contained in blocks.
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
Definition chain.h:118
virtual bool findBlock(const uint256 &hash, const FoundBlock &block={})=0
Return whether node has the block and optionally return block metadata or contents.
Helper for findBlock to selectively return pieces of block data.
Definition chain.h:53
256-bit opaque blob.
Definition uint256.h:195
A transaction with a bunch of additional info that only the owner cares about.
const T * state() const
bool IsEquivalentTo(const CWalletTx &tx) const
True if only scriptSigs are different.
void updateState(interfaces::Chain &chain)
Update transaction state when attaching to a chain, filling in heights of conflicted and confirmed bl...
void CopyFrom(const CWalletTx &)
unsigned int nTimeReceived
time received by this node
CTransactionRef tx
bool InMempool() const
int64_t GetTxTime() const
unsigned int nTimeSmart
Stable timestamp that never changes, and reflects the order a transaction was added to the wallet.
std::variant< TxStateConfirmed, TxStateInMempool, TxStateBlockConflicted, TxStateInactive, TxStateUnrecognized > TxState
All possible CWalletTx states.
Definition transaction.h:79
A mutable version of CTransaction.
State of transaction not confirmed or conflicting with a known block and not in the mempool.
Definition transaction.h:59
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.
Definition time.h:73