github.com/prysmaticlabs/prysm@v1.4.4/validator/db/kv/graffiti.go (about) 1 package kv 2 3 import ( 4 "bytes" 5 "context" 6 7 "github.com/prysmaticlabs/prysm/shared/bytesutil" 8 bolt "go.etcd.io/bbolt" 9 ) 10 11 // SaveGraffitiOrderedIndex writes the current graffiti index to the db 12 func (s *Store) SaveGraffitiOrderedIndex(ctx context.Context, index uint64) error { 13 return s.db.Update(func(tx *bolt.Tx) error { 14 bkt := tx.Bucket(graffitiBucket) 15 indexBytes := bytesutil.Uint64ToBytesBigEndian(index) 16 return bkt.Put(graffitiOrderedIndexKey, indexBytes) 17 }) 18 } 19 20 // GraffitiOrderedIndex fetches the ordered index, resetting if the file hash changed 21 func (s *Store) GraffitiOrderedIndex(ctx context.Context, fileHash [32]byte) (uint64, error) { 22 orderedIndex := uint64(0) 23 err := s.db.Update(func(tx *bolt.Tx) error { 24 bkt := tx.Bucket(graffitiBucket) 25 dbFileHash := bkt.Get(graffitiFileHashKey) 26 if bytes.Equal(dbFileHash, fileHash[:]) { 27 indexBytes := bkt.Get(graffitiOrderedIndexKey) 28 orderedIndex = bytesutil.BytesToUint64BigEndian(indexBytes) 29 } else { 30 indexBytes := bytesutil.Uint64ToBytesBigEndian(0) 31 if err := bkt.Put(graffitiOrderedIndexKey, indexBytes); err != nil { 32 return err 33 } 34 return bkt.Put(graffitiFileHashKey, fileHash[:]) 35 } 36 return nil 37 }) 38 return orderedIndex, err 39 }