1 // Copyright (c) 2009-2010 Satoshi Nakamoto 2 // Copyright (c) 2009-2018 The Bitcoin Core 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 <policy/feerate.h> 11 #include <script/interpreter.h> 12 #include <script/standard.h> 13 14 #include <string> 15 16 class CCoinsViewCache; 17 class CTxOut; 18 19 /** Default for -blockmaxweight, which controls the range of block weights the mining code will create **/ 20 static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = MAX_BLOCK_WEIGHT - 4000; 21 /** Default for -blockmintxfee, which sets the minimum feerate for a transaction in blocks created by mining code **/ 22 static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE = 1000; 23 /** The maximum weight for transactions we're willing to relay/mine */ 24 static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000; 25 /** The minimum non-witness size for transactions we're willing to relay/mine (1 segwit input + 1 P2WPKH output = 82 bytes) */ 26 static const unsigned int MIN_STANDARD_TX_NONWITNESS_SIZE = 82; 27 /** Maximum number of signature check operations in an IsStandard() P2SH script */ 28 static const unsigned int MAX_P2SH_SIGOPS = 15; 29 /** The maximum number of sigops we're willing to relay/mine in a single tx */ 30 static const unsigned int MAX_STANDARD_TX_SIGOPS_COST = MAX_BLOCK_SIGOPS_COST/5; 31 /** Default for -maxmempool, maximum megabytes of mempool memory usage */ 32 static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE = 300; 33 /** Default for -incrementalrelayfee, which sets the minimum feerate increase for mempool limiting or BIP 125 replacement **/ 34 static const unsigned int DEFAULT_INCREMENTAL_RELAY_FEE = 1000; 35 /** Default for -bytespersigop */ 36 static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20; 37 /** The maximum number of witness stack items in a standard P2WSH script */ 38 static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEMS = 100; 39 /** The maximum size of each witness stack item in a standard P2WSH script */ 40 static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEM_SIZE = 80; 41 /** The maximum size of a standard witnessScript */ 42 static const unsigned int MAX_STANDARD_P2WSH_SCRIPT_SIZE = 3600; 43 /** Min feerate for defining dust. Historically this has been based on the 44 * minRelayTxFee, however changing the dust limit changes which transactions are 45 * standard and should be done with care and ideally rarely. It makes sense to 46 * only increase the dust limit after prior releases were already not creating 47 * outputs below the new threshold */ 48 static const unsigned int DUST_RELAY_TX_FEE = 30000; 49 /** 50 * Standard script verification flags that standard transactions will comply 51 * with. However scripts violating these flags may still be present in valid 52 * blocks and we must accept those blocks. 53 */ 54 static constexpr unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VERIFY_FLAGS | 55 SCRIPT_VERIFY_DERSIG | 56 SCRIPT_VERIFY_STRICTENC | 57 SCRIPT_VERIFY_MINIMALDATA | 58 SCRIPT_VERIFY_NULLDUMMY | 59 SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS | 60 SCRIPT_VERIFY_CLEANSTACK | 61 SCRIPT_VERIFY_MINIMALIF | 62 SCRIPT_VERIFY_NULLFAIL | 63 SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY | 64 SCRIPT_VERIFY_CHECKSEQUENCEVERIFY | 65 SCRIPT_VERIFY_LOW_S | 66 SCRIPT_VERIFY_WITNESS | 67 SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM | 68 SCRIPT_VERIFY_WITNESS_PUBKEYTYPE | 69 SCRIPT_VERIFY_CONST_SCRIPTCODE; 70 71 /** For convenience, standard but not mandatory verify flags. */ 72 static constexpr unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_VERIFY_FLAGS & ~MANDATORY_SCRIPT_VERIFY_FLAGS; 73 74 /** Used as the flags parameter to sequence and nLocktime checks in non-consensus code. */ 75 static constexpr unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_VERIFY_SEQUENCE | 76 LOCKTIME_MEDIAN_TIME_PAST; 77 78 CAmount GetDustThreshold(const CTxOut& txout, const CFeeRate& dustRelayFee); 79 80 bool IsDust(const CTxOut& txout, const CFeeRate& dustRelayFee); 81 82 bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType); 83 /** 84 * Check for standard transaction types 85 * @return True if all outputs (scriptPubKeys) use only standard transaction forms 86 */ 87 bool IsStandardTx(const CTransaction& tx, std::string& reason); 88 /** 89 * Check for standard transaction types 90 * @param[in] mapInputs Map of previous transactions that have outputs we're spending 91 * @return True if all inputs (scriptSigs) use only standard transaction forms 92 */ 93 bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs); 94 /** 95 * Check if the transaction is over standard P2WSH resources limit: 96 * 3600bytes witnessScript size, 80bytes per witness stack element, 100 witness stack elements 97 * These limits are adequate for multi-signature up to n-of-100 using OP_CHECKSIG, OP_ADD, and OP_EQUAL, 98 */ 99 bool IsWitnessStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs); 100 101 extern CFeeRate incrementalRelayFee; 102 extern CFeeRate dustRelayFee; 103 extern unsigned int nBytesPerSigOp; 104 105 /** Compute the virtual transaction size (weight reinterpreted as bytes). */ 106 int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost); 107 int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost = 0); 108 int64_t GetVirtualTransactionInputSize(const CTxIn& tx, int64_t nSigOpCost = 0); 109 110 #endif // BITCOIN_POLICY_POLICY_H 111