Branch data Line data Source code
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 : 3040 : bool CWalletTx::IsEquivalentTo(const CWalletTx& _tx) const
13 : : {
14 : 3040 : CMutableTransaction tx1 {*this->tx};
15 [ + - ]: 3040 : CMutableTransaction tx2 {*_tx.tx};
16 [ + + ]: 6116 : for (auto& txin : tx1.vin) {
17 : 3076 : txin.scriptSig = CScript();
18 : 3076 : txin.scriptWitness.SetNull();
19 : : }
20 [ + + ]: 6132 : for (auto& txin : tx2.vin) {
21 : 3092 : txin.scriptSig = CScript();
22 : 3092 : txin.scriptWitness.SetNull();
23 : : }
24 [ + - + - ]: 9120 : return CTransaction(tx1) == CTransaction(tx2);
25 : 6080 : }
26 : :
27 : 148181 : bool CWalletTx::InMempool() const
28 : : {
29 [ + + ]: 148181 : return state<TxStateInMempool>();
30 : : }
31 : :
32 : 318215 : int64_t CWalletTx::GetTxTime() const
33 : : {
34 : 318215 : int64_t n = nTimeSmart;
35 [ + + ]: 318215 : return n ? n : nTimeReceived;
36 : : }
37 : :
38 : 7601 : void CWalletTx::updateState(interfaces::Chain& chain)
39 : : {
40 : 7601 : bool active;
41 : 15015 : 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 [ + + - + ]: 7414 : if (!chain.findBlock(hash, FoundBlock().inActiveChain(active).height(height)) || !active) {
49 [ - + ]: 524 : state = TxStateInactive{};
50 : : }
51 : 15015 : };
52 [ + + ]: 7601 : if (auto* conf = state<TxStateConfirmed>()) {
53 : 7324 : lookup_block(conf->confirmed_block_hash, conf->confirmed_block_height, m_state);
54 [ + + ]: 277 : } else if (auto* conf = state<TxStateBlockConflicted>()) {
55 : 90 : lookup_block(conf->conflicting_block_hash, conf->conflicting_block_height, m_state);
56 : : }
57 : 7601 : }
58 : :
59 : 14 : void CWalletTx::CopyFrom(const CWalletTx& _tx)
60 : : {
61 : 14 : *this = _tx;
62 : 14 : }
63 : : } // namespace wallet
|