github.com/mavryk-network/mvgo@v1.19.9/codec/activate_account.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 "fmt" 9 "strconv" 10 11 "github.com/mavryk-network/mvgo/mavryk" 12 ) 13 14 // ActivateAccount represents "activate_account" operation 15 type ActivateAccount struct { 16 Simple 17 PublicKeyHash mavryk.Address `json:"pkh"` 18 Secret mavryk.HexBytes `json:"secret"` 19 } 20 21 func (o ActivateAccount) Kind() mavryk.OpType { 22 return mavryk.OpTypeActivateAccount 23 } 24 25 func (o ActivateAccount) MarshalJSON() ([]byte, error) { 26 buf := bytes.NewBuffer(nil) 27 buf.WriteByte('{') 28 buf.WriteString(`"kind":`) 29 buf.WriteString(strconv.Quote(o.Kind().String())) 30 buf.WriteString(`,"pkh":`) 31 buf.WriteString(strconv.Quote(o.PublicKeyHash.String())) 32 buf.WriteString(`,"secret":`) 33 buf.WriteString(strconv.Quote(o.Secret.String())) 34 buf.WriteByte('}') 35 return buf.Bytes(), nil 36 } 37 38 func (o ActivateAccount) EncodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error { 39 buf.WriteByte(o.Kind().TagVersion(p.OperationTagsVersion)) 40 buf.Write(o.PublicKeyHash[1:]) // only place where a 20 byte address is used (!) 41 buf.Write(o.Secret.Bytes()) 42 return nil 43 } 44 45 func (o *ActivateAccount) DecodeBuffer(buf *bytes.Buffer, p *mavryk.Params) error { 46 if err := ensureTagAndSize(buf, o.Kind(), p.OperationTagsVersion); err != nil { 47 return err 48 } 49 o.PublicKeyHash = mavryk.NewAddress(mavryk.AddressTypeEd25519, buf.Next(20)) 50 if !o.PublicKeyHash.IsValid() { 51 return fmt.Errorf("invalid address %q", o.PublicKeyHash) 52 } 53 return o.Secret.ReadBytes(buf, 20) 54 } 55 56 func (o ActivateAccount) MarshalBinary() ([]byte, error) { 57 buf := bytes.NewBuffer(nil) 58 err := o.EncodeBuffer(buf, mavryk.DefaultParams) 59 return buf.Bytes(), err 60 } 61 62 func (o *ActivateAccount) UnmarshalBinary(data []byte) error { 63 return o.DecodeBuffer(bytes.NewBuffer(data), mavryk.DefaultParams) 64 }