mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-23 03:51:29 +00:00
parent
570efe3d04
commit
a9a5973b98
@ -8,6 +8,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/db/filters"
|
||||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
||||
ethereum_beacon_p2p_v1 "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
)
|
||||
|
||||
@ -38,6 +39,7 @@ type Database interface {
|
||||
SaveBlock(ctx context.Context, block *eth.BeaconBlock) error
|
||||
SaveBlocks(ctx context.Context, blocks []*eth.BeaconBlock) error
|
||||
SaveHeadBlockRoot(ctx context.Context, blockRoot [32]byte) error
|
||||
GenesisBlock(ctx context.Context) (*ethpb.BeaconBlock, error)
|
||||
SaveGenesisBlockRoot(ctx context.Context, blockRoot [32]byte) error
|
||||
IsFinalizedBlock(ctx context.Context, blockRoot [32]byte) bool
|
||||
// Validator related methods.
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
eth "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
||||
"github.com/prysmaticlabs/prysm/beacon-chain/db/filters"
|
||||
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
||||
ethereum_beacon_p2p_v1 "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
||||
)
|
||||
|
||||
@ -199,6 +200,11 @@ func (e Exporter) SaveHeadBlockRoot(ctx context.Context, blockRoot [32]byte) err
|
||||
return e.db.SaveHeadBlockRoot(ctx, blockRoot)
|
||||
}
|
||||
|
||||
// GenesisBlock -- passthrough.
|
||||
func (e Exporter) GenesisBlock(ctx context.Context) (*ethpb.BeaconBlock, error) {
|
||||
return e.db.GenesisBlock(ctx)
|
||||
}
|
||||
|
||||
// SaveGenesisBlockRoot -- passthrough.
|
||||
func (e Exporter) SaveGenesisBlockRoot(ctx context.Context, blockRoot [32]byte) error {
|
||||
return e.db.SaveGenesisBlockRoot(ctx, blockRoot)
|
||||
|
@ -318,6 +318,24 @@ func (k *Store) SaveHeadBlockRoot(ctx context.Context, blockRoot [32]byte) error
|
||||
})
|
||||
}
|
||||
|
||||
// GenesisBlock retrieves the genesis block of the beacon chain.
|
||||
func (k *Store) GenesisBlock(ctx context.Context) (*ethpb.BeaconBlock, error) {
|
||||
ctx, span := trace.StartSpan(ctx, "BeaconDB.GenesisBlock")
|
||||
defer span.End()
|
||||
var block *ethpb.BeaconBlock
|
||||
err := k.db.View(func(tx *bolt.Tx) error {
|
||||
bkt := tx.Bucket(blocksBucket)
|
||||
root := bkt.Get(genesisBlockRootKey)
|
||||
enc := bkt.Get(root)
|
||||
if enc == nil {
|
||||
return nil
|
||||
}
|
||||
block = ðpb.BeaconBlock{}
|
||||
return decode(enc, block)
|
||||
})
|
||||
return block, err
|
||||
}
|
||||
|
||||
// SaveGenesisBlockRoot to the db.
|
||||
func (k *Store) SaveGenesisBlockRoot(ctx context.Context, blockRoot [32]byte) error {
|
||||
ctx, span := trace.StartSpan(ctx, "BeaconDB.SaveGenesisBlockRoot")
|
||||
|
@ -139,6 +139,33 @@ func TestStore_BlocksBatchDelete(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestStore_GenesisBlock(t *testing.T) {
|
||||
db := setupDB(t)
|
||||
defer teardownDB(t, db)
|
||||
ctx := context.Background()
|
||||
genesisBlock := ðpb.BeaconBlock{
|
||||
Slot: 0,
|
||||
ParentRoot: []byte{1, 2, 3},
|
||||
}
|
||||
blockRoot, err := ssz.SigningRoot(genesisBlock)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.SaveGenesisBlockRoot(ctx, blockRoot); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.SaveBlock(ctx, genesisBlock); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
retrievedBlock, err := db.GenesisBlock(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !proto.Equal(genesisBlock, retrievedBlock) {
|
||||
t.Errorf("Wanted %v, received %v", genesisBlock, retrievedBlock)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStore_BlocksCRUD_NoCache(t *testing.T) {
|
||||
db := setupDB(t)
|
||||
defer teardownDB(t, db)
|
||||
|
Loading…
Reference in New Issue
Block a user