Increase IsStandard() scriptSig length

Removes the limits on number of pubkeys for P2SH CHECKMULTISIG outputs.
Previously with the 500 byte scriptSig limit there were odd restrictions
where even a 1-of-12 P2SH could be spent in a standard transaction(1),
yet multisig scriptPubKey's requiring more signatures quickly ran out of
scriptSig space.

From a "stuff-data-in-the-blockchain" point of view not much has changed
as with the prior commit now only allowing the dummy value to be null
the newly allowed scriptSig space can only be used for signatures. In
any case, just using more outputs is trivial and doesn't cost much.

1) See 779b519480d8c5346de6e635119c7ee772e97ec872240c45e558f582a37b4b73
   Mined by BTC Guild.
This commit is contained in:
Peter Todd 2014-03-10 16:38:44 -04:00
parent f80cffa213
commit 4d79098ad5

View File

@ -515,10 +515,14 @@ bool IsStandardTx(const CTransaction& tx, string& reason)
BOOST_FOREACH(const CTxIn& txin, tx.vin) BOOST_FOREACH(const CTxIn& txin, tx.vin)
{ {
// Biggest 'standard' txin is a 3-signature 3-of-3 CHECKMULTISIG // Biggest 'standard' txin is a 15-of-15 P2SH multisig with compressed
// pay-to-script-hash, which is 3 ~80-byte signatures, 3 // keys. (remember the 520 byte limit on redeemScript size) That works
// ~65-byte public keys, plus a few script ops. // out to a (15*(33+1))+3=513 byte redeemScript, 513+1+15*(73+1)=1624
if (txin.scriptSig.size() > 500) { // bytes of scriptSig, which we round off to 1650 bytes for some minor
// future-proofing. That's also enough to spend a 20-of-20
// CHECKMULTISIG scriptPubKey, though such a scriptPubKey is not
// considered standard)
if (txin.scriptSig.size() > 1650) {
reason = "scriptsig-size"; reason = "scriptsig-size";
return false; return false;
} }