BIP141: Other consensus critical limits, and BIP145
Includes changes by Suhas Daftuar, Luke-jr, and mruddy.
This commit is contained in:
@@ -64,8 +64,8 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason)
|
||||
// almost as much to process as they cost the sender in fees, because
|
||||
// computing signature hashes is O(ninputs*txsize). Limiting transactions
|
||||
// to MAX_STANDARD_TX_SIZE mitigates CPU exhaustion attacks.
|
||||
unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION);
|
||||
if (sz >= MAX_STANDARD_TX_SIZE) {
|
||||
unsigned int sz = GetTransactionCost(tx);
|
||||
if (sz >= MAX_STANDARD_TX_COST) {
|
||||
reason = "tx-size";
|
||||
return false;
|
||||
}
|
||||
@@ -150,3 +150,13 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int64_t GetVirtualTransactionSize(int64_t nCost)
|
||||
{
|
||||
return (nCost + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
}
|
||||
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx)
|
||||
{
|
||||
return GetVirtualTransactionSize(GetTransactionCost(tx));
|
||||
}
|
||||
|
||||
@@ -19,12 +19,14 @@ static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000;
|
||||
static const unsigned int DEFAULT_BLOCK_MIN_SIZE = 0;
|
||||
/** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
|
||||
static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 0;
|
||||
/** Default for -blockmaxcost, which control the range of block costs the mining code will create **/
|
||||
static const unsigned int DEFAULT_BLOCK_MAX_COST = 3000000;
|
||||
/** The maximum size for transactions we're willing to relay/mine */
|
||||
static const unsigned int MAX_STANDARD_TX_SIZE = 100000;
|
||||
static const unsigned int MAX_STANDARD_TX_COST = 400000;
|
||||
/** 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 */
|
||||
static const unsigned int MAX_STANDARD_TX_SIGOPS = MAX_BLOCK_SIGOPS/5;
|
||||
static const unsigned int MAX_STANDARD_TX_SIGOPS_COST = MAX_BLOCK_SIGOPS_COST/5;
|
||||
/** Default for -maxmempool, maximum megabytes of mempool memory usage */
|
||||
static const unsigned int DEFAULT_MAX_MEMPOOL_SIZE = 300;
|
||||
/**
|
||||
@@ -65,4 +67,8 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason);
|
||||
*/
|
||||
bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
|
||||
|
||||
/** Compute the virtual transaction size (cost reinterpreted as bytes). */
|
||||
int64_t GetVirtualTransactionSize(int64_t nCost);
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx);
|
||||
|
||||
#endif // BITCOIN_POLICY_POLICY_H
|
||||
|
||||
Reference in New Issue
Block a user