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  }