mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-06 01:32:18 +00:00
1b5b8a57e0
* Update io_kubernetes_build commit hash to 1246899 * Update dependency build_bazel_rules_nodejs to v0.33.1 * Update dependency com_github_hashicorp_golang_lru to v0.5.1 * Update libp2p * Update io_bazel_rules_k8s commit hash to e68d5d7 * Starting to remove old protos * Bazel build proto passes * Fixing pb version * Cleaned up core package * Fixing tests * 6 tests failing * Update proto bugs * Fixed incorrect validator ordering proto * Sync with master * Update go-ssz commit * Removed bad copies from v1alpha1 folder * add json spec json to pb handler * add nested proto example * proto/testing test works * fix refactoring build failures * use merged ssz * push latest changes * used forked json encoding * used forked json encoding * fix warning * fix build issues * fix test and lint * fix build * lint
53 lines
2.0 KiB
Go
53 lines
2.0 KiB
Go
package helpers
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
|
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
)
|
|
|
|
var (
|
|
// ErrAttestationDataSlotNilState is returned when a nil state argument
|
|
// is provided to AttestationDataSlot.
|
|
ErrAttestationDataSlotNilState = errors.New("nil state provided for AttestationDataSlot")
|
|
// ErrAttestationDataSlotNilData is returned when a nil attestation data
|
|
// argument is provided to AttestationDataSlot.
|
|
ErrAttestationDataSlotNilData = errors.New("nil data provided for AttestationDataSlot")
|
|
)
|
|
|
|
// AttestationDataSlot returns current slot of AttestationData for given state
|
|
//
|
|
// Spec pseudocode definition:
|
|
// def get_attestation_data_slot(state: BeaconState, data: AttestationData) -> Slot:
|
|
// """
|
|
// Return the slot corresponding to the attestation ``data``.
|
|
// """
|
|
// committee_count = get_committee_count(state, data.target.epoch)
|
|
// offset = (data.crosslink.shard + SHARD_COUNT - get_start_shard(state, data.target.epoch)) % SHARD_COUNT
|
|
// return Slot(compute_start_slot_of_epoch(data.target.epoch) + offset // (committee_count // SLOTS_PER_EPOCH))
|
|
func AttestationDataSlot(state *pb.BeaconState, data *ethpb.AttestationData) (uint64, error) {
|
|
if state == nil {
|
|
return 0, ErrAttestationDataSlotNilState
|
|
}
|
|
if data == nil {
|
|
return 0, ErrAttestationDataSlotNilData
|
|
}
|
|
|
|
committeeCount, err := CommitteeCount(state, data.Target.Epoch)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
epochStartShardNumber, err := StartShard(state, data.Target.Epoch)
|
|
if err != nil { // This should never happen if CommitteeCount was successful
|
|
return 0, fmt.Errorf("could not determine epoch start shard: %v", err)
|
|
}
|
|
offset := (data.Crosslink.Shard + params.BeaconConfig().ShardCount -
|
|
epochStartShardNumber) % params.BeaconConfig().ShardCount
|
|
|
|
return StartSlot(data.Target.Epoch) + (offset / (committeeCount / params.BeaconConfig().SlotsPerEpoch)), nil
|
|
}
|