Search in sources :

Example 1 with SszVector

use of tech.pegasys.teku.infrastructure.ssz.SszVector in project teku by ConsenSys.

the class SyncCommitteeUtil method getSyncSubcommittees.

public Map<UInt64, SyncSubcommitteeAssignments> getSyncSubcommittees(final BeaconState state, final UInt64 epoch) {
    final UInt64 syncCommitteePeriod = computeSyncCommitteePeriod(epoch);
    final UInt64 currentEpoch = beaconStateAccessors.getCurrentEpoch(state);
    final UInt64 currentSyncCommitteePeriod = computeSyncCommitteePeriod(currentEpoch);
    checkArgument(isStateUsableForCommitteeCalculationAtEpoch(state, epoch), "State must be in the same or previous sync committee period. Cannot calculate epoch %s from state at slot %s", epoch, state.getSlot());
    final BeaconStateAltair altairState = BeaconStateAltair.required(state);
    return BeaconStateCache.getTransitionCaches(altairState).getSyncCommitteeCache().get(syncCommitteePeriod, period -> {
        final SyncCommittee syncCommittee;
        if (syncCommitteePeriod.equals(currentSyncCommitteePeriod)) {
            syncCommittee = altairState.getCurrentSyncCommittee();
        } else {
            syncCommittee = altairState.getNextSyncCommittee();
        }
        final int subcommitteeSize = getSubcommitteeSize();
        final SszVector<SszPublicKey> pubkeys = syncCommittee.getPubkeys();
        final Map<UInt64, SyncSubcommitteeAssignments.Builder> subcommitteeAssignments = new HashMap<>();
        for (int index = 0; index < pubkeys.size(); index++) {
            final BLSPublicKey pubkey = pubkeys.get(index).getBLSPublicKey();
            final UInt64 validatorIndex = UInt64.valueOf(validatorsUtil.getValidatorIndex(altairState, pubkey).orElseThrow(() -> new IllegalStateException("Unknown validator assigned to sync committee: " + pubkey)));
            final int subcommitteeIndex = index / subcommitteeSize;
            final int subcommitteeParticipationIndex = index - (subcommitteeIndex * subcommitteeSize);
            // Note we're using plain HashMap here instead of a concurrent alternative as they
            // are created once here and then never modified so safe to access from multiple
            // threads.
            subcommitteeAssignments.computeIfAbsent(validatorIndex, __ -> SyncSubcommitteeAssignments.builder()).addAssignment(subcommitteeIndex, subcommitteeParticipationIndex).addCommitteeIndex(index);
        }
        return subcommitteeAssignments.entrySet().stream().collect(toUnmodifiableMap(Map.Entry::getKey, entry -> entry.getValue().build()));
    });
}
Also used : BeaconBlockBodySchemaAltair(tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.altair.BeaconBlockBodySchemaAltair) HashMap(java.util.HashMap) SszPublicKey(tech.pegasys.teku.spec.datastructures.type.SszPublicKey) Bytes(org.apache.tuweni.bytes.Bytes) SchemaDefinitionsAltair(tech.pegasys.teku.spec.schemas.SchemaDefinitionsAltair) ContributionAndProof(tech.pegasys.teku.spec.datastructures.operations.versions.altair.ContributionAndProof) SYNC_COMMITTEE_SUBNET_COUNT(tech.pegasys.teku.spec.constants.NetworkConstants.SYNC_COMMITTEE_SUBNET_COUNT) ArrayList(java.util.ArrayList) Collectors.toUnmodifiableMap(java.util.stream.Collectors.toUnmodifiableMap) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) ValidatorConstants(tech.pegasys.teku.spec.constants.ValidatorConstants) IntIterable(it.unimi.dsi.fastutil.ints.IntIterable) Map(java.util.Map) UInt64(tech.pegasys.teku.infrastructure.unsigned.UInt64) ForkInfo(tech.pegasys.teku.spec.datastructures.state.ForkInfo) SyncCommitteeContributionSchema(tech.pegasys.teku.spec.datastructures.operations.versions.altair.SyncCommitteeContributionSchema) Bytes32(org.apache.tuweni.bytes.Bytes32) SyncAggregateSchema(tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.altair.SyncAggregateSchema) Domain(tech.pegasys.teku.spec.constants.Domain) SyncCommitteeContribution(tech.pegasys.teku.spec.datastructures.operations.versions.altair.SyncCommitteeContribution) BeaconStateAccessorsAltair(tech.pegasys.teku.spec.logic.versions.altair.helpers.BeaconStateAccessorsAltair) MiscHelpers(tech.pegasys.teku.spec.logic.common.helpers.MiscHelpers) BLS(tech.pegasys.teku.bls.BLS) BLSSignature(tech.pegasys.teku.bls.BLSSignature) BLSPublicKey(tech.pegasys.teku.bls.BLSPublicKey) SyncAggregatorSelectionData(tech.pegasys.teku.spec.datastructures.operations.versions.altair.SyncAggregatorSelectionData) SyncSubcommitteeAssignments(tech.pegasys.teku.spec.datastructures.util.SyncSubcommitteeAssignments) MutableBeaconStateAltair(tech.pegasys.teku.spec.datastructures.state.beaconstate.versions.altair.MutableBeaconStateAltair) SignedContributionAndProof(tech.pegasys.teku.spec.datastructures.operations.versions.altair.SignedContributionAndProof) Hash(tech.pegasys.teku.infrastructure.crypto.Hash) SyncCommittee(tech.pegasys.teku.spec.datastructures.state.SyncCommittee) MutableBeaconState(tech.pegasys.teku.spec.datastructures.state.beaconstate.MutableBeaconState) List(java.util.List) IntList(it.unimi.dsi.fastutil.ints.IntList) MathHelpers.bytesToUInt64(tech.pegasys.teku.spec.logic.common.helpers.MathHelpers.bytesToUInt64) IntOpenHashSet(it.unimi.dsi.fastutil.ints.IntOpenHashSet) SszVector(tech.pegasys.teku.infrastructure.ssz.SszVector) IntSet(it.unimi.dsi.fastutil.ints.IntSet) BeaconStateCache(tech.pegasys.teku.spec.datastructures.state.beaconstate.BeaconStateCache) BeaconStateAltair(tech.pegasys.teku.spec.datastructures.state.beaconstate.versions.altair.BeaconStateAltair) IntArrayList(it.unimi.dsi.fastutil.ints.IntArrayList) SpecConfigAltair(tech.pegasys.teku.spec.config.SpecConfigAltair) SyncAggregate(tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.altair.SyncAggregate) BeaconState(tech.pegasys.teku.spec.datastructures.state.beaconstate.BeaconState) HashMap(java.util.HashMap) SyncCommittee(tech.pegasys.teku.spec.datastructures.state.SyncCommittee) SszPublicKey(tech.pegasys.teku.spec.datastructures.type.SszPublicKey) UInt64(tech.pegasys.teku.infrastructure.unsigned.UInt64) MathHelpers.bytesToUInt64(tech.pegasys.teku.spec.logic.common.helpers.MathHelpers.bytesToUInt64) BLSPublicKey(tech.pegasys.teku.bls.BLSPublicKey) HashMap(java.util.HashMap) Collectors.toUnmodifiableMap(java.util.stream.Collectors.toUnmodifiableMap) Map(java.util.Map) MutableBeaconStateAltair(tech.pegasys.teku.spec.datastructures.state.beaconstate.versions.altair.MutableBeaconStateAltair) BeaconStateAltair(tech.pegasys.teku.spec.datastructures.state.beaconstate.versions.altair.BeaconStateAltair)

Aggregations

Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)1 IntArrayList (it.unimi.dsi.fastutil.ints.IntArrayList)1 IntIterable (it.unimi.dsi.fastutil.ints.IntIterable)1 IntList (it.unimi.dsi.fastutil.ints.IntList)1 IntOpenHashSet (it.unimi.dsi.fastutil.ints.IntOpenHashSet)1 IntSet (it.unimi.dsi.fastutil.ints.IntSet)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Collectors.toUnmodifiableMap (java.util.stream.Collectors.toUnmodifiableMap)1 Bytes (org.apache.tuweni.bytes.Bytes)1 Bytes32 (org.apache.tuweni.bytes.Bytes32)1 BLS (tech.pegasys.teku.bls.BLS)1 BLSPublicKey (tech.pegasys.teku.bls.BLSPublicKey)1 BLSSignature (tech.pegasys.teku.bls.BLSSignature)1 Hash (tech.pegasys.teku.infrastructure.crypto.Hash)1 SszVector (tech.pegasys.teku.infrastructure.ssz.SszVector)1 UInt64 (tech.pegasys.teku.infrastructure.unsigned.UInt64)1 SpecConfigAltair (tech.pegasys.teku.spec.config.SpecConfigAltair)1