From 5f745dff72e471304d33131506a3352becefcec5 Mon Sep 17 00:00:00 2001 From: Ekaterina Pavlova Date: Thu, 18 Jan 2024 01:21:02 +0300 Subject: [PATCH] config: update validation with check committee ProtocolConfiguration section must include stand by committee and the number of validators or committee/validators history. Close #3247 Signed-off-by: Ekaterina Pavlova --- pkg/config/protocol_config.go | 8 ++++++-- pkg/config/protocol_config_test.go | 33 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) 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()) }