@lodestar/state-transition 1.12.0-dev.ab2dfdde65 → 1.12.0-dev.b11fe2dda5

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 (40) hide show
  1. package/lib/block/processExecutionPayload.d.ts +1 -2
  2. package/lib/block/processExecutionPayload.js +1 -30
  3. package/lib/block/processExecutionPayload.js.map +1 -1
  4. package/lib/cache/epochCache.d.ts +2 -1
  5. package/lib/cache/epochCache.js +20 -11
  6. package/lib/cache/epochCache.js.map +1 -1
  7. package/lib/cache/stateCache.d.ts +7 -0
  8. package/lib/cache/stateCache.js +30 -2
  9. package/lib/cache/stateCache.js.map +1 -1
  10. package/lib/cache/types.d.ts +3 -1
  11. package/lib/index.d.ts +1 -2
  12. package/lib/index.js +1 -2
  13. package/lib/index.js.map +1 -1
  14. package/lib/stateTransition.js +1 -1
  15. package/lib/stateTransition.js.map +1 -1
  16. package/lib/util/blindedBlock.d.ts +19 -1
  17. package/lib/util/blindedBlock.js +84 -1
  18. package/lib/util/blindedBlock.js.map +1 -1
  19. package/lib/util/epochShuffling.d.ts +2 -1
  20. package/lib/util/epochShuffling.js +7 -0
  21. package/lib/util/epochShuffling.js.map +1 -1
  22. package/lib/util/execution.d.ts +2 -0
  23. package/lib/util/execution.js +29 -0
  24. package/lib/util/execution.js.map +1 -1
  25. package/lib/util/loadState/findModifiedInactivityScores.d.ts +8 -0
  26. package/lib/util/loadState/findModifiedInactivityScores.js +27 -0
  27. package/lib/util/loadState/findModifiedInactivityScores.js.map +1 -0
  28. package/lib/util/loadState/findModifiedValidators.d.ts +10 -0
  29. package/lib/util/loadState/findModifiedValidators.js +26 -0
  30. package/lib/util/loadState/findModifiedValidators.js.map +1 -0
  31. package/lib/util/loadState/loadState.d.ts +17 -0
  32. package/lib/util/loadState/loadState.js +145 -0
  33. package/lib/util/loadState/loadState.js.map +1 -0
  34. package/lib/util/loadState/loadValidator.d.ts +9 -0
  35. package/lib/util/loadState/loadValidator.js +35 -0
  36. package/lib/util/loadState/loadValidator.js.map +1 -0
  37. package/lib/util/sszBytes.d.ts +24 -0
  38. package/lib/util/sszBytes.js +44 -0
  39. package/lib/util/sszBytes.js.map +1 -0
  40. package/package.json +8 -7
@@ -2,6 +2,5 @@ import { allForks } from "@lodestar/types";
2
2
  import { ForkSeq } from "@lodestar/params";
3
3
  import { CachedBeaconStateBellatrix, CachedBeaconStateCapella } from "../types.js";
4
4
  import { BlockExternalData } from "./externalData.js";
5
- export declare function processExecutionPayload(fork: ForkSeq, state: CachedBeaconStateBellatrix | CachedBeaconStateCapella, body: allForks.FullOrBlindedBeaconBlockBody, externalData: BlockExternalData): void;
6
- export declare function executionPayloadToPayloadHeader(fork: ForkSeq, payload: allForks.ExecutionPayload): allForks.ExecutionPayloadHeader;
5
+ export declare function processExecutionPayload(fork: ForkSeq, state: CachedBeaconStateBellatrix | CachedBeaconStateCapella, body: allForks.FullOrBlindedBeaconBlockBody, externalData: Omit<BlockExternalData, "dataAvailableStatus">): void;
7
6
  //# sourceMappingURL=processExecutionPayload.d.ts.map
@@ -1,8 +1,7 @@
1
1
  import { toHexString, byteArrayEquals } from "@chainsafe/ssz";
2
- import { ssz } from "@lodestar/types";
3
2
  import { ForkSeq, MAX_BLOBS_PER_BLOCK } from "@lodestar/params";
4
3
  import { getRandaoMix } from "../util/index.js";
5
- import { isExecutionPayload, isMergeTransitionComplete, getFullOrBlindedPayloadFromBody } from "../util/execution.js";
4
+ import { isExecutionPayload, isMergeTransitionComplete, getFullOrBlindedPayloadFromBody, executionPayloadToPayloadHeader, } from "../util/execution.js";
6
5
  import { ExecutionPayloadStatus } from "./externalData.js";
