OSDN Git Service

votetx output (#62)
[bytom/vapor.git] / protocol / bc / types / txoutput.go
index 620abab..7cc2b61 100644 (file)
@@ -13,6 +13,7 @@ import (
 const (
        IntraChainOutputType uint8 = iota
        CrossChainOutputType
+       VoteOutputType
 )
 
 type (
@@ -39,6 +40,9 @@ func (to *TxOutput) OutputCommitment() OutputCommitment {
        case *CrossChainOutput:
                return outp.OutputCommitment
 
+       case *VoteTxOutput:
+               return outp.OutputCommitment
+
        default:
                return OutputCommitment{}
        }
@@ -53,6 +57,9 @@ func (to *TxOutput) AssetAmount() bc.AssetAmount {
        case *CrossChainOutput:
                return outp.AssetAmount
 
+       case *VoteTxOutput:
+               return outp.AssetAmount
+
        default:
                return bc.AssetAmount{}
        }
@@ -67,6 +74,9 @@ func (to *TxOutput) ControlProgram() []byte {
        case *CrossChainOutput:
                return outp.ControlProgram
 
+       case *VoteTxOutput:
+               return outp.ControlProgram
+
        default:
                return nil
        }
@@ -81,6 +91,9 @@ func (to *TxOutput) VMVersion() uint64 {
        case *CrossChainOutput:
                return outp.VMVersion
 
+       case *VoteTxOutput:
+               return outp.VMVersion
+
        default:
                return 0
        }
@@ -116,6 +129,17 @@ func (to *TxOutput) readFrom(r *blockchain.Reader) (err error) {
                                return errors.Wrap(err, "reading cross-chain output commitment")
                        }
 
+               case VoteOutputType:
+                       out := new(VoteTxOutput)
+                       to.TypedOutput = out
+                       if out.Vote, err = blockchain.ReadVarstr31(r); err != nil {
+                               return errors.Wrap(err, "reading vote output vote")
+                       }
+
+                       if out.CommitmentSuffix, err = out.OutputCommitment.readFrom(r, to.AssetVersion); err != nil {
+                               return errors.Wrap(err, "reading vote output commitment")
+                       }
+
                default:
                        return fmt.Errorf("unsupported output type %d", outType[0])
                }
@@ -166,6 +190,15 @@ func (to *TxOutput) writeOutputCommitment(w io.Writer) error {
                }
                return outp.OutputCommitment.writeExtensibleString(w, outp.CommitmentSuffix, to.AssetVersion)
 
+       case *VoteTxOutput:
+               if _, err := w.Write([]byte{VoteOutputType}); err != nil {
+                       return err
+               }
+               if _, err := blockchain.WriteVarstr31(w, outp.Vote); err != nil {
+                       return err
+               }
+               return outp.OutputCommitment.writeExtensibleString(w, outp.CommitmentSuffix, to.AssetVersion)
+
        default:
                return nil
        }