mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-26 05:17:22 +00:00
Include Voluntary Exits Definitions in DB Refactor (#3266)
* new interface methods * support proposer slashings * add in the new buckets * all crud for propoer slashings * attester slashings complete * all slashings crud done * right comment * deposit contract tests pass * delete out of scope methods * conform old beacon DB * comment * include interface implementations * deprecations * pass lint
This commit is contained in:
parent
3ca4d6fd91
commit
de82956088
@ -11,6 +11,30 @@ import (
|
|||||||
"go.opencensus.io/trace"
|
"go.opencensus.io/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// VoluntaryExit by root.
|
||||||
|
// DEPRECATED: Use the kv store in beacon-chain/db/kv instead.
|
||||||
|
func (db *BeaconDB) VoluntaryExit(ctx context.Context, exitRoot [32]byte) (*ethpb.VoluntaryExit, error) {
|
||||||
|
return nil, errors.New("unimplemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveVoluntaryExit by root.
|
||||||
|
// DEPRECATED: Use the kv store in beacon-chain/db/kv instead.
|
||||||
|
func (db *BeaconDB) SaveVoluntaryExit(ctx context.Context, exit *ethpb.VoluntaryExit) error {
|
||||||
|
return errors.New("unimplemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasVoluntaryExit by root.
|
||||||
|
// DEPRECATED: Use the kv store in beacon-chain/db/kv instead.
|
||||||
|
func (db *BeaconDB) HasVoluntaryExit(ctx context.Context, exitRoot [32]byte) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteVoluntaryExit by root.
|
||||||
|
// DEPRECATED: Use the kv store in beacon-chain/db/kv instead.
|
||||||
|
func (db *BeaconDB) DeleteVoluntaryExit(ctx context.Context, exitRoot [32]byte) error {
|
||||||
|
return errors.New("unimplemented")
|
||||||
|
}
|
||||||
|
|
||||||
// ProposerSlashing retrieval from the db.
|
// ProposerSlashing retrieval from the db.
|
||||||
// DEPRECATED: Use the kv store in beacon-chain/db/kv instead.
|
// DEPRECATED: Use the kv store in beacon-chain/db/kv instead.
|
||||||
func (db *BeaconDB) ProposerSlashing(ctx context.Context, slashingRoot [32]byte) (*ethpb.ProposerSlashing, error) {
|
func (db *BeaconDB) ProposerSlashing(ctx context.Context, slashingRoot [32]byte) (*ethpb.ProposerSlashing, error) {
|
||||||
|
@ -64,6 +64,11 @@ type Database interface {
|
|||||||
HasAttesterSlashing(ctx context.Context, slashingRoot [32]byte) bool
|
HasAttesterSlashing(ctx context.Context, slashingRoot [32]byte) bool
|
||||||
DeleteProposerSlashing(ctx context.Context, slashingRoot [32]byte) error
|
DeleteProposerSlashing(ctx context.Context, slashingRoot [32]byte) error
|
||||||
DeleteAttesterSlashing(ctx context.Context, slashingRoot [32]byte) error
|
DeleteAttesterSlashing(ctx context.Context, slashingRoot [32]byte) error
|
||||||
|
// Block operations.
|
||||||
|
VoluntaryExit(ctx context.Context, exitRoot [32]byte) (*ethpb.VoluntaryExit, error)
|
||||||
|
SaveVoluntaryExit(ctx context.Context, exit *ethpb.VoluntaryExit) error
|
||||||
|
HasVoluntaryExit(ctx context.Context, exitRoot [32]byte) bool
|
||||||
|
DeleteVoluntaryExit(ctx context.Context, exitRoot [32]byte) error
|
||||||
// Deposit contract related handlers.
|
// Deposit contract related handlers.
|
||||||
DepositContractAddress(ctx context.Context) ([]byte, error)
|
DepositContractAddress(ctx context.Context) ([]byte, error)
|
||||||
SaveDepositContractAddress(ctx context.Context, addr common.Address) error
|
SaveDepositContractAddress(ctx context.Context, addr common.Address) error
|
||||||
|
@ -7,6 +7,7 @@ go_library(
|
|||||||
"blocks.go",
|
"blocks.go",
|
||||||
"deposit_contract.go",
|
"deposit_contract.go",
|
||||||
"kv.go",
|
"kv.go",
|
||||||
|
"operations.go",
|
||||||
"schema.go",
|
"schema.go",
|
||||||
"slashings.go",
|
"slashings.go",
|
||||||
"state.go",
|
"state.go",
|
||||||
@ -37,6 +38,7 @@ go_test(
|
|||||||
"blocks_test.go",
|
"blocks_test.go",
|
||||||
"deposit_contract_test.go",
|
"deposit_contract_test.go",
|
||||||
"kv_test.go",
|
"kv_test.go",
|
||||||
|
"operations_test.go",
|
||||||
"slashings_test.go",
|
"slashings_test.go",
|
||||||
"state_test.go",
|
"state_test.go",
|
||||||
"validators_test.go",
|
"validators_test.go",
|
||||||
|
70
beacon-chain/db/kv/operations.go
Normal file
70
beacon-chain/db/kv/operations.go
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package kv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/boltdb/bolt"
|
||||||
|
"github.com/gogo/protobuf/proto"
|
||||||
|
"github.com/prysmaticlabs/go-ssz"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||||
|
"go.opencensus.io/trace"
|
||||||
|
)
|
||||||
|
|
||||||
|
// VoluntaryExit retrieval by signing root.
|
||||||
|
func (k *Store) VoluntaryExit(ctx context.Context, exitRoot [32]byte) (*ethpb.VoluntaryExit, error) {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "BeaconDB.VoluntaryExit")
|
||||||
|
defer span.End()
|
||||||
|
var exit *ethpb.VoluntaryExit
|
||||||
|
err := k.db.View(func(tx *bolt.Tx) error {
|
||||||
|
bkt := tx.Bucket(voluntaryExitsBucket)
|
||||||
|
enc := bkt.Get(exitRoot[:])
|
||||||
|
if enc == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
exit = ðpb.VoluntaryExit{}
|
||||||
|
return proto.Unmarshal(enc, exit)
|
||||||
|
})
|
||||||
|
return exit, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasVoluntaryExit verifies if a voluntary exit is stored in the db by its signing root.
|
||||||
|
func (k *Store) HasVoluntaryExit(ctx context.Context, exitRoot [32]byte) bool {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "BeaconDB.HasVoluntaryExit")
|
||||||
|
defer span.End()
|
||||||
|
exists := false
|
||||||
|
// #nosec G104. Always returns nil.
|
||||||
|
k.db.View(func(tx *bolt.Tx) error {
|
||||||
|
bkt := tx.Bucket(voluntaryExitsBucket)
|
||||||
|
exists = bkt.Get(exitRoot[:]) != nil
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
return exists
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveVoluntaryExit to the db by its signing root.
|
||||||
|
func (k *Store) SaveVoluntaryExit(ctx context.Context, exit *ethpb.VoluntaryExit) error {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "BeaconDB.SaveVoluntaryExit")
|
||||||
|
defer span.End()
|
||||||
|
exitRoot, err := ssz.SigningRoot(exit)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
enc, err := proto.Marshal(exit)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return k.db.Update(func(tx *bolt.Tx) error {
|
||||||
|
bucket := tx.Bucket(voluntaryExitsBucket)
|
||||||
|
return bucket.Put(exitRoot[:], enc)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteVoluntaryExit clears a voluntary exit from the db by its signing root.
|
||||||
|
func (k *Store) DeleteVoluntaryExit(ctx context.Context, exitRoot [32]byte) error {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "BeaconDB.DeleteVoluntaryExit")
|
||||||
|
defer span.End()
|
||||||
|
return k.db.Update(func(tx *bolt.Tx) error {
|
||||||
|
bucket := tx.Bucket(voluntaryExitsBucket)
|
||||||
|
return bucket.Delete(exitRoot[:])
|
||||||
|
})
|
||||||
|
}
|
49
beacon-chain/db/kv/operations_test.go
Normal file
49
beacon-chain/db/kv/operations_test.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package kv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gogo/protobuf/proto"
|
||||||
|
"github.com/prysmaticlabs/go-ssz"
|
||||||
|
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestStore_VoluntaryExits_CRUD(t *testing.T) {
|
||||||
|
db := setupDB(t)
|
||||||
|
defer teardownDB(t, db)
|
||||||
|
ctx := context.Background()
|
||||||
|
exit := ðpb.VoluntaryExit{
|
||||||
|
Epoch: 5,
|
||||||
|
}
|
||||||
|
exitRoot, err := ssz.SigningRoot(exit)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
retrieved, err := db.VoluntaryExit(ctx, exitRoot)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if retrieved != nil {
|
||||||
|
t.Errorf("Expected nil voluntary exit, received %v", retrieved)
|
||||||
|
}
|
||||||
|
if err := db.SaveVoluntaryExit(ctx, exit); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !db.HasVoluntaryExit(ctx, exitRoot) {
|
||||||
|
t.Error("Expected voluntary exit to exist in the db")
|
||||||
|
}
|
||||||
|
retrieved, err = db.VoluntaryExit(ctx, exitRoot)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !proto.Equal(exit, retrieved) {
|
||||||
|
t.Errorf("Wanted %v, received %v", exit, retrieved)
|
||||||
|
}
|
||||||
|
if err := db.DeleteVoluntaryExit(ctx, exitRoot); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if db.HasVoluntaryExit(ctx, exitRoot) {
|
||||||
|
t.Error("Expected voluntary exit to have been deleted from the db")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user