Files
prysm/runtime/version/fork.go
terence 2f067c4164 Add supported / unsupported version for fork enum (#16030)
* gate unreleased forks

* Preston + Bastin's feedback

* Rename back to all versions

* Clean up, mark PR ready for review

* Changelog
2025-11-20 14:58:41 +00:00

93 lines
2.1 KiB
Go

package version
import (
"sort"
"github.com/pkg/errors"
)
const (
Phase0 = iota
Altair
Bellatrix
Capella
Deneb
Electra
Fulu
Gloas
)
var versionToString = map[int]string{
Phase0: "phase0",
Altair: "altair",
Bellatrix: "bellatrix",
Capella: "capella",
Deneb: "deneb",
Electra: "electra",
Fulu: "fulu",
Gloas: "gloas",
}
// stringToVersion and allVersions are populated in init()
var stringToVersion = map[string]int{}
var allVersions []int
var supportedVersions []int
// unsupportedVersions contains fork versions that exist in the enums but are not yet
// enabled on any supported network. These versions are removed from All().
var unsupportedVersions = map[int]struct{}{
Gloas: {},
}
// ErrUnrecognizedVersionName means a string does not match the list of canonical version names.
var ErrUnrecognizedVersionName = errors.New("version name doesn't map to a known value in the enum")
// FromString translates a canonical version name to the version number.
func FromString(name string) (int, error) {
v, ok := stringToVersion[name]
if !ok {
return 0, errors.Wrap(ErrUnrecognizedVersionName, name)
}
return v, nil
}
// String returns the canonical string form of a version.
// Unrecognized versions won't generate an error and are represented by the string "unknown version".
func String(version int) string {
name, ok := versionToString[version]
if !ok {
return "unknown version"
}
return name
}
// All returns a list of all supported fork versions.
func All() []int {
return supportedVersions
}
// IsUnsupported reports whether the provided version is currently gate-kept.
func IsUnsupported(version int) bool {
_, ok := unsupportedVersions[version]
return ok
}
func init() {
allVersions = make([]int, len(versionToString))
i := 0
for v, s := range versionToString {
allVersions[i] = v
stringToVersion[s] = v
i++
}
sort.Ints(allVersions)
supportedVersions = make([]int, 0, len(allVersions))
for _, v := range allVersions {
if _, skip := unsupportedVersions[v]; skip {
continue
}
supportedVersions = append(supportedVersions, v)
}
}