Use slot to determine fork version (#14653)

* Use slot to determine version

* gaz

* solve cyclic dependency

* Radek' review

* unit test

* gaz

* use require instead of assert

* fix test

* fix test

* fix TestGetAggregateAttestation

* fix ListAttestations test

* James' review

* Radek' review

* add extra checks to GetAttesterSlashingsV2

* fix matchingAtts

* improve tests + fix

* fix

* stop appending all non electra atts

* more tests

* changelog

* revert TestProduceSyncCommitteeContribution changes

---------

Co-authored-by: Radosław Kapka <rkapka@wp.pl>
Co-authored-by: rkapka <radoslaw.kapka@gmail.com>
This commit is contained in:
Sammy Rosso
2024-11-26 17:52:58 -05:00
committed by GitHub
parent 8025a483e2
commit 74bb0821a8
9 changed files with 501 additions and 209 deletions

View File

@@ -13,6 +13,7 @@ go_library(
"//config/params:go_default_library",
"//consensus-types/primitives:go_default_library",
"//math:go_default_library",
"//runtime/version:go_default_library",
"//time:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
@@ -32,6 +33,7 @@ go_test(
deps = [
"//config/params:go_default_library",
"//consensus-types/primitives:go_default_library",
"//runtime/version:go_default_library",
"//testing/assert:go_default_library",
"//testing/require:go_default_library",
"//time:go_default_library",

View File

@@ -9,6 +9,7 @@ import (
"github.com/prysmaticlabs/prysm/v5/config/params"
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
mathutil "github.com/prysmaticlabs/prysm/v5/math"
"github.com/prysmaticlabs/prysm/v5/runtime/version"
prysmTime "github.com/prysmaticlabs/prysm/v5/time"
"github.com/sirupsen/logrus"
)
@@ -81,6 +82,25 @@ func ToEpoch(slot primitives.Slot) primitives.Epoch {
return primitives.Epoch(slot.DivSlot(params.BeaconConfig().SlotsPerEpoch))
}
// ToForkVersion translates a slot into it's corresponding version.
func ToForkVersion(slot primitives.Slot) int {
epoch := ToEpoch(slot)
switch {
case epoch >= params.BeaconConfig().ElectraForkEpoch:
return version.Electra
case epoch >= params.BeaconConfig().DenebForkEpoch:
return version.Deneb
case epoch >= params.BeaconConfig().CapellaForkEpoch:
return version.Capella
case epoch >= params.BeaconConfig().BellatrixForkEpoch:
return version.Bellatrix
case epoch >= params.BeaconConfig().AltairForkEpoch:
return version.Altair
default:
return version.Phase0
}
}
// EpochStart returns the first slot number of the
// current epoch.
//

View File

@@ -7,6 +7,7 @@ import (
"github.com/prysmaticlabs/prysm/v5/config/params"
"github.com/prysmaticlabs/prysm/v5/consensus-types/primitives"
"github.com/prysmaticlabs/prysm/v5/runtime/version"
"github.com/prysmaticlabs/prysm/v5/testing/assert"
"github.com/prysmaticlabs/prysm/v5/testing/require"
prysmTime "github.com/prysmaticlabs/prysm/v5/time"
@@ -632,3 +633,58 @@ func TestSecondsUntilNextEpochStart(t *testing.T) {
require.Equal(t, true, IsEpochStart(currentSlot))
}
func TestToForkVersion(t *testing.T) {
t.Run("Electra fork version", func(t *testing.T) {
params.SetupTestConfigCleanup(t)
config := params.BeaconConfig()
config.ElectraForkEpoch = 100
params.OverrideBeaconConfig(config)
slot, err := EpochStart(params.BeaconConfig().ElectraForkEpoch)
require.NoError(t, err)
result := ToForkVersion(slot)
require.Equal(t, version.Electra, result)
})
t.Run("Deneb fork version", func(t *testing.T) {
slot, err := EpochStart(params.BeaconConfig().DenebForkEpoch)
require.NoError(t, err)
result := ToForkVersion(slot)
require.Equal(t, version.Deneb, result)
})
t.Run("Capella fork version", func(t *testing.T) {
slot, err := EpochStart(params.BeaconConfig().CapellaForkEpoch)
require.NoError(t, err)
result := ToForkVersion(slot)
require.Equal(t, version.Capella, result)
})
t.Run("Bellatrix fork version", func(t *testing.T) {
slot, err := EpochStart(params.BeaconConfig().BellatrixForkEpoch)
require.NoError(t, err)
result := ToForkVersion(slot)
require.Equal(t, version.Bellatrix, result)
})
t.Run("Altair fork version", func(t *testing.T) {
slot, err := EpochStart(params.BeaconConfig().AltairForkEpoch)
require.NoError(t, err)
result := ToForkVersion(slot)
require.Equal(t, version.Altair, result)
})
t.Run("Phase0 fork version", func(t *testing.T) {
slot, err := EpochStart(params.BeaconConfig().AltairForkEpoch)
require.NoError(t, err)
result := ToForkVersion(slot - 1)
require.Equal(t, version.Phase0, result)
})
}