@lodestar/beacon-node 1.22.0-dev.ba80aa345a → 1.22.0-dev.d3d61af6bd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/impl/beacon/blocks/index.js +22 -10
- package/lib/api/impl/beacon/blocks/index.js.map +1 -1
- package/lib/api/impl/beacon/pool/index.js +31 -4
- package/lib/api/impl/beacon/pool/index.js.map +1 -1
- package/lib/api/impl/config/constants.d.ts +5 -1
- package/lib/api/impl/config/constants.js +7 -2
- package/lib/api/impl/config/constants.js.map +1 -1
- package/lib/api/impl/lodestar/index.js +2 -2
- package/lib/api/impl/lodestar/index.js.map +1 -1
- package/lib/api/impl/validator/index.js +37 -14
- package/lib/api/impl/validator/index.js.map +1 -1
- package/lib/chain/archiver/archiveBlocks.js +6 -7
- package/lib/chain/archiver/archiveBlocks.js.map +1 -1
- package/lib/chain/archiver/archiveStates.d.ts +3 -1
- package/lib/chain/archiver/archiveStates.js +6 -3
- package/lib/chain/archiver/archiveStates.js.map +1 -1
- package/lib/chain/archiver/index.js +1 -1
- package/lib/chain/archiver/index.js.map +1 -1
- package/lib/chain/balancesCache.js +2 -2
- package/lib/chain/balancesCache.js.map +1 -1
- package/lib/chain/blocks/importBlock.js +10 -9
- package/lib/chain/blocks/importBlock.js.map +1 -1
- package/lib/chain/blocks/index.js +2 -2
- package/lib/chain/blocks/index.js.map +1 -1
- package/lib/chain/blocks/types.d.ts +2 -2
- package/lib/chain/blocks/types.js.map +1 -1
- package/lib/chain/blocks/verifyBlock.js +4 -4
- package/lib/chain/blocks/verifyBlock.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -6
- package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
- package/lib/chain/blocks/verifyBlocksSanityChecks.js +3 -3
- package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
- package/lib/chain/blocks/writeBlockInputToDb.js +3 -3
- package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
- package/lib/chain/chain.d.ts +42 -0
- package/lib/chain/chain.js +53 -22
- package/lib/chain/chain.js.map +1 -1
- package/lib/chain/errors/attestationError.d.ts +13 -1
- package/lib/chain/errors/attestationError.js +10 -2
- package/lib/chain/errors/attestationError.js.map +1 -1
- package/lib/chain/errors/blockError.js +3 -4
- package/lib/chain/errors/blockError.js.map +1 -1
- package/lib/chain/forkChoice/index.js +9 -9
- package/lib/chain/forkChoice/index.js.map +1 -1
- package/lib/chain/historicalState/worker.js +4 -0
- package/lib/chain/historicalState/worker.js.map +1 -1
- package/lib/chain/initState.d.ts +3 -3
- package/lib/chain/initState.js +13 -13
- package/lib/chain/initState.js.map +1 -1
- package/lib/chain/interface.d.ts +2 -0
- package/lib/chain/interface.js.map +1 -1
- package/lib/chain/lightClient/index.js +9 -10
- package/lib/chain/lightClient/index.js.map +1 -1
- package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
- package/lib/chain/opPools/aggregatedAttestationPool.js +229 -63
- package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
- package/lib/chain/opPools/attestationPool.d.ts +22 -6
- package/lib/chain/opPools/attestationPool.js +61 -27
- package/lib/chain/opPools/attestationPool.js.map +1 -1
- package/lib/chain/opPools/opPool.d.ts +2 -2
- package/lib/chain/opPools/opPool.js +8 -6
- package/lib/chain/opPools/opPool.js.map +1 -1
- package/lib/chain/opPools/syncCommitteeMessagePool.js +4 -4
- package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
- package/lib/chain/opPools/syncContributionAndProofPool.js +4 -4
- package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
- package/lib/chain/opPools/utils.d.ts +2 -0
- package/lib/chain/opPools/utils.js +3 -0
- package/lib/chain/opPools/utils.js.map +1 -1
- package/lib/chain/produceBlock/produceBlockBody.js +7 -6
- package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
- package/lib/chain/regen/queued.d.ts +6 -1
- package/lib/chain/regen/queued.js +41 -3
- package/lib/chain/regen/queued.js.map +1 -1
- package/lib/chain/regen/regen.d.ts +1 -1
- package/lib/chain/regen/regen.js +50 -14
- package/lib/chain/regen/regen.js.map +1 -1
- package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
- package/lib/chain/seenCache/seenAttestationData.js +5 -3
- package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
- package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
- package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
- package/lib/chain/seenCache/seenGossipBlockInput.js +3 -4
- package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
- package/lib/chain/serializeState.d.ts +6 -0
- package/lib/chain/serializeState.js +22 -0
- package/lib/chain/serializeState.js.map +1 -0
- package/lib/chain/shufflingCache.js +2 -3
- package/lib/chain/shufflingCache.js.map +1 -1
- package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
- package/lib/chain/stateCache/blockStateCacheImpl.js +8 -5
- package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
- package/lib/chain/stateCache/datastore/file.js +5 -5
- package/lib/chain/stateCache/datastore/file.js.map +1 -1
- package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
- package/lib/chain/stateCache/fifoBlockStateCache.js +6 -3
- package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
- package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js +7 -5
- package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -2
- package/lib/chain/stateCache/persistentCheckpointsCache.js +35 -60
- package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
- package/lib/chain/stateCache/types.d.ts +4 -0
- package/lib/chain/stateCache/types.js.map +1 -1
- package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
- package/lib/chain/validation/aggregateAndProof.js +26 -9
- package/lib/chain/validation/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/attestation.d.ts +27 -6
- package/lib/chain/validation/attestation.js +115 -37
- package/lib/chain/validation/attestation.js.map +1 -1
- package/lib/chain/validation/attesterSlashing.js +2 -1
- package/lib/chain/validation/attesterSlashing.js.map +1 -1
- package/lib/chain/validation/blobSidecar.js +4 -4
- package/lib/chain/validation/blobSidecar.js.map +1 -1
- package/lib/chain/validation/block.js +3 -4
- package/lib/chain/validation/block.js.map +1 -1
- package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
- package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
- package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
- package/lib/chain/validation/syncCommittee.js +2 -2
- package/lib/chain/validation/syncCommittee.js.map +1 -1
- package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
- package/lib/eth1/eth1DepositDataTracker.js +13 -2
- package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
- package/lib/eth1/eth1MergeBlockTracker.js +2 -3
- package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
- package/lib/eth1/index.d.ts +2 -0
- package/lib/eth1/index.js +8 -2
- package/lib/eth1/index.js.map +1 -1
- package/lib/eth1/interface.d.ts +4 -0
- package/lib/eth1/provider/eth1Provider.js +2 -3
- package/lib/eth1/provider/eth1Provider.js.map +1 -1
- package/lib/eth1/provider/utils.js +4 -5
- package/lib/eth1/provider/utils.js.map +1 -1
- package/lib/eth1/utils/depositContract.js +5 -5
- package/lib/eth1/utils/depositContract.js.map +1 -1
- package/lib/eth1/utils/deposits.d.ts +2 -2
- package/lib/eth1/utils/deposits.js +8 -7
- package/lib/eth1/utils/deposits.js.map +1 -1
- package/lib/eth1/utils/eth1Vote.js +2 -3
- package/lib/eth1/utils/eth1Vote.js.map +1 -1
- package/lib/execution/engine/http.d.ts +2 -2
- package/lib/execution/engine/http.js +19 -15
- package/lib/execution/engine/http.js.map +1 -1
- package/lib/execution/engine/interface.d.ts +4 -4
- package/lib/execution/engine/interface.js.map +1 -1
- package/lib/execution/engine/mock.d.ts +1 -0
- package/lib/execution/engine/mock.js +6 -0
- package/lib/execution/engine/mock.js.map +1 -1
- package/lib/execution/engine/payloadIdCache.d.ts +17 -0
- package/lib/execution/engine/payloadIdCache.js.map +1 -1
- package/lib/execution/engine/types.d.ts +29 -3
- package/lib/execution/engine/types.js +81 -0
- package/lib/execution/engine/types.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/metrics/metrics/beacon.d.ts +3 -0
- package/lib/metrics/metrics/beacon.js +6 -0
- package/lib/metrics/metrics/beacon.js.map +1 -1
- package/lib/metrics/metrics/lodestar.d.ts +30 -3
- package/lib/metrics/metrics/lodestar.js +63 -4
- package/lib/metrics/metrics/lodestar.js.map +1 -1
- package/lib/metrics/validatorMonitor.d.ts +1 -1
- package/lib/metrics/validatorMonitor.js +15 -10
- package/lib/metrics/validatorMonitor.js.map +1 -1
- package/lib/network/core/networkCore.js +2 -3
- package/lib/network/core/networkCore.js.map +1 -1
- package/lib/network/gossip/encoding.js +6 -2
- package/lib/network/gossip/encoding.js.map +1 -1
- package/lib/network/gossip/interface.d.ts +5 -5
- package/lib/network/gossip/interface.js.map +1 -1
- package/lib/network/gossip/topic.d.ts +1720 -129
- package/lib/network/gossip/topic.js +5 -5
- package/lib/network/gossip/topic.js.map +1 -1
- package/lib/network/interface.d.ts +2 -2
- package/lib/network/network.d.ts +2 -2
- package/lib/network/network.js.map +1 -1
- package/lib/network/peers/utils/assertPeerRelevance.js +3 -3
- package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
- package/lib/network/processor/gossipHandlers.js +10 -11
- package/lib/network/processor/gossipHandlers.js.map +1 -1
- package/lib/network/processor/gossipQueues/index.js +5 -2
- package/lib/network/processor/gossipQueues/index.js.map +1 -1
- package/lib/network/processor/gossipQueues/indexed.js +1 -0
- package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +2 -2
- package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -2
- package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +2 -2
- package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
- package/lib/sync/backfill/backfill.js +16 -17
- package/lib/sync/backfill/backfill.js.map +1 -1
- package/lib/sync/range/chain.js +2 -3
- package/lib/sync/range/chain.js.map +1 -1
- package/lib/sync/range/range.js +4 -4
- package/lib/sync/range/range.js.map +1 -1
- package/lib/sync/range/utils/chainTarget.js +2 -2
- package/lib/sync/range/utils/chainTarget.js.map +1 -1
- package/lib/sync/range/utils/hashBlocks.js +4 -4
- package/lib/sync/range/utils/hashBlocks.js.map +1 -1
- package/lib/sync/unknownBlock.js +13 -14
- package/lib/sync/unknownBlock.js.map +1 -1
- package/lib/util/bufferPool.d.ts +7 -2
- package/lib/util/bufferPool.js +13 -7
- package/lib/util/bufferPool.js.map +1 -1
- package/lib/util/sszBytes.d.ts +31 -8
- package/lib/util/sszBytes.js +85 -21
- package/lib/util/sszBytes.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/lightClient/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/chain/lightClient/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
import { ForkName } from "@lodestar/params";
|
|
2
|
-
import { phase0, Epoch, Slot, ValidatorIndex, RootHex } from "@lodestar/types";
|
|
2
|
+
import { phase0, Epoch, Slot, ValidatorIndex, RootHex, electra, Attestation } from "@lodestar/types";
|
|
3
3
|
import { CachedBeaconStateAllForks } from "@lodestar/state-transition";
|
|
4
4
|
import { IForkChoice } from "@lodestar/fork-choice";
|
|
5
|
+
import { ChainForkConfig } from "@lodestar/config";
|
|
5
6
|
import { InsertOutcome } from "./types.js";
|
|
7
|
+
type CommitteeIndex = number;
|
|
6
8
|
/**
|
|
7
|
-
*
|
|
9
|
+
* for electra, this is to consolidate aggregated attestations of the same attestation data into a single attestation to be included in block
|
|
10
|
+
* note that this is local definition in this file and it's NOT validator consolidation
|
|
11
|
+
*/
|
|
12
|
+
export type AttestationsConsolidation = {
|
|
13
|
+
byCommittee: Map<CommitteeIndex, AttestationNonParticipant>;
|
|
14
|
+
attData: phase0.AttestationData;
|
|
15
|
+
totalNotSeenCount: number;
|
|
16
|
+
score: number;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* This function returns not seen participation for a given epoch and slot and committe index.
|
|
8
20
|
* Return null if all validators are seen or no info to check.
|
|
9
21
|
*/
|
|
10
|
-
type GetNotSeenValidatorsFn = (epoch: Epoch,
|
|
22
|
+
type GetNotSeenValidatorsFn = (epoch: Epoch, slot: Slot, committeeIndex: number) => Set<number> | null;
|
|
11
23
|
type ValidateAttestationDataFn = (attData: phase0.AttestationData) => boolean;
|
|
12
24
|
/**
|
|
13
25
|
* Maintain a pool of aggregated attestations. Attestations can be retrieved for inclusion in a block
|
|
@@ -16,32 +28,48 @@ type ValidateAttestationDataFn = (attData: phase0.AttestationData) => boolean;
|
|
|
16
28
|
* Note that we want to remove attestations with attesters that were included in the chain.
|
|
17
29
|
*/
|
|
18
30
|
export declare class AggregatedAttestationPool {
|
|
19
|
-
private readonly
|
|
31
|
+
private readonly config;
|
|
32
|
+
/**
|
|
33
|
+
* post electra, different committees could have the same AttData and we have to consolidate attestations of the same
|
|
34
|
+
* data to be included in block, so we should group by data before index
|
|
35
|
+
* // TODO: make sure it does not affect performance for pre electra forks
|
|
36
|
+
*/
|
|
37
|
+
private readonly attestationGroupByIndexByDataHexBySlot;
|
|
20
38
|
private lowestPermissibleSlot;
|
|
39
|
+
constructor(config: ChainForkConfig);
|
|
21
40
|
/** For metrics to track size of the pool */
|
|
22
41
|
getAttestationCount(): {
|
|
23
42
|
attestationCount: number;
|
|
24
43
|
attestationDataCount: number;
|
|
25
44
|
};
|
|
26
|
-
add(attestation:
|
|
45
|
+
add(attestation: Attestation, dataRootHex: RootHex, attestingIndicesCount: number, committee: Uint32Array): InsertOutcome;
|
|
27
46
|
/** Remove attestations which are too old to be included in a block. */
|
|
28
47
|
prune(clockSlot: Slot): void;
|
|
48
|
+
getAttestationsForBlock(fork: ForkName, forkChoice: IForkChoice, state: CachedBeaconStateAllForks): Attestation[];
|
|
29
49
|
/**
|
|
30
|
-
* Get attestations to be included in a block. Returns $MAX_ATTESTATIONS items
|
|
50
|
+
* Get attestations to be included in a block pre-electra. Returns up to $MAX_ATTESTATIONS items
|
|
31
51
|
*/
|
|
32
|
-
|
|
52
|
+
getAttestationsForBlockPreElectra(fork: ForkName, forkChoice: IForkChoice, state: CachedBeaconStateAllForks): phase0.Attestation[];
|
|
53
|
+
/**
|
|
54
|
+
* Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
|
|
55
|
+
*/
|
|
56
|
+
getAttestationsForBlockElectra(fork: ForkName, forkChoice: IForkChoice, state: CachedBeaconStateAllForks): electra.Attestation[];
|
|
33
57
|
/**
|
|
34
58
|
* Get all attestations optionally filtered by `attestation.data.slot`
|
|
59
|
+
* Note this function is not fork aware and can potentially return a mix
|
|
60
|
+
* of phase0.Attestations and electra.Attestations.
|
|
61
|
+
* Caller of this function is expected to filtered result if they desire
|
|
62
|
+
* a homogenous array.
|
|
35
63
|
* @param bySlot slot to filter, `bySlot === attestation.data.slot`
|
|
36
64
|
*/
|
|
37
|
-
getAll(bySlot?: Slot):
|
|
65
|
+
getAll(bySlot?: Slot): Attestation[];
|
|
38
66
|
}
|
|
39
67
|
interface AttestationWithIndex {
|
|
40
|
-
attestation:
|
|
68
|
+
attestation: Attestation;
|
|
41
69
|
trueBitsCount: number;
|
|
42
70
|
}
|
|
43
71
|
type AttestationNonParticipant = {
|
|
44
|
-
attestation:
|
|
72
|
+
attestation: Attestation;
|
|
45
73
|
notSeenAttesterCount: number;
|
|
46
74
|
};
|
|
47
75
|
/**
|
|
@@ -68,11 +96,17 @@ export declare class MatchingDataAttestationGroup {
|
|
|
68
96
|
* @param notSeenAttestingIndices not seen attestting indices, i.e. indices in the same committee
|
|
69
97
|
* @returns an array of AttestationNonParticipant
|
|
70
98
|
*/
|
|
71
|
-
getAttestationsForBlock(notSeenAttestingIndices: Set<number>): AttestationNonParticipant[];
|
|
99
|
+
getAttestationsForBlock(fork: ForkName, notSeenAttestingIndices: Set<number>): AttestationNonParticipant[];
|
|
72
100
|
/** Get attestations for API. */
|
|
73
|
-
getAttestations():
|
|
101
|
+
getAttestations(): Attestation[];
|
|
74
102
|
}
|
|
75
103
|
export declare function aggregateInto(attestation1: AttestationWithIndex, attestation2: AttestationWithIndex): void;
|
|
104
|
+
/**
|
|
105
|
+
* Electra and after: Block proposer consolidates attestations with the same
|
|
106
|
+
* attestation data from different committee into a single attestation
|
|
107
|
+
* https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
|
|
108
|
+
*/
|
|
109
|
+
export declare function aggregateConsolidation({ byCommittee, attData }: AttestationsConsolidation): electra.Attestation;
|
|
76
110
|
/**
|
|
77
111
|
* Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
|
|
78
112
|
* has already attested or not.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { toHexString } from "@chainsafe/ssz";
|
|
2
1
|
import { aggregateSignatures } from "@chainsafe/blst";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { BitArray } from "@chainsafe/ssz";
|
|
3
|
+
import { ForkName, ForkSeq, isForkPostElectra, MAX_ATTESTATIONS, MAX_ATTESTATIONS_ELECTRA, MAX_COMMITTEES_PER_SLOT, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH, } from "@lodestar/params";
|
|
4
|
+
import { ssz, isElectraAttestation, } from "@lodestar/types";
|
|
5
5
|
import { computeEpochAtSlot, computeStartSlotAtEpoch, getBlockRootAtSlot, } from "@lodestar/state-transition";
|
|
6
6
|
import { EpochDifference } from "@lodestar/fork-choice";
|
|
7
|
-
import {
|
|
7
|
+
import { MapDef, toRootHex, assert } from "@lodestar/utils";
|
|
8
8
|
import { intersectUint8Arrays, IntersectResult } from "../../util/bitArray.js";
|
|
9
9
|
import { pruneBySlot, signatureFromBytesNoCheck } from "./utils.js";
|
|
10
10
|
import { InsertOutcome } from "./types.js";
|
|
@@ -16,13 +16,19 @@ import { InsertOutcome } from "./types.js";
|
|
|
16
16
|
*/
|
|
17
17
|
const MAX_RETAINED_ATTESTATIONS_PER_GROUP = 4;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Pre-electra, each slot has 64 committees, and each block has 128 attestations max so in average
|
|
20
20
|
* we get 2 attestation per groups.
|
|
21
21
|
* Starting from Jan 2024, we have a performance issue getting attestations for a block. Based on the
|
|
22
|
-
* fact that lot of groups will have only 1
|
|
22
|
+
* fact that lot of groups will have only 1 full participation attestation, increase this number
|
|
23
23
|
* a bit higher than average. This also help decrease number of slots to search for attestations.
|
|
24
24
|
*/
|
|
25
25
|
const MAX_ATTESTATIONS_PER_GROUP = 3;
|
|
26
|
+
/**
|
|
27
|
+
* For electra, each block has up to 8 aggregated attestations, assuming there are 3 for the "best"
|
|
28
|
+
* attestation data, there are still 5 for other attestation data so this constant is still good.
|
|
29
|
+
* We should separate to 2 constant based on conditions of different networks
|
|
30
|
+
*/
|
|
31
|
+
const MAX_ATTESTATIONS_PER_GROUP_ELECTRA = 3;
|
|
26
32
|
/**
|
|
27
33
|
* Maintain a pool of aggregated attestations. Attestations can be retrieved for inclusion in a block
|
|
28
34
|
* or api. The returned attestations are aggregated to maximise the number of validators that can be
|
|
@@ -30,18 +36,24 @@ const MAX_ATTESTATIONS_PER_GROUP = 3;
|
|
|
30
36
|
* Note that we want to remove attestations with attesters that were included in the chain.
|
|
31
37
|
*/
|
|
32
38
|
export class AggregatedAttestationPool {
|
|
33
|
-
constructor() {
|
|
34
|
-
this.
|
|
39
|
+
constructor(config) {
|
|
40
|
+
this.config = config;
|
|
41
|
+
/**
|
|
42
|
+
* post electra, different committees could have the same AttData and we have to consolidate attestations of the same
|
|
43
|
+
* data to be included in block, so we should group by data before index
|
|
44
|
+
* // TODO: make sure it does not affect performance for pre electra forks
|
|
45
|
+
*/
|
|
46
|
+
this.attestationGroupByIndexByDataHexBySlot = new MapDef(() => new Map());
|
|
35
47
|
this.lowestPermissibleSlot = 0;
|
|
36
48
|
}
|
|
37
49
|
/** For metrics to track size of the pool */
|
|
38
50
|
getAttestationCount() {
|
|
39
51
|
let attestationCount = 0;
|
|
40
52
|
let attestationDataCount = 0;
|
|
41
|
-
for (const
|
|
42
|
-
for (const
|
|
43
|
-
attestationDataCount +=
|
|
44
|
-
for (const attestationGroup of
|
|
53
|
+
for (const attestationGroupByIndexByDataHex of this.attestationGroupByIndexByDataHexBySlot.values()) {
|
|
54
|
+
for (const attestationGroupByIndex of attestationGroupByIndexByDataHex.values()) {
|
|
55
|
+
attestationDataCount += attestationGroupByIndex.size;
|
|
56
|
+
for (const attestationGroup of attestationGroupByIndex.values()) {
|
|
45
57
|
attestationCount += attestationGroup.getAttestationCount();
|
|
46
58
|
}
|
|
47
59
|
}
|
|
@@ -55,16 +67,31 @@ export class AggregatedAttestationPool {
|
|
|
55
67
|
if (slot < lowestPermissibleSlot) {
|
|
56
68
|
return InsertOutcome.Old;
|
|
57
69
|
}
|
|
58
|
-
const
|
|
59
|
-
let
|
|
60
|
-
if (!
|
|
61
|
-
|
|
62
|
-
|
|
70
|
+
const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.getOrDefault(slot);
|
|
71
|
+
let attestationGroupByIndex = attestationGroupByIndexByDataHash.get(dataRootHex);
|
|
72
|
+
if (!attestationGroupByIndex) {
|
|
73
|
+
attestationGroupByIndex = new Map();
|
|
74
|
+
attestationGroupByIndexByDataHash.set(dataRootHex, attestationGroupByIndex);
|
|
75
|
+
}
|
|
76
|
+
let committeeIndex;
|
|
77
|
+
if (isForkPostElectra(this.config.getForkName(slot))) {
|
|
78
|
+
if (!isElectraAttestation(attestation)) {
|
|
79
|
+
throw Error(`Attestation should be type electra.Attestation for slot ${slot}`);
|
|
80
|
+
}
|
|
81
|
+
committeeIndex = attestation.committeeBits.getSingleTrueBit();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (isElectraAttestation(attestation)) {
|
|
85
|
+
throw Error(`Attestation should be type phase0.Attestation for slot ${slot}`);
|
|
86
|
+
}
|
|
87
|
+
committeeIndex = attestation.data.index;
|
|
63
88
|
}
|
|
64
|
-
|
|
89
|
+
// this should not happen because attestation should be validated before reaching this
|
|
90
|
+
assert.notNull(committeeIndex, "Committee index should not be null in aggregated attestation pool");
|
|
91
|
+
let attestationGroup = attestationGroupByIndex.get(committeeIndex);
|
|
65
92
|
if (!attestationGroup) {
|
|
66
93
|
attestationGroup = new MatchingDataAttestationGroup(committee, attestation.data);
|
|
67
|
-
|
|
94
|
+
attestationGroupByIndex.set(committeeIndex, attestationGroup);
|
|
68
95
|
}
|
|
69
96
|
return attestationGroup.add({
|
|
70
97
|
attestation,
|
|
@@ -74,27 +101,33 @@ export class AggregatedAttestationPool {
|
|
|
74
101
|
/** Remove attestations which are too old to be included in a block. */
|
|
75
102
|
prune(clockSlot) {
|
|
76
103
|
// Only retain SLOTS_PER_EPOCH slots
|
|
77
|
-
pruneBySlot(this.
|
|
104
|
+
pruneBySlot(this.attestationGroupByIndexByDataHexBySlot, clockSlot, SLOTS_PER_EPOCH);
|
|
78
105
|
this.lowestPermissibleSlot = Math.max(clockSlot - SLOTS_PER_EPOCH, 0);
|
|
79
106
|
}
|
|
107
|
+
getAttestationsForBlock(fork, forkChoice, state) {
|
|
108
|
+
const forkSeq = ForkSeq[fork];
|
|
109
|
+
return forkSeq >= ForkSeq.electra
|
|
110
|
+
? this.getAttestationsForBlockElectra(fork, forkChoice, state)
|
|
111
|
+
: this.getAttestationsForBlockPreElectra(fork, forkChoice, state);
|
|
112
|
+
}
|
|
80
113
|
/**
|
|
81
|
-
* Get attestations to be included in a block. Returns $MAX_ATTESTATIONS items
|
|
114
|
+
* Get attestations to be included in a block pre-electra. Returns up to $MAX_ATTESTATIONS items
|
|
82
115
|
*/
|
|
83
|
-
|
|
116
|
+
getAttestationsForBlockPreElectra(fork, forkChoice, state) {
|
|
84
117
|
const stateSlot = state.slot;
|
|
85
118
|
const stateEpoch = state.epochCtx.epoch;
|
|
86
119
|
const statePrevEpoch = stateEpoch - 1;
|
|
87
120
|
const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
|
|
88
121
|
const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
|
|
89
122
|
const attestationsByScore = [];
|
|
90
|
-
const slots = Array.from(this.
|
|
123
|
+
const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
|
|
91
124
|
let minScore = Number.MAX_SAFE_INTEGER;
|
|
92
125
|
let slotCount = 0;
|
|
93
126
|
slot: for (const slot of slots) {
|
|
94
127
|
slotCount++;
|
|
95
|
-
const
|
|
128
|
+
const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
|
|
96
129
|
// should not happen
|
|
97
|
-
if (!
|
|
130
|
+
if (!attestationGroupByIndexByDataHash) {
|
|
98
131
|
throw Error(`No aggregated attestation pool for slot=${slot}`);
|
|
99
132
|
}
|
|
100
133
|
const epoch = computeEpochAtSlot(slot);
|
|
@@ -109,30 +142,21 @@ export class AggregatedAttestationPool {
|
|
|
109
142
|
continue; // Invalid attestations
|
|
110
143
|
}
|
|
111
144
|
const slotDelta = stateSlot - slot;
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
attestationsByScore.length >= MAX_ATTESTATIONS &&
|
|
128
|
-
notSeenAttestingIndices.size / slotDelta < minScore) {
|
|
129
|
-
// after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
|
|
130
|
-
// if not, we may have to scan all slots in the pool
|
|
131
|
-
// if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
|
|
132
|
-
// otherwise it takes time to check attestation, add it and remove it later after the sort by score
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
for (const attestationGroup of attestationGroupByData.values()) {
|
|
145
|
+
for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
|
|
146
|
+
for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
|
|
147
|
+
const notSeenAttestingIndices = notSeenValidatorsFn(epoch, slot, committeeIndex);
|
|
148
|
+
if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (slotCount > 2 &&
|
|
152
|
+
attestationsByScore.length >= MAX_ATTESTATIONS &&
|
|
153
|
+
notSeenAttestingIndices.size / slotDelta < minScore) {
|
|
154
|
+
// after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS attestations and break the for loop early
|
|
155
|
+
// if not, we may have to scan all slots in the pool
|
|
156
|
+
// if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
|
|
157
|
+
// otherwise it takes time to check attestation, add it and remove it later after the sort by score
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
136
160
|
if (!validateAttestationDataFn(attestationGroup.data)) {
|
|
137
161
|
continue;
|
|
138
162
|
}
|
|
@@ -143,7 +167,7 @@ export class AggregatedAttestationPool {
|
|
|
143
167
|
// These properties should not change after being validate in gossip
|
|
144
168
|
// IF they have to be validated, do it only with one attestation per group since same data
|
|
145
169
|
// The committeeCountPerSlot can be precomputed once per slot
|
|
146
|
-
for (const { attestation, notSeenAttesterCount } of attestationGroup.getAttestationsForBlock(notSeenAttestingIndices)) {
|
|
170
|
+
for (const { attestation, notSeenAttesterCount } of attestationGroup.getAttestationsForBlock(fork, notSeenAttestingIndices)) {
|
|
147
171
|
const score = notSeenAttesterCount / slotDelta;
|
|
148
172
|
if (score < minScore) {
|
|
149
173
|
minScore = score;
|
|
@@ -171,17 +195,117 @@ export class AggregatedAttestationPool {
|
|
|
171
195
|
}
|
|
172
196
|
return attestationsForBlock;
|
|
173
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Get attestations to be included in an electra block. Returns up to $MAX_ATTESTATIONS_ELECTRA items
|
|
200
|
+
*/
|
|
201
|
+
getAttestationsForBlockElectra(fork, forkChoice, state) {
|
|
202
|
+
const stateSlot = state.slot;
|
|
203
|
+
const stateEpoch = state.epochCtx.epoch;
|
|
204
|
+
const statePrevEpoch = stateEpoch - 1;
|
|
205
|
+
const notSeenValidatorsFn = getNotSeenValidatorsFn(state);
|
|
206
|
+
const validateAttestationDataFn = getValidateAttestationDataFn(forkChoice, state);
|
|
207
|
+
const slots = Array.from(this.attestationGroupByIndexByDataHexBySlot.keys()).sort((a, b) => b - a);
|
|
208
|
+
const consolidations = [];
|
|
209
|
+
let minScore = Number.MAX_SAFE_INTEGER;
|
|
210
|
+
let slotCount = 0;
|
|
211
|
+
slot: for (const slot of slots) {
|
|
212
|
+
slotCount++;
|
|
213
|
+
const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
|
|
214
|
+
// should not happen
|
|
215
|
+
if (!attestationGroupByIndexByDataHash) {
|
|
216
|
+
throw Error(`No aggregated attestation pool for slot=${slot}`);
|
|
217
|
+
}
|
|
218
|
+
const epoch = computeEpochAtSlot(slot);
|
|
219
|
+
// validateAttestation condition: Attestation target epoch not in previous or current epoch
|
|
220
|
+
if (!(epoch === stateEpoch || epoch === statePrevEpoch)) {
|
|
221
|
+
continue; // Invalid attestations
|
|
222
|
+
}
|
|
223
|
+
// validateAttestation condition: Attestation slot not within inclusion window
|
|
224
|
+
if (!(slot + MIN_ATTESTATION_INCLUSION_DELAY <= stateSlot)) {
|
|
225
|
+
continue; // Invalid attestations
|
|
226
|
+
}
|
|
227
|
+
const slotDelta = stateSlot - slot;
|
|
228
|
+
// CommitteeIndex 0 1 2 ... Consolidation
|
|
229
|
+
// Attestations att00 --- att10 --- att20 --- 0 (att 00 10 20)
|
|
230
|
+
// att01 --- - --- att21 --- 1 (att 01 __ 21)
|
|
231
|
+
// - --- - --- att22 --- 2 (att __ __ 22)
|
|
232
|
+
for (const attestationGroupByIndex of attestationGroupByIndexByDataHash.values()) {
|
|
233
|
+
// sameAttDataCons could be up to MAX_ATTESTATIONS_PER_GROUP_ELECTRA
|
|
234
|
+
const sameAttDataCons = [];
|
|
235
|
+
for (const [committeeIndex, attestationGroup] of attestationGroupByIndex.entries()) {
|
|
236
|
+
const notSeenAttestingIndices = notSeenValidatorsFn(epoch, slot, committeeIndex);
|
|
237
|
+
if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (slotCount > 2 &&
|
|
241
|
+
consolidations.length >= MAX_ATTESTATIONS_ELECTRA &&
|
|
242
|
+
notSeenAttestingIndices.size / slotDelta < minScore) {
|
|
243
|
+
// after 2 slots, there are a good chance that we have 2 * MAX_ATTESTATIONS_ELECTRA attestations and break the for loop early
|
|
244
|
+
// if not, we may have to scan all slots in the pool
|
|
245
|
+
// if we have enough attestations and the max possible score is lower than scores of `attestationsByScore`, we should skip
|
|
246
|
+
// otherwise it takes time to check attestation, add it and remove it later after the sort by score
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (!validateAttestationDataFn(attestationGroup.data)) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
// TODO: Is it necessary to validateAttestation for:
|
|
253
|
+
// - Attestation committee index not within current committee count
|
|
254
|
+
// - Attestation aggregation bits length does not match committee length
|
|
255
|
+
//
|
|
256
|
+
// These properties should not change after being validate in gossip
|
|
257
|
+
// IF they have to be validated, do it only with one attestation per group since same data
|
|
258
|
+
// The committeeCountPerSlot can be precomputed once per slot
|
|
259
|
+
for (const [i, attestationNonParticipation] of attestationGroup
|
|
260
|
+
.getAttestationsForBlock(fork, notSeenAttestingIndices)
|
|
261
|
+
.entries()) {
|
|
262
|
+
if (sameAttDataCons[i] === undefined) {
|
|
263
|
+
sameAttDataCons[i] = {
|
|
264
|
+
byCommittee: new Map(),
|
|
265
|
+
attData: attestationNonParticipation.attestation.data,
|
|
266
|
+
totalNotSeenCount: 0,
|
|
267
|
+
// only update score after we have full data
|
|
268
|
+
score: 0,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
sameAttDataCons[i].byCommittee.set(committeeIndex, attestationNonParticipation);
|
|
272
|
+
sameAttDataCons[i].totalNotSeenCount += attestationNonParticipation.notSeenAttesterCount;
|
|
273
|
+
}
|
|
274
|
+
for (const consolidation of sameAttDataCons) {
|
|
275
|
+
const score = consolidation.totalNotSeenCount / slotDelta;
|
|
276
|
+
if (score < minScore) {
|
|
277
|
+
minScore = score;
|
|
278
|
+
}
|
|
279
|
+
consolidations.push({ ...consolidation, score });
|
|
280
|
+
// Stop accumulating attestations there are enough that may have good scoring
|
|
281
|
+
if (consolidations.length >= MAX_ATTESTATIONS_ELECTRA * 2) {
|
|
282
|
+
break slot;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const sortedConsolidationsByScore = consolidations
|
|
289
|
+
.sort((a, b) => b.score - a.score)
|
|
290
|
+
.slice(0, MAX_ATTESTATIONS_ELECTRA);
|
|
291
|
+
// on chain aggregation is expensive, only do it after all
|
|
292
|
+
return sortedConsolidationsByScore.map(aggregateConsolidation);
|
|
293
|
+
}
|
|
174
294
|
/**
|
|
175
295
|
* Get all attestations optionally filtered by `attestation.data.slot`
|
|
296
|
+
* Note this function is not fork aware and can potentially return a mix
|
|
297
|
+
* of phase0.Attestations and electra.Attestations.
|
|
298
|
+
* Caller of this function is expected to filtered result if they desire
|
|
299
|
+
* a homogenous array.
|
|
176
300
|
* @param bySlot slot to filter, `bySlot === attestation.data.slot`
|
|
177
301
|
*/
|
|
178
302
|
getAll(bySlot) {
|
|
179
303
|
let attestationGroupsArr;
|
|
180
304
|
if (bySlot === undefined) {
|
|
181
|
-
attestationGroupsArr = Array.from(this.
|
|
305
|
+
attestationGroupsArr = Array.from(this.attestationGroupByIndexByDataHexBySlot.values()).flatMap((byIndex) => Array.from(byIndex.values()));
|
|
182
306
|
}
|
|
183
307
|
else {
|
|
184
|
-
const attestationGroupsByIndex = this.
|
|
308
|
+
const attestationGroupsByIndex = this.attestationGroupByIndexByDataHexBySlot.get(bySlot);
|
|
185
309
|
if (!attestationGroupsByIndex)
|
|
186
310
|
throw Error(`No attestations for slot ${bySlot}`);
|
|
187
311
|
attestationGroupsArr = Array.from(attestationGroupsByIndex.values());
|
|
@@ -256,9 +380,14 @@ export class MatchingDataAttestationGroup {
|
|
|
256
380
|
* @param notSeenAttestingIndices not seen attestting indices, i.e. indices in the same committee
|
|
257
381
|
* @returns an array of AttestationNonParticipant
|
|
258
382
|
*/
|
|
259
|
-
getAttestationsForBlock(notSeenAttestingIndices) {
|
|
383
|
+
getAttestationsForBlock(fork, notSeenAttestingIndices) {
|
|
260
384
|
const attestations = [];
|
|
385
|
+
const isPostElectra = isForkPostElectra(fork);
|
|
261
386
|
for (const { attestation } of this.attestations) {
|
|
387
|
+
if ((isPostElectra && !isElectraAttestation(attestation)) ||
|
|
388
|
+
(!isPostElectra && isElectraAttestation(attestation))) {
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
262
391
|
let notSeenAttesterCount = 0;
|
|
263
392
|
const { aggregationBits } = attestation;
|
|
264
393
|
for (const notSeenIndex of notSeenAttestingIndices) {
|
|
@@ -270,13 +399,12 @@ export class MatchingDataAttestationGroup {
|
|
|
270
399
|
attestations.push({ attestation, notSeenAttesterCount });
|
|
271
400
|
}
|
|
272
401
|
}
|
|
273
|
-
|
|
402
|
+
const maxAttestation = isPostElectra ? MAX_ATTESTATIONS_PER_GROUP_ELECTRA : MAX_ATTESTATIONS_PER_GROUP;
|
|
403
|
+
if (attestations.length <= maxAttestation) {
|
|
274
404
|
return attestations;
|
|
275
405
|
}
|
|
276
406
|
else {
|
|
277
|
-
return attestations
|
|
278
|
-
.sort((a, b) => b.notSeenAttesterCount - a.notSeenAttesterCount)
|
|
279
|
-
.slice(0, MAX_ATTESTATIONS_PER_GROUP);
|
|
407
|
+
return attestations.sort((a, b) => b.notSeenAttesterCount - a.notSeenAttesterCount).slice(0, maxAttestation);
|
|
280
408
|
}
|
|
281
409
|
}
|
|
282
410
|
/** Get attestations for API. */
|
|
@@ -291,6 +419,33 @@ export function aggregateInto(attestation1, attestation2) {
|
|
|
291
419
|
const signature2 = signatureFromBytesNoCheck(attestation2.attestation.signature);
|
|
292
420
|
attestation1.attestation.signature = aggregateSignatures([signature1, signature2]).toBytes();
|
|
293
421
|
}
|
|
422
|
+
/**
|
|
423
|
+
* Electra and after: Block proposer consolidates attestations with the same
|
|
424
|
+
* attestation data from different committee into a single attestation
|
|
425
|
+
* https://github.com/ethereum/consensus-specs/blob/aba6345776aa876dad368cab27fbbb23fae20455/specs/_features/eip7549/validator.md?plain=1#L39
|
|
426
|
+
*/
|
|
427
|
+
export function aggregateConsolidation({ byCommittee, attData }) {
|
|
428
|
+
const committeeBits = BitArray.fromBitLen(MAX_COMMITTEES_PER_SLOT);
|
|
429
|
+
// TODO: can we improve this?
|
|
430
|
+
let aggregationBits = [];
|
|
431
|
+
const signatures = [];
|
|
432
|
+
const sortedCommittees = Array.from(byCommittee.keys()).sort((a, b) => a - b);
|
|
433
|
+
for (const committeeIndex of sortedCommittees) {
|
|
434
|
+
const attestationNonParticipation = byCommittee.get(committeeIndex);
|
|
435
|
+
if (attestationNonParticipation !== undefined) {
|
|
436
|
+
const { attestation } = attestationNonParticipation;
|
|
437
|
+
committeeBits.set(committeeIndex, true);
|
|
438
|
+
aggregationBits = [...aggregationBits, ...attestation.aggregationBits.toBoolArray()];
|
|
439
|
+
signatures.push(signatureFromBytesNoCheck(attestation.signature));
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
return {
|
|
443
|
+
aggregationBits: BitArray.fromBoolArray(aggregationBits),
|
|
444
|
+
data: attData,
|
|
445
|
+
committeeBits,
|
|
446
|
+
signature: aggregateSignatures(signatures).toBytes(),
|
|
447
|
+
};
|
|
448
|
+
}
|
|
294
449
|
/**
|
|
295
450
|
* Pre-compute participation from a CachedBeaconStateAllForks, for use to check if an attestation's committee
|
|
296
451
|
* has already attested or not.
|
|
@@ -305,11 +460,12 @@ export function getNotSeenValidatorsFn(state) {
|
|
|
305
460
|
const stateEpoch = computeEpochAtSlot(state.slot);
|
|
306
461
|
const previousEpochParticipants = extractParticipationPhase0(phase0State.previousEpochAttestations.getAllReadonly(), state);
|
|
307
462
|
const currentEpochParticipants = extractParticipationPhase0(phase0State.currentEpochAttestations.getAllReadonly(), state);
|
|
308
|
-
return (epoch,
|
|
463
|
+
return (epoch, slot, committeeIndex) => {
|
|
309
464
|
const participants = epoch === stateEpoch ? currentEpochParticipants : epoch === stateEpoch - 1 ? previousEpochParticipants : null;
|
|
310
465
|
if (participants === null) {
|
|
311
466
|
return null;
|
|
312
467
|
}
|
|
468
|
+
const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
|
|
313
469
|
const notSeenAttestingIndices = new Set();
|
|
314
470
|
for (const [i, validatorIndex] of committee.entries()) {
|
|
315
471
|
if (!participants.has(validatorIndex)) {
|
|
@@ -329,18 +485,28 @@ export function getNotSeenValidatorsFn(state) {
|
|
|
329
485
|
const previousParticipation = altairState.previousEpochParticipation.getAll();
|
|
330
486
|
const currentParticipation = altairState.currentEpochParticipation.getAll();
|
|
331
487
|
const stateEpoch = computeEpochAtSlot(state.slot);
|
|
332
|
-
|
|
488
|
+
// this function could be called multiple times with same slot + committeeIndex
|
|
489
|
+
const cachedNotSeenValidators = new Map();
|
|
490
|
+
return (epoch, slot, committeeIndex) => {
|
|
333
491
|
const participationStatus = epoch === stateEpoch ? currentParticipation : epoch === stateEpoch - 1 ? previousParticipation : null;
|
|
334
492
|
if (participationStatus === null) {
|
|
335
493
|
return null;
|
|
336
494
|
}
|
|
337
|
-
const
|
|
495
|
+
const cacheKey = slot + "_" + committeeIndex;
|
|
496
|
+
let notSeenAttestingIndices = cachedNotSeenValidators.get(cacheKey);
|
|
497
|
+
if (notSeenAttestingIndices != null) {
|
|
498
|
+
// if all validators are seen then return null, we don't need to check for any attestations of same committee again
|
|
499
|
+
return notSeenAttestingIndices.size === 0 ? null : notSeenAttestingIndices;
|
|
500
|
+
}
|
|
501
|
+
const committee = state.epochCtx.getBeaconCommittee(slot, committeeIndex);
|
|
502
|
+
notSeenAttestingIndices = new Set();
|
|
338
503
|
for (const [i, validatorIndex] of committee.entries()) {
|
|
339
504
|
// no need to check flagIsTimelySource as if validator is not seen, it's participation status is 0
|
|
340
505
|
if (participationStatus[validatorIndex] === 0) {
|
|
341
506
|
notSeenAttestingIndices.add(i);
|
|
342
507
|
}
|
|
343
508
|
}
|
|
509
|
+
cachedNotSeenValidators.set(cacheKey, notSeenAttestingIndices);
|
|
344
510
|
// if all validators are seen then return null, we don't need to check for any attestations of same committee again
|
|
345
511
|
return notSeenAttestingIndices.size === 0 ? null : notSeenAttestingIndices;
|
|
346
512
|
};
|
|
@@ -397,7 +563,7 @@ export function getValidateAttestationDataFn(forkChoice, state) {
|
|
|
397
563
|
return true;
|
|
398
564
|
}
|
|
399
565
|
// the isValidAttestationData does not depend on slot and index
|
|
400
|
-
const beaconBlockRootHex =
|
|
566
|
+
const beaconBlockRootHex = toRootHex(attData.beaconBlockRoot);
|
|
401
567
|
const cacheKey = beaconBlockRootHex + targetEpoch;
|
|
402
568
|
let isValid = cachedValidatedAttestationData.get(cacheKey);
|
|
403
569
|
if (isValid === undefined) {
|
|
@@ -437,14 +603,14 @@ export function isValidAttestationData(forkChoice, state, data) {
|
|
|
437
603
|
if (stateEpoch < 2 || targetEpoch < 2) {
|
|
438
604
|
return true;
|
|
439
605
|
}
|
|
440
|
-
const beaconBlockRootHex =
|
|
606
|
+
const beaconBlockRootHex = toRootHex(data.beaconBlockRoot);
|
|
441
607
|
return isValidShuffling(forkChoice, state, beaconBlockRootHex, targetEpoch);
|
|
442
608
|
}
|
|
443
609
|
function isValidShuffling(forkChoice, state, blockRootHex, targetEpoch) {
|
|
444
610
|
// Otherwise the shuffling is determined by the block at the end of the target epoch
|
|
445
611
|
// minus the shuffling lookahead (usually 2). We call this the "pivot".
|
|
446
612
|
const pivotSlot = computeStartSlotAtEpoch(targetEpoch - 1) - 1;
|
|
447
|
-
const stateDependentRoot =
|
|
613
|
+
const stateDependentRoot = toRootHex(getBlockRootAtSlot(state, pivotSlot));
|
|
448
614
|
// Use fork choice's view of the block DAG to quickly evaluate whether the attestation's
|
|
449
615
|
// pivot block is the same as the current state's pivot block. If it is, then the
|
|
450
616
|
// attestation's shuffling is the same as the current state's.
|