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  }