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 }