-
-
Notifications
You must be signed in to change notification settings - Fork 310
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: rename caches and related functions to indicate finalized #6528
Conversation
Codecov Report
Additional details and impacted files@@ Coverage Diff @@
## electra-fork #6528 +/- ##
===============================================
Coverage ? 61.97%
===============================================
Files ? 562
Lines ? 59854
Branches ? 1905
===============================================
Hits ? 37097
Misses ? 22716
Partials ? 41 |
Ignore the spec test failure for now as the |
c8ca410
to
1227f52
Compare
since this change is quite straightforward, should we merge this PR to |
@@ -5,7 +5,7 @@ import { | |||
CachedBeaconStateAllForks, | |||
computeEpochAtSlot, | |||
computeStartSlotAtEpoch, | |||
createCachedBeaconState, | |||
createFinalizedCachedBeaconState, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i don't think we want this to be renamed to finalized because it has other connotations other than having a finalized pubkey maps
*/ | ||
export function loadCachedBeaconState<T extends BeaconStateAllForks & BeaconStateCache>( | ||
export function loadUnfinalizedCachedBeaconState<T extends BeaconStateAllForks & BeaconStateCache>( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this should stay the original name since the state might not have to do anything with finalized/unfinalized pubkey indices
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this should stay the original name since the state might not have to do anything with finalized/unfinalized pubkey indices
I see. Yea I agree the unfinalized
here is unrelated but rather it's part of the persistent state cache. Will rename it in the next PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ensi321 what differences between loading a finalized state vs unfinalized state?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ensi321 what differences between loading a finalized state vs unfinalized state?
@tuyennhv In the context of 6110? It probably doesn't make a difference.
TODO: rename to loadUnfinalizedCachedBeaconState() due to EIP-6110
When you first added this comment in this PR I thought you knew something that I don't 😅
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just review the logic, right now when loading any states we use EpochCache.createFromState
which set empty unfinalizedPubkey2index
which is not correct for unfinalized states
in this function, we should pass in pivotValidatorIndex
to decide unfinalizedPubkey2index
, hence the name should be loadUnfinalizedCachedBeaconState
unfinalizedPubkey2index
should be computed from modifiedValidators
see the other comment #6528 (comment)
once this PR is merged into the electra, i can try cherrypicking out into the unstable |
add types stub and epoch config fix types
* Add immutable in the dependencies * Initial change to pubkeyCache * Added todos * Moved unfinalized cache to epochCache * Move populating finalized cache to afterProcessEpoch * Specify unfinalized cache during state cloning * Move from unfinalized to finalized cache in afterProcessEpoch * Confused myself * Clean up * Change logic * Fix cloning issue * Clean up redundant code * Add CarryoverData in epochCtx.createFromState * Fix typo * Update usage of pubkeyCache * Update pubkeyCache usage * Fix lint * Fix lint * Add 6110 to ChainConfig * Add 6110 to BeaconPreset * Define 6110 fork and container * Add V6110 api to execution engine * Update test * Add depositReceiptsRoot to process_execution_payload * State transitioning to EIP6110 * State transitioning to EIP6110 * Light client change in EIP-6110 * Update tests * produceBlock * Refactor processDeposit to match the spec * Implement processDepositReceipt * Implement 6110 fork guard for pubkeyCache * Handle changes in eth1 deposit * Update eth1 deposit test * Fix typo * Lint * Remove embarassing comments * Address comments * Modify applyDeposit signature * Update packages/state-transition/src/cache/epochCache.ts Co-authored-by: Lion - dapplion <[email protected]> * Update packages/state-transition/src/cache/epochCache.ts Co-authored-by: Lion - dapplion <[email protected]> * Update packages/state-transition/src/cache/pubkeyCache.ts Co-authored-by: Lion - dapplion <[email protected]> * Remove old code * Rename fields in epochCache and immutableData * Remove CarryoverData * Move isAfter6110 from var to method * Fix cyclic import * Fix operations spec runner * Fix for spec test * Fix spec test * state.depositReceiptsStartIndex to BigInt * getDeposit requires cached state * default depositReceiptsStartIndex value in genesis * Fix pubkeyCache bug * newUnfinalizedPubkeyIndexMap in createCachedBeaconState * Lint * Pass epochCache instead of pubkey2IndexFn in apis * Address comments * Add unit test on pubkey cache cloning * Add unfinalizedPubkeyCacheSize to metrics * Add unfinalizedPubkeyCacheSize to metrics * Clean up code * Add besu to el-interop * Add 6110 genesis file * Template for sim test * Add unit test for getEth1DepositCount * Update sim test * Update besudocker * Finish beacon api calls in sim test * Update epochCache.createFromState() * Fix bug unfinalized validators are not finalized * Add sim test to run a few blocks * Lint * Merge branch 'unstable' into 611 * Add more check to sim test * Update besu docker image instruction * Update sim test with correct tx * Address comment + cleanup * Clean up code * Properly handle promise rejection * Lint * Update packages/beacon-node/src/execution/engine/types.ts Co-authored-by: Lion - dapplion <[email protected]> * Update comments * Accept type undefined in ExecutionPayloadBodyRpc * Update comment and semantic * Remove if statement when adding finalized validator * Comment on repeated insert on finalized cache * rename createFromState * Add comment on getPubkey() * Stash change to reduce diffs * Stash change to reduce diffs * Lint * addFinalizedPubkey on finalized checkpoint * Update comment * Use OrderedMap for unfinalized cache * Pull out logic of deleting pubkeys for batch op * Add updateUnfinalizedPubkeys in regen * Update updateUnfinalizedPubkeys logic * Add comment * Add metrics for state context caches * Address comment * Address comment * Deprecate eth1Data polling when condition is reached * Fix conflicts * Fix sim test * Lint * Fix type * Fix test * Fix test * Lint * Update packages/light-client/src/spec/utils.ts Co-authored-by: Lion - dapplion <[email protected]> * Fix spec test * Address comments * Improve cache logic on checkpoint finalized * Update sim test according to new cache logic * Update comment * Lint * Finalized pubkey cache only update once per checkpoint * Add perf test for updateUnfinalizedPubkeys * Add perf test for updateUnfinalizedPubkeys * Tweak params for perf test * Freeze besu docker image version for 6110 * Add benchmark result * Use Map instead of OrderedMap. Update benchmark * Minor optimization * Minor optimization * Add memory test for immutable.js * Update test * Reduce code duplication * Lint * Remove try/catch in updateUnfinalizedPubkeys * Introduce EpochCache metric * Add historicalValidatorLengths * Polish code * Migrate state-transition unit tests to vitest * Fix calculation of pivot index * `historicalValidatorLengths` only activate post 6110 * Update sim test * Lint * Update packages/state-transition/src/cache/epochCache.ts Co-authored-by: Lion - dapplion <[email protected]> * Improve readability on historicalValidatorLengths * Update types * Fix calculation * Add eth1data poll todo * Add epochCache.getValidatorCountAtEpoch * Add todo * Add getStateIterator for state cache * Partial commit * Update perf test * updateUnfinalizedPubkeys directly modify states from regen * Update sim test. Lint * Add todo * some improvements and a fix for effectiveBalanceIncrements fork safeness * rename eip6110 to elctra * fix electra-interop.test.ts --------- Co-authored-by: Lion - dapplion <[email protected]> Co-authored-by: gajinder <[email protected]> lint and tsc small cleanup fix rebase issue
@tuyennhv Can you check if 7dda166 makes sense to you. Thanks! |
for (const validatorIndex of modifiedValidators) { | ||
const validator = validators.getReadonly(validatorIndex); | ||
const pubkey = validator.pubkey; | ||
state.epochCtx.addUnFinalizedPubkey(validatorIndex, pubkey); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
throw error if validatorIndex < cachedSeedState.epochCtx.finalizedPubkey2index.size
(or if addUnFinalizedPubkey
already handle it then it's fine)
setting this as a draft PR for now |
Not relevant anymore |
Motivation
EIP 6110 breaks the assumptions that validator indices are always finalized, and thus introduces pubkey caches for unfinalized validators (
unfinalizedPubkey2index
andunfinalizedIndex2pubkey
).As such, the original pubkey caches also need to update their naming to indicate they only store pubkeys and indices for finalized validators.
Description
Rename the following:
epochCache.pubkey2index
->epochCache.finalizedPubkey2index
epochCache.index2pubkey
->epochCache.finalizedIndex2pubkey
cc. @g11tech @tuyennhv
Related issue and PR: #6341 #6042