Merge #20497: [Refactor] Add MAX_STANDARD_SCRIPTSIG_SIZE to policy

e416cfc92bf51f6fd088ab61c2306c5e73877dd0 Add MAX_STANDARD_SCRIPTSIG_SIZE to policy (sanket1729)

Pull request description:

  Bitcoin core has a standardness rule for max satisfaction script sig size.
  This PR adds to the policy header file so that it is documented along with
  along policy rules. The initial reasoning that 1650 is an implicit
  limit(would not reach assuming all other policy rules are being
  followed) is outdated.

  As we now know, bitcoin transactions can have spend conditions are more than
  just signatures and there may exist p2sh transactions involving 100 byte
  preimages that maybe non-standard because of this rule. Because this
  rule is no longer implicit, we should explicitly document it in policy
  header file

ACKs for top commit:
  sipa:
    utACK e416cfc92bf51f6fd088ab61c2306c5e73877dd0
  practicalswift:
    cr ACK e416cfc92bf51f6fd088ab61c2306c5e73877dd0
  theStack:
    Code Review ACK e416cfc92bf51f6fd088ab61c2306c5e73877dd0

Tree-SHA512: 1a91ee23dfb6085807e04dd0687d7a443e0f3e0f52d0a995a6599dff28533b0b599afba2724735d93948a64a3e25d0bc016ce3e771c0bd453eef78b22dc2369d
This commit is contained in:
MarcoFalke 2020-11-27 10:59:14 +01:00 committed by Vijay Das Manikpuri
parent 331991b0d0
commit a9fb349c25
No known key found for this signature in database
GPG Key ID: DB1D81B01DB7C46E
2 changed files with 11 additions and 8 deletions

View File

@ -76,14 +76,15 @@ bool IsStandardTx(const CTransaction& tx, bool permit_bare_multisig, const CFeeR
for (const CTxIn& txin : tx.vin) for (const CTxIn& txin : tx.vin)
{ {
// Biggest 'standard' txin is a 15-of-15 P2SH multisig with compressed // Biggest 'standard' txin involving only keys is a 15-of-15 P2SH
// keys (remember the 520 byte limit on redeemScript size). That works // multisig with compressed keys (remember the 520 byte limit on
// out to a (15*(33+1))+3=513 byte redeemScript, 513+1+15*(73+1)+3=1627 // redeemScript size). That works out to a (15*(33+1))+3=513 byte
// bytes of scriptSig, which we round off to 1650 bytes for some minor // redeemScript, 513+1+15*(73+1)+3=1627 bytes of scriptSig, which
// future-proofing. That's also enough to spend a 20-of-20 // we round off to 1650(MAX_STANDARD_SCRIPTSIG_SIZE) bytes for
// CHECKMULTISIG scriptPubKey, though such a scriptPubKey is not // some minor future-proofing. That's also enough to spend a
// considered standard. // 20-of-20 CHECKMULTISIG scriptPubKey, though such a scriptPubKey
if (txin.scriptSig.size() > 1650) { // is not considered standard.
if (txin.scriptSig.size() > MAX_STANDARD_SCRIPTSIG_SIZE) {
reason = "scriptsig-size"; reason = "scriptsig-size";
return false; return false;
} }

View File

@ -36,6 +36,8 @@ static const unsigned int DEFAULT_INCREMENTAL_RELAY_FEE = 1000;
static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20; static const unsigned int DEFAULT_BYTES_PER_SIGOP = 20;
/** Default for -permitbaremultisig */ /** Default for -permitbaremultisig */
static const bool DEFAULT_PERMIT_BAREMULTISIG = true; static const bool DEFAULT_PERMIT_BAREMULTISIG = true;
/** The maximum size of a standard ScriptSig */
static const unsigned int MAX_STANDARD_SCRIPTSIG_SIZE = 1650;
/** Min feerate for defining dust. Historically this has been based on the /** Min feerate for defining dust. Historically this has been based on the
* minRelayTxFee, however changing the dust limit changes which transactions are * minRelayTxFee, however changing the dust limit changes which transactions are
* standard and should be done with care and ideally rarely. It makes sense to * standard and should be done with care and ideally rarely. It makes sense to