Fix reversed test bug with the max operations handling

We were counting the number of push ops instead of the number of non
push ops.  Add tests that found this (checking tha the max operations
check fires).
This commit is contained in:
Owain G. Ainsworth 2013-06-20 00:30:34 +01:00
parent 8035de426b
commit bac455cdd2
3 changed files with 454 additions and 35 deletions

View file

@ -654,7 +654,7 @@ func (pop *parsedOpcode) exec(s *Script) error {
// *sigh* bitcoind pretty much mandates that we violate layering here.
// Any opcode that isn't just adding data to the stack counts here
// as an operation.
if pop.opcode.value < OP_16 {
if pop.opcode.value > OP_16 {
s.numOps++
if s.numOps > MaxOpsPerScript {
return StackErrTooManyOperations

View file

@ -2400,6 +2400,425 @@ var detailedTests = []detailedTest{
expectedReturn: btcscript.StackErrVerifyFailed,
disassembly: "OP_1 304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901 OP_1 OP_1 OP_1 OP_CHECKMULTISIGVERIFY",
},
{
// 201 operations + one push, should just fit limits
name: "max operations",
script: []byte{btcscript.OP_1,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
},
after: [][]byte{{1}, {1}},
disassembly: "OP_1 OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP",
},
{
// 202 operations + one push
name: "too many operations",
script: []byte{btcscript.OP_1,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
btcscript.OP_DUP,
btcscript.OP_DROP,
},
expectedReturn: btcscript.StackErrTooManyOperations,
disassembly: "OP_1 OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP OP_DUP OP_DROP",
},
{
name: "OP_CAT disabled",
script: []byte{btcscript.OP_CAT},

View file

@ -2,55 +2,56 @@
github.com/conformal/btcscript/stack.go asInt 100.00% (18/18)
github.com/conformal/btcscript/stack.go fromInt 100.00% (14/14)
github.com/conformal/btcscript/opcode.go opcodeWithin 100.00% (13/13)
github.com/conformal/btcscript/opcode.go parsedOpcode.bytes 100.00% (12/12)
github.com/conformal/btcscript/stack.go Stack.nipN 100.00% (12/12)
github.com/conformal/btcscript/opcode.go parsedOpcode.print 100.00% (12/12)
github.com/conformal/btcscript/opcode.go parsedOpcode.bytes 100.00% (12/12)
github.com/conformal/btcscript/opcode.go opcodeNotIf 100.00% (11/11)
github.com/conformal/btcscript/opcode.go opcodeIf 100.00% (11/11)
github.com/conformal/btcscript/opcode.go opcodeNotIf 100.00% (11/11)
github.com/conformal/btcscript/opcode.go opcodeLessThanOrEqual 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeGreaterThan 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeLessThan 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeNumNotEqual 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeBoolOr 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeBoolAnd 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeMin 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeNumEqual 100.00% (10/10)
github.com/conformal/btcscript/stack.go Stack.Tuck 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeMax 100.00% (10/10)
github.com/conformal/btcscript/stack.go Stack.Tuck 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeMin 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeGreaterThanOrEqual 100.00% (10/10)
github.com/conformal/btcscript/opcode.go opcodeLessThanOrEqual 100.00% (10/10)
github.com/conformal/btcscript/stack.go Stack.OverN 100.00% (9/9)
github.com/conformal/btcscript/script.go DisasmString 100.00% (9/9)
github.com/conformal/btcscript/stack.go Stack.RotN 100.00% (9/9)
github.com/conformal/btcscript/script.go DisasmString 100.00% (9/9)
github.com/conformal/btcscript/stack.go Stack.SwapN 100.00% (9/9)
github.com/conformal/btcscript/stack.go Stack.OverN 100.00% (9/9)
github.com/conformal/btcscript/opcode.go opcodeEqual 100.00% (8/8)
github.com/conformal/btcscript/opcode.go opcodeAdd 100.00% (8/8)
github.com/conformal/btcscript/opcode.go opcodeSub 100.00% (8/8)
github.com/conformal/btcscript/stack.go Stack.DupN 100.00% (8/8)
github.com/conformal/btcscript/opcode.go opcodeAdd 100.00% (8/8)
github.com/conformal/btcscript/opcode.go opcodePick 100.00% (7/7)
github.com/conformal/btcscript/opcode.go opcodeRoll 100.00% (7/7)
github.com/conformal/btcscript/stack.go Stack.DropN 100.00% (7/7)
github.com/conformal/btcscript/opcode.go opcodeNot 100.00% (7/7)
github.com/conformal/btcscript/stack.go Stack.DropN 100.00% (7/7)
github.com/conformal/btcscript/opcode.go opcode0NotEqual 100.00% (7/7)
github.com/conformal/btcscript/opcode.go parsedOpcode.conditional 100.00% (6/6)
github.com/conformal/btcscript/opcode.go opcodeIfDup 100.00% (6/6)
github.com/conformal/btcscript/opcode.go opcodeVerify 100.00% (6/6)
github.com/conformal/btcscript/opcode.go opcodeRoll 100.00% (7/7)
github.com/conformal/btcscript/opcode.go opcodeElse 100.00% (6/6)
github.com/conformal/btcscript/opcode.go opcodeHash160 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeIfDup 100.00% (6/6)
github.com/conformal/btcscript/opcode.go parsedOpcode.conditional 100.00% (6/6)
github.com/conformal/btcscript/opcode.go opcodeVerify 100.00% (6/6)
github.com/conformal/btcscript/opcode.go opcodeHash256 100.00% (5/5)
github.com/conformal/btcscript/script.go removeOpcode 100.00% (5/5)
github.com/conformal/btcscript/script.go removeOpcodeByData 100.00% (5/5)
github.com/conformal/btcscript/stack.go Stack.PickN 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeAbs 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeHash256 100.00% (5/5)
github.com/conformal/btcscript/opcode.go parsedOpcode.exec 100.00% (5/5)
github.com/conformal/btcscript/stack.go Stack.RollN 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeToAltStack 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeFromAltStack 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeSha256 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeRipemd160 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeNegate 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeSha256 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeSize 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeHash160 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeAbs 100.00% (5/5)
github.com/conformal/btcscript/script.go Script.validPC 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcode1Add 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcode1Sub 100.00% (5/5)
github.com/conformal/btcscript/stack.go Stack.RollN 100.00% (5/5)
github.com/conformal/btcscript/opcode.go opcodeSize 100.00% (5/5)
github.com/conformal/btcscript/stack.go Stack.PeekBool 100.00% (4/4)
github.com/conformal/btcscript/opcode.go opcodeEndif 100.00% (4/4)
github.com/conformal/btcscript/opcode.go opcodeEqualVerify 100.00% (4/4)
@ -65,38 +66,35 @@ github.com/conformal/btcscript/script.go unparseScript 100.00% (4/4)
github.com/conformal/btcscript/script.go Script.curPC 100.00% (4/4)
github.com/conformal/btcscript/script.go Script.DisasmPC 100.00% (4/4)
github.com/conformal/btcscript/script.go getStack 100.00% (4/4)
github.com/conformal/btcscript/address.go ScriptType.String 100.00% (3/3)
github.com/conformal/btcscript/stack.go fromBool 100.00% (3/3)
github.com/conformal/btcscript/script.go scriptUInt32 100.00% (3/3)
github.com/conformal/btcscript/script.go scriptUInt8 100.00% (3/3)
github.com/conformal/btcscript/script.go setStack 100.00% (3/3)
github.com/conformal/btcscript/address.go ScriptType.String 100.00% (3/3)
github.com/conformal/btcscript/script.go scriptUInt16 100.00% (3/3)
github.com/conformal/btcscript/script.go setStack 100.00% (3/3)
github.com/conformal/btcscript/script.go scriptUInt8 100.00% (3/3)
github.com/conformal/btcscript/script.go scriptUInt32 100.00% (3/3)
github.com/conformal/btcscript/stack.go Stack.NipN 100.00% (2/2)
github.com/conformal/btcscript/stack.go Stack.Depth 100.00% (2/2)
github.com/conformal/btcscript/opcode.go calcHash 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcodeFalse 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcodeDepth 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcode1Negate 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcodeN 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcodeCodeSeparator 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcode1Negate 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcodeFalse 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcodePushData 100.00% (2/2)
github.com/conformal/btcscript/opcode.go opcode2Rot 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeNop 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode3Dup 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Dup 100.00% (1/1)
github.com/conformal/btcscript/opcode.go calcHash160 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Dup 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Drop 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeReturn 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeNop 100.00% (1/1)
github.com/conformal/btcscript/stack.go Stack.PushByteArray 100.00% (1/1)
github.com/conformal/btcscript/stack.go Stack.PushInt 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Over 100.00% (1/1)
github.com/conformal/btcscript/stack.go Stack.PopByteArray 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeInvalid 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeReserved 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeDisabled 100.00% (1/1)
github.com/conformal/btcscript/script.go isPubkey 100.00% (1/1)
github.com/conformal/btcscript/opcode.go init 100.00% (1/1)
github.com/conformal/btcscript/script.go Script.subScript 100.00% (1/1)
github.com/conformal/btcscript/log.go UseLogger 100.00% (1/1)
github.com/conformal/btcscript/script.go Script.SetStack 100.00% (1/1)
github.com/conformal/btcscript/script.go isPubkeyHash 100.00% (1/1)
github.com/conformal/btcscript/script.go isScriptHash 100.00% (1/1)
@ -113,10 +111,13 @@ github.com/conformal/btcscript/opcode.go opcodeNip 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeDup 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeDrop 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Swap 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Rot 100.00% (1/1)
github.com/conformal/btcscript/script.go Script.GetStack 100.00% (1/1)
github.com/conformal/btcscript/log.go newLogClosure 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcode2Over 100.00% (1/1)
github.com/conformal/btcscript/script.go isPubkey 100.00% (1/1)
github.com/conformal/btcscript/stack.go Stack.PushBool 100.00% (1/1)
github.com/conformal/btcscript/script.go Script.subScript 100.00% (1/1)
github.com/conformal/btcscript/log.go UseLogger 100.00% (1/1)
github.com/conformal/btcscript/opcode.go opcodeCheckMultiSig 96.43% (54/56)
github.com/conformal/btcscript/opcode.go opcodeCheckSig 96.15% (25/26)
github.com/conformal/btcscript/script.go NewScript 95.24% (20/21)
@ -125,7 +126,6 @@ github.com/conformal/btcscript/script.go parseScript 93.75% (30/32)
github.com/conformal/btcscript/script.go Script.Step 91.89% (34/37)
github.com/conformal/btcscript/script.go typeOfScript 83.33% (5/6)
github.com/conformal/btcscript/script.go Script.DisasmScript 80.00% (4/5)
github.com/conformal/btcscript/opcode.go parsedOpcode.exec 80.00% (4/5)
github.com/conformal/btcscript/script.go isPushOnly 75.00% (3/4)
github.com/conformal/btcscript/opcode.go opcodeCheckSigVerify 75.00% (3/4)
github.com/conformal/btcscript/script.go Script.calcScriptHash 71.43% (25/35)
@ -135,5 +135,5 @@ github.com/conformal/btcscript/opcode.go opcodeSha1 60.00% (3/5)
github.com/conformal/btcscript/script.go Script.Execute 44.44% (8/18)
github.com/conformal/btcscript/log.go SetLogWriter 0.00% (0/7)
github.com/conformal/btcscript/log.go logClosure.String 0.00% (0/1)
github.com/conformal/btcscript -------------------------- 93.76% (841/897)
github.com/conformal/btcscript -------------------------- 93.87% (842/897)