diff --git a/pkg/config/protocol_config.go b/pkg/config/protocol_config.go index 88e43d8ad..fdf0422d5 100644 --- a/pkg/config/protocol_config.go +++ b/pkg/config/protocol_config.go @@ -106,8 +106,12 @@ func (p *ProtocolConfiguration) Validate() error { shouldBeDisabled = true } } - if p.ValidatorsCount != 0 && len(p.ValidatorsHistory) != 0 { - return errors.New("configuration should either have ValidatorsCount or ValidatorsHistory, not both") + if p.ValidatorsCount != 0 && len(p.ValidatorsHistory) != 0 || p.ValidatorsCount == 0 && len(p.ValidatorsHistory) == 0 { + return errors.New("configuration should either have one of ValidatorsCount or ValidatorsHistory, not both") + } + + if len(p.StandbyCommittee) == 0 { + return errors.New("configuration should include StandbyCommittee") } if len(p.StandbyCommittee) < int(p.ValidatorsCount) { return errors.New("validators count can't exceed the size of StandbyCommittee") diff --git a/pkg/config/protocol_config_test.go b/pkg/config/protocol_config_test.go index 91a11be96..8553bf4de 100644 --- a/pkg/config/protocol_config_test.go +++ b/pkg/config/protocol_config_test.go @@ -135,6 +135,20 @@ func TestProtocolConfigurationValidation(t *testing.T) { ValidatorsHistory: map[uint32]uint32{0: 1, 100: 4}, } require.NoError(t, p.Validate()) + p = &ProtocolConfiguration{ + StandbyCommittee: []string{}, + CommitteeHistory: map[uint32]uint32{0: 1, 100: 4}, + ValidatorsHistory: map[uint32]uint32{0: 1, 100: 4}, + } + err := p.Validate() + require.Error(t, err) + require.Contains(t, err.Error(), "configuration should include StandbyCommittee") + p = &ProtocolConfiguration{ + StandbyCommittee: []string{"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2"}, + } + err = p.Validate() + require.Error(t, err) + require.Contains(t, err.Error(), "configuration should either have one of ValidatorsCount or ValidatorsHistory, not both") } func TestProtocolConfigurationValidation_Hardforks(t *testing.T) { @@ -149,13 +163,20 @@ func TestProtocolConfigurationValidation_Hardforks(t *testing.T) { "Aspidochelone": 2, "Basilisk": 1, // Lower height in higher hard-fork. }, + StandbyCommittee: []string{ + "02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2", + }, + ValidatorsCount: 1, } require.Error(t, p.Validate()) p = &ProtocolConfiguration{ Hardforks: map[string]uint32{ "Aspidochelone": 2, "Basilisk": 2, // Same height is OK. + }, StandbyCommittee: []string{ + "02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2", }, + ValidatorsCount: 1, } require.NoError(t, p.Validate()) p = &ProtocolConfiguration{ @@ -163,18 +184,30 @@ func TestProtocolConfigurationValidation_Hardforks(t *testing.T) { "Aspidochelone": 2, "Basilisk": 3, // Larger height is OK. }, + StandbyCommittee: []string{ + "02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2", + }, + ValidatorsCount: 1, } require.NoError(t, p.Validate()) p = &ProtocolConfiguration{ Hardforks: map[string]uint32{ "Aspidochelone": 2, }, + StandbyCommittee: []string{ + "02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2", + }, + ValidatorsCount: 1, } require.NoError(t, p.Validate()) p = &ProtocolConfiguration{ Hardforks: map[string]uint32{ "Basilisk": 2, }, + StandbyCommittee: []string{ + "02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2", + }, + ValidatorsCount: 1, } require.NoError(t, p.Validate()) }