Policy to reject extremely small transactions
A transaction with 1 segwit input and 1 P2WPHK output has non-witness size of 82 bytes. Anything smaller than this have unnecessary malloc overhead and are not relayed/mined.
This commit is contained in:
parent
0f8719bb03
commit
7485488e90
2 changed files with 8 additions and 0 deletions
|
@ -22,6 +22,8 @@ static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = MAX_BLOCK_WEIGHT - 4000;
|
||||||
static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE = 1000;
|
static const unsigned int DEFAULT_BLOCK_MIN_TX_FEE = 1000;
|
||||||
/** The maximum weight for transactions we're willing to relay/mine */
|
/** The maximum weight for transactions we're willing to relay/mine */
|
||||||
static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000;
|
static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000;
|
||||||
|
/** The minimum non-witness size for transactions we're willing to relay/mine (1 segwit input + 1 P2WPKH output = 82 bytes) */
|
||||||
|
static const unsigned int MIN_STANDARD_TX_NONWITNESS_SIZE = 82;
|
||||||
/** Maximum number of signature check operations in an IsStandard() P2SH script */
|
/** Maximum number of signature check operations in an IsStandard() P2SH script */
|
||||||
static const unsigned int MAX_P2SH_SIGOPS = 15;
|
static const unsigned int MAX_P2SH_SIGOPS = 15;
|
||||||
/** The maximum number of sigops we're willing to relay/mine in a single tx */
|
/** The maximum number of sigops we're willing to relay/mine in a single tx */
|
||||||
|
|
|
@ -582,6 +582,12 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool
|
||||||
if (fRequireStandard && !IsStandardTx(tx, reason, witnessEnabled))
|
if (fRequireStandard && !IsStandardTx(tx, reason, witnessEnabled))
|
||||||
return state.DoS(0, false, REJECT_NONSTANDARD, reason);
|
return state.DoS(0, false, REJECT_NONSTANDARD, reason);
|
||||||
|
|
||||||
|
// Do not work on transactions that are too small.
|
||||||
|
// A transaction with 1 segwit input and 1 P2WPHK output has non-witness size of 82 bytes.
|
||||||
|
// Transactions smaller than this are not relayed to reduce unnecessary malloc overhead.
|
||||||
|
if (::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) < MIN_STANDARD_TX_NONWITNESS_SIZE)
|
||||||
|
return state.DoS(0, false, REJECT_NONSTANDARD, "tx-size-small");
|
||||||
|
|
||||||
// Only accept nLockTime-using transactions that can be mined in the next
|
// Only accept nLockTime-using transactions that can be mined in the next
|
||||||
// block; we don't want our mempool filled up with transactions that can't
|
// block; we don't want our mempool filled up with transactions that can't
|
||||||
// be mined yet.
|
// be mined yet.
|
||||||
|
|
Loading…
Reference in a new issue