package consensus

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

// prepareRequest represents dBFT PrepareRequest message.
type prepareRequest struct {
	Timestamp         uint32
	Nonce             uint64
	TransactionHashes []util.Uint256
	MinerTransaction  transaction.Transaction
	NextConsensus     util.Uint160
}

// EncodeBinary implements io.Serializable interface.
func (p *prepareRequest) EncodeBinary(w *io.BinWriter) {
	w.WriteLE(p.Timestamp)
	w.WriteLE(p.Nonce)
	w.WriteBE(p.NextConsensus[:])
	w.WriteArray(p.TransactionHashes)
	p.MinerTransaction.EncodeBinary(w)
}

// DecodeBinary implements io.Serializable interface.
func (p *prepareRequest) DecodeBinary(r *io.BinReader) {
	r.ReadLE(&p.Timestamp)
	r.ReadLE(&p.Nonce)
	r.ReadBE(p.NextConsensus[:])
	r.ReadArray(&p.TransactionHashes)
	p.MinerTransaction.DecodeBinary(r)
}