txscript: Add benchmarks for IsMutlsigScript.
This commit is contained in:
parent
69aefa65e6
commit
a6244b516d
2 changed files with 66 additions and 0 deletions
|
@ -174,3 +174,48 @@ func BenchmarkIsPayToScriptHash(b *testing.B) {
|
||||||
_ = IsPayToScriptHash(script)
|
_ = IsPayToScriptHash(script)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BenchmarkIsMultisigScriptLarge benchmarks how long it takes IsMultisigScript
|
||||||
|
// to analyze a very large script.
|
||||||
|
func BenchmarkIsMultisigScriptLarge(b *testing.B) {
|
||||||
|
script, err := genComplexScript()
|
||||||
|
if err != nil {
|
||||||
|
b.Fatalf("failed to create benchmark script: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
b.ReportAllocs()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
isMultisig, err := IsMultisigScript(script)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if isMultisig {
|
||||||
|
b.Fatalf("script should NOT be reported as mutisig script")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BenchmarkIsMultisigScript benchmarks how long it takes IsMultisigScript to
|
||||||
|
// analyze a 1-of-2 multisig public key script.
|
||||||
|
func BenchmarkIsMultisigScript(b *testing.B) {
|
||||||
|
multisigShortForm := "1 " +
|
||||||
|
"DATA_33 " +
|
||||||
|
"0x030478aaaa2be30772f1e69e581610f1840b3cf2fe7228ee0281cd599e5746f81e " +
|
||||||
|
"DATA_33 " +
|
||||||
|
"0x0284f4d078b236a9ff91661f8ffbe012737cd3507566f30fd97d25f2b23539f3cd " +
|
||||||
|
"2 CHECKMULTISIG"
|
||||||
|
pkScript := mustParseShortForm(multisigShortForm)
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
b.ReportAllocs()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
isMultisig, err := IsMultisigScript(pkScript)
|
||||||
|
if err != nil {
|
||||||
|
b.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if !isMultisig {
|
||||||
|
b.Fatalf("script should be reported as a mutisig script")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -248,6 +248,27 @@ func isMultiSig(pops []parsedOpcode) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsMultisigScript returns whether or not the passed script is a standard
|
||||||
|
// multisignature script.
|
||||||
|
//
|
||||||
|
// NOTE: This function is only valid for version 0 scripts. Since the function
|
||||||
|
// does not accept a script version, the results are undefined for other script
|
||||||
|
// versions.
|
||||||
|
//
|
||||||
|
// The error is DEPRECATED and will be removed in the major version bump.
|
||||||
|
func IsMultisigScript(script []byte) (bool, error) {
|
||||||
|
if len(script) == 0 || script == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
pops, err := parseScript(script)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return isMultiSig(pops), nil
|
||||||
|
}
|
||||||
|
|
||||||
// isNullData returns true if the passed script is a null data transaction,
|
// isNullData returns true if the passed script is a null data transaction,
|
||||||
// false otherwise.
|
// false otherwise.
|
||||||
func isNullData(pops []parsedOpcode) bool {
|
func isNullData(pops []parsedOpcode) bool {
|
||||||
|
|
Loading…
Reference in a new issue