@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.
Files changed (212) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +22 -10
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.js +31 -4
  4. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  5. package/lib/api/impl/config/constants.d.ts +5 -1
  6. package/lib/api/impl/config/constants.js +7 -2
  7. package/lib/api/impl/config/constants.js.map +1 -1
  8. package/lib/api/impl/lodestar/index.js +2 -2
  9. package/lib/api/impl/lodestar/index.js.map +1 -1
  10. package/lib/api/impl/validator/index.js +37 -14
  11. package/lib/api/impl/validator/index.js.map +1 -1
  12. package/lib/chain/archiver/archiveBlocks.js +6 -7
  13. package/lib/chain/archiver/archiveBlocks.js.map +1 -1
  14. package/lib/chain/archiver/archiveStates.d.ts +3 -1
  15. package/lib/chain/archiver/archiveStates.js +6 -3
  16. package/lib/chain/archiver/archiveStates.js.map +1 -1
  17. package/lib/chain/archiver/index.js +1 -1
  18. package/lib/chain/archiver/index.js.map +1 -1
  19. package/lib/chain/balancesCache.js +2 -2
  20. package/lib/chain/balancesCache.js.map +1 -1
  21. package/lib/chain/blocks/importBlock.js +10 -9
  22. package/lib/chain/blocks/importBlock.js.map +1 -1
  23. package/lib/chain/blocks/index.js +2 -2
  24. package/lib/chain/blocks/index.js.map +1 -1
  25. package/lib/chain/blocks/types.d.ts +2 -2
  26. package/lib/chain/blocks/types.js.map +1 -1
  27. package/lib/chain/blocks/verifyBlock.js +4 -4
  28. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  29. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +5 -6
  30. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  31. package/lib/chain/blocks/verifyBlocksSanityChecks.js +3 -3
  32. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  33. package/lib/chain/blocks/writeBlockInputToDb.js +3 -3
  34. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  35. package/lib/chain/chain.d.ts +42 -0
  36. package/lib/chain/chain.js +53 -22
  37. package/lib/chain/chain.js.map +1 -1
  38. package/lib/chain/errors/attestationError.d.ts +13 -1
  39. package/lib/chain/errors/attestationError.js +10 -2
  40. package/lib/chain/errors/attestationError.js.map +1 -1
  41. package/lib/chain/errors/blockError.js +3 -4
  42. package/lib/chain/errors/blockError.js.map +1 -1
  43. package/lib/chain/forkChoice/index.js +9 -9
  44. package/lib/chain/forkChoice/index.js.map +1 -1
  45. package/lib/chain/historicalState/worker.js +4 -0
  46. package/lib/chain/historicalState/worker.js.map +1 -1
  47. package/lib/chain/initState.d.ts +3 -3
  48. package/lib/chain/initState.js +13 -13
  49. package/lib/chain/initState.js.map +1 -1
  50. package/lib/chain/interface.d.ts +2 -0
  51. package/lib/chain/interface.js.map +1 -1
  52. package/lib/chain/lightClient/index.js +9 -10
  53. package/lib/chain/lightClient/index.js.map +1 -1
  54. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +46 -12
  55. package/lib/chain/opPools/aggregatedAttestationPool.js +229 -63
  56. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  57. package/lib/chain/opPools/attestationPool.d.ts +22 -6
  58. package/lib/chain/opPools/attestationPool.js +61 -27
  59. package/lib/chain/opPools/attestationPool.js.map +1 -1
  60. package/lib/chain/opPools/opPool.d.ts +2 -2
  61. package/lib/chain/opPools/opPool.js +8 -6
  62. package/lib/chain/opPools/opPool.js.map +1 -1
  63. package/lib/chain/opPools/syncCommitteeMessagePool.js +4 -4
  64. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  65. package/lib/chain/opPools/syncContributionAndProofPool.js +4 -4
  66. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  67. package/lib/chain/opPools/utils.d.ts +2 -0
  68. package/lib/chain/opPools/utils.js +3 -0
  69. package/lib/chain/opPools/utils.js.map +1 -1
  70. package/lib/chain/produceBlock/produceBlockBody.js +7 -6
  71. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  72. package/lib/chain/regen/queued.d.ts +6 -1
  73. package/lib/chain/regen/queued.js +41 -3
  74. package/lib/chain/regen/queued.js.map +1 -1
  75. package/lib/chain/regen/regen.d.ts +1 -1
  76. package/lib/chain/regen/regen.js +50 -14
  77. package/lib/chain/regen/regen.js.map +1 -1
  78. package/lib/chain/seenCache/seenAttestationData.d.ts +13 -5
  79. package/lib/chain/seenCache/seenAttestationData.js +5 -3
  80. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  81. package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
  82. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  83. package/lib/chain/seenCache/seenGossipBlockInput.js +3 -4
  84. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  85. package/lib/chain/serializeState.d.ts +6 -0
  86. package/lib/chain/serializeState.js +22 -0
  87. package/lib/chain/serializeState.js.map +1 -0
  88. package/lib/chain/shufflingCache.js +2 -3
  89. package/lib/chain/shufflingCache.js.map +1 -1
  90. package/lib/chain/stateCache/blockStateCacheImpl.d.ts +1 -0
  91. package/lib/chain/stateCache/blockStateCacheImpl.js +8 -5
  92. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  93. package/lib/chain/stateCache/datastore/file.js +5 -5
  94. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  95. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +1 -0
  96. package/lib/chain/stateCache/fifoBlockStateCache.js +6 -3
  97. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  98. package/lib/chain/stateCache/inMemoryCheckpointsCache.d.ts +1 -0
  99. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +7 -5
  100. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  101. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +2 -2
  102. package/lib/chain/stateCache/persistentCheckpointsCache.js +35 -60
  103. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  104. package/lib/chain/stateCache/types.d.ts +4 -0
  105. package/lib/chain/stateCache/types.js.map +1 -1
  106. package/lib/chain/validation/aggregateAndProof.d.ts +4 -4
  107. package/lib/chain/validation/aggregateAndProof.js +26 -9
  108. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  109. package/lib/chain/validation/attestation.d.ts +27 -6
  110. package/lib/chain/validation/attestation.js +115 -37
  111. package/lib/chain/validation/attestation.js.map +1 -1
  112. package/lib/chain/validation/attesterSlashing.js +2 -1
  113. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  114. package/lib/chain/validation/blobSidecar.js +4 -4
  115. package/lib/chain/validation/blobSidecar.js.map +1 -1
  116. package/lib/chain/validation/block.js +3 -4
  117. package/lib/chain/validation/block.js.map +1 -1
  118. package/lib/chain/validation/signatureSets/aggregateAndProof.d.ts +4 -3
  119. package/lib/chain/validation/signatureSets/aggregateAndProof.js +3 -2
  120. package/lib/chain/validation/signatureSets/aggregateAndProof.js.map +1 -1
  121. package/lib/chain/validation/syncCommittee.js +2 -2
  122. package/lib/chain/validation/syncCommittee.js.map +1 -1
  123. package/lib/eth1/eth1DepositDataTracker.d.ts +5 -2
  124. package/lib/eth1/eth1DepositDataTracker.js +13 -2
  125. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  126. package/lib/eth1/eth1MergeBlockTracker.js +2 -3
  127. package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
  128. package/lib/eth1/index.d.ts +2 -0
  129. package/lib/eth1/index.js +8 -2
  130. package/lib/eth1/index.js.map +1 -1
  131. package/lib/eth1/interface.d.ts +4 -0
  132. package/lib/eth1/provider/eth1Provider.js +2 -3
  133. package/lib/eth1/provider/eth1Provider.js.map +1 -1
  134. package/lib/eth1/provider/utils.js +4 -5
  135. package/lib/eth1/provider/utils.js.map +1 -1
  136. package/lib/eth1/utils/depositContract.js +5 -5
  137. package/lib/eth1/utils/depositContract.js.map +1 -1
  138. package/lib/eth1/utils/deposits.d.ts +2 -2
  139. package/lib/eth1/utils/deposits.js +8 -7
  140. package/lib/eth1/utils/deposits.js.map +1 -1
  141. package/lib/eth1/utils/eth1Vote.js +2 -3
  142. package/lib/eth1/utils/eth1Vote.js.map +1 -1
  143. package/lib/execution/engine/http.d.ts +2 -2
  144. package/lib/execution/engine/http.js +19 -15
  145. package/lib/execution/engine/http.js.map +1 -1
  146. package/lib/execution/engine/interface.d.ts +4 -4
  147. package/lib/execution/engine/interface.js.map +1 -1
  148. package/lib/execution/engine/mock.d.ts +1 -0
  149. package/lib/execution/engine/mock.js +6 -0
  150. package/lib/execution/engine/mock.js.map +1 -1
  151. package/lib/execution/engine/payloadIdCache.d.ts +17 -0
  152. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  153. package/lib/execution/engine/types.d.ts +29 -3
  154. package/lib/execution/engine/types.js +81 -0
  155. package/lib/execution/engine/types.js.map +1 -1
  156. package/lib/index.d.ts +2 -2
  157. package/lib/index.js +2 -2
  158. package/lib/index.js.map +1 -1
  159. package/lib/metrics/metrics/beacon.d.ts +3 -0
  160. package/lib/metrics/metrics/beacon.js +6 -0
  161. package/lib/metrics/metrics/beacon.js.map +1 -1
  162. package/lib/metrics/metrics/lodestar.d.ts +30 -3
  163. package/lib/metrics/metrics/lodestar.js +63 -4
  164. package/lib/metrics/metrics/lodestar.js.map +1 -1
  165. package/lib/metrics/validatorMonitor.d.ts +1 -1
  166. package/lib/metrics/validatorMonitor.js +15 -10
  167. package/lib/metrics/validatorMonitor.js.map +1 -1
  168. package/lib/network/core/networkCore.js +2 -3
  169. package/lib/network/core/networkCore.js.map +1 -1
  170. package/lib/network/gossip/encoding.js +6 -2
  171. package/lib/network/gossip/encoding.js.map +1 -1
  172. package/lib/network/gossip/interface.d.ts +5 -5
  173. package/lib/network/gossip/interface.js.map +1 -1
  174. package/lib/network/gossip/topic.d.ts +1720 -129
  175. package/lib/network/gossip/topic.js +5 -5
  176. package/lib/network/gossip/topic.js.map +1 -1
  177. package/lib/network/interface.d.ts +2 -2
  178. package/lib/network/network.d.ts +2 -2
  179. package/lib/network/network.js.map +1 -1
  180. package/lib/network/peers/utils/assertPeerRelevance.js +3 -3
  181. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  182. package/lib/network/processor/gossipHandlers.js +10 -11
  183. package/lib/network/processor/gossipHandlers.js.map +1 -1
  184. package/lib/network/processor/gossipQueues/index.js +5 -2
  185. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  186. package/lib/network/processor/gossipQueues/indexed.js +1 -0
  187. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  188. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +2 -2
  189. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -1
  190. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js +2 -2
  191. package/lib/network/reqresp/handlers/beaconBlocksByRoot.js.map +1 -1
  192. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +2 -2
  193. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +1 -1
  194. package/lib/sync/backfill/backfill.js +16 -17
  195. package/lib/sync/backfill/backfill.js.map +1 -1
  196. package/lib/sync/range/chain.js +2 -3
  197. package/lib/sync/range/chain.js.map +1 -1
  198. package/lib/sync/range/range.js +4 -4
  199. package/lib/sync/range/range.js.map +1 -1
  200. package/lib/sync/range/utils/chainTarget.js +2 -2
  201. package/lib/sync/range/utils/chainTarget.js.map +1 -1
  202. package/lib/sync/range/utils/hashBlocks.js +4 -4
  203. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  204. package/lib/sync/unknownBlock.js +13 -14
  205. package/lib/sync/unknownBlock.js.map +1 -1
  206. package/lib/util/bufferPool.d.ts +7 -2
  207. package/lib/util/bufferPool.js +13 -7
  208. package/lib/util/bufferPool.js.map +1 -1
  209. package/lib/util/sszBytes.d.ts +31 -8
  210. package/lib/util/sszBytes.js +85 -21
  211. package/lib/util/sszBytes.js.map +1 -1
  212. 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
