github.com/bytom/bytom@v1.1.2-0.20221014091027-bbcba3df6075/protocol/bc/types/vote_output.go (about)

     1  package types
     2  
     3  import (
     4  	"io"
     5  
     6  	"github.com/bytom/bytom/encoding/blockchain"
     7  	"github.com/bytom/bytom/errors"
     8  	"github.com/bytom/bytom/protocol/bc"
     9  )
    10  
    11  // VoteOutput satisfies the TypedOutput interface and represents a vote transaction.
    12  type VoteOutput struct {
    13  	Vote []byte
    14  }
    15  
    16  // NewVoteOutput create a new output struct
    17  func NewVoteOutput(assetID bc.AssetID, amount uint64, controlProgram []byte, vote []byte, state [][]byte) *TxOutput {
    18  	return &TxOutput{
    19  		AssetVersion: 1,
    20  		OutputCommitment: OutputCommitment{
    21  			AssetAmount: bc.AssetAmount{
    22  				AssetId: &assetID,
    23  				Amount:  amount,
    24  			},
    25  			VMVersion:      1,
    26  			ControlProgram: controlProgram,
    27  			StateData:      state,
    28  		},
    29  		TypedOutput: &VoteOutput{Vote: vote},
    30  	}
    31  }
    32  
    33  func (v *VoteOutput) readFrom(r *blockchain.Reader) error {
    34  	var err error
    35  	if v.Vote, err = blockchain.ReadVarstr31(r); err != nil {
    36  		return errors.Wrap(err, "reading vote output vote")
    37  	}
    38  	return nil
    39  }
    40  
    41  func (v *VoteOutput) writeTo(w io.Writer) error {
    42  	_, err := blockchain.WriteVarstr31(w, v.Vote)
    43  	return err
    44  }
    45  
    46  // OutputType implement the txout interface
    47  func (v *VoteOutput) OutputType() uint8 { return VoteOutputType }