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 }