github.com/mavryk-network/mvgo@v1.19.9/codec/origination.go (about)

     1  // Copyright (c) 2020-2022 Blockwatch Data Inc.
     2  // Author: alex@blockwatch.cc
     3  
     4  package codec
     5  
     6  import (
     7  	"bytes"
     8  	"strconv"
     9  
    10  	"github.com/mavryk-network/mvgo/mavryk"
    11  	"github.com/mavryk-network/mvgo/micheline"
    12  )
    13  
    14  // Origination represents "origination" operation
    15  type Origination struct {
    16  	Manager
    17  	Balance  mavryk.N         `json:"balance"`
    18  	Delegate mavryk.Address   `json:"delegate,omitempty"`
    19  	Script   micheline.Script `json:"script"`
    20  }
    21  
    22  func (o Origination) Kind() mavryk.OpType {
    23  	return mavryk.OpTypeOrigination
    24  }
    25  
    26  func (o Origination) MarshalJSON() ([]byte, error) {
    27  	buf := bytes.NewBuffer(nil)
    28  	buf.WriteByte('{')
    29  	buf.WriteString(`"kind":`)
    30  	buf.WriteString(strconv.Quote(o.Kind().String()))
    31  	buf.WriteByte(',')
    32  	o.Manager.EncodeJSON(buf)
    33  	buf.WriteString(`,"balance":`)
    34  	buf.WriteString(strconv.Quote(o.Balance.String()))
    35  	if o.Delegate.IsValid() {
    36  		buf.WriteString(`,"delegate":`)
    37  		buf.WriteString(strconv.Quote(o.Delegate.String()))
    38  	}
    39  	buf.WriteString(`,"script":`)
    40  	b, _ := o.Script.MarshalJSON()
    41  	buf.Write(b)
    42  	buf.WriteByte('}')
    43  	return buf.Bytes(), nil
    44  }
    45  
    46  func (o Origination) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error {
    47  	buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion))
    48  	o.Manager.EncodeBuffer(buf, p)
    49  	o.Balance.EncodeBuffer(buf)
    50  	if o.Delegate.IsValid() {
    51  		buf.WriteByte(0xff)
    52  		buf.Write(o.Delegate.Encode())
    53  	} else {
    54  		buf.WriteByte(0x0)
    55  	}
    56  	o.Script.EncodeBuffer(buf)
    57  	return nil
    58  }
    59  
    60  func (o *Origination) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) (err error) {
    61  	if err = ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil {
    62  		return
    63  	}
    64  	if err = o.Manager.DecodeBuffer(buf, p); err != nil {
    65  		return err
    66  	}
    67  	if err = o.Balance.DecodeBuffer(buf); err != nil {
    68  		return
    69  	}
    70  	var ok bool
    71  	ok, err = readBool(buf.Next(1))
    72  	if err != nil {
    73  		return err
    74  	}
    75  	if ok {
    76  		addr := mavryk.Address{}
    77  		err = addr.Decode(buf.Next(21))
    78  		if err != nil {
    79  			return err
    80  		}
    81  		o.Delegate = addr
    82  	}
    83  	if err = o.Script.DecodeBuffer(buf); err != nil {
    84  		return err
    85  	}
    86  	return nil
    87  }
    88  
    89  func (o Origination) MarshalBinary() ([]byte, error) {
    90  	buf := bytes.NewBuffer(nil)
    91  	err := o.EncodeBuffer(buf, mavryk.DefaultParams)
    92  	return buf.Bytes(), err
    93  }
    94  
    95  func (o *Origination) UnmarshalBinary(data []byte) error {
    96  	return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams)
    97  }