Treat high-sigop transactions as larger rather than rejecting them
This commit is contained in:
@@ -154,12 +154,14 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs)
|
||||
return true;
|
||||
}
|
||||
|
||||
int64_t GetVirtualTransactionSize(int64_t nWeight)
|
||||
unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP;
|
||||
|
||||
int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost)
|
||||
{
|
||||
return (nWeight + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
return (std::max(nWeight, nSigOpCost * nBytesPerSigOp) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
|
||||
}
|
||||
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx)
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost)
|
||||
{
|
||||
return GetVirtualTransactionSize(GetTransactionWeight(tx));
|
||||
return GetVirtualTransactionSize(GetTransactionWeight(tx), nSigOpCost);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ static const unsigned int MAX_P2SH_SIGOPS = 15;
|
||||
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;
|
||||
/** Default for -bytespersigop */
|
||||
static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20;
|
||||
/**
|
||||
* Standard script verification flags that standard transactions will comply
|
||||
* with. However scripts violating these flags may still be present in valid
|
||||
@@ -66,8 +68,10 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason, const bool witnes
|
||||
*/
|
||||
bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
|
||||
|
||||
extern unsigned int nBytesPerSigOp;
|
||||
|
||||
/** Compute the virtual transaction size (weight reinterpreted as bytes). */
|
||||
int64_t GetVirtualTransactionSize(int64_t nWeight);
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx);
|
||||
int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost);
|
||||
int64_t GetVirtualTransactionSize(const CTransaction& tx, int64_t nSigOpCost = 0);
|
||||
|
||||
#endif // BITCOIN_POLICY_POLICY_H
|
||||
|
||||
Reference in New Issue
Block a user