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  }