Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aligning ETH2.0 spec - Make Epoch First Citizen (Package: Committee) #1477

Merged
merged 18 commits into from
Feb 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion beacon-chain/blockchain/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ func TestRunningChainService(t *testing.T) {
t.Fatalf("Can't get state from db %v", err)
}

validators := make([]*pb.ValidatorRecord, params.BeaconConfig().EpochLength*2)
validators := make([]*pb.ValidatorRecord, params.BeaconConfig().DepositsForChainStart)
randaoCommit := hashutil.RepeatHash([32]byte{}, 1)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ version: 1.0
test_cases:
- config:
epoch_length: 64
deposits_for_chain_start: 1000
deposits_for_chain_start: 5000
num_slots: 32 # Testing advancing state to slot < EpochLength
results:
slot: 32
num_validators: 1000
num_validators: 5000
- config:
epoch_length: 63
deposits_for_chain_start: 16384
Expand Down
10 changes: 4 additions & 6 deletions beacon-chain/core/balances/rewards_penalties_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ func TestChainHeadRewardsPenalties(t *testing.T) {
}

func TestInclusionDistRewards_Ok(t *testing.T) {
validators := make([]*pb.ValidatorRecord, config.EpochLength*4)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
Expand All @@ -217,10 +217,9 @@ func TestInclusionDistRewards_Ok(t *testing.T) {
}{
{[]uint64{}},
{[]uint64{237, 224}},
{[]uint64{237, 224, 2, 242}},
}
for _, tt := range tests {
validatorBalances := make([]uint64, config.EpochLength*4)
validatorBalances := make([]uint64, len(validators))
for i := 0; i < len(validatorBalances); i++ {
validatorBalances[i] = params.BeaconConfig().MaxDeposit
}
Expand Down Expand Up @@ -428,7 +427,7 @@ func TestInactivityExitedPenality(t *testing.T) {
}

func TestInactivityInclusionPenalty_Ok(t *testing.T) {
validators := make([]*pb.ValidatorRecord, config.EpochLength*4)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
Expand All @@ -445,7 +444,6 @@ func TestInactivityInclusionPenalty_Ok(t *testing.T) {
}{
{[]uint64{}},
{[]uint64{237, 224}},
{[]uint64{237, 224, 2, 242}},
}
for _, tt := range tests {
validatorBalances := make([]uint64, config.EpochLength*4)
Expand Down Expand Up @@ -507,7 +505,7 @@ func TestInactivityInclusionPenalty_NotOk(t *testing.T) {
}

func TestAttestationInclusionRewards(t *testing.T) {
validators := make([]*pb.ValidatorRecord, config.EpochLength*4)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
Expand Down
16 changes: 10 additions & 6 deletions beacon-chain/core/blocks/block_operations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
)

func TestProcessBlockRandao_UnequalBlockAndProposerRandao(t *testing.T) {
validators := make([]*pb.ValidatorRecord, config.EpochLength*2)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
Expand Down Expand Up @@ -48,7 +48,7 @@ func TestProcessBlockRandao_UnequalBlockAndProposerRandao(t *testing.T) {

func TestProcessBlockRandao_CreateRandaoMixAndUpdateProposer(t *testing.T) {
randaoCommit := hashutil.RepeatHash([32]byte{}, 1)
validators := make([]*pb.ValidatorRecord, config.EpochLength*2)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
Expand Down Expand Up @@ -296,14 +296,14 @@ func TestProcessProposerSlashings_AppliesCorrectStatus(t *testing.T) {
// We test the case when data is correct and verify the validator
// registry has been updated.

validators := make([]*pb.ValidatorRecord, config.EpochLength*2)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
PenalizedEpoch: 2,
}
}
validatorBalances := make([]uint64, config.EpochLength*2)
validatorBalances := make([]uint64, len(validators))
for i := 0; i < len(validatorBalances); i++ {
validatorBalances[i] = config.MaxDeposit
}
Expand Down Expand Up @@ -654,13 +654,17 @@ func TestProcessAttesterSlashings_EmptyVoteIndexIntersection(t *testing.T) {
func TestProcessAttesterSlashings_AppliesCorrectStatus(t *testing.T) {
// We test the case when data is correct and verify the validator
// registry has been updated.
validators := make([]*pb.ValidatorRecord, config.EpochLength*2)
validators := make([]*pb.ValidatorRecord, config.DepositsForChainStart)
for i := 0; i < len(validators); i++ {
validators[i] = &pb.ValidatorRecord{
ExitEpoch: config.FarFutureEpoch,
PenalizedEpoch: 6,
}
}
validatorBalances := make([]uint64, len(validators))
for i := 0; i < len(validatorBalances); i++ {
validatorBalances[i] = config.MaxDeposit
}

att1 := &pb.AttestationData{
Slot: 5,
Expand Down Expand Up @@ -689,7 +693,7 @@ func TestProcessAttesterSlashings_AppliesCorrectStatus(t *testing.T) {
beaconState := &pb.BeaconState{
ValidatorRegistry: validators,
Slot: currentSlot,
ValidatorBalances: []uint64{32, 32, 32, 32, 32, 32},
ValidatorBalances: validatorBalances,
LatestPenalizedBalances: []uint64{0},
}
block := &pb.BeaconBlock{
Expand Down
1 change: 0 additions & 1 deletion beacon-chain/core/epoch/epoch_operations.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,6 @@ func InclusionDistance(state *pb.BeaconState, validatorIndex uint64) (uint64, er
if err != nil {
return 0, fmt.Errorf("could not get attestation participants: %v", err)
}

for _, index := range participatedValidators {
if index == validatorIndex {
return attestation.SlotIncluded - attestation.Data.Slot, nil
Expand Down
30 changes: 15 additions & 15 deletions beacon-chain/core/epoch/epoch_operations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ func TestHeadAttestationsNotOk(t *testing.T) {
}

func TestWinningRootOk(t *testing.T) {
state := buildState(0, config.EpochLength*2)
state := buildState(0, config.DepositsForChainStart)

// Generate 10 roots ([]byte{100}...[]byte{110})
var attestations []*pb.PendingAttestationRecord
Expand Down Expand Up @@ -347,7 +347,7 @@ func TestWinningRootOk(t *testing.T) {
}

func TestWinningRootCantGetParticipantBitfield(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

attestations := []*pb.PendingAttestationRecord{
{Data: &pb.AttestationData{
Expand All @@ -364,7 +364,7 @@ func TestWinningRootCantGetParticipantBitfield(t *testing.T) {
}

func TestAttestingValidatorsOk(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

var attestations []*pb.PendingAttestationRecord
for i := 0; i < 10; i++ {
Expand All @@ -386,14 +386,14 @@ func TestAttestingValidatorsOk(t *testing.T) {
t.Fatalf("Could not execute AttestingValidators: %v", err)
}

// Verify the winner root is attested by validator 45 based on shuffling.
if !reflect.DeepEqual(attestedValidators, []uint64{45}) {
t.Errorf("Active validators don't match. Wanted:[109, 97], Got: %v", attestedValidators)
// Verify the winner root is attested by validator 237 224 based on shuffling.
if !reflect.DeepEqual(attestedValidators, []uint64{237, 224}) {
t.Errorf("Active validators don't match. Wanted:[237,224], Got: %v", attestedValidators)
}
}

func TestAttestingValidatorsCantGetWinningRoot(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

attestation := &pb.PendingAttestationRecord{
Data: &pb.AttestationData{
Expand All @@ -410,7 +410,7 @@ func TestAttestingValidatorsCantGetWinningRoot(t *testing.T) {

func TestTotalAttestingBalanceOk(t *testing.T) {
validatorsPerCommittee := uint64(2)
state := buildState(0, config.EpochLength*validatorsPerCommittee)
state := buildState(0, config.DepositsForChainStart)

// Generate 10 roots ([]byte{100}...[]byte{110})
var attestations []*pb.PendingAttestationRecord
Expand Down Expand Up @@ -440,7 +440,7 @@ func TestTotalAttestingBalanceOk(t *testing.T) {
}

func TestTotalAttestingBalanceCantGetWinningRoot(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

attestation := &pb.PendingAttestationRecord{
Data: &pb.AttestationData{
Expand Down Expand Up @@ -471,7 +471,7 @@ func TestTotalBalance(t *testing.T) {
}

func TestInclusionSlotOk(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

state.LatestAttestations = []*pb.PendingAttestationRecord{
{Data: &pb.AttestationData{},
Expand All @@ -484,7 +484,7 @@ func TestInclusionSlotOk(t *testing.T) {
ParticipationBitfield: []byte{0xFF},
SlotIncluded: 102},
}
slot, err := InclusionSlot(state, 45)
slot, err := InclusionSlot(state, 237)
if err != nil {
t.Fatalf("Could not execute InclusionSlot: %v", err)
}
Expand All @@ -495,7 +495,7 @@ func TestInclusionSlotOk(t *testing.T) {
}

func TestInclusionSlotBadBitfield(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)
state.LatestAttestations = []*pb.PendingAttestationRecord{
{Data: &pb.AttestationData{},
ParticipationBitfield: []byte{},
Expand All @@ -519,14 +519,14 @@ func TestInclusionSlotNotFound(t *testing.T) {
}

func TestInclusionDistanceOk(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

state.LatestAttestations = []*pb.PendingAttestationRecord{
{Data: &pb.AttestationData{},
ParticipationBitfield: []byte{0xFF},
SlotIncluded: 100},
}
distance, err := InclusionDistance(state, 45)
distance, err := InclusionDistance(state, 237)
if err != nil {
t.Fatalf("Could not execute InclusionDistance: %v", err)
}
Expand All @@ -540,7 +540,7 @@ func TestInclusionDistanceOk(t *testing.T) {
}

func TestInclusionDistanceBadBitfield(t *testing.T) {
state := buildState(0, config.EpochLength)
state := buildState(0, config.DepositsForChainStart)

state.LatestAttestations = []*pb.PendingAttestationRecord{
{Data: &pb.AttestationData{},
Expand Down
4 changes: 2 additions & 2 deletions beacon-chain/core/epoch/epoch_processing.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func CanProcessValidatorRegistry(state *pb.BeaconState) bool {
if state.FinalizedSlot <= state.ValidatorRegistryUpdateSlot {
return false
}
shardsProcessed := validators.CurrCommitteesCountPerSlot(state) * config.EpochLength
shardsProcessed := helpers.CurrentEpochCommitteeCount(state) * config.EpochLength
fmt.Println(shardsProcessed)
startShard := state.CurrentEpochStartShard
for i := startShard; i < shardsProcessed; i++ {
Expand Down Expand Up @@ -254,7 +254,7 @@ func ProcessValidatorRegistry(
state.CurrentEpochCalculationSlot = state.Slot

nextStartShard := (state.CurrentEpochStartShard +
validators.CurrCommitteesCountPerSlot(state)*config.EpochLength) %
helpers.CurrentEpochCommitteeCount(state)*config.EpochLength) %
config.EpochLength
state.CurrentEpochStartShard = nextStartShard

Expand Down
6 changes: 3 additions & 3 deletions beacon-chain/core/epoch/epoch_processing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ func TestProcessFinalization(t *testing.T) {
}

func TestProcessCrosslinksOk(t *testing.T) {
state := buildState(5, 2*config.EpochLength)
state := buildState(5, config.DepositsForChainStart)
state.LatestCrosslinks = []*pb.CrosslinkRecord{{}, {}}

var attestations []*pb.PendingAttestationRecord
Expand Down Expand Up @@ -331,7 +331,7 @@ func TestProcessCrosslinksOk(t *testing.T) {
}

func TestProcessCrosslinksNoParticipantsBitField(t *testing.T) {
state := buildState(5, 2*config.EpochLength)
state := buildState(5, config.DepositsForChainStart)
state.LatestCrosslinks = []*pb.CrosslinkRecord{{}, {}}

attestations := []*pb.PendingAttestationRecord{
Expand Down Expand Up @@ -377,7 +377,7 @@ func TestProcessEjectionsOk(t *testing.T) {
}

func TestCanProcessValidatorRegistry(t *testing.T) {
crosslinks := make([]*pb.CrosslinkRecord, config.EpochLength)
crosslinks := make([]*pb.CrosslinkRecord, config.DepositsForChainStart)
for i := 0; i < len(crosslinks); i++ {
crosslinks[i] = &pb.CrosslinkRecord{
Slot: 101,
Expand Down
2 changes: 2 additions & 0 deletions beacon-chain/core/helpers/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
srcs = [
"committee.go",
"randao.go",
"slot_epoch.go",
"validators.go",
Expand All @@ -19,6 +20,7 @@ go_library(
go_test(
name = "go_default_test",
srcs = [
"committee_test.go",
"randao_test.go",
"slot_epoch_test.go",
"validators_test.go",
Expand Down
Loading