/tmp/bitcoin/src/wallet/transaction.cpp
Line | Count | Source |
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 | | |
5 | | #include <wallet/transaction.h> |
6 | | |
7 | | #include <interfaces/chain.h> |
8 | | |
9 | | using interfaces::FoundBlock; |
10 | | |
11 | | namespace wallet { |
12 | | bool CWalletTx::IsEquivalentTo(const CWalletTx& _tx) const |
13 | 4.05k | { |
14 | 4.05k | CMutableTransaction tx1 {*this->tx}; |
15 | 4.05k | CMutableTransaction tx2 {*_tx.tx}; |
16 | 4.10k | for (auto& txin : tx1.vin) { |
17 | 4.10k | txin.scriptSig = CScript(); |
18 | 4.10k | txin.scriptWitness.SetNull(); |
19 | 4.10k | } |
20 | 4.10k | for (auto& txin : tx2.vin) { |
21 | 4.10k | txin.scriptSig = CScript(); |
22 | 4.10k | txin.scriptWitness.SetNull(); |
23 | 4.10k | } |
24 | 4.05k | return CTransaction(tx1) == CTransaction(tx2); |
25 | 4.05k | } |
26 | | |
27 | | bool CWalletTx::InMempool() const |
28 | 149k | { |
29 | 149k | return state<TxStateInMempool>(); |
30 | 149k | } |
31 | | |
32 | | int64_t CWalletTx::GetTxTime() const |
33 | 325k | { |
34 | 325k | int64_t n = nTimeSmart; |
35 | 325k | return n ? n : nTimeReceived; |
36 | 325k | } |
37 | | |
38 | | void CWalletTx::updateState(interfaces::Chain& chain) |
39 | 7.69k | { |
40 | 7.69k | bool active; |
41 | 7.69k | 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 | 7.50k | if (!chain.findBlock(hash, FoundBlock().inActiveChain(active).height(height)) || !active) { |
49 | 362 | state = TxStateInactive{}; |
50 | 362 | } |
51 | 7.50k | }; |
52 | 7.69k | if (auto* conf = state<TxStateConfirmed>()) { |
53 | 7.45k | lookup_block(conf->confirmed_block_hash, conf->confirmed_block_height, m_state); |
54 | 7.45k | } else if (auto* conf = state<TxStateBlockConflicted>()) { |
55 | 58 | lookup_block(conf->conflicting_block_hash, conf->conflicting_block_height, m_state); |
56 | 58 | } |
57 | 7.69k | } |
58 | | |
59 | | void CWalletTx::CopyFrom(const CWalletTx& _tx) |
60 | 14 | { |
61 | 14 | *this = _tx; |
62 | 14 | } |
63 | | } // namespace wallet |