package v1 import ( "context" "testing" types "github.com/prysmaticlabs/eth2-types" stateTypes "github.com/prysmaticlabs/prysm/beacon-chain/state/types" "github.com/prysmaticlabs/prysm/config/params" ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1" "github.com/prysmaticlabs/prysm/testing/assert" "github.com/prysmaticlabs/prysm/testing/require" ) func TestBeaconState_RotateAttestations(t *testing.T) { st, err := InitializeFromProto(ðpb.BeaconState{ Slot: 1, CurrentEpochAttestations: []*ethpb.PendingAttestation{{Data: ðpb.AttestationData{Slot: 456}}}, PreviousEpochAttestations: []*ethpb.PendingAttestation{{Data: ðpb.AttestationData{Slot: 123}}}, }) require.NoError(t, err) require.NoError(t, st.RotateAttestations()) s, ok := st.(*BeaconState) require.Equal(t, true, ok) require.Equal(t, 0, len(s.currentEpochAttestations())) require.Equal(t, types.Slot(456), s.previousEpochAttestations()[0].Data.Slot) } func TestAppendBeyondIndicesLimit(t *testing.T) { zeroHash := params.BeaconConfig().ZeroHash mockblockRoots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot) for i := 0; i < len(mockblockRoots); i++ { mockblockRoots[i] = zeroHash[:] } mockstateRoots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot) for i := 0; i < len(mockstateRoots); i++ { mockstateRoots[i] = zeroHash[:] } mockrandaoMixes := make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector) for i := 0; i < len(mockrandaoMixes); i++ { mockrandaoMixes[i] = zeroHash[:] } newState, err := InitializeFromProto(ðpb.BeaconState{ Slot: 1, CurrentEpochAttestations: []*ethpb.PendingAttestation{{Data: ðpb.AttestationData{Slot: 456}}}, PreviousEpochAttestations: []*ethpb.PendingAttestation{{Data: ðpb.AttestationData{Slot: 123}}}, Validators: []*ethpb.Validator{}, Eth1Data: ðpb.Eth1Data{}, BlockRoots: mockblockRoots, StateRoots: mockstateRoots, RandaoMixes: mockrandaoMixes, }) require.NoError(t, err) _, err = newState.HashTreeRoot(context.Background()) require.NoError(t, err) st, ok := newState.(*BeaconState) require.Equal(t, true, ok) for i := stateTypes.FieldIndex(0); i < stateTypes.FieldIndex(params.BeaconConfig().BeaconStateFieldCount); i++ { st.dirtyFields[i] = true } _, err = st.HashTreeRoot(context.Background()) require.NoError(t, err) for i := 0; i < 10; i++ { assert.NoError(t, st.AppendValidator(ðpb.Validator{})) } assert.Equal(t, false, st.rebuildTrie[validators]) assert.NotEqual(t, len(st.dirtyIndices[validators]), 0) for i := 0; i < indicesLimit; i++ { assert.NoError(t, st.AppendValidator(ðpb.Validator{})) } assert.Equal(t, true, st.rebuildTrie[validators]) assert.Equal(t, len(st.dirtyIndices[validators]), 0) }