1 // Copyright (c) 2009-2010 Satoshi Nakamoto 2 // Copyright (c) 2009-2016 The Bitcoin developers 3 // Distributed under the MIT software license, see the accompanying 4 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 6 #ifndef BITCOIN_POLICY_POLICY_H 7 #define BITCOIN_POLICY_POLICY_H 8 9 #include "consensus/consensus.h" 10 #include "script/interpreter.h" 11 #include "script/standard.h" 12 13 #include <string> 14 15 class CCoinsViewCache; 16 17 /** Default for -blockmaxsize, which controls the maximum size of block the mining code will create **/ 18 static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000; 19 /** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/ 20 static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 0; 21 /** Default for -blockmaxweight, which controls the range of block weights the mining code will create **/ 22 static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = 3000000; 23 /** The maximum weight for transactions we're willing to relay/mine */ 24 static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000; 25 /** Maximum number of signature check operations in an IsStandard() P2SH script */ 26 static const unsigned int MAX_P2SH_SIGOPS = 15; 27 /** The maximum number of sigops we're willing to relay/mine in a single tx */ 28 static const unsigned int MAX_STANDARD_TX_SIGOPS_COST = MAX_BLOCK_SIGOPS_COST/5; 29 /** Default for -maxmempool, maximum megabytes of mempool memory usage */ 30 static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE = 300; 31 /** Default for -bytespersigop */ 32 static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20; 33 /** The maximum number of witness stack items in a standard P2WSH script */ 34 static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEMS = 100; 35 /** The maximum size of each witness stack item in a standard P2WSH script */ 36 static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEM_SIZE = 80; 37 /** The maximum size of a standard witnessScript */ 38 static const unsigned int MAX_STANDARD_P2WSH_SCRIPT_SIZE = 3600; 39 /** 40 * Standard script verification flags that standard transactions will comply 41 * with. However scripts violating these flags may still be present in valid 42 * blocks and we must accept those blocks. 43 */ 44 static const unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VERIFY_FLAGS | 45 SCRIPT_VERIFY_DERSIG | 46 SCRIPT_VERIFY_STRICTENC | 47 SCRIPT_VERIFY_MINIMALDATA | 48 SCRIPT_VERIFY_NULLDUMMY | 49 SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS | 50 SCRIPT_VERIFY_CLEANSTACK | 51 SCRIPT_VERIFY_MINIMALIF | 52 SCRIPT_VERIFY_NULLFAIL | 53 SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY | 54 SCRIPT_VERIFY_CHECKSEQUENCEVERIFY | 55 SCRIPT_VERIFY_LOW_S | 56 SCRIPT_VERIFY_WITNESS | 57 SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM | 58 SCRIPT_VERIFY_WITNESS_PUBKEYTYPE; 59 60 /** For convenience, standard but not mandatory verify flags. */ 61 static const unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_VERIFY_FLAGS & ~MANDATORY_SCRIPT_VERIFY_FLAGS; 62 63 /** Used as the flags parameter to sequence and nLocktime checks in non-consensus code. */ 64 static const unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_VERIFY_SEQUENCE | 65 LOCKTIME_MEDIAN_TIME_PAST; 66 67 bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType, const bool witnessEnabled = false); 68 /** 69 * Check for standard transaction types 70 * @return True if all outputs (scriptPubKeys) use only standard transaction forms 71 */ 72 bool IsStandardTx(const CTransaction& tx, std::string& reason, const bool witnessEnabled = false); 73 /** 74 * Check for standard transaction types 75 * @param[in] mapInputs Map of previous transactions that have outputs we're spending 76 * @return True if all inputs (scriptSigs) use only standard transaction forms 77 */ 78 bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs); 79 /** 80 * Check if the transaction is over standard P2WSH resources limit: 81 * 3600bytes witnessScript size, 80bytes per witness stack element, 100 witness stack elements 82 * These limits are adequate for multi-signature up to n-of-100 using OP_CHECKSIG, OP_ADD, and OP_EQUAL, 83 */ 84 bool IsWitnessStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs); 85 86 extern unsigned int nBytesPerSigOp; 87 88 /** Compute the virtual transaction size (weight reinterpreted as bytes). */ 89 int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost); 90 int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost = 0); 91 92 #endif // BITCOIN_POLICY_POLICY_H 93