diff --git a/opcode.go b/opcode.go index 1617aa86..e36821a3 100644 --- a/opcode.go +++ b/opcode.go @@ -9,6 +9,7 @@ import ( "crypto/ecdsa" "crypto/sha1" "encoding/binary" + "encoding/hex" "fmt" "hash" "math/big" @@ -17,7 +18,6 @@ import ( "github.com/conformal/btcec" "github.com/conformal/btcwire" "github.com/conformal/fastsha256" - "github.com/davecgh/go-spew/spew" ) // An opcode defines the information related to a btcscript opcode. @@ -1802,10 +1802,15 @@ func opcodeCheckSig(op *parsedOpcode, s *Script) error { } log.Tracef("%v", newLogClosure(func() string { - return fmt.Sprintf("op_checksig pubKey %v\npk.x: %v\n "+ - "pk.y: %v\n r: %v\n s: %v\ncheckScriptHash %v", - spew.Sdump(pkStr), pubKey.X, pubKey.Y, - signature.R, signature.S, spew.Sdump(hash)) + return fmt.Sprintf("op_checksig\n"+ + "pubKey:\n%v"+ + "pubKey.X: %v\n"+ + "pubKey.Y: %v\n"+ + "signature.R: %v\n"+ + "signature.S: %v\n"+ + "checkScriptHash:\n%v", + hex.Dump(pkStr), pubKey.X, pubKey.Y, + signature.R, signature.S, hex.Dump(hash)) })) ok := ecdsa.Verify(pubKey.ToECDSA(), hash, signature.R, signature.S) s.dstack.PushBool(ok) diff --git a/opcode_test.go b/opcode_test.go index 024f6323..d36b2b1d 100644 --- a/opcode_test.go +++ b/opcode_test.go @@ -10,7 +10,6 @@ import ( "github.com/conformal/btcscript" "github.com/conformal/btcwire" - "github.com/davecgh/go-spew/spew" ) // test scripts to test as many opcodes as possible. @@ -4364,14 +4363,13 @@ func testOpcode(t *testing.T, test *detailedTest) { after := engine.GetStack() if !stacksEqual(after, test.after) { - t.Errorf("Stacks not equal after %s:\ngot: %v\n exp: %v", - test.name, spew.Sdump(after), spew.Sdump(test.after)) + t.Errorf("Stacks not equal after %s:\ngot:\n%vexp:\n%v", + test.name, after, test.after) } altafter := engine.GetAltStack() if !stacksEqual(altafter, test.altafter) { - t.Errorf("AltStacks not equal after %s:\n got: %v\nexp: %v", - test.name, spew.Sdump(altafter), - spew.Sdump(test.altafter)) + t.Errorf("AltStacks not equal after %s:\n got:\n%vexp:\n%v", + test.name, altafter, test.altafter) } } diff --git a/script.go b/script.go index 099ef7b7..e77a70d5 100644 --- a/script.go +++ b/script.go @@ -18,7 +18,6 @@ import ( "github.com/conformal/btcnet" "github.com/conformal/btcutil" "github.com/conformal/btcwire" - "github.com/davecgh/go-spew/spew" ) var ( @@ -589,10 +588,10 @@ func (s *Script) Execute() (err error) { // if we're tracing, dump the stacks. if s.dstack.Depth() != 0 { - dstr = "Stack\n" + spew.Sdump(s.dstack) + dstr = "Stack:\n" + s.dstack.String() } if s.astack.Depth() != 0 { - astr = "AltStack\n" + spew.Sdump(s.astack) + astr = "AltStack:\n" + s.astack.String() } return dstr + astr diff --git a/stack.go b/stack.go index f2c96c5f..ab82ac6a 100644 --- a/stack.go +++ b/stack.go @@ -5,6 +5,7 @@ package btcscript import ( + "encoding/hex" "math/big" ) @@ -355,3 +356,14 @@ func (s *Stack) RollN(n int) error { return nil } + +// String returns the stack in a readable format. +func (s *Stack) String() string { + var result string + + for _, stack := range s.stk { + result += hex.Dump(stack) + } + + return result +} diff --git a/test_coverage.txt b/test_coverage.txt index efe0cb10..dcc570f4 100644 --- a/test_coverage.txt +++ b/test_coverage.txt @@ -1,9 +1,8 @@ -github.com/conformal/btcscript/opcode.go opcodeCheckMultiSig 100.00% (62/62) github.com/conformal/btcscript/script.go calcScriptHash 100.00% (39/39) github.com/conformal/btcscript/script.go Script.Step 100.00% (37/37) -github.com/conformal/btcscript/opcode.go opcodeCheckSig 100.00% (29/29) github.com/conformal/btcscript/script.go parseScriptTemplate 100.00% (29/29) +github.com/conformal/btcscript/opcode.go opcodeCheckSig 100.00% (29/29) github.com/conformal/btcscript/address.go ExtractPkScriptAddrs 100.00% (27/27) github.com/conformal/btcscript/script.go NewScript 100.00% (25/25) github.com/conformal/btcscript/script.go CalcScriptInfo 100.00% (25/25) @@ -18,12 +17,12 @@ github.com/conformal/btcscript/opcode.go parsedOpcode.exec 100.00% (13/13) github.com/conformal/btcscript/script.go GetPreciseSigOpCount 100.00% (13/13) github.com/conformal/btcscript/opcode.go opcodeWithin 100.00% (13/13) github.com/conformal/btcscript/script.go isMultiSig 100.00% (13/13) -github.com/conformal/btcscript/script.go PayToAddrScript 100.00% (11/11) -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/script.go PayToAddrScript 100.00% (11/11) github.com/conformal/btcscript/script.go typeOfScript 100.00% (11/11) github.com/conformal/btcscript/opcode.go opcodeMin 100.00% (10/10) -github.com\conformal\btcscript/log.go SetLogWriter 100.00% (10/10) +github.com/conformal/btcscript/log.go SetLogWriter 100.00% (10/10) github.com/conformal/btcscript/opcode.go opcodeBoolAnd 100.00% (10/10) github.com/conformal/btcscript/opcode.go opcodeBoolOr 100.00% (10/10) github.com/conformal/btcscript/opcode.go opcodeNumEqual 100.00% (10/10) @@ -36,50 +35,50 @@ github.com/conformal/btcscript/opcode.go opcodeMax 100.00% (10/10) github.com/conformal/btcscript/script.go getSigOpCount 100.00% (10/10) github.com/conformal/btcscript/script.go PushedData 100.00% (10/10) github.com/conformal/btcscript/stack.go Stack.Tuck 100.00% (10/10) -github.com/conformal/btcscript/script.go SignatureScript 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 Script.CheckErrorCondition 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/script.go CalcMultiSigStats 100.00% (8/8) +github.com/conformal/btcscript/script.go DisasmString 100.00% (9/9) +github.com/conformal/btcscript/script.go Script.CheckErrorCondition 100.00% (9/9) +github.com/conformal/btcscript/stack.go Stack.RotN 100.00% (9/9) +github.com/conformal/btcscript/script.go SignatureScript 100.00% (9/9) +github.com/conformal/btcscript/stack.go Stack.SwapN 100.00% (9/9) +github.com/conformal/btcscript/opcode.go opcodeEqual 100.00% (8/8) github.com/conformal/btcscript/script.go Script.Execute 100.00% (8/8) +github.com/conformal/btcscript/script.go CalcMultiSigStats 100.00% (8/8) +github.com/conformal/btcscript/opcode.go opcodeSub 100.00% (8/8) github.com/conformal/btcscript/script.go MultiSigScript 100.00% (8/8) github.com/conformal/btcscript/opcode.go opcodeAdd 100.00% (8/8) github.com/conformal/btcscript/stack.go Stack.DupN 100.00% (8/8) -github.com/conformal/btcscript/opcode.go opcodeSub 100.00% (8/8) -github.com/conformal/btcscript/opcode.go opcodeEqual 100.00% (8/8) -github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.AddInt64 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/opcode.go opcode0NotEqual 100.00% (7/7) github.com/conformal/btcscript/script.go HasCanonicalPushes 100.00% (7/7) github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.AddUint64 100.00% (7/7) +github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.AddInt64 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/opcode.go opcodeEndif 100.00% (6/6) +github.com/conformal/btcscript/opcode.go opcodeElse 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 parsedOpcode.conditional 100.00% (6/6) -github.com/conformal/btcscript/opcode.go opcodeEndif 100.00% (6/6) -github.com/conformal/btcscript/opcode.go opcodeElse 100.00% (6/6) -github.com/conformal/btcscript/opcode.go opcodeAbs 100.00% (5/5) -github.com/conformal/btcscript/opcode.go opcodePick 100.00% (5/5) -github.com/conformal/btcscript/opcode.go opcodeRoll 100.00% (5/5) -github.com/conformal/btcscript/stack.go Stack.PickN 100.00% (5/5) -github.com/conformal/btcscript/opcode.go opcodeSize 100.00% (5/5) -github.com/conformal/btcscript/opcode.go opcodeFromAltStack 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/opcode.go opcodeNegate 100.00% (5/5) -github.com/conformal/btcscript/opcode.go opcodeToAltStack 100.00% (5/5) -github.com/conformal/btcscript/stack.go Stack.RollN 100.00% (5/5) -github.com/conformal/btcscript/script.go Script.validPC 100.00% (5/5) -github.com/conformal/btcscript/script.go removeOpcodeByData 100.00% (5/5) -github.com/conformal/btcscript/script.go removeOpcode 100.00% (5/5) github.com/conformal/btcscript/script.go Script.DisasmScript 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 opcodeSize 100.00% (5/5) +github.com/conformal/btcscript/stack.go Stack.PickN 100.00% (5/5) +github.com/conformal/btcscript/opcode.go opcodeRoll 100.00% (5/5) +github.com/conformal/btcscript/opcode.go opcodePick 100.00% (5/5) +github.com/conformal/btcscript/script.go Script.validPC 100.00% (5/5) +github.com/conformal/btcscript/opcode.go opcodeAbs 100.00% (5/5) +github.com/conformal/btcscript/script.go removeOpcodeByData 100.00% (5/5) +github.com/conformal/btcscript/opcode.go opcodeRipemd160 100.00% (5/5) github.com/conformal/btcscript/opcode.go opcodeSha1 100.00% (5/5) github.com/conformal/btcscript/opcode.go opcodeSha256 100.00% (5/5) github.com/conformal/btcscript/opcode.go opcodeHash160 100.00% (5/5) github.com/conformal/btcscript/opcode.go opcodeHash256 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/script.go removeOpcode 100.00% (5/5) +github.com/conformal/btcscript/opcode.go opcode1Sub 100.00% (5/5) github.com/conformal/btcscript/script.go Script.curPC 100.00% (4/4) github.com/conformal/btcscript/opcode.go opcodeEqualVerify 100.00% (4/4) github.com/conformal/btcscript/stack.go Stack.PeekBool 100.00% (4/4) @@ -89,94 +88,95 @@ github.com/conformal/btcscript/opcode.go opcodeCheckMultiSigVerify 100.00% (4/ github.com/conformal/btcscript/script.go IsPayToScriptHash 100.00% (4/4) github.com/conformal/btcscript/script.go isNullData 100.00% (4/4) github.com/conformal/btcscript/script.go isPushOnly 100.00% (4/4) +github.com/conformal/btcscript/script.go IsPushOnlyScript 100.00% (4/4) github.com/conformal/btcscript/script.go GetScriptClass 100.00% (4/4) github.com/conformal/btcscript/script.go Script.DisasmPC 100.00% (4/4) -github.com/conformal/btcscript/opcode.go parsedOpcode.alwaysIllegal 100.00% (4/4) github.com/conformal/btcscript/script.go getStack 100.00% (4/4) +github.com/conformal/btcscript/opcode.go parsedOpcode.alwaysIllegal 100.00% (4/4) github.com/conformal/btcscript/script.go @1329:17 100.00% (4/4) -github.com/conformal/btcscript/script.go IsPushOnlyScript 100.00% (4/4) github.com/conformal/btcscript/stack.go asBool 100.00% (4/4) github.com/conformal/btcscript/stack.go Stack.PopInt 100.00% (4/4) github.com/conformal/btcscript/stack.go Stack.PopBool 100.00% (4/4) github.com/conformal/btcscript/stack.go Stack.PeekByteArray 100.00% (4/4) github.com/conformal/btcscript/stack.go Stack.PeekInt 100.00% (4/4) -github.com/conformal/btcscript/script.go asSmallInt 100.00% (3/3) -github.com/conformal/btcscript/stack.go fromBool 100.00% (3/3) github.com/conformal/btcscript/script.go setStack 100.00% (3/3) -github.com/conformal/btcscript/script.go ScriptClass.String 100.00% (3/3) github.com/conformal/btcscript/script.go isSmallInt 100.00% (3/3) -github.com/conformal/btcscript/script.go GetSigOpCount 100.00% (2/2) -github.com/conformal/btcscript/stack.go Stack.Depth 100.00% (2/2) -github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.AddOp 100.00% (2/2) -github.com/conformal/btcscript/opcode.go calcHash 100.00% (2/2) -github.com/conformal/btcscript/stack.go Stack.NipN 100.00% (2/2) -github.com/conformal/btcscript/opcode.go opcodeN 100.00% (2/2) -github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.Reset 100.00% (2/2) -github.com/conformal/btcscript/opcode.go opcodePushData 100.00% (2/2) -github.com/conformal/btcscript/opcode.go opcodeDepth 100.00% (2/2) +github.com/conformal/btcscript/stack.go fromBool 100.00% (3/3) +github.com/conformal/btcscript/script.go asSmallInt 100.00% (3/3) +github.com/conformal/btcscript/script.go ScriptClass.String 100.00% (3/3) github.com/conformal/btcscript/opcode.go opcode1Negate 100.00% (2/2) github.com/conformal/btcscript/opcode.go opcodeCodeSeparator 100.00% (2/2) +github.com/conformal/btcscript/opcode.go calcHash 100.00% (2/2) +github.com/conformal/btcscript/opcode.go opcodeN 100.00% (2/2) +github.com/conformal/btcscript/script.go GetSigOpCount 100.00% (2/2) +github.com/conformal/btcscript/opcode.go opcodeDepth 100.00% (2/2) +github.com/conformal/btcscript/stack.go Stack.Depth 100.00% (2/2) +github.com/conformal/btcscript/stack.go Stack.NipN 100.00% (2/2) +github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.AddOp 100.00% (2/2) +github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.Reset 100.00% (2/2) +github.com/conformal/btcscript/opcode.go opcodePushData 100.00% (2/2) github.com/conformal/btcscript/opcode.go opcodeFalse 100.00% (2/2) -github.com/conformal/btcscript/log.go init 100.00% (1/1) -github.com/conformal/btcscript/script.go signTxOutput 100.00% (1/1) -github.com/conformal/btcscript/script.go payToPubKeyScript 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeDup 100.00% (1/1) github.com/conformal/btcscript/opcode.go opcodeReserved 100.00% (1/1) -github.com/conformal/btcscript/opcode.go calcHash160 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeReturn 100.00% (1/1) -github.com/conformal/btcscript/script.go Script.disasm 100.00% (1/1) -github.com/conformal/btcscript/script.go Script.subScript 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeNop 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeDrop 100.00% (1/1) -github.com/conformal/btcscript/script.go parseScript 100.00% (1/1) github.com/conformal/btcscript/script.go Script.GetStack 100.00% (1/1) github.com/conformal/btcscript/script.go Script.SetStack 100.00% (1/1) github.com/conformal/btcscript/script.go Script.GetAltStack 100.00% (1/1) github.com/conformal/btcscript/script.go Script.SetAltStack 100.00% (1/1) -github.com/conformal/btcscript/opcode.go init 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeNip 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeDrop 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeNop 100.00% (1/1) github.com/conformal/btcscript/script.go payToPubKeyHashScript 100.00% (1/1) github.com/conformal/btcscript/script.go payToScriptHashScript 100.00% (1/1) -github.com/conformal/btcscript/log.go newLogClosure 100.00% (1/1) -github.com\conformal\btcscript/log.go UseLogger 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeSwap 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeRot 100.00% (1/1) -github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.Script 100.00% (1/1) -github.com/conformal/btcscript/scriptbuilder.go NewScriptBuilder 100.00% (1/1) +github.com/conformal/btcscript/script.go payToPubKeyScript 100.00% (1/1) +github.com/conformal/btcscript/opcode.go init 100.00% (1/1) +github.com/conformal/btcscript/script.go isPubkey 100.00% (1/1) github.com/conformal/btcscript/log.go DisableLog 100.00% (1/1) github.com/conformal/btcscript/opcode.go opcode2Dup 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeInvalid 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/stack.go Stack.PushBool 100.00% (1/1) github.com/conformal/btcscript/stack.go Stack.PopByteArray 100.00% (1/1) github.com/conformal/btcscript/opcode.go opcode3Dup 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcode2Over 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcode2Rot 100.00% (1/1) -github.com/conformal/btcscript/script.go isPubkey 100.00% (1/1) -github.com/conformal/btcscript/script.go isScriptHash 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcode2Swap 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcodeOver 100.00% (1/1) -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/script.go isPubkeyHash 100.00% (1/1) -github.com/conformal/btcscript/opcode.go opcode2Drop 100.00% (1/1) +github.com/conformal/btcscript/script.go isScriptHash 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcode2Rot 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeOver 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeReturn 100.00% (1/1) +github.com/conformal/btcscript/script.go Script.disasm 100.00% (1/1) +github.com/conformal/btcscript/script.go Script.subScript 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeInvalid 100.00% (1/1) +github.com/conformal/btcscript/opcode.go calcHash160 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcode2Swap 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcode2Over 100.00% (1/1) +github.com/conformal/btcscript/script.go signTxOutput 100.00% (1/1) +github.com/conformal/btcscript/stack.go Stack.PushInt 100.00% (1/1) github.com/conformal/btcscript/script.go KeyClosure.GetKey 100.00% (1/1) github.com/conformal/btcscript/script.go ScriptClosure.GetScript 100.00% (1/1) +github.com/conformal/btcscript/log.go newLogClosure 100.00% (1/1) +github.com/conformal/btcscript/log.go init 100.00% (1/1) github.com/conformal/btcscript/opcode.go opcodeTuck 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcode2Drop 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeSwap 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeRot 100.00% (1/1) +github.com/conformal/btcscript/script.go parseScript 100.00% (1/1) +github.com/conformal/btcscript/scriptbuilder.go ScriptBuilder.Script 100.00% (1/1) +github.com/conformal/btcscript/scriptbuilder.go NewScriptBuilder 100.00% (1/1) +github.com/conformal/btcscript/log.go UseLogger 100.00% (1/1) +github.com/conformal/btcscript/opcode.go opcodeCheckMultiSig 98.48% (65/66) github.com/conformal/btcscript/script.go mergeScripts 95.00% (19/20) github.com/conformal/btcscript/script.go canonicalPush 92.86% (13/14) github.com/conformal/btcscript/script.go signMultiSig 92.86% (13/14) github.com/conformal/btcscript/script.go mergeMultiSig 88.10% (37/42) github.com/conformal/btcscript/script.go signTxOutputCustomReader 87.50% (7/8) -github.com/conformal/btcscript/script.go expectedInputs 85.71% (6/7) github.com/conformal/btcscript/script.go unparseScript 85.71% (6/7) +github.com/conformal/btcscript/script.go expectedInputs 85.71% (6/7) github.com/conformal/btcscript/script.go SignTxOutput 80.00% (12/15) github.com/conformal/btcscript/script.go p2pkSignatureScript 75.00% (3/4) github.com/conformal/btcscript/script.go sign 69.23% (18/26) github.com/conformal/btcscript/script.go @586:34 0.00% (0/6) github.com/conformal/btcscript/script.go @574:34 0.00% (0/4) github.com/conformal/btcscript/script.go @619:34 0.00% (0/3) +github.com/conformal/btcscript/opcode.go @1803:33 0.00% (0/1) github.com/conformal/btcscript/opcode.go opcodeDisabled 0.00% (0/1) github.com/conformal/btcscript/log.go logClosure.String 0.00% (0/1) -github.com/conformal/btcscript/opcode.go @1803:33 0.00% (0/1) -github.com/conformal/btcscript -------------------------- 96.90% (1219/1258) +github.com/conformal/btcscript -------------------------- 96.83% (1222/1262)