BIP-0147
Proposition incluse dans le soft fork SegWit visant à résoudre un vecteur de malléabilité lié à l’élément fictif (« dummy element ») consommé par les opérations OP_CHECKMULTISIG et OP_CHECKMULTISIGVERIFY. En raison d’un bug off-by-one historique (erreur de décalage unitaire), ces 2 opcodes suppriment un élément supplémentaire sur la pile en plus de leur fonction de base. Pour éviter une erreur, il est donc obligatoire d’inclure une valeur factice au début du scriptSig afin de satisfaire la suppression et outrepasser le bug. Cette valeur est inutile, mais elle doit forcément être là pour que le script soit valide. Le BIP-0011, qui a introduit le standard P2MS, conseillait de mettre un OP_0 comme valeur inutile. Mais ce standard n’était pas imposé au niveau des règles de consensus, ce qui veut dire que n’importe quelle valeur pouvait y être placée, sans invalider la transaction. C’est en ça que OP_CHECKMULTISIG et OP_CHECKMULTISIGVERIFY contenaient un vecteur de malléabilité. Le BIP-0147 introduit une nouvelle règle de consensus, désignée sous le nom de NULLDUMMY, exigeant que cet élément fictif soit un tableau d’octets vide (OP_0). Toute autre valeur entraîne l’échec immédiat de l’évaluation du script. Cette modification s’applique aux scripts pré-SegWit ainsi qu’aux scripts P2WSH et nécessitait un soft fork.