github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/db/kv/deposit_contract.go (about) 1 package kv 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/ethereum/go-ethereum/common" 8 bolt "go.etcd.io/bbolt" 9 "go.opencensus.io/trace" 10 ) 11 12 // DepositContractAddress returns contract address is the address of 13 // the deposit contract on the proof of work chain. 14 func (s *Store) DepositContractAddress(ctx context.Context) ([]byte, error) { 15 ctx, span := trace.StartSpan(ctx, "BeaconDB.DepositContractAddress") 16 defer span.End() 17 var addr []byte 18 if err := s.db.View(func(tx *bolt.Tx) error { 19 chainInfo := tx.Bucket(chainMetadataBucket) 20 addr = chainInfo.Get(depositContractAddressKey) 21 return nil 22 }); err != nil { // This view never returns an error, but we'll handle anyway for sanity. 23 panic(err) 24 } 25 return addr, nil 26 } 27 28 // SaveDepositContractAddress to the db. It returns an error if an address has been previously saved. 29 func (s *Store) SaveDepositContractAddress(ctx context.Context, addr common.Address) error { 30 ctx, span := trace.StartSpan(ctx, "BeaconDB.VerifyContractAddress") 31 defer span.End() 32 33 return s.db.Update(func(tx *bolt.Tx) error { 34 chainInfo := tx.Bucket(chainMetadataBucket) 35 expectedAddress := chainInfo.Get(depositContractAddressKey) 36 if expectedAddress != nil { 37 return fmt.Errorf("cannot override deposit contract address: %v", expectedAddress) 38 } 39 return chainInfo.Put(depositContractAddressKey, addr.Bytes()) 40 }) 41 }