mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-25 12:57:18 +00:00
Fix(Genesis): Api genesis block now returns properly (#4736)
* begin state service * begin on the state trie idea * created beacon state structure * add in the full clone getter * return by value instead * add all setters * new state setters are being completed * arrays roots exposed * close to finishing all these headerssss * functionality complete * added in proto benchmark test * test for compatibility * add test for compat * comments fixed * Merge branch 'master' into state-service * add clone * add clone * remove underlying copies * make it immutable * integrate it into chainservice * revert * wrap up comments for package * address all comments and godocs * address all comments * Merge branch 'master' into state-service * clone the pending attestation properly * Merge branch 'state-service' of github.com:prysmaticlabs/prysm into state-service * properly clone remaining items * tests pass fixed bug * begin using it instead of head state * prevent nil pointer exceptions * Merge branch 'state-service' into use-state-in-runtime * begin using new struct in db * integrated new type into db package * add proper nil checks * using new state in archiver * refactored much of core * editing all the precompute functions * done with most core refactor * fixed up some bugs in the clone comparisons * Merge branch 'state-service' into use-state-in-runtime * append current epoch atts * merged master * add missing setters * add new setters * fix other core methods * fix up transition * main service and forkchoice * fix rpc * integrated to powchain * some more changes * fix build * improve processing of deposits * fix error * prevent panic * comment * fix process att * gaz * fix up att process * resolve existing review comments * Merge branch 'master' into use-state-in-runtime * resolve another batch of gh comments * resolve broken cpt state * revise testutil to use the new state * begin updating the state transition func to pass in more compartmentalized args * finish editing transition function to return errors * block operations pretty much done with refactor * state transition fully refactored * got epoch processing completed * fix build in fork choice * fixing more of the build * fix up broken sync package * it builds nowww it buildssss * revert registry changes * Recompute on Read (#4627) * compute on read * fix up eth1 data votes * looking into slashings bug introduced in core/ * able to advance more slots * add logging * can now sync with testnet yay * remove the leaves algorithm and other merkle imports * expose initialize unsafe funcs * Update beacon-chain/db/kv/state.go * lint Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * include master * More Optimizations for New State (#4641) * map optimization * more optimizations * use a custom hasher * comment * block operations optimizations * Update beacon-chain/state/types.go Co-Authored-By: Raul Jordan <raul@prysmaticlabs.com> * fixed up various operations to use the validator index map access Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * archiver tests pass * fixing cache tests * cache tests passing * edited validator tests * powchain tests passing * halfway thru sync tests * more sync test fixes * add in tests for state/ * working through rpc tests * assignments tests passed * almost done with rpc/beacon tests * resolved painful validator test * fixed up even more tests * resolve tests * fix build * reduce a randao mixes copy * fixes under //beacon-chain/blockchain/... * build //beacon-chain/core/... * fixes * Runtime Optimizations (#4648) * parallelize shuffling * clean up * lint * fix build * use callback to read from registry * fix array roots and size map * new improvements * reduce hash allocs * improved shuffling * terence's review * use different method * raul's comment * new array roots * remove clone in pre-compute * Update beacon-chain/state/types.go Co-Authored-By: Raul Jordan <raul@prysmaticlabs.com> * raul's review * lint * fix build issues * fix visibility Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Merge branch 'use-state-in-runtime' of https://github.com/prysmaticlabs/geth-sharding into resolve-tests * fix visibility * build works for all * fix blockchain test * fix a few tests * fix more tests * resolve conf * sync * update validator in slashing * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * archiver passing * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * fixed rpc/validator * progress on core tests * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * resolve broken rpc tests * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * blockchain tests passed * fix up some tests in core * Merge branch 'master' of github.com:prysmaticlabs/prysm into resolve-tests * fix message diff * remove unnecessary save * Merge branch 'master' of github.com:prysmaticlabs/prysm into resolve-tests * Save validator after slashing * Update validators one by one * another update * fix everything * Merge branch 'resolve-tests' of https://github.com/prysmaticlabs/geth-sharding into resolve-tests * fix more precompute tests * fix blocks tests * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * more elegant fix * more helper fixes * Merge branch 'resolve-tests' of https://github.com/prysmaticlabs/geth-sharding into resolve-tests * change back ? * fix test * fix skip slot * fix test * reset caches * fix testutil * raceoff fixed * passing * Retrieve cached state in the beginning * lint * Merge branch 'master' of github.com:prysmaticlabs/prysm into resolve-tests * Fixed tests part 1 * Fixed rest of the tests * Merge branch 'master' into optimize-process-att * Minor changes to avoid copying, small refactor to reduce deplicated code * Merge branch 'master' into resolve-tests * Handle att req for slot 0 * New beacon state: Only populate merkle layers as needed, copy merkle layers on copy/clone. (#4689) * Only populate merkle layers as needed, copy merkle layers on copy/clone. * use custom copy * Make maps of correct size * slightly fast, doesn't wait for lock Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * Merge branch 'master' into resolve-tests * Target root can't be 0x00 * Merge refs/heads/master into resolve-tests * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * Don't use cache for current slot (may not be the right fix) * Merge branch 'resolve-tests' of git+ssh://github.com/prysmaticlabs/prysm into resolve-tests * Merge branch 'resolve-tests' of github.com:prysmaticlabs/prysm into resolve-tests * fixed up tests * Remove some copy for init sync. Not sure if it is safe enough for runtime though... testing... * Align with prev logic for process slots cachedState.Slot() < slot * Fix Initial Sync Flag (#4692) * fixes * fix up some test failures due to lack of nil checks * fix up some test failures due to lack of nil checks * fix up imports * revert some changes * imports Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Conflict * Conflict * resolve confs * resolving further conflicts * Better skip slot cache (#4694) * Return copy of skip slot cache state, disable skip slot cache on sync * fix * Fix pruning * Merge refs/heads/master into resolve-tests * Merge refs/heads/master into resolve-tests * copy on write method * gaz * fix confs * Merge refs/heads/resolve-tests into copy-on-write * fix tests * Merge branch 'copy-on-write' of github.com:prysmaticlabs/prysm into copy-on-write * fix up issues with broken tests * Merge refs/heads/resolve-tests into copy-on-write * Merge branch 'master' of github.com:prysmaticlabs/prysm into copy-on-write * remove extra update * remove debugging lines * gofmt * Merge refs/heads/master into copy-on-write * Merge refs/heads/master into copy-on-write * Merge refs/heads/master into copy-on-write * Merge branch 'master' of github.com:prysmaticlabs/prysm * Passing 1 to SetEndSlot * Better way to get genesis block * Merge branch 'master' of github.com:prysmaticlabs/prysm into bug/ApiGenesisBlock * Checking for nil genBlk * Testing conditional order * Reverting conditions, and no idea why build fails * Merge branch 'master' into bug/ApiGenesisBlock * Saving to genesis block root in tests * Merge branch 'bug/ApiGenesisBlock' of github.com:AgentJ-WR/prysm into bug/ApiGenesisBlock * Saving root * Merge branch 'master' of github.com:prysmaticlabs/prysm into bug/ApiGenesisBlock * Adding regression test * Updating regression test * Merge branch 'master' into bug/ApiGenesisBlock * Merge branch 'master' into bug/ApiGenesisBlock * Merge branch 'master' into bug/ApiGenesisBlock * Merge branch 'master' into bug/ApiGenesisBlock
This commit is contained in:
parent
5b83dffbe4
commit
e2faa391c3
@ -42,17 +42,14 @@ func (bs *Server) ListAttestations(
|
||||
var err error
|
||||
switch q := req.QueryFilter.(type) {
|
||||
case *ethpb.ListAttestationsRequest_Genesis:
|
||||
blks, err := bs.BeaconDB.Blocks(ctx, filters.NewFilter().SetStartSlot(0).SetEndSlot(0))
|
||||
genBlk, err := bs.BeaconDB.GenesisBlock(ctx)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not genesis block: %v", err)
|
||||
}
|
||||
if len(blks) == 0 {
|
||||
if genBlk == nil {
|
||||
return nil, status.Error(codes.Internal, "Could not find genesis block")
|
||||
}
|
||||
if len(blks) != 1 {
|
||||
return nil, status.Error(codes.Internal, "Found more than 1 genesis block")
|
||||
}
|
||||
genesisRoot, err := ssz.HashTreeRoot(blks[0].Block)
|
||||
genesisRoot, err := ssz.HashTreeRoot(genBlk.Block)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -98,6 +98,9 @@ func TestServer_ListAttestations_Genesis(t *testing.T) {
|
||||
if err := db.SaveBlock(ctx, blk); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.SaveGenesisBlockRoot(ctx, root); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
att := ðpb.Attestation{
|
||||
AggregationBits: bitfield.Bitlist{0b11},
|
||||
Data: ðpb.AttestationData{
|
||||
|
@ -135,24 +135,20 @@ func (bs *Server) ListBlocks(
|
||||
NextPageToken: nextPageToken,
|
||||
}, nil
|
||||
case *ethpb.ListBlocksRequest_Genesis:
|
||||
blks, err := bs.BeaconDB.Blocks(ctx, filters.NewFilter().SetStartSlot(0).SetEndSlot(0))
|
||||
genBlk, err := bs.BeaconDB.GenesisBlock(ctx)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "Could not retrieve blocks for genesis slot: %v", err)
|
||||
}
|
||||
numBlks := len(blks)
|
||||
if numBlks == 0 {
|
||||
if genBlk == nil {
|
||||
return nil, status.Error(codes.Internal, "Could not find genesis block")
|
||||
}
|
||||
if numBlks != 1 {
|
||||
return nil, status.Error(codes.Internal, "Found more than 1 genesis block")
|
||||
}
|
||||
root, err := ssz.HashTreeRoot(blks[0].Block)
|
||||
root, err := ssz.HashTreeRoot(genBlk.Block)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
containers := []*ethpb.BeaconBlockContainer{
|
||||
{
|
||||
Block: blks[0],
|
||||
Block: genBlk,
|
||||
BlockRoot: root[:],
|
||||
},
|
||||
}
|
||||
|
@ -106,6 +106,9 @@ func TestServer_ListBlocks_Genesis(t *testing.T) {
|
||||
if err := db.SaveBlock(ctx, blk); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.SaveGenesisBlockRoot(ctx, root); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
wanted := ðpb.ListBlocksResponse{
|
||||
BlockContainers: []*ethpb.BeaconBlockContainer{
|
||||
{
|
||||
@ -127,17 +130,61 @@ func TestServer_ListBlocks_Genesis(t *testing.T) {
|
||||
if !proto.Equal(wanted, res) {
|
||||
t.Errorf("Wanted %v, received %v", wanted, res)
|
||||
}
|
||||
}
|
||||
|
||||
// Should throw an error if there is more than 1 block
|
||||
// for the genesis slot.
|
||||
func TestServer_ListBlocks_Genesis_MultiBlocks(t *testing.T) {
|
||||
db := dbTest.SetupDB(t)
|
||||
defer dbTest.TeardownDB(t, db)
|
||||
|
||||
ctx := context.Background()
|
||||
bs := &Server{
|
||||
BeaconDB: db,
|
||||
}
|
||||
// Should return the proper genesis block if it exists.
|
||||
parentRoot := [32]byte{1, 2, 3}
|
||||
blk := ðpb.SignedBeaconBlock{
|
||||
Block: ðpb.BeaconBlock{
|
||||
Slot: 0,
|
||||
ParentRoot: parentRoot[:],
|
||||
},
|
||||
}
|
||||
root, err := ssz.HashTreeRoot(blk.Block)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.SaveBlock(ctx, blk); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.SaveGenesisBlockRoot(ctx, root); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
count := uint64(100)
|
||||
blks := make([]*ethpb.SignedBeaconBlock, count)
|
||||
blkContainers := make([]*ethpb.BeaconBlockContainer, count)
|
||||
for i := uint64(0); i < count; i++ {
|
||||
b := ðpb.SignedBeaconBlock{
|
||||
Block: ðpb.BeaconBlock{
|
||||
Slot: i,
|
||||
},
|
||||
}
|
||||
root, err := ssz.HashTreeRoot(b.Block)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
blks[i] = b
|
||||
blkContainers[i] = ðpb.BeaconBlockContainer{Block: b, BlockRoot: root[:]}
|
||||
}
|
||||
if err := db.SaveBlocks(ctx, blks); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Should throw an error if more than one blk returned.
|
||||
if _, err := bs.ListBlocks(ctx, ðpb.ListBlocksRequest{
|
||||
QueryFilter: ðpb.ListBlocksRequest_Genesis{
|
||||
Genesis: true,
|
||||
},
|
||||
}); err != nil && !strings.Contains(err.Error(), "Found more than 1") {
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user