- * This function returns not seen participation for a given epoch and committee.
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, committee: Uint32Array) => Set<number> | null;
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 attestationGroupByDataHashByIndexBySlot;
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: phase0.Attestation, dataRootHex: RootHex, attestingIndicesCount: number, committee: Uint32Array): InsertOutcome;
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
- getAttestationsForBlock(fork: ForkName, forkChoice: IForkChoice, state: CachedBeaconStateAllForks): phase0.Attestation[];
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): phase0.Attestation[];
65
+ getAll(bySlot?: Slot): Attestation[];
38
66
  }
39
67
  interface AttestationWithIndex {
40
- attestation: phase0.Attestation;
68
+ attestation: Attestation;
41
69
  trueBitsCount: number;
42
70
  }
43
71
  type AttestationNonParticipant = {
44
- attestation: phase0.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(): phase0.Attestation[];
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 { ForkName, ForkSeq, MAX_ATTESTATIONS, MIN_ATTESTATION_INCLUSION_DELAY, SLOTS_PER_EPOCH } from "@lodestar/params";
4
- import { ssz } from "@lodestar/types";
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 { toHex, MapDef } from "@lodestar/utils";
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
- * On mainnet, each slot has 64 committees, and each block has 128 attestations max so in average
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 attestation since it's full of participation increase this number
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.attestationGroupByDataHashByIndexBySlot = new MapDef(() => new Map());
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 attestationGroupByDataByIndex of this.attestationGroupByDataHashByIndexBySlot.values()) {
42
- for (const attestationGroupByData of attestationGroupByDataByIndex.values()) {
43
- attestationDataCount += attestationGroupByData.size;
44
- for (const attestationGroup of attestationGroupByData.values()) {
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 attestationGroupByDataHashByIndex = this.attestationGroupByDataHashByIndexBySlot.getOrDefault(slot);
59
- let attestationGroupByDataHash = attestationGroupByDataHashByIndex.get(attestation.data.index);
60
- if (!attestationGroupByDataHash) {
61
- attestationGroupByDataHash = new Map();
62
- attestationGroupByDataHashByIndex.set(attestation.data.index, attestationGroupByDataHash);
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
- let attestationGroup = attestationGroupByDataHash.get(dataRootHex);
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
- attestationGroupByDataHash.set(dataRootHex, attestationGroup);
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.attestationGroupByDataHashByIndexBySlot, clockSlot, SLOTS_PER_EPOCH);
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
- getAttestationsForBlock(fork, forkChoice, state) {
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.attestationGroupByDataHashByIndexBySlot.keys()).sort((a, b) => b - a);
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 attestationGroupByDataHashByIndex = this.attestationGroupByDataHashByIndexBySlot.get(slot);
128
+ const attestationGroupByIndexByDataHash = this.attestationGroupByIndexByDataHexBySlot.get(slot);
96
129
  // should not happen
97
- if (!attestationGroupByDataHashByIndex) {
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 shuffling = state.epochCtx.getShufflingAtEpoch(epoch);
113
- const slotCommittees = shuffling.committees[slot % SLOTS_PER_EPOCH];
114
- for (const [committeeIndex, attestationGroupByData] of attestationGroupByDataHashByIndex.entries()) {
115
- // all attestations will be validated against the state in next step so we can get committee from the state
116
- // this is an improvement to save the notSeenValidatorsFn call for the same slot/index instead of the same attestation data
117
- if (committeeIndex > slotCommittees.length) {
118
- // invalid index, should not happen
119
- continue;
120
- }
121
- const committee = slotCommittees[committeeIndex];
122
- const notSeenAttestingIndices = notSeenValidatorsFn(epoch, committee);
123
- if (notSeenAttestingIndices === null || notSeenAttestingIndices.size === 0) {
124
- continue;
125
- }
126
- if (slotCount > 2 &&
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.attestationGroupByDataHashByIndexBySlot.values()).flatMap((byIndex) => Array.from(byIndex.values()));
305
+ attestationGroupsArr = Array.from(this.attestationGroupByIndexByDataHexBySlot.values()).flatMap((byIndex) => Array.from(byIndex.values()));
182
306
  }
183
307
  else {
184
- const attestationGroupsByIndex = this.attestationGroupByDataHashByIndexBySlot.get(bySlot);
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
- if (attestations.length <= MAX_ATTESTATIONS_PER_GROUP) {
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, committee) => {
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
- return (epoch, committee) => {
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 notSeenAttestingIndices = new Set();
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 = toHex(attData.beaconBlockRoot);
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 = toHex(data.beaconBlockRoot);
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 = toHexString(getBlockRootAtSlot(state, pivotSlot));
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.