LCOV - code coverage report
Current view: top level - src/qt - transactionrecord.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 0 16 0.0 %
Date: 2020-09-26 01:30:44 Functions: 0 14 0.0 %

          Line data    Source code
       1             : // Copyright (c) 2011-2018 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             : #ifndef BITCOIN_QT_TRANSACTIONRECORD_H
       6             : #define BITCOIN_QT_TRANSACTIONRECORD_H
       7             : 
       8             : #include <amount.h>
       9             : #include <uint256.h>
      10             : 
      11             : #include <QList>
      12             : #include <QString>
      13             : 
      14             : namespace interfaces {
      15             : class Node;
      16             : class Wallet;
      17             : struct WalletTx;
      18             : struct WalletTxStatus;
      19             : }
      20             : 
      21             : /** UI model for transaction status. The transaction status is the part of a transaction that will change over time.
      22             :  */
      23           0 : class TransactionStatus
      24             : {
      25             : public:
      26           0 :     TransactionStatus() : countsForBalance(false), sortKey(""),
      27           0 :                           matures_in(0), status(Unconfirmed), depth(0), open_for(0)
      28           0 :     { }
      29             : 
      30             :     enum Status {
      31             :         Confirmed,          /**< Have 6 or more confirmations (normal tx) or fully mature (mined tx) **/
      32             :         /// Normal (sent/received) transactions
      33             :         OpenUntilDate,      /**< Transaction not yet final, waiting for date */
      34             :         OpenUntilBlock,     /**< Transaction not yet final, waiting for block */
      35             :         Unconfirmed,        /**< Not yet mined into a block **/
      36             :         Confirming,         /**< Confirmed, but waiting for the recommended number of confirmations **/
      37             :         Conflicted,         /**< Conflicts with other transaction or mempool **/
      38             :         Abandoned,          /**< Abandoned from the wallet **/
      39             :         /// Generated (mined) transactions
      40             :         Immature,           /**< Mined but waiting for maturity */
      41             :         NotAccepted         /**< Mined but not accepted */
      42             :     };
      43             : 
      44             :     /// Transaction counts towards available balance
      45             :     bool countsForBalance;
      46             :     /// Sorting key based on status
      47             :     std::string sortKey;
      48             : 
      49             :     /** @name Generated (mined) transactions
      50             :        @{*/
      51             :     int matures_in;
      52             :     /**@}*/
      53             : 
      54             :     /** @name Reported status
      55             :        @{*/
      56             :     Status status;
      57             :     qint64 depth;
      58             :     qint64 open_for; /**< Timestamp if status==OpenUntilDate, otherwise number
      59             :                       of additional blocks that need to be mined before
      60             :                       finalization */
      61             :     /**@}*/
      62             : 
      63             :     /** Current block hash (to know whether cached status is still valid) */
      64           0 :     uint256 m_cur_block_hash{};
      65             : 
      66             :     bool needsUpdate;
      67             : };
      68             : 
      69             : /** UI model for a transaction. A core transaction can be represented by multiple UI transactions if it has
      70             :     multiple outputs.
      71             :  */
      72           0 : class TransactionRecord
      73             : {
      74             : public:
      75             :     enum Type
      76             :     {
      77             :         Other,
      78             :         Generated,
      79             :         SendToAddress,
      80             :         SendToOther,
      81             :         RecvWithAddress,
      82             :         RecvFromOther,
      83             :         SendToSelf
      84             :     };
      85             : 
      86             :     /** Number of confirmation recommended for accepting a transaction */
      87             :     static const int RecommendedNumConfirmations = 6;
      88             : 
      89             :     TransactionRecord():
      90             :             hash(), time(0), type(Other), address(""), debit(0), credit(0), idx(0)
      91             :     {
      92             :     }
      93             : 
      94           0 :     TransactionRecord(uint256 _hash, qint64 _time):
      95           0 :             hash(_hash), time(_time), type(Other), address(""), debit(0),
      96           0 :             credit(0), idx(0)
      97           0 :     {
      98           0 :     }
      99             : 
     100           0 :     TransactionRecord(uint256 _hash, qint64 _time,
     101             :                 Type _type, const std::string &_address,
     102             :                 const CAmount& _debit, const CAmount& _credit):
     103           0 :             hash(_hash), time(_time), type(_type), address(_address), debit(_debit), credit(_credit),
     104           0 :             idx(0)
     105           0 :     {
     106           0 :     }
     107             : 
     108             :     /** Decompose CWallet transaction to model transaction records.
     109             :      */
     110             :     static bool showTransaction();
     111             :     static QList<TransactionRecord> decomposeTransaction(const interfaces::WalletTx& wtx);
     112             : 
     113             :     /** @name Immutable transaction attributes
     114             :       @{*/
     115             :     uint256 hash;
     116             :     qint64 time;
     117             :     Type type;
     118             :     std::string address;
     119             :     CAmount debit;
     120             :     CAmount credit;
     121             :     /**@}*/
     122             : 
     123             :     /** Subtransaction index, for sort key */
     124             :     int idx;
     125             : 
     126             :     /** Status: can change with block chain update */
     127             :     TransactionStatus status;
     128             : 
     129             :     /** Whether the transaction was sent/received with a watch-only address */
     130             :     bool involvesWatchAddress;
     131             : 
     132             :     /** Return the unique identifier for this transaction (part) */
     133             :     QString getTxHash() const;
     134             : 
     135             :     /** Return the output index of the subtransaction  */
     136             :     int getOutputIndex() const;
     137             : 
     138             :     /** Update status from core wallet tx.
     139             :      */
     140             :     void updateStatus(const interfaces::WalletTxStatus& wtx, const uint256& block_hash, int numBlocks, int64_t block_time);
     141             : 
     142             :     /** Return whether a status update is needed.
     143             :      */
     144             :     bool statusUpdateNeeded(const uint256& block_hash) const;
     145             : };
     146             : 
     147             : #endif // BITCOIN_QT_TRANSACTIONRECORD_H

Generated by: LCOV version 1.15