mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-04 00:44:27 +00:00
33774721bb
* Return error when genesis time or genesis root is not set * Merge refs/heads/master into fail-on-unset-fork-digest * move to own helpers * make it non public * Merge branch 'fail-on-unset-fork-digest' of https://github.com/prysmaticlabs/geth-sharding into fail-on-unset-fork-digest * lint * fix * return error * fix tests and error * Merge refs/heads/master into fail-on-unset-fork-digest * first round of test fixes * second round of fixes * Merge branch 'fail-on-unset-fork-digest' of https://github.com/prysmaticlabs/geth-sharding into fail-on-unset-fork-digest * lint * Merge refs/heads/master into fail-on-unset-fork-digest * gaz * Merge branch 'fail-on-unset-fork-digest' of https://github.com/prysmaticlabs/geth-sharding into fail-on-unset-fork-digest
45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package p2putils
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
)
|
|
|
|
// CreateForkDigest creates a fork digest from a genesis time and genesis
|
|
// validators root, utilizing the current slot to determine
|
|
// the active fork version in the node.
|
|
func CreateForkDigest(
|
|
genesisTime time.Time,
|
|
genesisValidatorsRoot []byte,
|
|
) ([4]byte, error) {
|
|
if genesisTime.IsZero() {
|
|
return [4]byte{}, errors.New("genesis time is not set")
|
|
}
|
|
if len(genesisValidatorsRoot) == 0 {
|
|
return [4]byte{}, errors.New("genesis validators root is not set")
|
|
}
|
|
currentSlot := helpers.SlotsSince(genesisTime)
|
|
currentEpoch := helpers.SlotToEpoch(currentSlot)
|
|
|
|
// We retrieve a list of scheduled forks by epoch.
|
|
// We loop through the keys in this map to determine the current
|
|
// fork version based on the current, time-based epoch number
|
|
// since the genesis time.
|
|
currentForkVersion := params.BeaconConfig().GenesisForkVersion
|
|
scheduledForks := params.BeaconConfig().ForkVersionSchedule
|
|
for epoch, forkVersion := range scheduledForks {
|
|
if epoch <= currentEpoch {
|
|
currentForkVersion = forkVersion
|
|
}
|
|
}
|
|
|
|
digest, err := helpers.ComputeForkDigest(currentForkVersion, genesisValidatorsRoot)
|
|
if err != nil {
|
|
return [4]byte{}, err
|
|
}
|
|
return digest, nil
|
|
}
|