func isNullFraudProof(tx *wire.MsgTx) bool {
	txIn := tx.TxIn[0]
	switch {
	case txIn.BlockHeight != wire.NullBlockHeight:
		return false
	case txIn.BlockIndex != wire.NullBlockIndex:
		return false
	}
	return true
}
isNullFraudProof determines whether or not a previous transaction fraud proof
is set.
package stake
import (
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"math"
	"math/big"
	"github.com/HcashOrg/hcashd/chaincfg"
	"github.com/HcashOrg/hcashd/chaincfg/chainec"
	"github.com/HcashOrg/hcashd/chaincfg/chainhash"
	"github.com/HcashOrg/hcashd/txscript"
	"github.com/HcashOrg/hcashd/wire"
	"github.com/HcashOrg/hcashutil"
)
type TxType int
const (
	TxTypeRegular TxType = iota
	TxTypeSStx
	TxTypeSSGen
	TxTypeSSRtx
)
const (
	MaxInputsPerSStx = 64
	MaxOutputsPerSStx = MaxInputsPerSStx*2 + 1
	NumInputsPerSSGen = 2  
	MaxOutputsPerSSGen = MaxInputsPerSStx + 2
	NumInputsPerSSRtx = 1
	MaxOutputsPerSSRtx = MaxInputsPerSStx
	SStxPKHMinOutSize = 32
	SStxPKHMaxOutSize = 77
	SSGenBlockReferenceOutSize = 38 + 4
	SSGenVoteBitsOutputMinSize = 4
	SSGenVoteBitsOutputMaxSize = 77
	MaxSingleBytePushLength = 75
	SSGenVoteBitsExtendedMaxSize = MaxSingleBytePushLength - 2
	SStxVoteReturnFractionMask = 0x003f
	SStxRevReturnFractionMask = 0x3f00
	SStxVoteFractionFlag = 0x0040
	SStxRevFractionFlag = 0x4000
	VoteConsensusVersionAbsent = 0
)
var (
	validSStxAddressOutMinPrefix = []byte{0x6a, 0x1e}
	validSSGenReferenceOutPrefix = []byte{0x6a, 0x28}
	validSSGenVoteOutMinPrefix = []byte{0x6a, 0x02}
	zeroHash = &chainhash.Hash{}
	rangeLimitMax = uint16(63)
)
type VoteBits struct {
	Bits         uint16
	ExtendedBits []byte
}
func isNullOutpoint(tx *wire.MsgTx) bool {
	nullInOP := tx.TxIn[0].PreviousOutPoint
	if nullInOP.Index == math.MaxUint32 && nullInOP.Hash.IsEqual(zeroHash) &&
		nullInOP.Tree == wire.TxTreeRegular {
		return true
	}
	return false
}