Merge #11311: travis: Revert default datadir check
[bitcoinplatinum.git] / src / consensus / tx_verify.h
blobd46d3294ca25039e8ebdaf1d0cd4d73abebb3597
1 // Copyright (c) 2017-2017 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.
5 #ifndef BITCOIN_CONSENSUS_TX_VERIFY_H
6 #define BITCOIN_CONSENSUS_TX_VERIFY_H
8 #include <stdint.h>
9 #include <vector>
11 class CBlockIndex;
12 class CCoinsViewCache;
13 class CTransaction;
14 class CValidationState;
16 /** Transaction validation functions */
18 /** Context-independent validity checks */
19 bool CheckTransaction(const CTransaction& tx, CValidationState& state, bool fCheckDuplicateInputs=true);
21 namespace Consensus {
22 /**
23 * Check whether all inputs of this transaction are valid (no double spends and amounts)
24 * This does not modify the UTXO set. This does not check scripts and sigs.
25 * Preconditions: tx.IsCoinBase() is false.
27 bool CheckTxInputs(const CTransaction& tx, CValidationState& state, const CCoinsViewCache& inputs, int nSpendHeight);
28 } // namespace Consensus
30 /** Auxiliary functions for transaction validation (ideally should not be exposed) */
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
37 unsigned int GetLegacySigOpCount(const CTransaction& tx);
39 /**
40 * Count ECDSA signature operations in pay-to-script-hash inputs.
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
46 unsigned int GetP2SHSigOpCount(const CTransaction& tx, const CCoinsViewCache& mapInputs);
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[out] flags Script verification flags
53 * @return Total signature operation cost of tx
55 int64_t GetTransactionSigOpCost(const CTransaction& tx, const CCoinsViewCache& inputs, int flags);
57 /**
58 * Check if transaction is final and can be included in a block with the
59 * specified height and time. Consensus critical.
61 bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64_t nBlockTime);
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 * Also removes from the vector of input heights any entries which did not
67 * correspond to sequence locked inputs as they do not affect the calculation.
69 std::pair<int, int64_t> CalculateSequenceLocks(const CTransaction &tx, int flags, std::vector<int>* prevHeights, const CBlockIndex& block);
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.
76 bool SequenceLocks(const CTransaction &tx, int flags, std::vector<int>* prevHeights, const CBlockIndex& block);
78 #endif // BITCOIN_CONSENSUS_TX_VERIFY_H