BSHA3  0.17.99
P2P Blockchain, based on Bitcoin
Functions | Variables
policy.cpp File Reference
#include <policy/policy.h>
#include <consensus/validation.h>
#include <validation.h>
#include <coins.h>
#include <tinyformat.h>
#include <util.h>
#include <utilstrencodings.h>
Include dependency graph for policy.cpp:

Go to the source code of this file.

Functions

CAmount GetDustThreshold (const CTxOut &txout, const CFeeRate &dustRelayFeeIn)
 
bool IsDust (const CTxOut &txout, const CFeeRate &dustRelayFeeIn)
 
bool IsStandard (const CScript &scriptPubKey, txnouttype &whichType)
 
bool IsStandardTx (const CTransaction &tx, std::string &reason)
 Check for standard transaction types. More...
 
bool AreInputsStandard (const CTransaction &tx, const CCoinsViewCache &mapInputs)
 Check transaction inputs to mitigate two potential denial-of-service attacks: More...
 
bool IsWitnessStandard (const CTransaction &tx, const CCoinsViewCache &mapInputs)
 Check if the transaction is over standard P2WSH resources limit: 3600bytes witnessScript size, 80bytes per witness stack element, 100 witness stack elements These limits are adequate for multi-signature up to n-of-100 using OP_CHECKSIG, OP_ADD, and OP_EQUAL,. More...
 
int64_t GetVirtualTransactionSize (int64_t nWeight, int64_t nSigOpCost)
 Compute the virtual transaction size (weight reinterpreted as bytes). More...
 
int64_t GetVirtualTransactionSize (const CTransaction &tx, int64_t nSigOpCost)
 
int64_t GetVirtualTransactionInputSize (const CTxIn &txin, int64_t nSigOpCost)
 

Variables

CFeeRate incrementalRelayFee = CFeeRate(DEFAULT_INCREMENTAL_RELAY_FEE)
 
CFeeRate dustRelayFee = CFeeRate(DUST_RELAY_TX_FEE)
 
unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP
 

Function Documentation

◆ AreInputsStandard()

bool AreInputsStandard ( const CTransaction tx,
const CCoinsViewCache mapInputs 
)

Check transaction inputs to mitigate two potential denial-of-service attacks:

Check for standard transaction types.

  1. scriptSigs with extra data stuffed into them, not consumed by scriptPubKey (or P2SH script)
  2. P2SH scripts with a crazy number of expensive CHECKSIG/CHECKMULTISIG operations

Why bother? To avoid denial-of-service attacks; an attacker can submit a standard HASH... OP_EQUAL transaction, which will get accepted into blocks. The redemption script can be anything; an attacker could use a very expensive-to-check-upon-redemption script like: DUP CHECKSIG DROP ... repeated 100 times... OP_1

Definition at line 160 of file policy.cpp.

Here is the call graph for this function:

◆ GetDustThreshold()

CAmount GetDustThreshold ( const CTxOut txout,
const CFeeRate dustRelayFeeIn 
)

Definition at line 18 of file policy.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetVirtualTransactionInputSize()

int64_t GetVirtualTransactionInputSize ( const CTxIn txin,
int64_t  nSigOpCost 
)

Definition at line 256 of file policy.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetVirtualTransactionSize() [1/2]

int64_t GetVirtualTransactionSize ( int64_t  nWeight,
int64_t  nSigOpCost 
)

Compute the virtual transaction size (weight reinterpreted as bytes).

Definition at line 246 of file policy.cpp.

Here is the caller graph for this function:

◆ GetVirtualTransactionSize() [2/2]

int64_t GetVirtualTransactionSize ( const CTransaction tx,
int64_t  nSigOpCost 
)

Definition at line 251 of file policy.cpp.

Here is the call graph for this function:

◆ IsDust()

bool IsDust ( const CTxOut txout,
const CFeeRate dustRelayFeeIn 
)

Definition at line 52 of file policy.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsStandard()

bool IsStandard ( const CScript scriptPubKey,
txnouttype whichType 
)

Definition at line 57 of file policy.cpp.

Here is the call graph for this function:

◆ IsStandardTx()

bool IsStandardTx ( const CTransaction tx,
std::string &  reason 
)

Check for standard transaction types.

Returns
True if all outputs (scriptPubKeys) use only standard transaction forms

Definition at line 80 of file policy.cpp.

◆ IsWitnessStandard()

bool IsWitnessStandard ( const CTransaction tx,
const CCoinsViewCache mapInputs 
)

Check if the transaction is over standard P2WSH resources limit: 3600bytes witnessScript size, 80bytes per witness stack element, 100 witness stack elements These limits are adequate for multi-signature up to n-of-100 using OP_CHECKSIG, OP_ADD, and OP_EQUAL,.

Definition at line 190 of file policy.cpp.

Here is the call graph for this function:

Variable Documentation

◆ dustRelayFee

CFeeRate dustRelayFee = CFeeRate(DUST_RELAY_TX_FEE)

Definition at line 243 of file policy.cpp.

◆ incrementalRelayFee

CFeeRate incrementalRelayFee = CFeeRate(DEFAULT_INCREMENTAL_RELAY_FEE)

Definition at line 242 of file policy.cpp.

◆ nBytesPerSigOp

unsigned int nBytesPerSigOp = DEFAULT_BYTES_PER_SIGOP

Definition at line 244 of file policy.cpp.