"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 {
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))
}
}
}
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) {