package transaction

import (
	"github.com/CityOfZion/neo-go/pkg/io"
)

// StateTX represents a state transaction.
type StateTX struct {
	Descriptors []*StateDescriptor
}

// DecodeBinary implements Serializable interface.
func (tx *StateTX) DecodeBinary(r *io.BinReader) {
	lenDesc := r.ReadVarUint()
	tx.Descriptors = make([]*StateDescriptor, lenDesc)
	for i := 0; i < int(lenDesc); i++ {
		tx.Descriptors[i] = &StateDescriptor{}
		tx.Descriptors[i].DecodeBinary(r)
	}
}

// EncodeBinary implements Serializable interface.
func (tx *StateTX) EncodeBinary(w *io.BinWriter) {
	w.WriteVarUint(uint64(len(tx.Descriptors)))
	for _, desc := range tx.Descriptors {
		desc.EncodeBinary(w)
	}
}