tx_verify.h
1 // Copyright (c) 2017-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 #ifndef BITCOIN_CONSENSUS_TX_VERIFY_H 6 #define BITCOIN_CONSENSUS_TX_VERIFY_H 7 8 #include <consensus/amount.h> 9 10 #include <stdint.h> 11 #include <vector> 12 13 class CBlockIndex; 14 class CCoinsViewCache; 15 class CTransaction; 16 class TxValidationState; 17 18 /** Transaction validation functions */ 19 20 namespace Consensus { 21 /** 22 * Check whether all inputs of this transaction are valid (no double spends and amounts) 23 * This does not modify the UTXO set. This does not check scripts and sigs. 24 * @param[out] txfee Set to the transaction fee if successful. 25 * Preconditions: tx.IsCoinBase() is false. 26 */ 27 [[nodiscard]] bool CheckTxInputs(const CTransaction& tx, TxValidationState& state, const CCoinsViewCache& inputs, int nSpendHeight, CAmount& txfee); 28 } // namespace Consensus 29 30 /** Auxiliary functions for transaction validation (ideally should not be exposed) */ 31 32 /** 33 * Count ECDSA signature operations the old-fashioned (pre-0.6) way 34 * @return number of sigops this transaction's outputs will produce when spent 35 * @see CTransaction::FetchInputs 36 */ 37 unsigned int GetLegacySigOpCount(const CTransaction& tx); 38 39 /** 40 * Count ECDSA signature operations in pay-to-script-hash inputs. 41 * 42 * @param[in] mapInputs Map of previous transactions that have outputs we're spending 43 * @return maximum number of sigops required to validate this transaction's inputs 44 * @see CTransaction::FetchInputs 45 */ 46 unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& mapInputs); 47 48 /** 49 * Compute total signature operation cost of a transaction. 50 * @param[in] tx Transaction for which we are computing the cost 51 * @param[in] inputs Map of previous transactions that have outputs we're spending 52 * @param[in] flags Script verification flags 53 * @return Total signature operation cost of tx 54 */ 55 int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& inputs, uint32_t flags); 56 57 /** 58 * Check if transaction is final and can be included in a block with the 59 * specified height and time. Consensus critical. 60 */ 61 bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64_t nBlockTime); 62 63 /** 64 * Calculates the block height and previous block's median time past at 65 * which the transaction will be considered final in the context of BIP 68. 66 * For each input that is not sequence locked, the corresponding entries in 67 * prevHeights are set to 0 as they do not affect the calculation. 68 */ 69 std::pair<int, int64_t> CalculateSequenceLocks(const CTransaction &tx, int flags, std::vector<int>& prevHeights, const CBlockIndex& block); 70 71 bool EvaluateSequenceLocks(const CBlockIndex& block, std::pair<int, int64_t> lockPair); 72 /** 73 * Check if transaction is final per BIP 68 sequence numbers and can be included in a block. 74 * Consensus critical. Takes as input a list of heights at which tx's inputs (in order) confirmed. 75 */ 76 bool SequenceLocks(const CTransaction &tx, int flags, std::vector<int>& prevHeights, const CBlockIndex& block); 77 78 #endif // BITCOIN_CONSENSUS_TX_VERIFY_H