/Users/eugenesiegel/btc/bitcoin/src/wallet/transaction.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2021 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 | 0 | { |
14 | 0 | CMutableTransaction tx1 {*this->tx}; |
15 | 0 | CMutableTransaction tx2 {*_tx.tx}; |
16 | 0 | for (auto& txin : tx1.vin) txin.scriptSig = CScript(); |
17 | 0 | for (auto& txin : tx2.vin) txin.scriptSig = CScript(); |
18 | 0 | return CTransaction(tx1) == CTransaction(tx2); |
19 | 0 | } |
20 | | |
21 | | bool CWalletTx::InMempool() const |
22 | 0 | { |
23 | 0 | return state<TxStateInMempool>(); |
24 | 0 | } |
25 | | |
26 | | int64_t CWalletTx::GetTxTime() const |
27 | 0 | { |
28 | 0 | int64_t n = nTimeSmart; |
29 | 0 | return n ? n : nTimeReceived; |
30 | 0 | } |
31 | | |
32 | | void CWalletTx::updateState(interfaces::Chain& chain) |
33 | 0 | { |
34 | 0 | bool active; |
35 | 0 | auto lookup_block = [&](const uint256& hash, int& height, TxState& state) { |
36 | | // If tx block (or conflicting block) was reorged out of chain |
37 | | // while the wallet was shutdown, change tx status to UNCONFIRMED |
38 | | // and reset block height, hash, and index. ABANDONED tx don't have |
39 | | // associated blocks and don't need to be updated. The case where a |
40 | | // transaction was reorged out while online and then reconfirmed |
41 | | // while offline is covered by the rescan logic. |
42 | 0 | if (!chain.findBlock(hash, FoundBlock().inActiveChain(active).height(height)) || !active) { |
43 | 0 | state = TxStateInactive{}; |
44 | 0 | } |
45 | 0 | }; |
46 | 0 | if (auto* conf = state<TxStateConfirmed>()) { |
47 | 0 | lookup_block(conf->confirmed_block_hash, conf->confirmed_block_height, m_state); |
48 | 0 | } else if (auto* conf = state<TxStateBlockConflicted>()) { |
49 | 0 | lookup_block(conf->conflicting_block_hash, conf->conflicting_block_height, m_state); |
50 | 0 | } |
51 | 0 | } |
52 | | |
53 | | void CWalletTx::CopyFrom(const CWalletTx& _tx) |
54 | 0 | { |
55 | 0 | *this = _tx; |
56 | 0 | } |
57 | | } // namespace wallet |