OSDN Git Service

fix init trace service (#2115)
[bytom/bytom.git] / contract / tracer.go
index 3e5492b..49de1e7 100644 (file)
@@ -6,6 +6,7 @@ import (
        "github.com/bytom/bytom/consensus/segwit"
        "github.com/bytom/bytom/protocol/bc"
        "github.com/bytom/bytom/protocol/bc/types"
+       "github.com/bytom/bytom/protocol/vm/vmutil"
 )
 
 type tracer struct {
@@ -110,13 +111,13 @@ func groupUTXOs(utxos []*UTXO) map[string][]*UTXO {
 func parseContractUTXOs(tx *types.Tx) ([]*UTXO, []*UTXO) {
        var inUTXOs, outUTXOs []*UTXO
        for i, input := range tx.Inputs {
-               if isContract(input.ControlProgram()) {
+               if isContract(input.ControlProgram()) && input.InputType() == types.SpendInputType {
                        inUTXOs = append(inUTXOs, inputToUTXO(tx, i))
                }
        }
 
        for i, output := range tx.Outputs {
-               if isContract(output.ControlProgram) {
+               if isContract(output.ControlProgram) && output.OutputType() == types.OriginalOutputType {
                        outUTXOs = append(outUTXOs, outputToUTXO(tx, i))
                }
        }
@@ -124,7 +125,7 @@ func parseContractUTXOs(tx *types.Tx) ([]*UTXO, []*UTXO) {
 }
 
 func isContract(program []byte) bool {
-       return !(segwit.IsP2WPKHScript(program) || segwit.IsP2WSHScript(program) || segwit.IsStraightforward(program))
+       return !(segwit.IsP2WScript(program) || vmutil.IsUnspendable(program))
 }
 
 func (t *tracer) saveInstances(instances []*Instance) {