7
6
  export function processExecutionPayload(fork, state, body, externalData) {
8
7
  const payload = getFullOrBlindedPayloadFromBody(body);
@@ -58,32 +57,4 @@ export function processExecutionPayload(fork, state, body, externalData) {
58
57
  .getExecutionForkTypes(state.slot)
59
58
  .ExecutionPayloadHeader.toViewDU(payloadHeader);
60
59
  }
61
- export function executionPayloadToPayloadHeader(fork, payload) {
62
- const transactionsRoot = ssz.bellatrix.Transactions.hashTreeRoot(payload.transactions);
63
- const bellatrixPayloadFields = {
64
- parentHash: payload.parentHash,
65
- feeRecipient: payload.feeRecipient,
66
- stateRoot: payload.stateRoot,
67
- receiptsRoot: payload.receiptsRoot,
68
- logsBloom: payload.logsBloom,
69
- prevRandao: payload.prevRandao,
70
- blockNumber: payload.blockNumber,
71
- gasLimit: payload.gasLimit,
72
- gasUsed: payload.gasUsed,
73
- timestamp: payload.timestamp,
74
- extraData: payload.extraData,
75
- baseFeePerGas: payload.baseFeePerGas,
76
- blockHash: payload.blockHash,
77
- transactionsRoot,
78
- };
79
- if (fork >= ForkSeq.capella) {
80
- bellatrixPayloadFields.withdrawalsRoot = ssz.capella.Withdrawals.hashTreeRoot(payload.withdrawals);
81
- }
82
- if (fork >= ForkSeq.deneb) {
83
- // https://github.com/ethereum/consensus-specs/blob/dev/specs/eip4844/beacon-chain.md#process_execution_payload
84
- bellatrixPayloadFields.blobGasUsed = payload.blobGasUsed;
85
- bellatrixPayloadFields.excessBlobGas = payload.excessBlobGas;
86
- }
87
- return bellatrixPayloadFields;
88
- }
89
60
  //# sourceMappingURL=processExecutionPayload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"processExecutionPayload.js","sourceRoot":"","sources":["../../src/block/processExecutionPayload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processExecutionPayload.js","sourceRoot":"","sources":["../../src/block/processExecutionPayload.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { LodestarError } from "@lodestar/utils";
4
4
  import { EpochShuffling } from "../util/epochShuffling.js";
5
5
  import { EffectiveBalanceIncrements } from "./effectiveBalanceIncrements.js";
6
6
  import { Index2PubkeyCache, PubkeyIndexMap } from "./pubkeyCache.js";
7
- import { BeaconStateAllForks } from "./types.js";
7
+ import { BeaconStateAllForks, ShufflingGetter } from "./types.js";
8
8
  import { SyncCommitteeCache } from "./syncCommitteeCache.js";
9
9
  /** `= PROPOSER_WEIGHT / (WEIGHT_DENOMINATOR - PROPOSER_WEIGHT)` */
10
10
  export declare const PROPOSER_WEIGHT_FACTOR: number;
@@ -16,6 +16,7 @@ export type EpochCacheImmutableData = {
16
16
  export type EpochCacheOpts = {
17
17
  skipSyncCommitteeCache?: boolean;
18
18
  skipSyncPubkeys?: boolean;
19
+ shufflingGetter?: ShufflingGetter;
19
20
  };
20
21
  /** Defers computing proposers by persisting only the seed, and dropping it once indexes are computed */
21
22
  type ProposersDeferred = {
@@ -4,7 +4,7 @@ import { createBeaconConfig } from "@lodestar/config";
4
4
  import { ATTESTATION_SUBNET_COUNT, DOMAIN_BEACON_PROPOSER, EFFECTIVE_BALANCE_INCREMENT, FAR_FUTURE_EPOCH, ForkSeq, GENESIS_EPOCH, PROPOSER_WEIGHT, SLOTS_PER_EPOCH, WEIGHT_DENOMINATOR, } from "@lodestar/params";
5
5
  import { LodestarError } from "@lodestar/utils";
6
6
  import { computeActivationExitEpoch, computeEpochAtSlot, computeStartSlotAtEpoch, getChurnLimit, isActiveValidator, isAggregatorFromCommitteeLength, computeSyncPeriodAtEpoch, getSeed, computeProposers, getActivationChurnLimit, } from "../util/index.js";
7
- import { computeEpochShuffling } from "../util/epochShuffling.js";
7
+ import { computeEpochShuffling, getShufflingDecisionBlock } from "../util/epochShuffling.js";
8
8
  import { computeBaseRewardPerIncrement, computeSyncParticipantReward } from "../util/syncCommittee.js";
9
9
  import { sumTargetUnslashedBalanceIncrements } from "../util/targetUnslashedBalance.js";
10
10
  import { getEffectiveBalanceIncrementsWithLen } from "./effectiveBalanceIncrements.js";
@@ -86,19 +86,29 @@ export class EpochCache {
86
86
  const previousActiveIndices = [];
87
87
  const currentActiveIndices = [];
88
88
  const nextActiveIndices = [];
89
+ // BeaconChain could provide a shuffling cache to avoid re-computing shuffling every epoch
90
+ // in that case, we don't need to compute shufflings again
91
+ const previousShufflingDecisionBlock = getShufflingDecisionBlock(state, previousEpoch);
92
+ const cachedPreviousShuffling = opts?.shufflingGetter?.(previousEpoch, previousShufflingDecisionBlock);
93
+ const currentShufflingDecisionBlock = getShufflingDecisionBlock(state, currentEpoch);
94
+ const cachedCurrentShuffling = opts?.shufflingGetter?.(currentEpoch, currentShufflingDecisionBlock);
95
+ const nextShufflingDecisionBlock = getShufflingDecisionBlock(state, nextEpoch);
96
+ const cachedNextShuffling = opts?.shufflingGetter?.(nextEpoch, nextShufflingDecisionBlock);
89
97
  for (let i = 0; i < validatorCount; i++) {
90
98
  const validator = validators[i];
91
99
  // Note: Not usable for fork-choice balances since in-active validators are not zero'ed
92
100
  effectiveBalanceIncrements[i] = Math.floor(validator.effectiveBalance / EFFECTIVE_BALANCE_INCREMENT);
93
- if (isActiveValidator(validator, previousEpoch)) {
101
+ // we only need to track active indices for previous, current and next epoch if we have to compute shufflings
102
+ // skip doing that if we already have cached shufflings
103
+ if (cachedPreviousShuffling == null && isActiveValidator(validator, previousEpoch)) {
94
104
  previousActiveIndices.push(i);
95
105
  }
96
- if (isActiveValidator(validator, currentEpoch)) {
106
+ if (cachedCurrentShuffling == null && isActiveValidator(validator, currentEpoch)) {
97
107
  currentActiveIndices.push(i);
98
108
  // We track totalActiveBalanceIncrements as ETH to fit total network balance in a JS number (53 bits)
99
109
  totalActiveBalanceIncrements += effectiveBalanceIncrements[i];
100
110
  }
101
- if (isActiveValidator(validator, nextEpoch)) {
111
+ if (cachedNextShuffling == null && isActiveValidator(validator, nextEpoch)) {
102
112
  nextActiveIndices.push(i);
103
113
  }
104
114
  const { exitEpoch } = validator;
@@ -120,11 +130,10 @@ export class EpochCache {
120
130
  else if (totalActiveBalanceIncrements >= Number.MAX_SAFE_INTEGER) {
121
131
  throw Error("totalActiveBalanceIncrements >= Number.MAX_SAFE_INTEGER. MAX_EFFECTIVE_BALANCE is too low.");
122
132
  }
123
- const currentShuffling = computeEpochShuffling(state, currentActiveIndices, currentEpoch);
124
- const previousShuffling = isGenesis
125
- ? currentShuffling
126
- : computeEpochShuffling(state, previousActiveIndices, previousEpoch);
127
- const nextShuffling = computeEpochShuffling(state, nextActiveIndices, nextEpoch);
133
+ const currentShuffling = cachedCurrentShuffling ?? computeEpochShuffling(state, currentActiveIndices, currentEpoch);
134
+ const previousShuffling = cachedPreviousShuffling ??
135
+ (isGenesis ? currentShuffling : computeEpochShuffling(state, previousActiveIndices, previousEpoch));
136
+ const nextShuffling = cachedNextShuffling ?? computeEpochShuffling(state, nextActiveIndices, nextEpoch);
128
137
  const currentProposerSeed = getSeed(state, currentEpoch, DOMAIN_BEACON_PROPOSER);
129
138
  // Allow to create CachedBeaconState for empty states, or no active validators
130
139
  const proposers = currentShuffling.activeIndices.length > 0
@@ -164,7 +173,7 @@ export class EpochCache {
164
173
  // ```
165
174
  // So the returned value of is_active_validator(epoch) is guaranteed to not change during `MAX_SEED_LOOKAHEAD` epochs.
166
175
  //
167
- // activeIndices size is dependant on the state epoch. The epoch is advanced after running the epoch transition, and
176
+ // activeIndices size is dependent on the state epoch. The epoch is advanced after running the epoch transition, and
168
177
  // the first block of the epoch process_block() call. So churnLimit must be computed at the end of the before epoch
169
178
  // transition and the result is valid until the end of the next epoch transition
170
179
  const churnLimit = getChurnLimit(config, currentShuffling.activeIndices.length);
@@ -278,7 +287,7 @@ export class EpochCache {
278
287
  // ```
279
288
  // So the returned value of is_active_validator(epoch) is guaranteed to not change during `MAX_SEED_LOOKAHEAD` epochs.
280
289
  //
281
- // activeIndices size is dependant on the state epoch. The epoch is advanced after running the epoch transition, and
290
+ // activeIndices size is dependent on the state epoch. The epoch is advanced after running the epoch transition, and
282
291
  // the first block of the epoch process_block() call. So churnLimit must be computed at the end of the before epoch
283
292
  // transition and the result is valid until the end of the next epoch transition
284
293
  this.churnLimit = getChurnLimit(this.config, this.currentShuffling.activeIndices.length);
@@ -1 +1 @@
1
- {"version":3,"file":"epochCache.js","sourceRoot":"","sources":["../../src/cache/epochCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"epochCache.js","sourceRoot":"","sources":["../../src/cache/epochCache.ts"],"names":[],"mappings":"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"}
@@ -115,6 +115,13 @@ export type CachedBeaconStateExecutions = CachedBeaconState<BeaconStateExecution
115
115
  * Create CachedBeaconState computing a new EpochCache instance
116
116
  */
117
117
  export declare function createCachedBeaconState<T extends BeaconStateAllForks>(state: T, immutableData: EpochCacheImmutableData, opts?: EpochCacheOpts): T & BeaconStateCache;
118
+ /**
119
+ * Create a CachedBeaconState given a cached seed state and state bytes
120
+ * This guarantees that the returned state shares the same tree with the seed state
121
+ * Check loadState() api for more details
122
+ * TODO: after EIP-6110 need to provide a pivotValidatorIndex to decide which comes to finalized validators cache, which comes to unfinalized cache
123
+ */
124
+ export declare function loadUnfinalizedCachedBeaconState<T extends BeaconStateAllForks & BeaconStateCache>(cachedSeedState: T, stateBytes: Uint8Array, opts?: EpochCacheOpts): T;
118
125
  /**
119
126
  * Attach an already computed BeaconStateCache to a BeaconState object
120
127
  */
@@ -1,15 +1,43 @@
1
+ import bls from "@chainsafe/bls";
2
+ import { CoordType } from "@chainsafe/blst";
3
+ import { loadState } from "../util/loadState/loadState.js";
1
4
  import { EpochCache } from "./epochCache.js";
2
5
  /**
3
6
  * Create CachedBeaconState computing a new EpochCache instance
4
7
  */
5
8
  export function createCachedBeaconState(state, immutableData, opts) {
6
- return getCachedBeaconState(state, {
9
+ const epochCache = EpochCache.createFromState(state, immutableData, opts);
10
+ const cachedState = getCachedBeaconState(state, {
7
11
  config: immutableData.config,
8
- epochCtx: EpochCache.createFromState(state, immutableData, opts),
12
+ epochCtx: epochCache,
9
13
  clonedCount: 0,
10
14
  clonedCountWithTransferCache: 0,
11
15
  createdWithTransferCache: false,
12
16
  });
17
+ return cachedState;
18
+ }
19
+ /**
20
+ * Create a CachedBeaconState given a cached seed state and state bytes
21
+ * This guarantees that the returned state shares the same tree with the seed state
22
+ * Check loadState() api for more details
23
+ * TODO: after EIP-6110 need to provide a pivotValidatorIndex to decide which comes to finalized validators cache, which comes to unfinalized cache
24
+ */
25
+ export function loadUnfinalizedCachedBeaconState(cachedSeedState, stateBytes, opts) {
26
+ const { state: migratedState, modifiedValidators } = loadState(cachedSeedState.config, cachedSeedState, stateBytes);
27
+ const { pubkey2index, index2pubkey } = cachedSeedState.epochCtx;
28
+ // Get the validators sub tree once for all the loop
29
+ const validators = migratedState.validators;
30
+ for (const validatorIndex of modifiedValidators) {
31
+ const validator = validators.getReadonly(validatorIndex);
32
+ const pubkey = validator.pubkey;
33
+ pubkey2index.set(pubkey, validatorIndex);
34
+ index2pubkey[validatorIndex] = bls.PublicKey.fromBytes(pubkey, CoordType.jacobian);
35
+ }
36
+ return createCachedBeaconState(migratedState, {
37
+ config: cachedSeedState.config,
38
+ pubkey2index,
39
+ index2pubkey,
40
+ }, { ...(opts ?? {}), ...{ skipSyncPubkeys: true } });
13
41
  }
14
42
  /**
15
43
  * Attach an already computed BeaconStateCache to a BeaconState object
@@ -1 +1 @@
1
- {"version":3,"file":"stateCache.js","sourceRoot":"","sources":["../../src/cache/stateCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAA0C,MAAM,iBAAiB,CAAC;AAkIpF;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAQ,EACR,aAAsC,EACtC,IAAqB;IAErB,OAAO,oBAAoB,CAAC,KAAK,EAAE;QACjC,MAAM,EAAE,aAAa,CAAC,MAAM;QAC5B,QAAQ,EAAE,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC;QAChE,WAAW,EAAE,CAAC;QACd,4BAA4B,EAAE,CAAC;QAC/B,wBAAwB,EAAE,KAAK;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAQ,EACR,KAAuB;IAEvB,MAAM,WAAW,GAAG,KAA6B,CAAC;IAClD,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAClC,WAAW,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACrC,WAAuC,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACxE,WAAuC,CAAC,4BAA4B,GAAG,KAAK,CAAC,4BAA4B,CAAC;IAC1G,WAAuC,CAAC,wBAAwB,GAAG,KAAK,CAAC,wBAAwB,CAAC;IAEnG,8CAA8C;IAC9C,gFAAgF;IAChF,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAExD,SAAS,KAAK,CAA6B,iBAA2B;QACpE,MAAM,YAAY,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAEpD,oFAAoF;QACnF,IAAgC,CAAC,WAAW,EAAE,CAAC;QAEhD,IAAI,CAAC,iBAAiB,EAAE;YACrB,IAAgC,CAAC,4BAA4B,EAAE,CAAC;SAClE;QAED,OAAO,oBAAoB,CAAC,YAAY,EAAE;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC/B,WAAW,EAAE,CAAC;YACd,4BAA4B,EAAE,CAAC;YAC/B,wBAAwB,EAAE,CAAC,iBAAiB;SAC7C,CAAyB,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,KAAK,GAAG,KAA2B,CAAC;IAEhD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAiC;IAEjC,OAAQ,KAA8B,CAAC,QAAQ,KAAK,SAAS,CAAC;AAChE,CAAC;AAED,oFAAoF;AACpF,4FAA4F;AAC5F,wFAAwF;AACxF,MAAM,UAAU,+BAA+B,CAAC,KAAgC;IAC9E,OAAO,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAgC;IAC5E,OAAO,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"stateCache.js","sourceRoot":"","sources":["../../src/cache/stateCache.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { CompositeViewDU } from "@chainsafe/ssz";
2
- import { ssz } from "@lodestar/types";
2
+ import { Epoch, RootHex, ssz } from "@lodestar/types";
3
+ import { EpochShuffling } from "../util/epochShuffling.js";
3
4
  export type BeaconStatePhase0 = CompositeViewDU<typeof ssz.phase0.BeaconState>;
4
5
  export type BeaconStateAltair = CompositeViewDU<typeof ssz.altair.BeaconState>;
5
6
  export type BeaconStateBellatrix = CompositeViewDU<typeof ssz.bellatrix.BeaconState>;
@@ -7,4 +8,5 @@ export type BeaconStateCapella = CompositeViewDU<typeof ssz.capella.BeaconState>
7
8
  export type BeaconStateDeneb = CompositeViewDU<typeof ssz.deneb.BeaconState>;
8
9
  export type BeaconStateAllForks = BeaconStatePhase0 | BeaconStateAltair | BeaconStateBellatrix | BeaconStateCapella | BeaconStateDeneb;
9
10
  export type BeaconStateExecutions = BeaconStateBellatrix | BeaconStateCapella | BeaconStateDeneb;
11
+ export type ShufflingGetter = (shufflingEpoch: Epoch, dependentRoot: RootHex) => EpochShuffling | null;
10
12
  //# sourceMappingURL=types.d.ts.map
package/lib/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export * from "./util/index.js";
4
4
  export * from "./signatureSets/index.js";
5
5
  export type { BeaconStateTransitionMetrics } from "./metrics.js";
6
6
  export type { CachedBeaconStatePhase0, CachedBeaconStateAltair, CachedBeaconStateBellatrix, CachedBeaconStateCapella, CachedBeaconStateDeneb, CachedBeaconStateAllForks, CachedBeaconStateExecutions, BeaconStatePhase0, BeaconStateAltair, BeaconStateBellatrix, BeaconStateCapella, BeaconStateDeneb, BeaconStateAllForks, BeaconStateExecutions, } from "./types.js";
7
- export { createCachedBeaconState, type BeaconStateCache, isCachedBeaconState, isStateBalancesNodesPopulated, isStateValidatorsNodesPopulated, } from "./cache/stateCache.js";
7
+ export { createCachedBeaconState, loadUnfinalizedCachedBeaconState, type BeaconStateCache, isCachedBeaconState, isStateBalancesNodesPopulated, isStateValidatorsNodesPopulated, } from "./cache/stateCache.js";
8
8
  export { EpochCache, type EpochCacheImmutableData, createEmptyEpochCacheImmutableData, EpochCacheError, EpochCacheErrorCode, } from "./cache/epochCache.js";
9
9
  export { type EpochTransitionCache, beforeProcessEpoch } from "./cache/epochTransitionCache.js";
10
10
  export { PubkeyIndexMap, type Index2PubkeyCache } from "./cache/pubkeyCache.js";
@@ -16,5 +16,4 @@ export { assertValidAttesterSlashing } from "./block/processAttesterSlashing.js"
16
16
  export { ExecutionPayloadStatus, DataAvailableStatus, type BlockExternalData } from "./block/externalData.js";
17
17
  export { becomesNewEth1Data } from "./block/processEth1Data.js";
18
18
  export { getExpectedWithdrawals } from "./block/processWithdrawals.js";
19
- export { executionPayloadToPayloadHeader } from "./block/processExecutionPayload.js";
20
19
  //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -3,7 +3,7 @@ export * from "./constants/index.js";
3
3
  export * from "./util/index.js";
4
4
  export * from "./signatureSets/index.js";
5
5
  // Main state caches
6
- export { createCachedBeaconState, isCachedBeaconState, isStateBalancesNodesPopulated, isStateValidatorsNodesPopulated, } from "./cache/stateCache.js";
6
+ export { createCachedBeaconState, loadUnfinalizedCachedBeaconState, isCachedBeaconState, isStateBalancesNodesPopulated, isStateValidatorsNodesPopulated, } from "./cache/stateCache.js";
7
7
  export { EpochCache, createEmptyEpochCacheImmutableData, EpochCacheError, EpochCacheErrorCode, } from "./cache/epochCache.js";
8
8
  export { beforeProcessEpoch } from "./cache/epochTransitionCache.js";
9
9
  // Aux data-structures
@@ -19,5 +19,4 @@ export { ExecutionPayloadStatus, DataAvailableStatus } from "./block/externalDat
19
19
  export { becomesNewEth1Data } from "./block/processEth1Data.js";
20
20
  // Withdrawals for new blocks
21
21
  export { getExpectedWithdrawals } from "./block/processWithdrawals.js";
22
- export { executionPayloadToPayloadHeader } from "./block/processExecutionPayload.js";
23
22
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AAqBzC,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EAEvB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EAEV,kCAAkC,EAClC,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA4B,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AAE9F,sBAAsB;AACtB,OAAO,EAAC,cAAc,EAAyB,MAAM,wBAAwB,CAAC;AAE9E,OAAO,EAEL,mCAAmC,EACnC,oCAAoC,GACrC,MAAM,uCAAuC,CAAC;AAE/C,yBAAyB;AACzB,OAAO,EAAC,oBAAoB,EAAC,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAC,2BAA2B,EAAC,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAC,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAC,sBAAsB,EAAE,mBAAmB,EAAyB,MAAM,yBAAyB,CAAC;AAE5G,qCAAqC;AACrC,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,6BAA6B;AAC7B,OAAO,EAAC,sBAAsB,EAAC,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAC,+BAA+B,EAAC,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AAqBzC,oBAAoB;AACpB,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAEhC,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,UAAU,EAEV,kCAAkC,EAClC,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA4B,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AAE9F,sBAAsB;AACtB,OAAO,EAAC,cAAc,EAAyB,MAAM,wBAAwB,CAAC;AAE9E,OAAO,EAEL,mCAAmC,EACnC,oCAAoC,GACrC,MAAM,uCAAuC,CAAC;AAE/C,yBAAyB;AACzB,OAAO,EAAC,oBAAoB,EAAC,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAC,2BAA2B,EAAC,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAC,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAC,sBAAsB,EAAE,mBAAmB,EAAyB,MAAM,yBAAyB,CAAC;AAE5G,qCAAqC;AACrC,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,6BAA6B;AAC7B,OAAO,EAAC,sBAAsB,EAAC,MAAM,+BAA+B,CAAC"}
@@ -13,7 +13,7 @@ import { DataAvailableStatus, ExecutionPayloadStatus } from "./block/externalDat
13
13
  * Implementation Note: follows the optimizations in protolambda's eth2fastspec (https://github.com/protolambda/eth2fastspec)
14
14
  */
15
15
  export function stateTransition(state, signedBlock, options = {
16
- // TODO DENEB: Review what default values make sense
16
+ // Assume default to be valid and available
17
17
  executionPayloadStatus: ExecutionPayloadStatus.valid,
18
18
  dataAvailableStatus: DataAvailableStatus.available,
19
19
  }, metrics) {
@@ -1 +1 @@
1
- {"version":3,"file":"stateTransition.js","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stateTransition.js","sourceRoot":"","sources":["../src/stateTransition.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,24 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { allForks, phase0, Root } from "@lodestar/types";
2
+ import { allForks, phase0, Root, deneb } from "@lodestar/types";
3
+ type ParsedSignedBlindedBlockOrContents = {
4
+ signedBlindedBlock: allForks.SignedBlindedBeaconBlock;
5
+ signedBlindedBlobSidecars: deneb.SignedBlindedBlobSidecars | null;
6
+ };
3
7
  export declare function blindedOrFullBlockHashTreeRoot(config: ChainForkConfig, blindedOrFull: allForks.FullOrBlindedBeaconBlock): Root;
4
8
  export declare function blindedOrFullBlobSidecarHashTreeRoot(config: ChainForkConfig, blindedOrFull: allForks.FullOrBlindedBlobSidecar): Root;
5
9
  export declare function blindedOrFullBlockToHeader(config: ChainForkConfig, blindedOrFull: allForks.FullOrBlindedBeaconBlock): phase0.BeaconBlockHeader;
10
+ export declare function beaconBlockToBlinded(config: ChainForkConfig, block: allForks.AllForksExecution["BeaconBlock"]): allForks.BlindedBeaconBlock;
11
+ export declare function blobSidecarsToBlinded(blobSidecars: deneb.BlobSidecars): deneb.BlindedBlobSidecars;
12
+ export declare function signedBlindedBlockToFull(signedBlindedBlock: allForks.SignedBlindedBeaconBlock, executionPayload: allForks.ExecutionPayload | null): allForks.SignedBeaconBlock;
13
+ export declare function signedBlindedBlobSidecarsToFull(signedBlindedBlobSidecars: deneb.SignedBlindedBlobSidecars, blobs: deneb.Blobs): deneb.SignedBlobSidecars;
14
+ export declare function parseSignedBlindedBlockOrContents(signedBlindedBlockOrContents: allForks.SignedBlindedBeaconBlockOrContents): ParsedSignedBlindedBlockOrContents;
15
+ export declare function parseExecutionPayloadAndBlobsBundle(data: allForks.ExecutionPayload | allForks.ExecutionPayloadAndBlobsBundle): {
16
+ executionPayload: allForks.ExecutionPayload;
17
+ blobsBundle: deneb.BlobsBundle | null;
18
+ };
19
+ export declare function reconstructFullBlockOrContents({ signedBlindedBlock, signedBlindedBlobSidecars }: ParsedSignedBlindedBlockOrContents, { executionPayload, blobs }: {
20
+ executionPayload: allForks.ExecutionPayload | null;
21
+ blobs: deneb.Blobs | null;
22
+ }): allForks.SignedBeaconBlockOrContents;
23
+ export {};
6
24
  //# sourceMappingURL=blindedBlock.d.ts.map
@@ -1,4 +1,6 @@
1
- import { isBlindedBeaconBlock, isBlindedBlobSidecar } from "@lodestar/types";
1
+ import { ForkSeq } from "@lodestar/params";
2
+ import { ssz, isBlindedBeaconBlock, isBlindedBlobSidecar, isSignedBlindedBlockContents, isExecutionPayloadAndBlobsBundle, } from "@lodestar/types";
3
+ import { executionPayloadToPayloadHeader } from "./execution.js";
2
4
  export function blindedOrFullBlockHashTreeRoot(config, blindedOrFull) {
3
5
  return isBlindedBeaconBlock(blindedOrFull)
4
6
  ? // Blinded
@@ -27,4 +29,85 @@ export function blindedOrFullBlockToHeader(config, blindedOrFull) {
27
29
  bodyRoot,
28
30
  };
29
31
  }
32
+ export function beaconBlockToBlinded(config, block) {
33
+ const fork = config.getForkName(block.slot);
34
+ const executionPayloadHeader = executionPayloadToPayloadHeader(ForkSeq[fork], block.body.executionPayload);
35
+ const blindedBlock = { ...block, body: { ...block.body, executionPayloadHeader } };
36
+ return blindedBlock;
37
+ }
38
+ export function blobSidecarsToBlinded(blobSidecars) {
39
+ return blobSidecars.map((blobSidecar) => {
40
+ const blobRoot = ssz.deneb.Blob.hashTreeRoot(blobSidecar.blob);
41
+ return { ...blobSidecar, blobRoot };
42
+ });
43
+ }
44
+ export function signedBlindedBlockToFull(signedBlindedBlock, executionPayload) {
45
+ const signedBlock = {
46
+ ...signedBlindedBlock,
47
+ message: {
48
+ ...signedBlindedBlock.message,
49
+ body: {
50
+ ...signedBlindedBlock.message.body,
51
+ // state transition doesn't handle null value for executionPayload in pre-bellatrix blocks
52
+ executionPayload: executionPayload ?? undefined,
53
+ },
54
+ },
55
+ };
56
+ // state transition can't seem to handle executionPayloadHeader presense in merge block
57
+ // so just delete the extra field we don't require
58
+ delete signedBlock.message.body
59
+ .executionPayloadHeader;
60
+ return signedBlock;
61
+ }
62
+ export function signedBlindedBlobSidecarsToFull(signedBlindedBlobSidecars, blobs) {
63
+ const signedBlobSidecars = signedBlindedBlobSidecars.map((signedBlindedBlobSidecar, index) => {
64
+ const signedBlobSidecar = {
65
+ ...signedBlindedBlobSidecar,
66
+ message: { ...signedBlindedBlobSidecar.message, blob: blobs[index] },
67
+ };
68
+ delete signedBlobSidecar.message.blobRoot;
69
+ return signedBlobSidecar;
70
+ });
71
+ return signedBlobSidecars;
72
+ }
73
+ export function parseSignedBlindedBlockOrContents(signedBlindedBlockOrContents) {
74
+ if (isSignedBlindedBlockContents(signedBlindedBlockOrContents)) {
75
+ const signedBlindedBlock = signedBlindedBlockOrContents.signedBlindedBlock;
76
+ const signedBlindedBlobSidecars = signedBlindedBlockOrContents.signedBlindedBlobSidecars;
77
+ return { signedBlindedBlock, signedBlindedBlobSidecars };
78
+ }
79
+ else {
80
+ return { signedBlindedBlock: signedBlindedBlockOrContents, signedBlindedBlobSidecars: null };
81
+ }
82
+ }
83
+ export function parseExecutionPayloadAndBlobsBundle(data) {
84
+ if (isExecutionPayloadAndBlobsBundle(data)) {
85
+ return data;
86
+ }
87
+ else {
88
+ return {
89
+ executionPayload: data,
90
+ blobsBundle: null,
91
+ };
92
+ }
93
+ }
94
+ export function reconstructFullBlockOrContents({ signedBlindedBlock, signedBlindedBlobSidecars }, { executionPayload, blobs }) {
95
+ const signedBlock = signedBlindedBlockToFull(signedBlindedBlock, executionPayload);
96
+ if (signedBlindedBlobSidecars !== null) {
97
+ if (executionPayload === null) {
98
+ throw Error("Missing locally produced executionPayload for deneb+ publishBlindedBlock");
99
+ }
100
+ if (blobs === null) {
101
+ throw Error("Missing blobs from the local execution cache");
102
+ }
103
+ if (blobs.length !== signedBlindedBlobSidecars.length) {
104
+ throw Error(`Length mismatch signedBlindedBlobSidecars=${signedBlindedBlobSidecars.length} blobs=${blobs.length}`);
105
+ }
106
+ const signedBlobSidecars = signedBlindedBlobSidecarsToFull(signedBlindedBlobSidecars, blobs);
107
+ return { signedBlock, signedBlobSidecars };
108
+ }
109
+ else {
110
+ return signedBlock;
111
+ }
112
+ }
30
113
  //# sourceMappingURL=blindedBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blindedBlock.js","sourceRoot":"","sources":["../../src/util/blindedBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,oBAAoB,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAEnG,MAAM,UAAU,8BAA8B,CAC5C,MAAuB,EACvB,aAAgD;IAEhD,OAAO,oBAAoB,CAAC,aAAa,CAAC;QACxC,CAAC,CAAC,UAAU;YACV,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC;QACxF,CAAC,CAAC,OAAO;YACP,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,MAAuB,EACvB,aAAgD;IAEhD,OAAO,oBAAoB,CAAC,aAAa,CAAC;QACxC,CAAC,CAAC,UAAU;YACV,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,aAAa,CAAC;QAC7F,CAAC,CAAC,OAAO;YACP,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAuB,EACvB,aAAgD;IAEhD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,aAAa,CAAC;QAClD,CAAC,CAAC,UAAU;YACV,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC;QACjG,CAAC,CAAC,OAAO;YACP,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAE7F,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"blindedBlock.js","sourceRoot":"","sources":["../../src/util/blindedBlock.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Epoch, ValidatorIndex } from "@lodestar/types";
1
+ import { Epoch, RootHex, ValidatorIndex } from "@lodestar/types";
2
2
  import { BeaconStateAllForks } from "../types.js";
3
3
  /**
4
4
  * Readonly interface for EpochShuffling.
@@ -36,4 +36,5 @@ export type EpochShuffling = {
36
36
  };
37
37
  export declare function computeCommitteeCount(activeValidatorCount: number): number;
38
38
  export declare function computeEpochShuffling(state: BeaconStateAllForks, activeIndices: ValidatorIndex[], epoch: Epoch): EpochShuffling;
39
+ export declare function getShufflingDecisionBlock(state: BeaconStateAllForks, epoch: Epoch): RootHex;
39
40
  //# sourceMappingURL=epochShuffling.d.ts.map
@@ -1,7 +1,10 @@
1
+ import { toHexString } from "@chainsafe/ssz";
1
2
  import { intDiv } from "@lodestar/utils";
2
3
  import { DOMAIN_BEACON_ATTESTER, MAX_COMMITTEES_PER_SLOT, SLOTS_PER_EPOCH, TARGET_COMMITTEE_SIZE, } from "@lodestar/params";
3
4
  import { getSeed } from "./seed.js";
4
5
  import { unshuffleList } from "./shuffle.js";
6
+ import { computeStartSlotAtEpoch } from "./epoch.js";
7
+ import { getBlockRootAtSlot } from "./blockRoot.js";
5
8
  export function computeCommitteeCount(activeValidatorCount) {
6
9
  const validatorsPerSlot = intDiv(activeValidatorCount, SLOTS_PER_EPOCH);
7
10
  const committeesPerSlot = intDiv(validatorsPerSlot, TARGET_COMMITTEE_SIZE);
@@ -37,4 +40,8 @@ export function computeEpochShuffling(state, activeIndices, epoch) {
37
40
  committeesPerSlot,
38
41
  };
39
42
  }
43
+ export function getShufflingDecisionBlock(state, epoch) {
44
+ const pivotSlot = computeStartSlotAtEpoch(epoch - 1) - 1;
45
+ return toHexString(getBlockRootAtSlot(state, pivotSlot));
46
+ }
40
47
  //# sourceMappingURL=epochShuffling.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"epochShuffling.js","sourceRoot":"","sources":["../../src/util/epochShuffling.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AA0C3C,MAAM,UAAU,qBAAqB,CAAC,oBAA4B;IAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA0B,EAC1B,aAA+B,EAC/B,KAAY;IAEZ,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;IAE3D,OAAO;IACP,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;IACxC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE/B,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAAC;IAClD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAE3D,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,eAAe,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,cAAc,GAAuB,EAAE,CAAC;QAC9C,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,iBAAiB,EAAE,cAAc,EAAE,EAAE;YACjF,MAAM,KAAK,GAAG,IAAI,GAAG,iBAAiB,GAAG,cAAc,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,CAAC;YAChF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;YACpF,IAAI,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,EAAE;gBAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,mCAAmC,SAAS,EAAE,CAAC,CAAC;aACtG;YACD,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;SAC9D;QACD,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACjC;IAED,OAAO;QACL,KAAK;QACL,aAAa;QACb,SAAS;QACT,UAAU;QACV,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"epochShuffling.js","sourceRoot":"","sources":["../../src/util/epochShuffling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAC,uBAAuB,EAAC,MAAM,YAAY,CAAC;AACnD,OAAO,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AA0ClD,MAAM,UAAU,qBAAqB,CAAC,oBAA4B;IAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAA0B,EAC1B,aAA+B,EAC/B,KAAY;IAEZ,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;IAE3D,OAAO;IACP,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;IACxC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE/B,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAAC;IAClD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAAC;IAE3D,MAAM,UAAU,GAAyB,EAAE,CAAC;IAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,eAAe,EAAE,IAAI,EAAE,EAAE;QACjD,MAAM,cAAc,GAAuB,EAAE,CAAC;QAC9C,KAAK,IAAI,cAAc,GAAG,CAAC,EAAE,cAAc,GAAG,iBAAiB,EAAE,cAAc,EAAE,EAAE;YACjF,MAAM,KAAK,GAAG,IAAI,GAAG,iBAAiB,GAAG,cAAc,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,KAAK,CAAC,GAAG,cAAc,CAAC,CAAC;YAChF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;YACpF,IAAI,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,EAAE;gBAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,mCAAmC,SAAS,EAAE,CAAC,CAAC;aACtG;YACD,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;SAC9D;QACD,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACjC;IAED,OAAO;QACL,KAAK;QACL,aAAa;QACb,SAAS;QACT,UAAU;QACV,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA0B,EAAE,KAAY;IAChF,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzD,OAAO,WAAW,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { allForks, bellatrix, capella } from "@lodestar/types";
2
+ import { ForkSeq } from "@lodestar/params";
2
3
  import { BeaconStateCapella, BeaconStateAllForks, BeaconStateExecutions, CachedBeaconStateAllForks, CachedBeaconStateExecutions } from "../types.js";
3
4
  /**
4
5
  * Execution enabled = merge is done.
@@ -28,4 +29,5 @@ export declare function getFullOrBlindedPayloadFromBody(body: allForks.FullOrBli
28
29
  export declare function isExecutionPayload(payload: allForks.FullOrBlindedExecutionPayload): payload is allForks.ExecutionPayload;
29
30
  export declare function isCapellaPayload(payload: allForks.FullOrBlindedExecutionPayload): payload is capella.FullOrBlindedExecutionPayload;
30
31
  export declare function isCapellaPayloadHeader(payload: capella.FullOrBlindedExecutionPayload): payload is capella.ExecutionPayloadHeader;
32
+ export declare function executionPayloadToPayloadHeader(fork: ForkSeq, payload: allForks.ExecutionPayload): allForks.ExecutionPayloadHeader;
31
33
  //# sourceMappingURL=execution.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import { isBlindedBeaconBlockBody, ssz } from "@lodestar/types";
2
+ import { ForkSeq } from "@lodestar/params";
2
3
  /**
3
4
  * Execution enabled = merge is done.
4
5
  * When (A) state has execution data OR (B) block has execution data
@@ -85,4 +86,32 @@ export function isCapellaPayload(payload) {
85
86
  export function isCapellaPayloadHeader(payload) {
86
87
  return payload.withdrawalsRoot !== undefined;
87
88
  }
89
+ export function executionPayloadToPayloadHeader(fork, payload) {
90
+ const transactionsRoot = ssz.bellatrix.Transactions.hashTreeRoot(payload.transactions);
91
+ const bellatrixPayloadFields = {
92
+ parentHash: payload.parentHash,
93
+ feeRecipient: payload.feeRecipient,
94
+ stateRoot: payload.stateRoot,
95
+ receiptsRoot: payload.receiptsRoot,
96
+ logsBloom: payload.logsBloom,
97
+ prevRandao: payload.prevRandao,
98
+ blockNumber: payload.blockNumber,
99
+ gasLimit: payload.gasLimit,
100
+ gasUsed: payload.gasUsed,
101
+ timestamp: payload.timestamp,
102
+ extraData: payload.extraData,
103
+ baseFeePerGas: payload.baseFeePerGas,
104
+ blockHash: payload.blockHash,
105
+ transactionsRoot,
106
+ };
107
+ if (fork >= ForkSeq.capella) {
108
+ bellatrixPayloadFields.withdrawalsRoot = ssz.capella.Withdrawals.hashTreeRoot(payload.withdrawals);
109
+ }
110
+ if (fork >= ForkSeq.deneb) {
111
+ // https://github.com/ethereum/consensus-specs/blob/dev/specs/eip4844/beacon-chain.md#process_execution_payload
112
+ bellatrixPayloadFields.blobGasUsed = payload.blobGasUsed;
113
+ bellatrixPayloadFields.excessBlobGas = payload.excessBlobGas;
114
+ }
115
+ return bellatrixPayloadFields;
116
+ }
88
117
  //# sourceMappingURL=execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/util/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const INACTIVITY_SCORE_SIZE = 8;
2
+ /**
3
+ * As monitored on mainnet, inactivityScores are not changed much and they are mostly 0
4
+ * Using Buffer.compare is the fastest way as noted in `./findModifiedValidators.ts`
5
+ * @returns output parameter modifiedValidators: validator indices that are modified
6
+ */
7
+ export declare function findModifiedInactivityScores(inactivityScoresBytes: Uint8Array, inactivityScoresBytes2: Uint8Array, modifiedValidators: number[], validatorOffset?: number): void;
8
+ //# sourceMappingURL=findModifiedInactivityScores.d.ts.map
@@ -0,0 +1,27 @@
1
+ // UintNum64 = 8 bytes
2
+ export const INACTIVITY_SCORE_SIZE = 8;
3
+ /**
4
+ * As monitored on mainnet, inactivityScores are not changed much and they are mostly 0
5
+ * Using Buffer.compare is the fastest way as noted in `./findModifiedValidators.ts`
6
+ * @returns output parameter modifiedValidators: validator indices that are modified
7
+ */
8
+ export function findModifiedInactivityScores(inactivityScoresBytes, inactivityScoresBytes2, modifiedValidators, validatorOffset = 0) {
9
+ if (inactivityScoresBytes.length !== inactivityScoresBytes2.length) {
10
+ throw new Error("inactivityScoresBytes.length !== inactivityScoresBytes2.length " +
11
+ inactivityScoresBytes.length +
12
+ " vs " +
13
+ inactivityScoresBytes2.length);
14
+ }
15
+ if (Buffer.compare(inactivityScoresBytes, inactivityScoresBytes2) === 0) {
16
+ return;
17
+ }
18
+ if (inactivityScoresBytes.length === INACTIVITY_SCORE_SIZE) {
19
+ modifiedValidators.push(validatorOffset);
20
+ return;
21
+ }
22
+ const numValidator = Math.floor(inactivityScoresBytes.length / INACTIVITY_SCORE_SIZE);
23
+ const halfValidator = Math.floor(numValidator / 2);
24
+ findModifiedInactivityScores(inactivityScoresBytes.subarray(0, halfValidator * INACTIVITY_SCORE_SIZE), inactivityScoresBytes2.subarray(0, halfValidator * INACTIVITY_SCORE_SIZE), modifiedValidators, validatorOffset);
25
+ findModifiedInactivityScores(inactivityScoresBytes.subarray(halfValidator * INACTIVITY_SCORE_SIZE), inactivityScoresBytes2.subarray(halfValidator * INACTIVITY_SCORE_SIZE), modifiedValidators, validatorOffset + halfValidator);
26
+ }
27
+ //# sourceMappingURL=findModifiedInactivityScores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findModifiedInactivityScores.js","sourceRoot":"","sources":["../../../src/util/loadState/findModifiedInactivityScores.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,qBAAiC,EACjC,sBAAkC,EAClC,kBAA4B,EAC5B,eAAe,GAAG,CAAC;IAEnB,IAAI,qBAAqB,CAAC,MAAM,KAAK,sBAAsB,CAAC,MAAM,EAAE;QAClE,MAAM,IAAI,KAAK,CACb,iEAAiE;YAC/D,qBAAqB,CAAC,MAAM;YAC5B,MAAM;YACN,sBAAsB,CAAC,MAAM,CAChC,CAAC;KACH;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE;QACvE,OAAO;KACR;IAED,IAAI,qBAAqB,CAAC,MAAM,KAAK,qBAAqB,EAAE;QAC1D,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,OAAO;KACR;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC;IACtF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACnD,4BAA4B,CAC1B,qBAAqB,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,qBAAqB,CAAC,EACxE,sBAAsB,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,qBAAqB,CAAC,EACzE,kBAAkB,EAClB,eAAe,CAChB,CAAC;IACF,4BAA4B,CAC1B,qBAAqB,CAAC,QAAQ,CAAC,aAAa,GAAG,qBAAqB,CAAC,EACrE,sBAAsB,CAAC,QAAQ,CAAC,aAAa,GAAG,qBAAqB,CAAC,EACtE,kBAAkB,EAClB,eAAe,GAAG,aAAa,CAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Find modified validators by comparing two validators bytes using Buffer.compare() recursively
3
+ * - As noted in packages/state-transition/test/perf/util/loadState/findModifiedValidators.test.ts, serializing validators and compare Uint8Array is the fastest way
4
+ * - The performance is quite stable and can afford a lot of difference in validators (the benchmark tested up to 10k but it's not likely we have that difference in mainnet)
5
+ * - Also packages/state-transition/test/perf/misc/byteArrayEquals.test.ts shows that Buffer.compare() is very efficient for large Uint8Array
6
+ *
7
+ * @returns output parameter modifiedValidators: validator indices that are modified
8
+ */
9
+ export declare function findModifiedValidators(validatorsBytes: Uint8Array, validatorsBytes2: Uint8Array, modifiedValidators: number[], validatorOffset?: number): void;
10
+ //# sourceMappingURL=findModifiedValidators.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { VALIDATOR_BYTES_SIZE } from "../sszBytes.js";
2
+ /**
3
+ * Find modified validators by comparing two validators bytes using Buffer.compare() recursively
4
+ * - As noted in packages/state-transition/test/perf/util/loadState/findModifiedValidators.test.ts, serializing validators and compare Uint8Array is the fastest way
5
+ * - The performance is quite stable and can afford a lot of difference in validators (the benchmark tested up to 10k but it's not likely we have that difference in mainnet)
6
+ * - Also packages/state-transition/test/perf/misc/byteArrayEquals.test.ts shows that Buffer.compare() is very efficient for large Uint8Array
7
+ *
8
+ * @returns output parameter modifiedValidators: validator indices that are modified
9
+ */
10
+ export function findModifiedValidators(validatorsBytes, validatorsBytes2, modifiedValidators, validatorOffset = 0) {
11
+ if (validatorsBytes.length !== validatorsBytes2.length) {
12
+ throw new Error("validatorsBytes.length !== validatorsBytes2.length " + validatorsBytes.length + " vs " + validatorsBytes2.length);
13
+ }
14
+ if (Buffer.compare(validatorsBytes, validatorsBytes2) === 0) {
15
+ return;
16
+ }
17
+ if (validatorsBytes.length === VALIDATOR_BYTES_SIZE) {
18
+ modifiedValidators.push(validatorOffset);
19
+ return;
20
+ }
21
+ const numValidator = Math.floor(validatorsBytes.length / VALIDATOR_BYTES_SIZE);
22
+ const halfValidator = Math.floor(numValidator / 2);
23
+ findModifiedValidators(validatorsBytes.subarray(0, halfValidator * VALIDATOR_BYTES_SIZE), validatorsBytes2.subarray(0, halfValidator * VALIDATOR_BYTES_SIZE), modifiedValidators, validatorOffset);
24
+ findModifiedValidators(validatorsBytes.subarray(halfValidator * VALIDATOR_BYTES_SIZE), validatorsBytes2.subarray(halfValidator * VALIDATOR_BYTES_SIZE), modifiedValidators, validatorOffset + halfValidator);
25
+ }
26
+ //# sourceMappingURL=findModifiedValidators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findModifiedValidators.js","sourceRoot":"","sources":["../../../src/util/loadState/findModifiedValidators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,eAA2B,EAC3B,gBAA4B,EAC5B,kBAA4B,EAC5B,eAAe,GAAG,CAAC;IAEnB,IAAI,eAAe,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE;QACtD,MAAM,IAAI,KAAK,CACb,qDAAqD,GAAG,eAAe,CAAC,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAClH,CAAC;KACH;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE;QAC3D,OAAO;KACR;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,oBAAoB,EAAE;QACnD,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,OAAO;KACR;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACnD,sBAAsB,CACpB,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,EACjE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,EAClE,kBAAkB,EAClB,eAAe,CAChB,CAAC;IACF,sBAAsB,CACpB,eAAe,CAAC,QAAQ,CAAC,aAAa,GAAG,oBAAoB,CAAC,EAC9D,gBAAgB,CAAC,QAAQ,CAAC,aAAa,GAAG,oBAAoB,CAAC,EAC/D,kBAAkB,EAClB,eAAe,GAAG,aAAa,CAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ChainForkConfig } from "@lodestar/config";
2
+ import { BeaconStateAllForks } from "../../types.js";
3
+ type MigrateStateOutput = {
4
+ state: BeaconStateAllForks;
5
+ modifiedValidators: number[];
6
+ };
7
+ /**
8
+ * Load state from bytes given a seed state so that we share the same base tree. This gives some benefits:
9
+ * - Have single base tree across the application
10
+ * - Faster to load state
11
+ * - Less memory usage
12
+ * - Utilize the cached HashObjects in seed state due to a lot of validators are not changed, also the inactivity scores.
13
+ * @returns the new state and modified validators
14
+ */
15
+ export declare function loadState(config: ChainForkConfig, seedState: BeaconStateAllForks, stateBytes: Uint8Array): MigrateStateOutput;
16
+ export {};
17
+ //# sourceMappingURL=loadState.d.ts.map
@@ -0,0 +1,145 @@
1
+ import { deserializeContainerIgnoreFields, ssz } from "@lodestar/types";
2
+ import { ForkSeq } from "@lodestar/params";
3
+ import { VALIDATOR_BYTES_SIZE, getForkFromStateBytes, getStateTypeFromBytes } from "../sszBytes.js";
4
+ import { findModifiedValidators } from "./findModifiedValidators.js";
5
+ import { findModifiedInactivityScores } from "./findModifiedInactivityScores.js";
6
+ import { loadValidator } from "./loadValidator.js";
7
+ /**
8
+ * Load state from bytes given a seed state so that we share the same base tree. This gives some benefits:
9
+ * - Have single base tree across the application
10
+ * - Faster to load state
11
+ * - Less memory usage
12
+ * - Utilize the cached HashObjects in seed state due to a lot of validators are not changed, also the inactivity scores.
13
+ * @returns the new state and modified validators
14
+ */
15
+ export function loadState(config, seedState, stateBytes) {
16
+ // casting only to make typescript happy
17
+ const stateType = getStateTypeFromBytes(config, stateBytes);
18
+ const dataView = new DataView(stateBytes.buffer, stateBytes.byteOffset, stateBytes.byteLength);
19
+ const fieldRanges = stateType.getFieldRanges(dataView, 0, stateBytes.length);
20
+ const allFields = Object.keys(stateType.fields);
21
+ const validatorsFieldIndex = allFields.indexOf("validators");
22
+ // start with default view has the same performance to start with seed state
23
+ // and it is not fork dependent
24
+ const migratedState = deserializeContainerIgnoreFields(stateType, stateBytes, ["validators", "inactivityScores"], fieldRanges);
25
+ // validators are rarely changed
26
+ const validatorsRange = fieldRanges[validatorsFieldIndex];
27
+ const modifiedValidators = loadValidators(migratedState, seedState, stateBytes.subarray(validatorsRange.start, validatorsRange.end));
28
+ // inactivityScores are rarely changed
29
+ // this saves ~500ms of hashTreeRoot() time of state
30
+ const fork = getForkFromStateBytes(config, stateBytes);
31
+ const seedFork = config.getForkSeq(seedState.slot);
32
+ if (fork >= ForkSeq.altair && seedFork >= ForkSeq.altair) {
33
+ const inactivityScoresIndex = allFields.indexOf("inactivityScores");
34
+ const inactivityScoresRange = fieldRanges[inactivityScoresIndex];
35
+ loadInactivityScores(migratedState, seedState, stateBytes.subarray(inactivityScoresRange.start, inactivityScoresRange.end));
36
+ }
37
+ migratedState.commit();
38
+ return { state: migratedState, modifiedValidators };
39
+ }
40
+ /**
41
+ * This value is rarely changed as monitored 3 month state diffs on mainnet as of Sep 2023.
42
+ * Reusing this data helps save hashTreeRoot time of state ~500ms
43
+ *
44
+ * Given the below tree:
45
+ *
46
+ * seedState.inactivityScores ====> ROOT
47
+ * / \
48
+ * Hash01 Hash23
49
+ * / \ / \
50
+ * Sco0 Sco1 Sco2 Sco3
51
+ *
52
+ * if score 3 is modified, the new tree looks like this:
53
+ *
54
+ * migratedState.inactivityScores ====> ROOTa
55
+ * / \
56
+ * Hash01 Hash23a
57
+ * / \ / \
58
+ * Sco0 Sco1 Sco2 Sco3a
59
+ */
60
+ function loadInactivityScores(migratedState, seedState, inactivityScoresBytes) {
61
+ // migratedState starts with the same inactivityScores to seed state
62
+ migratedState.inactivityScores = seedState.inactivityScores.clone();
63
+ const oldValidator = migratedState.inactivityScores.length;
64
+ // UintNum64 = 8 bytes
65
+ const newValidator = inactivityScoresBytes.length / 8;
66
+ const minValidator = Math.min(oldValidator, newValidator);
67
+ const oldInactivityScores = migratedState.inactivityScores.serialize();
68
+ const isMoreValidator = newValidator >= oldValidator;
69
+ const modifiedValidators = [];
70
+ findModifiedInactivityScores(isMoreValidator ? oldInactivityScores : oldInactivityScores.subarray(0, minValidator * 8), isMoreValidator ? inactivityScoresBytes.subarray(0, minValidator * 8) : inactivityScoresBytes, modifiedValidators);
71
+ for (const validatorIndex of modifiedValidators) {
72
+ migratedState.inactivityScores.set(validatorIndex, ssz.UintNum64.deserialize(inactivityScoresBytes.subarray(validatorIndex * 8, (validatorIndex + 1) * 8)));
73
+ }
74
+ if (isMoreValidator) {
75
+ // add new inactivityScores
76
+ for (let validatorIndex = oldValidator; validatorIndex < newValidator; validatorIndex++) {
77
+ migratedState.inactivityScores.push(ssz.UintNum64.deserialize(inactivityScoresBytes.subarray(validatorIndex * 8, (validatorIndex + 1) * 8)));
78
+ }
79
+ }
80
+ else {
81
+ if (newValidator - 1 < 0) {
82
+ migratedState.inactivityScores = ssz.altair.InactivityScores.defaultViewDU();
83
+ }
84
+ else {
85
+ migratedState.inactivityScores = migratedState.inactivityScores.sliceTo(newValidator - 1);
86
+ }
87
+ }
88
+ }
89
+ /**
90
+ * As of Sep 2021, common validators of 2 mainnet states are rarely changed. However, the benchmark shows that
91
+ * 10k modified validators is not an issue. (see packages/state-transition/test/perf/util/loadState/findModifiedValidators.test.ts)
92
+ *
93
+ * This method loads validators from bytes given a seed state so that they share the same base tree. This gives some benefits:
94
+ * - Have single base tree across the application
95
+ * - Faster to load state
96
+ * - Less memory usage
97
+ * - Utilize the cached HashObjects in seed state due to a lot of validators are not changed
98
+ *
99
+ * Given the below tree:
100
+ *
101
+ * seedState.validators ====> ROOT
102
+ * / \
103
+ * Hash01 Hash23
104
+ * / \ / \
105
+ * Val0 Val1 Val2 Val3
106
+ *
107
+ * if validator 3 is modified, the new tree looks like this:
108
+ *
109
+ * migratedState.validators ====> ROOTa
110
+ * / \
111
+ * Hash01 Hash23a
112
+ * / \ / \
113
+ * Val0 Val1 Val2 Val3a
114
+ *
115
+ * @param migratedState state to be migrated, the validators are loaded to this state
116
+ * @returns modified validator indices
117
+ */
118
+ function loadValidators(migratedState, seedState, newValidatorsBytes) {
119
+ const seedValidatorCount = seedState.validators.length;
120
+ const newValidatorCount = Math.floor(newValidatorsBytes.length / VALIDATOR_BYTES_SIZE);
121
+ const isMoreValidator = newValidatorCount >= seedValidatorCount;
122
+ const minValidatorCount = Math.min(seedValidatorCount, newValidatorCount);
123
+ // migrated state starts with the same validators to seed state
124
+ migratedState.validators = seedState.validators.clone();
125
+ const seedValidatorsBytes = seedState.validators.serialize();
126
+ const modifiedValidators = [];
127
+ findModifiedValidators(isMoreValidator ? seedValidatorsBytes : seedValidatorsBytes.subarray(0, minValidatorCount * VALIDATOR_BYTES_SIZE), isMoreValidator ? newValidatorsBytes.subarray(0, minValidatorCount * VALIDATOR_BYTES_SIZE) : newValidatorsBytes, modifiedValidators);
128
+ for (const i of modifiedValidators) {
129
+ const seedValidator = seedState.validators.get(i);
130
+ const newValidatorBytes = newValidatorsBytes.subarray(i * VALIDATOR_BYTES_SIZE, (i + 1) * VALIDATOR_BYTES_SIZE);
131
+ migratedState.validators.set(i, loadValidator(seedValidator, newValidatorBytes));
132
+ }
133
+ if (newValidatorCount >= seedValidatorCount) {
134
+ // add new validators
135
+ for (let validatorIndex = seedValidatorCount; validatorIndex < newValidatorCount; validatorIndex++) {
136
+ migratedState.validators.push(ssz.phase0.Validator.deserializeToViewDU(newValidatorsBytes.subarray(validatorIndex * VALIDATOR_BYTES_SIZE, (validatorIndex + 1) * VALIDATOR_BYTES_SIZE)));
137
+ modifiedValidators.push(validatorIndex);
138
+ }
139
+ }
140
+ else {
141
+ migratedState.validators = migratedState.validators.sliceTo(newValidatorCount - 1);
142
+ }
143
+ return modifiedValidators;
144
+ }
145
+ //# sourceMappingURL=loadState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadState.js","sourceRoot":"","sources":["../../../src/util/loadState/loadState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { CompositeViewDU } from "@chainsafe/ssz";
2
+ import { ssz } from "@lodestar/types";
3
+ /**
4
+ * Load validator from bytes given a seed validator.
5
+ * - Reuse pubkey and withdrawal credentials if possible to save memory
6
+ * - If it's a new validator, deserialize it
7
+ */
8
+ export declare function loadValidator(seedValidator: CompositeViewDU<typeof ssz.phase0.Validator>, newValidatorBytes: Uint8Array): CompositeViewDU<typeof ssz.phase0.Validator>;
9
+ //# sourceMappingURL=loadValidator.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { deserializeContainerIgnoreFields, ssz } from "@lodestar/types";
2
+ /**
3
+ * Load validator from bytes given a seed validator.
4
+ * - Reuse pubkey and withdrawal credentials if possible to save memory
5
+ * - If it's a new validator, deserialize it
6
+ */
7
+ export function loadValidator(seedValidator, newValidatorBytes) {
8
+ const ignoredFields = getSameFields(seedValidator, newValidatorBytes);
9
+ if (ignoredFields.length > 0) {
10
+ const newValidatorValue = deserializeContainerIgnoreFields(ssz.phase0.Validator, newValidatorBytes, ignoredFields);
11
+ for (const field of ignoredFields) {
12
+ newValidatorValue[field] = seedValidator[field];
13
+ }
14
+ return ssz.phase0.Validator.toViewDU(newValidatorValue);
15
+ }
16
+ else {
17
+ return ssz.phase0.Validator.deserializeToViewDU(newValidatorBytes);
18
+ }
19
+ }
20
+ /**
21
+ * Return pubkey or withdrawalCredentials or both if they are the same.
22
+ */
23
+ function getSameFields(validator, validatorBytes) {
24
+ const ignoredFields = [];
25
+ const pubkey = validatorBytes.subarray(0, 48);
26
+ if (Buffer.compare(pubkey, validator.pubkey) === 0) {
27
+ ignoredFields.push("pubkey");
28
+ }
29
+ const withdrawalCredentials = validatorBytes.subarray(48, 80);
30
+ if (Buffer.compare(withdrawalCredentials, validator.withdrawalCredentials) === 0) {
31
+ ignoredFields.push("withdrawalCredentials");
32
+ }
33
+ return ignoredFields;
34
+ }
35
+ //# sourceMappingURL=loadValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadValidator.js","sourceRoot":"","sources":["../../../src/util/loadState/loadValidator.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,gCAAgC,EAAE,GAAG,EAAC,MAAM,iBAAiB,CAAC;AAEtE;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,aAA2D,EAC3D,iBAA6B;IAE7B,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACtE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,MAAM,iBAAiB,GAAG,gCAAgC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;QACnH,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;YACjC,iBAAiB,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;SACjD;QACD,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;KACzD;SAAM;QACL,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;KACpE;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,SAAuD,EACvD,cAA0B;IAE1B,MAAM,aAAa,GAA2C,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAClD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9B;IAED,MAAM,qBAAqB,GAAG,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;QAChF,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;KAC7C;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" />
2
+ import { ChainForkConfig } from "@lodestar/config";
3
+ import { ForkSeq } from "@lodestar/params";
4
+ import { Slot, allForks } from "@lodestar/types";
5
+ /**
6
+ * 48 + 32 + 8 + 1 + 8 + 8 + 8 + 8 = 121
7
+ * ```
8
+ * class Validator(Container):
9
+ pubkey: BLSPubkey [fixed - 48 bytes]
10
+ withdrawal_credentials: Bytes32 [fixed - 32 bytes]
11
+ effective_balance: Gwei [fixed - 8 bytes]
12
+ slashed: boolean [fixed - 1 byte]
13
+ # Status epochs
14
+ activation_eligibility_epoch: Epoch [fixed - 8 bytes]
15
+ activation_epoch: Epoch [fixed - 8 bytes]
16
+ exit_epoch: Epoch [fixed - 8 bytes]
17
+ withdrawable_epoch: Epoch [fixed - 8 bytes]
18
+ ```
19
+ */
20
+ export declare const VALIDATOR_BYTES_SIZE = 121;
21
+ export declare function getForkFromStateBytes(config: ChainForkConfig, bytes: Buffer | Uint8Array): ForkSeq;
22
+ export declare function getStateTypeFromBytes(config: ChainForkConfig, bytes: Buffer | Uint8Array): allForks.AllForksSSZTypes["BeaconState"];
23
+ export declare function getStateSlotFromBytes(bytes: Uint8Array): Slot;
24
+ //# sourceMappingURL=sszBytes.d.ts.map
@@ -0,0 +1,44 @@
1
+ import { bytesToInt } from "@lodestar/utils";
2
+ /**
3
+ * Slot uint64
4
+ */
5
+ const SLOT_BYTE_COUNT = 8;
6
+ /**
7
+ * 48 + 32 + 8 + 1 + 8 + 8 + 8 + 8 = 121
8
+ * ```
9
+ * class Validator(Container):
10
+ pubkey: BLSPubkey [fixed - 48 bytes]
11
+ withdrawal_credentials: Bytes32 [fixed - 32 bytes]
12
+ effective_balance: Gwei [fixed - 8 bytes]
13
+ slashed: boolean [fixed - 1 byte]
14
+ # Status epochs
15
+ activation_eligibility_epoch: Epoch [fixed - 8 bytes]
16
+ activation_epoch: Epoch [fixed - 8 bytes]
17
+ exit_epoch: Epoch [fixed - 8 bytes]
18
+ withdrawable_epoch: Epoch [fixed - 8 bytes]
19
+ ```
20
+ */
21
+ export const VALIDATOR_BYTES_SIZE = 121;
22
+ /**
23
+ * 8 + 32 = 40
24
+ * ```
25
+ * class BeaconState(Container):
26
+ * genesis_time: uint64 [fixed - 8 bytes]
27
+ * genesis_validators_root: Root [fixed - 32 bytes]
28
+ * slot: Slot [fixed - 8 bytes]
29
+ * ...
30
+ * ```
31
+ */
32
+ const SLOT_BYTES_POSITION_IN_STATE = 40;
33
+ export function getForkFromStateBytes(config, bytes) {
34
+ const slot = bytesToInt(bytes.subarray(SLOT_BYTES_POSITION_IN_STATE, SLOT_BYTES_POSITION_IN_STATE + SLOT_BYTE_COUNT));
35
+ return config.getForkSeq(slot);
36
+ }
37
+ export function getStateTypeFromBytes(config, bytes) {
38
+ const slot = getStateSlotFromBytes(bytes);
39
+ return config.getForkTypes(slot).BeaconState;
40
+ }
41
+ export function getStateSlotFromBytes(bytes) {
42
+ return bytesToInt(bytes.subarray(SLOT_BYTES_POSITION_IN_STATE, SLOT_BYTES_POSITION_IN_STATE + SLOT_BYTE_COUNT));
43
+ }
44
+ //# sourceMappingURL=sszBytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sszBytes.js","sourceRoot":"","sources":["../../src/util/sszBytes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC,MAAM,UAAU,qBAAqB,CAAC,MAAuB,EAAE,KAA0B;IACvF,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B,GAAG,eAAe,CAAC,CAAC,CAAC;IACtH,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAuB,EACvB,KAA0B;IAE1B,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiB;IACrD,OAAO,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,4BAA4B,EAAE,4BAA4B,GAAG,eAAe,CAAC,CAAC,CAAC;AAClH,CAAC"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.12.0-dev.ab2dfdde65",
14
+ "version": "1.12.0-dev.b11fe2dda5",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -59,13 +59,14 @@
59
59
  "dependencies": {
60
60
  "@chainsafe/as-sha256": "^0.3.1",
61
61
  "@chainsafe/bls": "7.1.1",
62
+ "@chainsafe/blst": "^0.2.9",
62
63
  "@chainsafe/persistent-merkle-tree": "^0.6.1",
63
64
  "@chainsafe/persistent-ts": "^0.19.1",
64
- "@chainsafe/ssz": "^0.13.0",
65
- "@lodestar/config": "1.12.0-dev.ab2dfdde65",
66
- "@lodestar/params": "1.12.0-dev.ab2dfdde65",
67
- "@lodestar/types": "1.12.0-dev.ab2dfdde65",
68
- "@lodestar/utils": "1.12.0-dev.ab2dfdde65",
65
+ "@chainsafe/ssz": "^0.14.0",
66
+ "@lodestar/config": "1.12.0-dev.b11fe2dda5",
67
+ "@lodestar/params": "1.12.0-dev.b11fe2dda5",
68
+ "@lodestar/types": "1.12.0-dev.b11fe2dda5",
69
+ "@lodestar/utils": "1.12.0-dev.b11fe2dda5",
69
70
  "bigint-buffer": "^1.1.5",
70
71
  "buffer-xor": "^2.0.2"
71
72
  },
@@ -81,5 +82,5 @@
81
82
  "beacon",
82
83
  "blockchain"
83
84
  ],
84
- "gitHead": "f0a315d7f2d38f627e7d5ab340b640a4a3bc1f89"
85
+ "gitHead": "1844d033998efc60b95253998bf29626c66ad56a"
85
86
  }