github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/db/kv/powchain.go (about) 1 package kv 2 3 import ( 4 "context" 5 "errors" 6 7 "github.com/prysmaticlabs/prysm/proto/beacon/db" 8 "github.com/prysmaticlabs/prysm/shared/traceutil" 9 bolt "go.etcd.io/bbolt" 10 "go.opencensus.io/trace" 11 "google.golang.org/protobuf/proto" 12 ) 13 14 // SavePowchainData saves the pow chain data. 15 func (s *Store) SavePowchainData(ctx context.Context, data *db.ETH1ChainData) error { 16 ctx, span := trace.StartSpan(ctx, "BeaconDB.SavePowchainData") 17 defer span.End() 18 19 if data == nil { 20 err := errors.New("cannot save nil eth1data") 21 traceutil.AnnotateError(span, err) 22 return err 23 } 24 25 err := s.db.Update(func(tx *bolt.Tx) error { 26 bkt := tx.Bucket(powchainBucket) 27 enc, err := proto.Marshal(data) 28 if err != nil { 29 return err 30 } 31 return bkt.Put(powchainDataKey, enc) 32 }) 33 traceutil.AnnotateError(span, err) 34 return err 35 } 36 37 // PowchainData retrieves the powchain data. 38 func (s *Store) PowchainData(ctx context.Context) (*db.ETH1ChainData, error) { 39 ctx, span := trace.StartSpan(ctx, "BeaconDB.PowchainData") 40 defer span.End() 41 42 var data *db.ETH1ChainData 43 err := s.db.View(func(tx *bolt.Tx) error { 44 bkt := tx.Bucket(powchainBucket) 45 enc := bkt.Get(powchainDataKey) 46 if len(enc) == 0 { 47 return nil 48 } 49 data = &db.ETH1ChainData{} 50 return proto.Unmarshal(enc, data) 51 }) 52 return data, err 53 }