github.com/amazechain/amc@v0.1.3/common/types/ssz/sszuint64.go (about)

     1  package ssztype
     2  
     3  import (
     4  	"encoding/binary"
     5  	"fmt"
     6  
     7  	fssz "github.com/prysmaticlabs/fastssz"
     8  )
     9  
    10  // SSZUint64 --
    11  type SSZUint64 uint64
    12  
    13  // SizeSSZ --
    14  func (s *SSZUint64) SizeSSZ() int {
    15  	return 8
    16  }
    17  
    18  // MarshalSSZTo --
    19  func (s *SSZUint64) MarshalSSZTo(dst []byte) ([]byte, error) {
    20  	marshalled, err := s.MarshalSSZ()
    21  	if err != nil {
    22  		return nil, err
    23  	}
    24  	return append(dst, marshalled...), nil
    25  }
    26  
    27  // MarshalSSZ --
    28  func (s *SSZUint64) MarshalSSZ() ([]byte, error) {
    29  	marshalled := fssz.MarshalUint64([]byte{}, uint64(*s))
    30  	return marshalled, nil
    31  }
    32  
    33  // UnmarshalSSZ --
    34  func (s *SSZUint64) UnmarshalSSZ(buf []byte) error {
    35  	if len(buf) != s.SizeSSZ() {
    36  		return fmt.Errorf("expected buffer of length %d received %d", s.SizeSSZ(), len(buf))
    37  	}
    38  	*s = SSZUint64(fssz.UnmarshallUint64(buf))
    39  	return nil
    40  }
    41  
    42  // HashTreeRoot --
    43  func (s *SSZUint64) HashTreeRoot() ([32]byte, error) {
    44  	buf := make([]byte, 8)
    45  	binary.LittleEndian.PutUint64(buf, uint64(*s))
    46  	var root [32]byte
    47  	copy(root[:], buf)
    48  	return root, nil
    49  }
    50  
    51  // HashTreeRootWith --
    52  func (s *SSZUint64) HashTreeRootWith(hh *fssz.Hasher) error {
    53  	indx := hh.Index()
    54  	hh.PutUint64(uint64(*s))
    55  	hh.Merkleize(indx)
    56  	return nil
    57  }