2015-06-24 07:25:30 +02:00
|
|
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
2016-11-07 12:51:36 +01:00
|
|
|
// Copyright (c) 2009-2016 The Bitcoin Core developers
|
2015-06-24 07:25:30 +02:00
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2015-10-27 17:44:13 +01:00
|
|
|
#ifndef BITCOIN_POLICY_POLICY_H
|
|
|
|
#define BITCOIN_POLICY_POLICY_H
|
2015-06-24 07:25:30 +02:00
|
|
|
|
2020-03-19 23:46:56 +01:00
|
|
|
#include <consensus/consensus.h>
|
|
|
|
#include <policy/feerate.h>
|
|
|
|
#include <script/interpreter.h>
|
|
|
|
#include <script/standard.h>
|
2015-06-24 07:25:30 +02:00
|
|
|
|
2014-10-12 00:41:05 +02:00
|
|
|
#include <string>
|
|
|
|
|
|
|
|
class CCoinsViewCache;
|
2017-05-09 09:11:09 +02:00
|
|
|
class CTxOut;
|
2014-10-12 00:41:05 +02:00
|
|
|
|
2016-07-18 08:23:38 +02:00
|
|
|
/** Default for -blockmaxsize, which controls the maximum size of block the mining code will create **/
|
2018-04-11 13:06:44 +02:00
|
|
|
static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 2000000;
|
2017-01-16 19:32:51 +01:00
|
|
|
/** Default for -blockmintxfee, which sets the minimum feerate for a transaction in blocks created by mining code **/
|
|
|
|
static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE = 1000;
|
2015-06-24 07:25:30 +02:00
|
|
|
/** The maximum size for transactions we're willing to relay/mine */
|
|
|
|
static const unsigned int MAX_STANDARD_TX_SIZE = 100000;
|
2021-06-06 11:29:23 +02:00
|
|
|
/** The minimum size for transactions we're willing to relay/mine (1 empty scriptSig input + 1 P2PKH output = 85 bytes) */
|
|
|
|
static const unsigned int MIN_STANDARD_TX_SIZE = 85;
|
2015-06-24 07:25:30 +02:00
|
|
|
/** Maximum number of signature check operations in an IsStandard() P2SH script */
|
|
|
|
static const unsigned int MAX_P2SH_SIGOPS = 15;
|
|
|
|
/** The maximum number of sigops we're willing to relay/mine in a single tx */
|
2017-09-11 16:13:30 +02:00
|
|
|
static const unsigned int MAX_STANDARD_TX_SIGOPS = 4000;
|
2015-11-16 21:21:51 +01:00
|
|
|
/** Default for -maxmempool, maximum megabytes of mempool memory usage */
|
|
|
|
static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE = 300;
|
2017-01-16 19:32:51 +01:00
|
|
|
/** Default for -incrementalrelayfee, which sets the minimum feerate increase for mempool limiting or BIP 125 replacement **/
|
|
|
|
static const unsigned int DEFAULT_INCREMENTAL_RELAY_FEE = 1000;
|
2017-07-19 16:38:09 +02:00
|
|
|
/** Min feerate for defining dust. Historically this has been based on the
|
2017-01-16 19:32:51 +01:00
|
|
|
* minRelayTxFee, however changing the dust limit changes which transactions are
|
|
|
|
* standard and should be done with care and ideally rarely. It makes sense to
|
|
|
|
* only increase the dust limit after prior releases were already not creating
|
|
|
|
* outputs below the new threshold */
|
2017-07-19 16:38:09 +02:00
|
|
|
static const unsigned int DUST_RELAY_TX_FEE = 3000;
|
2015-06-24 07:25:30 +02:00
|
|
|
/**
|
|
|
|
* Standard script verification flags that standard transactions will comply
|
|
|
|
* with. However scripts violating these flags may still be present in valid
|
|
|
|
* blocks and we must accept those blocks.
|
|
|
|
*/
|
|
|
|
static const unsigned int STANDARD_SCRIPT_VERIFY_FLAGS = MANDATORY_SCRIPT_VERIFY_FLAGS |
|
|
|
|
SCRIPT_VERIFY_DERSIG |
|
|
|
|
SCRIPT_VERIFY_STRICTENC |
|
|
|
|
SCRIPT_VERIFY_MINIMALDATA |
|
|
|
|
SCRIPT_VERIFY_NULLDUMMY |
|
|
|
|
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS |
|
|
|
|
SCRIPT_VERIFY_CLEANSTACK |
|
2016-09-27 17:43:22 +02:00
|
|
|
SCRIPT_VERIFY_NULLFAIL |
|
Test LowS in standardness, removes nuisance malleability vector.
This adds SCRIPT_VERIFY_LOW_S to STANDARD_SCRIPT_VERIFY_FLAGS which
will make the node require the canonical 'low-s' encoding for
ECDSA signatures when relaying or mining.
Consensus behavior is unchanged.
The rational is explained in a81cd96805ce6b65cca3a40ebbd3b2eb428abb7b:
Absent this kind of test ECDSA is not a strong signature as given
a valid signature {r, s} both that value and {r, -s mod n} are valid.
These two encodings have different hashes allowing third parties a
vector to change users txids. These attacks are avoided by picking
a particular form as canonical and rejecting the other form(s); in
the of the LOW_S rule, the smaller of the two possible S values is
used.
If widely deployed this change would eliminate the last remaining
known vector for nuisance malleability on boring SIGHASH_ALL
p2pkh transactions. On the down-side it will block most
transactions made by sufficiently out of date software.
Unlike the other avenues to change txids on boring transactions this
one was randomly violated by all deployed bitcoin software prior to
its discovery. So, while other malleability vectors where made
non-standard as soon as they were discovered, this one has remained
permitted. Even BIP62 did not propose applying this rule to
old version transactions, but conforming implementations have become
much more common since BIP62 was initially written.
Bitcoin Core has produced compatible signatures since a28fb70e in
September 2013, but this didn't make it into a release until 0.9
in March 2014; Bitcoinj has done so for a similar span of time.
Bitcoinjs and electrum have been more recently updated.
This does not replace the need for BIP62 or similar, as miners can
still cooperate to break transactions. Nor does it replace the
need for wallet software to handle malleability sanely[1]. This
only eliminates the cheap and irritating DOS attack.
[1] On the Malleability of Bitcoin Transactions
Marcin Andrychowicz, Stefan Dziembowski, Daniel Malinowski, Łukasz Mazurek
http://fc15.ifca.ai/preproceedings/bitcoin/paper_9.pdf
2015-10-06 05:19:12 +02:00
|
|
|
SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY |
|
2015-09-26 01:18:51 +02:00
|
|
|
SCRIPT_VERIFY_CHECKSEQUENCEVERIFY |
|
2020-12-11 23:17:10 +01:00
|
|
|
SCRIPT_VERIFY_LOW_S |
|
2018-05-12 16:33:07 +02:00
|
|
|
SCRIPT_ENABLE_DIP0020_OPCODES |
|
|
|
|
SCRIPT_VERIFY_CONST_SCRIPTCODE;
|
2015-06-24 07:25:30 +02:00
|
|
|
|
|
|
|
/** For convenience, standard but not mandatory verify flags. */
|
|
|
|
static const unsigned int STANDARD_NOT_MANDATORY_VERIFY_FLAGS = STANDARD_SCRIPT_VERIFY_FLAGS & ~MANDATORY_SCRIPT_VERIFY_FLAGS;
|
|
|
|
|
2016-02-11 21:34:04 +01:00
|
|
|
/** Used as the flags parameter to sequence and nLocktime checks in non-consensus code. */
|
2015-12-07 21:44:16 +01:00
|
|
|
static const unsigned int STANDARD_LOCKTIME_VERIFY_FLAGS = LOCKTIME_VERIFY_SEQUENCE |
|
|
|
|
LOCKTIME_MEDIAN_TIME_PAST;
|
2015-11-03 18:12:36 +01:00
|
|
|
|
2017-05-09 09:11:09 +02:00
|
|
|
CAmount GetDustThreshold(const CTxOut& txout, const CFeeRate& dustRelayFee);
|
|
|
|
|
|
|
|
bool IsDust(const CTxOut& txout, const CFeeRate& dustRelayFee);
|
|
|
|
|
2014-10-12 00:41:05 +02:00
|
|
|
bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType);
|
|
|
|
/**
|
|
|
|
* Check for standard transaction types
|
|
|
|
* @return True if all outputs (scriptPubKeys) use only standard transaction forms
|
|
|
|
*/
|
|
|
|
bool IsStandardTx(const CTransaction& tx, std::string& reason);
|
|
|
|
/**
|
|
|
|
* Check for standard transaction types
|
|
|
|
* @param[in] mapInputs Map of previous transactions that have outputs we're spending
|
|
|
|
* @return True if all inputs (scriptSigs) use only standard transaction forms
|
|
|
|
*/
|
|
|
|
bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
|
|
|
|
|
2017-01-16 19:32:51 +01:00
|
|
|
extern CFeeRate incrementalRelayFee;
|
|
|
|
extern CFeeRate dustRelayFee;
|
2015-10-27 17:44:13 +01:00
|
|
|
#endif // BITCOIN_POLICY_POLICY_H
|