mirror of
https://github.com/kaspanet/kaspad.git
synced 2026-03-07 01:21:44 +00:00
txscript: Implement ScriptVerifyNullFail
ScriptVerifyNullFail defines that signatures must be empty if a CHECKSIG or CHECKMULTISIG operation fails. This commit also enables ScriptVerifyNullFail at the mempool policy level.
This commit is contained in:
@@ -2084,6 +2084,11 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error {
|
||||
valid = signature.Verify(hash, pubKey)
|
||||
}
|
||||
|
||||
if !valid && vm.hasFlag(ScriptVerifyNullFail) && len(sigBytes) > 0 {
|
||||
str := "signature not empty on failed checksig"
|
||||
return scriptError(ErrNullFail, str)
|
||||
}
|
||||
|
||||
vm.dstack.PushBool(valid)
|
||||
return nil
|
||||
}
|
||||
@@ -2318,6 +2323,15 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error {
|
||||
}
|
||||
}
|
||||
|
||||
if !success && vm.hasFlag(ScriptVerifyNullFail) {
|
||||
for _, sig := range signatures {
|
||||
if len(sig.signature) > 0 {
|
||||
str := "not all signatures empty on failed checkmultisig"
|
||||
return scriptError(ErrNullFail, str)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vm.dstack.PushBool(success)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user