Bitcoin Core 22.99.0
P2P Digital Currency
policy.h
Go to the documentation of this file.
1// Copyright (c) 2009-2010 Satoshi Nakamoto
2// Copyright (c) 2009-2020 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
10#include <policy/feerate.h>
11#include <script/interpreter.h>
12#include <script/standard.h>
13
14#include <string>
15
16class CCoinsViewCache;
17class CTxOut;
18
20static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = MAX_BLOCK_WEIGHT - 4000;
22static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE = 1000;
24static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000;
26static const unsigned int MIN_STANDARD_TX_NONWITNESS_SIZE = 82;
28static const unsigned int MAX_P2SH_SIGOPS = 15;
32static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE = 300;
34static const unsigned int DEFAULT_INCREMENTAL_RELAY_FEE = 1000;
36static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20;
38static const bool DEFAULT_PERMIT_BAREMULTISIG = true;
40static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEMS = 100;
42static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEM_SIZE = 80;
44static const unsigned int MAX_STANDARD_TAPSCRIPT_STACK_ITEM_SIZE = 80;
46static const unsigned int MAX_STANDARD_P2WSH_SCRIPT_SIZE = 3600;
48static const unsigned int MAX_STANDARD_SCRIPTSIG_SIZE = 1650;
54static const unsigned int DUST_RELAY_TX_FEE = 3000;
80
82static constexpr unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_VERIFY_FLAGS & ~MANDATORY_SCRIPT_VERIFY_FLAGS;
83
87
89
90bool IsDust(const CTxOut& txout, const CFeeRate& dustRelayFee);
91
92bool IsStandard(const CScript& scriptPubKey, TxoutType& whichType);
93
94
95// Changing the default transaction version requires a two step process: first
96// adapting relay policy by bumping TX_MAX_STANDARD_VERSION, and then later
97// allowing the new transaction version in the wallet/RPC.
98static constexpr decltype(CTransaction::nVersion) TX_MAX_STANDARD_VERSION{2};
99
104bool IsStandardTx(const CTransaction& tx, bool permit_bare_multisig, const CFeeRate& dust_relay_fee, std::string& reason);
111bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs, bool taproot_active);
119bool IsWitnessStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
120
122int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost, unsigned int bytes_per_sigop);
123int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost, unsigned int bytes_per_sigop);
124int64_t GetVirtualTransactionInputSize(const CTxIn& tx, int64_t nSigOpCost, unsigned int bytes_per_sigop);
125
126static inline int64_t GetVirtualTransactionSize(const CTransaction& tx)
127{
128 return GetVirtualTransactionSize(tx, 0, 0);
129}
130
131static inline int64_t GetVirtualTransactionInputSize(const CTxIn& tx)
132{
133 return GetVirtualTransactionInputSize(tx, 0, 0);
134}
135
136#endif // BITCOIN_POLICY_POLICY_H
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
CCoinsView that adds a memory cache for transactions to another CCoinsView.
Definition: coins.h:214
Fee rate in satoshis per kilobyte: CAmount / kB.
Definition: feerate.h:30
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:406
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:260
const int32_t nVersion
Definition: transaction.h:272
An input of a transaction.
Definition: transaction.h:66
An output of a transaction.
Definition: transaction.h:129
CScript scriptPubKey
Definition: transaction.h:132
static constexpr unsigned int LOCKTIME_VERIFY_SEQUENCE
Flags for nSequence and nLockTime locks.
Definition: consensus.h:28
static constexpr unsigned int LOCKTIME_MEDIAN_TIME_PAST
Use GetMedianTimePast() instead of nTime for end point timestamp.
Definition: consensus.h:30
static const unsigned int MAX_BLOCK_WEIGHT
The maximum allowed weight for a block, see BIP 141 (network rule)
Definition: consensus.h:15
static const int64_t MAX_BLOCK_SIGOPS_COST
The maximum allowed number of signature check operations in a block (network rule)
Definition: consensus.h:17
@ SCRIPT_VERIFY_NULLDUMMY
Definition: interpreter.h:61
@ SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS
Definition: interpreter.h:138
@ SCRIPT_VERIFY_WITNESS
Definition: interpreter.h:105
@ SCRIPT_VERIFY_CONST_SCRIPTCODE
Definition: interpreter.h:127
@ SCRIPT_VERIFY_MINIMALIF
Definition: interpreter.h:115
@ SCRIPT_VERIFY_LOW_S
Definition: interpreter.h:58
@ SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY
Definition: interpreter.h:96
@ SCRIPT_VERIFY_WITNESS_PUBKEYTYPE
Definition: interpreter.h:123
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION
Definition: interpreter.h:135
@ SCRIPT_VERIFY_TAPROOT
Definition: interpreter.h:131
@ SCRIPT_VERIFY_STRICTENC
Definition: interpreter.h:51
@ SCRIPT_VERIFY_NULLFAIL
Definition: interpreter.h:119
@ SCRIPT_VERIFY_DERSIG
Definition: interpreter.h:54
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE
Definition: interpreter.h:141
@ SCRIPT_VERIFY_CLEANSTACK
Definition: interpreter.h:91
@ SCRIPT_VERIFY_MINIMALDATA
Definition: interpreter.h:70
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS
Definition: interpreter.h:82
@ SCRIPT_VERIFY_CHECKSEQUENCEVERIFY
Definition: interpreter.h:101
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM
Definition: interpreter.h:109
CFeeRate dustRelayFee
Definition: settings.cpp:13
int64_t GetVirtualTransactionInputSize(const CTxIn &tx, int64_t nSigOpCost, unsigned int bytes_per_sigop)
Definition: policy.cpp:295
static const unsigned int MAX_STANDARD_TAPSCRIPT_STACK_ITEM_SIZE
The maximum size in bytes of each witness stack item in a standard BIP 342 script (Taproot,...
Definition: policy.h:44
static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEM_SIZE
The maximum size in bytes of each witness stack item in a standard P2WSH script.
Definition: policy.h:42
static const unsigned int MAX_STANDARD_P2WSH_STACK_ITEMS
The maximum number of witness stack items in a standard P2WSH script.
Definition: policy.h:40
static const unsigned int MAX_STANDARD_TX_SIGOPS_COST
The maximum number of sigops we're willing to relay/mine in a single tx.
Definition: policy.h:30
static const unsigned int MAX_STANDARD_TX_WEIGHT
The maximum weight for transactions we're willing to relay/mine.
Definition: policy.h:24
static const unsigned int MAX_P2SH_SIGOPS
Maximum number of signature check operations in an IsStandard() P2SH script.
Definition: policy.h:28
static constexpr unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS
Used as the flags parameter to sequence and nLocktime checks in non-consensus code.
Definition: policy.h:85
bool AreInputsStandard(const CTransaction &tx, const CCoinsViewCache &mapInputs, bool taproot_active)
Check for standard transaction types.
Definition: policy.cpp:164
int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost, unsigned int bytes_per_sigop)
Compute the virtual transaction size (weight reinterpreted as bytes).
Definition: policy.cpp:285
bool IsStandardTx(const CTransaction &tx, bool permit_bare_multisig, const CFeeRate &dust_relay_fee, std::string &reason)
Check for standard transaction types.
Definition: policy.cpp:81
static const unsigned int DUST_RELAY_TX_FEE
Min feerate for defining dust.
Definition: policy.h:54
bool IsWitnessStandard(const CTransaction &tx, const CCoinsViewCache &mapInputs)
Check if the transaction is over standard P2WSH resources limit: 3600bytes witnessScript size,...
Definition: policy.cpp:201
static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE
Default for -maxmempool, maximum megabytes of mempool memory usage.
Definition: policy.h:32
bool IsDust(const CTxOut &txout, const CFeeRate &dustRelayFee)
Definition: policy.cpp:53
static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE
Default for -blockmintxfee, which sets the minimum feerate for a transaction in blocks created by min...
Definition: policy.h:22
bool IsStandard(const CScript &scriptPubKey, TxoutType &whichType)
Definition: policy.cpp:58
static const unsigned int MIN_STANDARD_TX_NONWITNESS_SIZE
The minimum non-witness size for transactions we're willing to relay/mine (1 segwit input + 1 P2WPKH ...
Definition: policy.h:26
static constexpr unsigned int STANDARD_SCRIPT_VERIFY_FLAGS
Standard script verification flags that standard transactions will comply with.
Definition: policy.h:60
static constexpr unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS
For convenience, standard but not mandatory verify flags.
Definition: policy.h:82
static const unsigned int DEFAULT_INCREMENTAL_RELAY_FEE
Default for -incrementalrelayfee, which sets the minimum feerate increase for mempool limiting or BIP...
Definition: policy.h:34
static const bool DEFAULT_PERMIT_BAREMULTISIG
Default for -permitbaremultisig.
Definition: policy.h:38
CAmount GetDustThreshold(const CTxOut &txout, const CFeeRate &dustRelayFee)
Definition: policy.cpp:14
static constexpr decltype(CTransaction::nVersion) TX_MAX_STANDARD_VERSION
Definition: policy.h:98
static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT
Default for -blockmaxweight, which controls the range of block weights the mining code will create.
Definition: policy.h:20
static const unsigned int DEFAULT_BYTES_PER_SIGOP
Default for -bytespersigop.
Definition: policy.h:36
static const unsigned int MAX_STANDARD_SCRIPTSIG_SIZE
The maximum size of a standard ScriptSig.
Definition: policy.h:48
static const unsigned int MAX_STANDARD_P2WSH_SCRIPT_SIZE
The maximum size in bytes of a standard witnessScript.
Definition: policy.h:46
static const unsigned int MANDATORY_SCRIPT_VERIFY_FLAGS
Mandatory script verification flags that all new blocks must comply with for them to be valid.
Definition: standard.h:57
TxoutType
Definition: standard.h:59