Description de l'étiquette algeria
Le numéro 20 semble provenir de ce commit : 8c9479c6bbbc38b897dc97de9d04e4d5a5a36730
, également étiquetés comme v0.3.12
, qui a introduit le terme de "SigOps". Malheureusement, je ne vois aucune mention de ce changement dans le message de commit lui-même, ou dans cette version de la note de version, et il n'y a pas de documentation.
Nous voyons que les deux une limite d'un nombre maximum de sigops dans un bloc a été établie :
static const int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50;
et une manière de les compter :
int GetSigOpCount() const
{
int n = 0;
const_iterator pc = begin();
while (pc < end())
{
opcodetype opcode;
if (!GetOp(pc, opcode))
break;
si (opcode == OP_CHECKSIG || opcode == OP_CHECKSIGVERIFY)
n++;
else if (opcode == OP_CHECKMULTISIG || opcode == OP_CHECKMULTISIGVERIFY)
n += 20;
}
return n;
}
Et les règles sont toujours les mêmes, spécifiquement pour les nus multisig scripts (ceux qui ne sont pas imbriqués dans p2sh
ou p2wsh
). Un nu - CHECKMULTISIG
opération est toujours compté comme 20 sigops (aujourd'hui 80, avec le témoignage le facteur d'échelle), afin de permettre à quelque chose de plus de 20 checksigs dans CHECKMULTISIG
infirmeront cette hypothèse et fera en sorte de créer des blocs avec plus de maximale autorisée sigops possible.
Les règles sont moins strictes pour p2sh\p2wsh scripts. Si l'opcode juste avant CHECKMULTISIG
est dans l'intervalle [OP_1, OP_16]
, alors que le nombre est compté comme étant le sigops pour la multisig de vérification, avec quoi que ce soit compté comme 20. Dans la pratique, 15 est le maximum de pubkeys vous pouvez pousser comme un p2sh script en raison de l'520 octets pousser la limite, mais pour p2wsh, un exemple de 17 de 20 ressemblerait à :
0x01 0x11 <pubkey1> <pubkey2> ... <pubkey 20> 0x01 0x14 CHECKMULTISIG