mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-08 10:41:19 +00:00
83179376d4
* Clean testutil, change tool names to Deterministic * Cleanup errors * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into clean-testutil * Fix bug with generating deposits * Fix a few tests * Fix most tests * Clean up some tests * Remove err pt. 1 * Remove err pt. 2 * Change tests to use genesis state util * Remove err from deposits * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Remove circular dependency * Remove uncompressed signature test * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Merge branch 'master' into clean-testutil * Goimports * gazelle * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Add back error handling * New attestation pool (#4185) * New pool * Better namings * Fmt * Gazelle * Merge branch 'master' of https://github.com/prysmaticlabs/prysm into define-pool * Raul's feedback * Raul's feedback * Log peer conected log for incoming connections (#4173) * Log peer conected log for incoming connections * Merge branch 'master' into peerconnected * Merge branch 'master' into peerconnected * Update handshake.go * Update handshake.go * Merge branch 'master' into peerconnected * Merge branch 'master' into peerconnected * Attestation pool to use go-cache (#4187) * Update EthereumAPIs (#4186) * include new patch targeting latest ethapis master * ensure project builds * Merge branch 'master' into update-all-api * fix up committees * Merge branch 'update-all-api' of github.com:prysmaticlabs/prysm into update-all-api * include latest eth apis * Merge branch 'master' into update-all-api * update block tests * Merge branch 'update-all-api' of github.com:prysmaticlabs/prysm into update-all-api * Merge branch 'master' into update-all-api * add todos * Implement GetValidator RPC Endpoint (#4188) * include new patch targeting latest ethapis master * ensure project builds * Merge branch 'master' into update-all-api * fix up committees * Merge branch 'update-all-api' of github.com:prysmaticlabs/prysm into update-all-api * include latest eth apis * Merge branch 'master' into update-all-api * update block tests * Merge branch 'update-all-api' of github.com:prysmaticlabs/prysm into update-all-api * Merge branch 'master' into update-all-api * add todos * implement get validator rpc * add test for get validator * table driven test * fix up test * fix confs * tests for more cases * fix up tests and add out of range * Slasher optimization (#4172) * size * batching and concurrency improvements * gaz * merge fixes * fix comment * fix test * fix test * fix build * ethpb * ethpb * fix test * fix comment * add benchmark * fix benchmark * Handle error for all testutil uses * Fix errors * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Revert error handling Revert "Fix errors" This reverts commit db081f5486f62c854e7a34e792f5e380cfa922e7. Revert "Handle error for all testutil uses" This reverts commit bdabef230632dd184491c2dad63c7d3e74a3861b. Revert "Add back error handling" This reverts commit da7e3d2020cd906f45f452d4e441b566f2d5c8aa. * Change genesis state func to use testing.T * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Fix conflict * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Merge branch 'master' into clean-testutil * Merge branch 'master' into clean-testutil * Captialize other logs * Merge branch 'clean-testutil' of https://github.com/0xKiwi/Prysm into clean-testutil * Merge branch 'master' of https://github.com/prysmaticlabs/Prysm into clean-testutil * Merge branch 'master' into clean-testutil
186 lines
6.1 KiB
Go
186 lines
6.1 KiB
Go
package state_test
|
|
|
|
import (
|
|
"bytes"
|
|
"reflect"
|
|
"testing"
|
|
|
|
ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/state"
|
|
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
|
"github.com/prysmaticlabs/prysm/shared/hashutil"
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
"github.com/prysmaticlabs/prysm/shared/testutil"
|
|
)
|
|
|
|
func TestGenesisBeaconState_OK(t *testing.T) {
|
|
genesisEpochNumber := uint64(0)
|
|
|
|
if !bytes.Equal(params.BeaconConfig().GenesisForkVersion, []byte{0, 0, 0, 0}) {
|
|
t.Error("GenesisSlot( should be {0,0,0,0} for these tests to pass")
|
|
}
|
|
genesisForkVersion := params.BeaconConfig().GenesisForkVersion
|
|
|
|
if params.BeaconConfig().ZeroHash != [32]byte{} {
|
|
t.Error("ZeroHash should be all 0s for these tests to pass")
|
|
}
|
|
|
|
if params.BeaconConfig().EpochsPerHistoricalVector != 65536 {
|
|
t.Error("EpochsPerHistoricalVector should be 8192 for these tests to pass")
|
|
}
|
|
latestRandaoMixesLength := int(params.BeaconConfig().EpochsPerHistoricalVector)
|
|
|
|
if params.BeaconConfig().HistoricalRootsLimit != 16777216 {
|
|
t.Error("HistoricalRootsLimit should be 16777216 for these tests to pass")
|
|
}
|
|
|
|
depositsForChainStart := 100
|
|
|
|
if params.BeaconConfig().EpochsPerSlashingsVector != 8192 {
|
|
t.Error("EpochsPerSlashingsVector should be 8192 for these tests to pass")
|
|
}
|
|
|
|
genesisTime := uint64(99999)
|
|
deposits, _, _ := testutil.DeterministicDepositsAndKeys(uint64(depositsForChainStart))
|
|
eth1Data, err := testutil.DeterministicEth1Data(len(deposits))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
newState, err := state.GenesisBeaconState(deposits, genesisTime, eth1Data)
|
|
if err != nil {
|
|
t.Fatalf("could not execute GenesisBeaconState: %v", err)
|
|
}
|
|
|
|
// Misc fields checks.
|
|
if newState.Slot != 0 {
|
|
t.Error("Slot was not correctly initialized")
|
|
}
|
|
if !reflect.DeepEqual(*newState.Fork, pb.Fork{
|
|
PreviousVersion: genesisForkVersion,
|
|
CurrentVersion: genesisForkVersion,
|
|
Epoch: genesisEpochNumber,
|
|
}) {
|
|
t.Error("Fork was not correctly initialized")
|
|
}
|
|
|
|
// Validator registry fields checks.
|
|
if len(newState.Validators) != depositsForChainStart {
|
|
t.Error("Validators was not correctly initialized")
|
|
}
|
|
if newState.Validators[0].ActivationEpoch != 0 {
|
|
t.Error("Validators was not correctly initialized")
|
|
}
|
|
if newState.Validators[0].ActivationEligibilityEpoch != 0 {
|
|
t.Error("Validators was not correctly initialized")
|
|
}
|
|
if len(newState.Balances) != depositsForChainStart {
|
|
t.Error("Balances was not correctly initialized")
|
|
}
|
|
|
|
// Randomness and committees fields checks.
|
|
if len(newState.RandaoMixes) != latestRandaoMixesLength {
|
|
t.Error("Length of RandaoMixes was not correctly initialized")
|
|
}
|
|
if !bytes.Equal(newState.RandaoMixes[0], eth1Data.BlockHash) {
|
|
t.Error("RandaoMixes was not correctly initialized")
|
|
}
|
|
|
|
// Finality fields checks.
|
|
if newState.PreviousJustifiedCheckpoint.Epoch != genesisEpochNumber {
|
|
t.Error("PreviousJustifiedCheckpoint.Epoch was not correctly initialized")
|
|
}
|
|
if newState.CurrentJustifiedCheckpoint.Epoch != genesisEpochNumber {
|
|
t.Error("JustifiedEpoch was not correctly initialized")
|
|
}
|
|
if newState.FinalizedCheckpoint.Epoch != genesisEpochNumber {
|
|
t.Error("FinalizedSlot was not correctly initialized")
|
|
}
|
|
if newState.JustificationBits[0] != 0x00 {
|
|
t.Error("JustificationBits was not correctly initialized")
|
|
}
|
|
|
|
// Recent state checks.
|
|
if !reflect.DeepEqual(newState.Slashings, make([]uint64, params.BeaconConfig().EpochsPerSlashingsVector)) {
|
|
t.Error("Slashings was not correctly initialized")
|
|
}
|
|
if !reflect.DeepEqual(newState.CurrentEpochAttestations, []*pb.PendingAttestation{}) {
|
|
t.Error("CurrentEpochAttestations was not correctly initialized")
|
|
}
|
|
if !reflect.DeepEqual(newState.PreviousEpochAttestations, []*pb.PendingAttestation{}) {
|
|
t.Error("PreviousEpochAttestations was not correctly initialized")
|
|
}
|
|
|
|
zeroHash := params.BeaconConfig().ZeroHash[:]
|
|
// History root checks.
|
|
if !bytes.Equal(newState.StateRoots[0], zeroHash) {
|
|
t.Error("StateRoots was not correctly initialized")
|
|
}
|
|
if !bytes.Equal(newState.BlockRoots[0], zeroHash) {
|
|
t.Error("BlockRoots was not correctly initialized")
|
|
}
|
|
|
|
// Deposit root checks.
|
|
if !bytes.Equal(newState.Eth1Data.DepositRoot, eth1Data.DepositRoot) {
|
|
t.Error("Eth1Data DepositRoot was not correctly initialized")
|
|
}
|
|
if !reflect.DeepEqual(newState.Eth1DataVotes, []*ethpb.Eth1Data{}) {
|
|
t.Error("Eth1DataVotes was not correctly initialized")
|
|
}
|
|
}
|
|
|
|
func TestGenesisState_HashEquality(t *testing.T) {
|
|
helpers.ClearAllCaches()
|
|
deposits, _, _ := testutil.DeterministicDepositsAndKeys(100)
|
|
state1, err := state.GenesisBeaconState(deposits, 0, ðpb.Eth1Data{BlockHash: make([]byte, 32)})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
state2, err := state.GenesisBeaconState(deposits, 0, ðpb.Eth1Data{BlockHash: make([]byte, 32)})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
root1, err1 := hashutil.HashProto(state1)
|
|
root2, err2 := hashutil.HashProto(state2)
|
|
|
|
if err1 != nil || err2 != nil {
|
|
t.Fatalf("Failed to marshal state to bytes: %v %v", err1, err2)
|
|
}
|
|
|
|
if root1 != root2 {
|
|
t.Fatalf("Tree hash of two genesis states should be equal, received %#x == %#x", root1, root2)
|
|
}
|
|
}
|
|
|
|
func TestGenesisState_InitializesLatestBlockHashes(t *testing.T) {
|
|
helpers.ClearAllCaches()
|
|
s, err := state.GenesisBeaconState(nil, 0, ðpb.Eth1Data{})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
got, want := len(s.BlockRoots), int(params.BeaconConfig().SlotsPerHistoricalRoot)
|
|
if want != got {
|
|
t.Errorf("Wrong number of recent block hashes. Got: %d Want: %d", got, want)
|
|
}
|
|
|
|
got = cap(s.BlockRoots)
|
|
if want != got {
|
|
t.Errorf("The slice underlying array capacity is wrong. Got: %d Want: %d", got, want)
|
|
}
|
|
|
|
for _, h := range s.BlockRoots {
|
|
if !bytes.Equal(h, params.BeaconConfig().ZeroHash[:]) {
|
|
t.Errorf("Unexpected non-zero hash data: %v", h)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenesisState_FailsWithoutEth1data(t *testing.T) {
|
|
helpers.ClearAllCaches()
|
|
_, err := state.GenesisBeaconState(nil, 0, nil)
|
|
if err == nil || err.Error() != "no eth1data provided for genesis state" {
|
|
t.Errorf("Did not receive eth1data error with nil eth1data, got %v", err)
|
|
}
|
|
}
|