mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-08 03:01:41 +00:00
Implement Electra devnet-1 changes (#5937)
* Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into p2p-electra * Merge branch 'p2p-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * fix genesis from eth1 for electra * Fix Electra Fork Choice Tests (#5764) * add new operation tests * Fix Electra Fork Choice Tests (#5764) * Fix Electra Fork Choice Tests (#5764) * Fix Electra Fork Choice Tests (#5764) * add epoch processing new tests * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into p2p-electra * Merge branch 'ef-tests-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * Merge branch 'p2p-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * fix ef test compilation * disable and enable ef test for epoch processing appropriately * add consolidations to merkle calc for inclusion proof * fix should_override_fc tests * Merge branch 'ef-tests-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * get ssz tests compiling * ssz merkle validity for only deneb * im dumb af * Merge remote-tracking branch 'upstream/ef-tests-electra' into ef-tests-electra * enable tests * Fix Consolidation Sigs & Withdrawals * Merge pull request #5766 from ethDreamer/two_fixes Fix Consolidation Sigs & Withdrawals * Merge branches 'block-processing-electra' and 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into p2p-electra * Merge branch 'p2p-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * comment out consolidation operation ef tests until they are added * add signed consolidation ssz tests * add as_iter to all List and Vector fields in the beacon state * remove dbg * Send unagg attestation based on fork * Merge branch 'beacon-api-electra' into p2p-electra * Merge branch 'p2p-electra' into ef-tests-electra * Fix Epoch Processing Consolidations * Fix Final Spec Tests! * Fix ser/de * Merge branch 'electra-engine-api' into beacon-api-electra * Merge branch 'beacon-api-electra' into p2p-electra * Merge branch 'p2p-electra' into ef-tests-electra * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * update electra readiness with new endpoints * don't block mev boost till genesis finalization * Publish all aggregates * just one more check bro plz.. * Fix Bug In Block Processing with 0x02 Credentials * fix slashing handling * Fix Bug In Block Processing with 0x02 Credentials * Merge remote-tracking branch 'upstream/unstable' * Send unagg attestation based on fork * Publish all aggregates * just one more check bro plz.. * Merge pull request #5832 from ethDreamer/electra_attestation_changes_merge_unstable Merge `unstable` into `electra_attestation_changes` * Merge pull request #5835 from realbigsean/fix-validator-logic Fix validator logic * Merge pull request #5816 from realbigsean/electra-attestation-slashing-handling Electra slashing handling * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into p2p-electra * Merge branch 'p2p-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * Rename deploy block electra (#5853) * Rename deploy_block.txt to deposit_contract_block.txt * fmt * Change for prater too * fix: serde rename camle case for execution payload body (#5846) * Merge branch 'electra-engine-api' into beacon-api-electra * Merge branch 'beacon-api-electra' into p2p-electra * Merge branch 'p2p-electra' into ef-tests-electra * Electra attestation changes rm decode impl (#5856) * Remove Crappy Decode impl for Attestation * Remove Inefficient Attestation Decode impl * Implement Schema Upgrade / Downgrade * Update beacon_node/beacon_chain/src/schema_change/migration_schema_v20.rs Co-authored-by: Michael Sproul <micsproul@gmail.com> --------- Co-authored-by: Michael Sproul <micsproul@gmail.com> * Fix failing attestation tests and misc electra attestation cleanup (#5810) * - get attestation related beacon chain tests to pass - observed attestations are now keyed off of data + committee index - rename op pool attestationref to compactattestationref - remove unwraps in agg pool and use options instead - cherry pick some changes from ef-tests-electra * cargo fmt * fix failing test * Revert dockerfile changes * make committee_index return option * function args shouldnt be a ref to attestation ref * fmt * fix dup imports --------- Co-authored-by: realbigsean <seananderson33@GMAIL.com> * fix some todos (#5817) * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * add consolidations to merkle calc for inclusion proof * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into p2p-electra * Merge branch 'p2p-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * Remove Duplicate KZG Commitment Merkle Proof Code (#5874) * Remove Duplicate KZG Commitment Merkle Proof Code * s/tree_lists/fields/ * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * fix compile * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * Fix slasher tests (#5906) * Fix electra tests * Add electra attestations to double vote tests * Update superstruct to 0.8 * Merge remote-tracking branch 'origin/unstable' into electra_attestation_changes * Small cleanup in slasher tests * Clean up Electra observed aggregates (#5929) * Use consistent key in observed_attestations * Remove unwraps from observed aggregates * move committee bits to the last index in attestation (#5924) * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * De-dup attestation constructor logic * Remove unwraps in Attestation construction * Dedup match_attestation_data * Remove outdated TODO * Use ForkName Ord in fork-choice tests * Use ForkName Ord in BeaconBlockBody * Make to_electra not fallible * Remove TestRandom impl for IndexedAttestation * Remove IndexedAttestation faulty Decode impl * Drop TestRandom impl * Add PendingAttestationInElectra * Indexed att on disk (#35) * indexed att on disk * fix lints * Update slasher/src/migrate.rs Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> --------- Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com> Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> * add electra fork enabled fn to ForkName impl (#36) * add electra fork enabled fn to ForkName impl * remove inadvertent file * Update common/eth2/src/types.rs Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> * Dedup attestation constructor logic in attester cache * Use if let Ok for committee_bits * Dedup Attestation constructor code * Diff reduction in tests * Fix beacon_chain tests * Diff reduction * Use Ord for ForkName in pubsub * Resolve into_attestation_and_indices todo * Remove stale TODO * Fix beacon_chain tests * Test spec invariant * Use electra_enabled in pubsub * Remove get_indexed_attestation_from_signed_aggregate * Use ok_or instead of if let else * committees are sorted * remove dup method `get_indexed_attestation_from_committees` * Merge pull request #5940 from dapplion/electra_attestation_changes_lionreview Electra attestations #5712 review * update default persisted op pool deserialization * ensure aggregate and proof uses serde untagged on ref * Fork aware ssz static attestation tests * Electra attestation changes from Lions review (#5971) * dedup/cleanup and remove unneeded hashset use * remove irrelevant TODOs * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * Merge branch 'ef-tests-electra' of https://github.com/sigp/lighthouse into electra-devnet-1 * Fix Compilation Break * Merge pull request #5973 from ethDreamer/beacon-api-electra Fix Compilation Break * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * Merge branch 'ef-tests-electra' of https://github.com/sigp/lighthouse into electra-devnet-1 * Rename Constants, Structures, and Fields * Second Round * Third Round * Round Four * Electra attestation changes sean review (#5972) * instantiate empty bitlist in unreachable code * clean up error conversion * fork enabled bool cleanup * remove a couple todos * return bools instead of options in `aggregate` and use the result * delete commented out code * use map macros in simple transformations * remove signers_disjoint_from * get ef tests compiling * get ef tests compiling * update intentionally excluded files * Avoid changing slasher schema for Electra * Delete slasher schema v4 * Fix clippy * Fix compilation of beacon_chain tests * Update database.rs * Update per_block_processing.rs * Add electra lightclient types * Update slasher/src/database.rs * fix imports * Merge pull request #5980 from dapplion/electra-lightclient Add electra lightclient types * Merge pull request #5975 from michaelsproul/electra-slasher-no-migration Avoid changing slasher schema for Electra * Update beacon_node/beacon_chain/src/attestation_verification.rs * Update beacon_node/beacon_chain/src/attestation_verification.rs * Merge pull request #5974 from ethDreamer/electra-devnet-1 Electra: `devnet-1` Rename and Move Stuff * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * Merge branch 'electra_attestation_changes' of https://github.com/realbigsean/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * clean up enabled and disabled fork logic in ef tests * Merge branch 'ef-tests-electra' of https://github.com/sigp/lighthouse into electra-devnet-1 * Electra devnet 1 process operations (#5994) * Implement `process_consolidation_requests()` * Finish Changes to `process_operations()` * Fix Lint * Fix test * use electra_enabled() * add light client ssz tests * Update `engine-api` for `devnet-1` * disable failing light client ssz tests * correctly exclude light client struct from accessed files * Fix Failing Tests * Fix Calculations Relying on MAX_EB (#5983) * Fix Calculations Relying on MAX_EB * Use spec fn for max_effective_balance * The great renaming receipt -> request * Address some more review comments * Electra: Get `devnet-1` ef-tests Working * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra-engine-api * Update beacon_node/beacon_chain/src/electra_readiness.rs * Update consensus/types/src/chain_spec.rs * Update pending balance deposit processing (#6005) * Update pending balance deposit processing * Update single_pass.rs --------- Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com> * Merge pull request #6001 from ethDreamer/electra-devnet-1-engine-api Update `engine-api` for `devnet-1` * Merge pull request #6019 from ethDreamer/electra-devnet-1-ef-tests Electra: Get `devnet-1` ef-tests Working * Fix Bug in `engine_api` by Renaming Field * Merge pull request #6047 from ethDreamer/electra-devnet-1-engine-api-fix Fix Bug in `engine_api` by Renaming Field * one more stupid rename * update GET requests * update POST requests * add client updates and test updates * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * compile after merge * unwrap -> unwrap_err * self review * fix tests * convert op pool messages to electra in electra * remove methods to post without content header * Add BeaconBlocksByRange v3 * Revert "Add BeaconBlocksByRange v3" This reverts commite3ce7fc5ea. * filter instead of convert * Add range sync metrics to track efficiency (#6095) * Add more range sync metrics to track efficiency * Add ignored blocks metrics * Enable the outbound rate limiter by default, and update blobs method quotas (#6093) * Enable the outbound rate limiter by default, and update blobs method quotas. * Lint and book updates. * Beacon api + validator electra (#5744) * Attestation superstruct changes for EIP 7549 (#5644) * update * experiment * superstruct changes * revert * superstruct changes * fix tests * indexed attestation * indexed attestation superstruct * updated TODOs * `superstruct` the `AttesterSlashing` (#5636) * `superstruct` Attester Fork Variants * Push a little further * Deal with Encode / Decode of AttesterSlashing * not so sure about this.. * Stop Encode/Decode Bounds from Propagating Out * Tons of Changes.. * More Conversions to AttestationRef * Add AsReference trait (#15) * Add AsReference trait * Fix some snafus * Got it Compiling! :D * Got Tests Building * Get beacon chain tests compiling --------- Co-authored-by: Michael Sproul <micsproul@gmail.com> * Merge remote-tracking branch 'upstream/unstable' into electra_attestation_changes * Make EF Tests Fork-Agnostic (#5713) * Finish EF Test Fork Agnostic (#5714) * Superstruct `AggregateAndProof` (#5715) * Upgrade `superstruct` to `0.8.0` * superstruct `AggregateAndProof` * Merge remote-tracking branch 'sigp/unstable' into electra_attestation_changes * cargo fmt * Merge pull request #5726 from realbigsean/electra_attestation_changes Merge unstable into Electra attestation changes * process withdrawals updates * cleanup withdrawals processing * update `process_operations` deposit length check * add apply_deposit changes * add execution layer withdrawal request processing * process deposit receipts * add consolidation processing * update process operations function * exit updates * clean up * update slash_validator * EIP7549 `get_attestation_indices` (#5657) * get attesting indices electra impl * fmt * get tests to pass * fmt * fix some beacon chain tests * fmt * fix slasher test * fmt got me again * fix more tests * fix tests * Some small changes (#5739) * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * cargo fmt (#5740) * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * fix attestation verification * Add new engine api methods * Fix the versioning of v4 requests * Handle new engine api methods in mock EL * Note todo * Fix todos * Add support for electra fields in getPayloadBodies * Add comments for potential versioning confusion * udpates for aggregate attestation endpoint * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Sketch op pool changes * fix get attesting indices (#5742) * fix get attesting indices * better errors * fix compile * only get committee index once * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Ef test fixes (#5753) * attestation related ef test fixes * delete commented out stuff * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Fix Aggregation Pool for Electra (#5754) * Fix Aggregation Pool for Electra * Remove Outdated Interface * fix ssz (#5755) * Get `electra_op_pool` up to date (#5756) * fix get attesting indices (#5742) * fix get attesting indices * better errors * fix compile * only get committee index once * Ef test fixes (#5753) * attestation related ef test fixes * delete commented out stuff * Fix Aggregation Pool for Electra (#5754) * Fix Aggregation Pool for Electra * Remove Outdated Interface * fix ssz (#5755) --------- Co-authored-by: realbigsean <sean@sigmaprime.io> * Revert "Get `electra_op_pool` up to date (#5756)" (#5757) This reverts commitab9e58aa3d. * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into electra_op_pool * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Compute on chain aggregate impl (#5752) * add compute_on_chain_agg impl to op pool changes * fmt * get op pool tests to pass * update beacon api aggregate attestationendpoint * update the naive agg pool interface (#5760) * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * updates after merge * Fix bugs in cross-committee aggregation * Add comment to max cover optimisation * Fix assert * Electra epoch processing * add deposit limit for old deposit queue * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge pull request #5749 from sigp/electra_op_pool Optimise Electra op pool aggregation * don't fail on empty consolidations * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * update committee offset * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * update committee offset * update committee offset * update committee offset * only increment the state deposit index on old deposit flow * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * use correct max eb in epoch cache initialization * drop initiate validator ordering optimization * fix initiate exit for single pass * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * accept new payload v4 in mock el * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Fix Electra Fork Choice Tests (#5764) * Fix Electra Fork Choice Tests (#5764) * Fix Electra Fork Choice Tests (#5764) * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Fix Consolidation Sigs & Withdrawals * Merge pull request #5766 from ethDreamer/two_fixes Fix Consolidation Sigs & Withdrawals * Merge branches 'block-processing-electra' and 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Send unagg attestation based on fork * Fix ser/de * Merge branch 'electra-engine-api' into beacon-api-electra * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * Subscribe to the correct subnets for electra attestations (#5782) * subscribe to the correct att subnets for electra * subscribe to the correct att subnets for electra * cargo fmt * update electra readiness with new endpoints * fix slashing handling * Fix Bug In Block Processing with 0x02 Credentials * Merge remote-tracking branch 'upstream/unstable' * Send unagg attestation based on fork * Publish all aggregates * just one more check bro plz.. * Merge pull request #5832 from ethDreamer/electra_attestation_changes_merge_unstable Merge `unstable` into `electra_attestation_changes` * Merge pull request #5835 from realbigsean/fix-validator-logic Fix validator logic * Merge pull request #5816 from realbigsean/electra-attestation-slashing-handling Electra slashing handling * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * fix: serde rename camle case for execution payload body (#5846) * Merge branch 'electra-engine-api' into beacon-api-electra * Electra attestation changes rm decode impl (#5856) * Remove Crappy Decode impl for Attestation * Remove Inefficient Attestation Decode impl * Implement Schema Upgrade / Downgrade * Update beacon_node/beacon_chain/src/schema_change/migration_schema_v20.rs Co-authored-by: Michael Sproul <micsproul@gmail.com> --------- Co-authored-by: Michael Sproul <micsproul@gmail.com> * Fix failing attestation tests and misc electra attestation cleanup (#5810) * - get attestation related beacon chain tests to pass - observed attestations are now keyed off of data + committee index - rename op pool attestationref to compactattestationref - remove unwraps in agg pool and use options instead - cherry pick some changes from ef-tests-electra * cargo fmt * fix failing test * Revert dockerfile changes * make committee_index return option * function args shouldnt be a ref to attestation ref * fmt * fix dup imports --------- Co-authored-by: realbigsean <seananderson33@GMAIL.com> * fix some todos (#5817) * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * add consolidations to merkle calc for inclusion proof * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Remove Duplicate KZG Commitment Merkle Proof Code (#5874) * Remove Duplicate KZG Commitment Merkle Proof Code * s/tree_lists/fields/ * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * fix compile * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Fix slasher tests (#5906) * Fix electra tests * Add electra attestations to double vote tests * Update superstruct to 0.8 * Merge remote-tracking branch 'origin/unstable' into electra_attestation_changes * Small cleanup in slasher tests * Clean up Electra observed aggregates (#5929) * Use consistent key in observed_attestations * Remove unwraps from observed aggregates * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * De-dup attestation constructor logic * Remove unwraps in Attestation construction * Dedup match_attestation_data * Remove outdated TODO * Use ForkName Ord in fork-choice tests * Use ForkName Ord in BeaconBlockBody * Make to_electra not fallible * Remove TestRandom impl for IndexedAttestation * Remove IndexedAttestation faulty Decode impl * Drop TestRandom impl * Add PendingAttestationInElectra * Indexed att on disk (#35) * indexed att on disk * fix lints * Update slasher/src/migrate.rs Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> --------- Co-authored-by: Lion - dapplion <35266934+dapplion@users.noreply.github.com> Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> * add electra fork enabled fn to ForkName impl (#36) * add electra fork enabled fn to ForkName impl * remove inadvertent file * Update common/eth2/src/types.rs Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> * Dedup attestation constructor logic in attester cache * Use if let Ok for committee_bits * Dedup Attestation constructor code * Diff reduction in tests * Fix beacon_chain tests * Diff reduction * Use Ord for ForkName in pubsub * Resolve into_attestation_and_indices todo * Remove stale TODO * Fix beacon_chain tests * Test spec invariant * Use electra_enabled in pubsub * Remove get_indexed_attestation_from_signed_aggregate * Use ok_or instead of if let else * committees are sorted * remove dup method `get_indexed_attestation_from_committees` * Merge pull request #5940 from dapplion/electra_attestation_changes_lionreview Electra attestations #5712 review * update default persisted op pool deserialization * ensure aggregate and proof uses serde untagged on ref * Fork aware ssz static attestation tests * Electra attestation changes from Lions review (#5971) * dedup/cleanup and remove unneeded hashset use * remove irrelevant TODOs * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * Merge branch 'electra_attestation_changes' of https://github.com/sigp/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * Fix Compilation Break * Merge pull request #5973 from ethDreamer/beacon-api-electra Fix Compilation Break * Electra attestation changes sean review (#5972) * instantiate empty bitlist in unreachable code * clean up error conversion * fork enabled bool cleanup * remove a couple todos * return bools instead of options in `aggregate` and use the result * delete commented out code * use map macros in simple transformations * remove signers_disjoint_from * get ef tests compiling * get ef tests compiling * update intentionally excluded files * Avoid changing slasher schema for Electra * Delete slasher schema v4 * Fix clippy * Fix compilation of beacon_chain tests * Update database.rs * Update per_block_processing.rs * Add electra lightclient types * Update slasher/src/database.rs * fix imports * Merge pull request #5980 from dapplion/electra-lightclient Add electra lightclient types * Merge pull request #5975 from michaelsproul/electra-slasher-no-migration Avoid changing slasher schema for Electra * Update beacon_node/beacon_chain/src/attestation_verification.rs * Update beacon_node/beacon_chain/src/attestation_verification.rs * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra_attestation_changes * Merge branch 'electra_attestation_changes' of https://github.com/realbigsean/lighthouse into block-processing-electra * Merge branch 'block-processing-electra' of https://github.com/sigp/lighthouse into electra-epoch-proc * Merge branch 'electra-epoch-proc' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * The great renaming receipt -> request * Address some more review comments * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra-engine-api * Update beacon_node/beacon_chain/src/electra_readiness.rs * Update consensus/types/src/chain_spec.rs * update GET requests * update POST requests * add client updates and test updates * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra-engine-api * Merge branch 'electra-engine-api' of https://github.com/sigp/lighthouse into beacon-api-electra * compile after merge * unwrap -> unwrap_err * self review * fix tests * convert op pool messages to electra in electra * remove methods to post without content header * filter instead of convert * Merge branch 'unstable' of https://github.com/sigp/lighthouse into beacon-api-electra * Merge branch 'beacon-api-electra' of https://github.com/sigp/lighthouse into ef-tests-electra * fix ef test compile * use `enabled` fork methods * get tests passing * last updates * Fix bug on engine api with consolidations (#6101) * Fix small bug in engine_api * Merge pull request #6116 from ethDreamer/electra-devnet-1 Fix payload_bodies bug in engine_api * Merge branch 'unstable' of https://github.com/sigp/lighthouse into ef-tests-electra * add deposit request file * Merge branch 'unstable' of https://github.com/sigp/lighthouse into ef-tests-electra * Merge branch 'ef-tests-electra' of https://github.com/sigp/lighthouse into electra-devnet-1 * clean up after merge * Fix Broken Test on `devnet-1` * another small bug * Merge pull request #6132 from ethDreamer/devnet-1-fix-test Fix Broken Test on `devnet-1` * Fix Deserialization Bug in `engine-api` * Merge pull request #6235 from ethDreamer/fix_deserialization Fix Deserialization Bug in `engine-api` * Merge branch 'unstable' into electra-devnet-1 * remove import * Merge branch 'unstable' of https://github.com/sigp/lighthouse into electra-devnet-1 * Remove false negative checks on `shuffling_is_compatible` * Fix flaky validator monitor test
This commit is contained in:
@@ -170,7 +170,6 @@ where
|
||||
self.include_exits(block)?;
|
||||
self.include_sync_aggregate(block)?;
|
||||
self.include_bls_to_execution_changes(block)?;
|
||||
self.include_consolidations(block)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -359,27 +358,6 @@ where
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Includes all signatures in `self.block.body.consolidations` for verification.
|
||||
pub fn include_consolidations<Payload: AbstractExecPayload<E>>(
|
||||
&mut self,
|
||||
block: &'a SignedBeaconBlock<E, Payload>,
|
||||
) -> Result<()> {
|
||||
if let Ok(consolidations) = block.message().body().consolidations() {
|
||||
self.sets.sets.reserve(consolidations.len());
|
||||
for consolidation in consolidations {
|
||||
let set = consolidation_signature_set(
|
||||
self.state,
|
||||
self.get_pubkey.clone(),
|
||||
consolidation,
|
||||
self.spec,
|
||||
)?;
|
||||
|
||||
self.sets.push(set);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Verify all the signatures that have been included in `self`, returning `true` if and only if
|
||||
/// all the signatures are valid.
|
||||
///
|
||||
|
||||
@@ -89,46 +89,6 @@ pub enum BlockProcessingError {
|
||||
found: Hash256,
|
||||
},
|
||||
WithdrawalCredentialsInvalid,
|
||||
TooManyPendingConsolidations {
|
||||
consolidations: usize,
|
||||
limit: usize,
|
||||
},
|
||||
ConsolidationChurnLimitTooLow {
|
||||
churn_limit: u64,
|
||||
minimum: u64,
|
||||
},
|
||||
MatchingSourceTargetConsolidation {
|
||||
index: u64,
|
||||
},
|
||||
InactiveConsolidationSource {
|
||||
index: u64,
|
||||
current_epoch: Epoch,
|
||||
},
|
||||
InactiveConsolidationTarget {
|
||||
index: u64,
|
||||
current_epoch: Epoch,
|
||||
},
|
||||
SourceValidatorExiting {
|
||||
index: u64,
|
||||
},
|
||||
TargetValidatorExiting {
|
||||
index: u64,
|
||||
},
|
||||
FutureConsolidationEpoch {
|
||||
current_epoch: Epoch,
|
||||
consolidation_epoch: Epoch,
|
||||
},
|
||||
NoSourceExecutionWithdrawalCredential {
|
||||
index: u64,
|
||||
},
|
||||
NoTargetExecutionWithdrawalCredential {
|
||||
index: u64,
|
||||
},
|
||||
MismatchedWithdrawalCredentials {
|
||||
source_address: Address,
|
||||
target_address: Address,
|
||||
},
|
||||
InavlidConsolidationSignature,
|
||||
PendingAttestationInElectra,
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ use crate::common::{
|
||||
slash_validator,
|
||||
};
|
||||
use crate::per_block_processing::errors::{BlockProcessingError, IntoWithIndex};
|
||||
use crate::signature_sets::consolidation_signature_set;
|
||||
use crate::VerifySignatures;
|
||||
use types::consts::altair::{PARTICIPATION_FLAG_WEIGHTS, PROPOSER_WEIGHT, WEIGHT_DENOMINATOR};
|
||||
use types::typenum::U33;
|
||||
@@ -40,15 +39,16 @@ pub fn process_operations<E: EthSpec, Payload: AbstractExecPayload<E>>(
|
||||
}
|
||||
|
||||
if state.fork_name_unchecked().electra_enabled() {
|
||||
let requests = block_body.execution_payload()?.withdrawal_requests()?;
|
||||
if let Some(requests) = requests {
|
||||
process_execution_layer_withdrawal_requests(state, &requests, spec)?;
|
||||
state.update_pubkey_cache()?;
|
||||
if let Some(deposit_requests) = block_body.execution_payload()?.deposit_requests()? {
|
||||
process_deposit_requests(state, &deposit_requests, spec)?;
|
||||
}
|
||||
let receipts = block_body.execution_payload()?.deposit_requests()?;
|
||||
if let Some(receipts) = receipts {
|
||||
process_deposit_requests(state, &receipts, spec)?;
|
||||
if let Some(withdrawal_requests) = block_body.execution_payload()?.withdrawal_requests()? {
|
||||
process_withdrawal_requests(state, &withdrawal_requests, spec)?;
|
||||
}
|
||||
if let Some(consolidations) = block_body.execution_payload()?.consolidation_requests()? {
|
||||
process_consolidation_requests(state, &consolidations, spec)?;
|
||||
}
|
||||
process_consolidations(state, block_body.consolidations()?, verify_signatures, spec)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@@ -371,10 +371,11 @@ pub fn process_deposits<E: EthSpec>(
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
// [Modified in Electra:EIP6110]
|
||||
// Disable former deposit mechanism once all prior deposits are processed
|
||||
//
|
||||
// If `deposit_requests_start_index` does not exist as a field on `state`, electra is disabled
|
||||
// which means we always want to use the old check, so this field defaults to `u64::MAX`.
|
||||
let eth1_deposit_index_limit = state.deposit_requests_start_index().unwrap_or(u64::MAX);
|
||||
let deposit_requests_start_index = state.deposit_requests_start_index().unwrap_or(u64::MAX);
|
||||
let eth1_deposit_index_limit = std::cmp::min(
|
||||
deposit_requests_start_index,
|
||||
state.eth1_data().deposit_count,
|
||||
);
|
||||
|
||||
if state.eth1_deposit_index() < eth1_deposit_index_limit {
|
||||
let expected_deposit_len = std::cmp::min(
|
||||
@@ -528,9 +529,10 @@ pub fn apply_deposit<E: EthSpec>(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn process_execution_layer_withdrawal_requests<E: EthSpec>(
|
||||
// Make sure to build the pubkey cache before calling this function
|
||||
pub fn process_withdrawal_requests<E: EthSpec>(
|
||||
state: &mut BeaconState<E>,
|
||||
requests: &[ExecutionLayerWithdrawalRequest],
|
||||
requests: &[WithdrawalRequest],
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
for request in requests {
|
||||
@@ -545,13 +547,11 @@ pub fn process_execution_layer_withdrawal_requests<E: EthSpec>(
|
||||
}
|
||||
|
||||
// Verify pubkey exists
|
||||
let index_opt = state.get_validator_index(&request.validator_pubkey)?;
|
||||
let Some(index) = index_opt else {
|
||||
let Some(index) = state.pubkey_cache().get(&request.validator_pubkey) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let validator = state.get_validator(index)?;
|
||||
|
||||
// Verify withdrawal credentials
|
||||
let has_correct_credential = validator.has_execution_withdrawal_credential(spec);
|
||||
let is_correct_source_address = validator
|
||||
@@ -627,19 +627,19 @@ pub fn process_execution_layer_withdrawal_requests<E: EthSpec>(
|
||||
|
||||
pub fn process_deposit_requests<E: EthSpec>(
|
||||
state: &mut BeaconState<E>,
|
||||
receipts: &[DepositRequest],
|
||||
deposit_requests: &[DepositRequest],
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
for receipt in receipts {
|
||||
for request in deposit_requests {
|
||||
// Set deposit receipt start index
|
||||
if state.deposit_requests_start_index()? == spec.unset_deposit_requests_start_index {
|
||||
*state.deposit_requests_start_index_mut()? = receipt.index
|
||||
*state.deposit_requests_start_index_mut()? = request.index
|
||||
}
|
||||
let deposit_data = DepositData {
|
||||
pubkey: receipt.pubkey,
|
||||
withdrawal_credentials: receipt.withdrawal_credentials,
|
||||
amount: receipt.amount,
|
||||
signature: receipt.signature.clone().into(),
|
||||
pubkey: request.pubkey,
|
||||
withdrawal_credentials: request.withdrawal_credentials,
|
||||
amount: request.amount,
|
||||
signature: request.signature.clone().into(),
|
||||
};
|
||||
apply_deposit(state, deposit_data, None, false, spec)?
|
||||
}
|
||||
@@ -647,149 +647,96 @@ pub fn process_deposit_requests<E: EthSpec>(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn process_consolidations<E: EthSpec>(
|
||||
// Make sure to build the pubkey cache before calling this function
|
||||
pub fn process_consolidation_requests<E: EthSpec>(
|
||||
state: &mut BeaconState<E>,
|
||||
consolidations: &[SignedConsolidation],
|
||||
verify_signatures: VerifySignatures,
|
||||
consolidation_requests: &[ConsolidationRequest],
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
if consolidations.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// If the pending consolidations queue is full, no consolidations are allowed in the block
|
||||
let pending_consolidations = state.pending_consolidations()?.len();
|
||||
let pending_consolidations_limit = E::pending_consolidations_limit();
|
||||
block_verify! {
|
||||
pending_consolidations < pending_consolidations_limit,
|
||||
BlockProcessingError::TooManyPendingConsolidations {
|
||||
consolidations: pending_consolidations,
|
||||
limit: pending_consolidations_limit
|
||||
}
|
||||
}
|
||||
|
||||
// If there is too little available consolidation churn limit, no consolidations are allowed in the block
|
||||
let churn_limit = state.get_consolidation_churn_limit(spec)?;
|
||||
block_verify! {
|
||||
churn_limit > spec.min_activation_balance,
|
||||
BlockProcessingError::ConsolidationChurnLimitTooLow {
|
||||
churn_limit,
|
||||
minimum: spec.min_activation_balance
|
||||
}
|
||||
}
|
||||
|
||||
for signed_consolidation in consolidations {
|
||||
let consolidation = signed_consolidation.message.clone();
|
||||
|
||||
// Verify that source != target, so a consolidation cannot be used as an exit.
|
||||
block_verify! {
|
||||
consolidation.source_index != consolidation.target_index,
|
||||
BlockProcessingError::MatchingSourceTargetConsolidation {
|
||||
index: consolidation.source_index
|
||||
}
|
||||
}
|
||||
|
||||
let source_validator = state.get_validator(consolidation.source_index as usize)?;
|
||||
let target_validator = state.get_validator(consolidation.target_index as usize)?;
|
||||
|
||||
// Verify the source and the target are active
|
||||
let current_epoch = state.current_epoch();
|
||||
block_verify! {
|
||||
source_validator.is_active_at(current_epoch),
|
||||
BlockProcessingError::InactiveConsolidationSource{
|
||||
index: consolidation.source_index,
|
||||
current_epoch
|
||||
}
|
||||
}
|
||||
block_verify! {
|
||||
target_validator.is_active_at(current_epoch),
|
||||
BlockProcessingError::InactiveConsolidationTarget{
|
||||
index: consolidation.target_index,
|
||||
current_epoch
|
||||
}
|
||||
}
|
||||
|
||||
// Verify exits for source and target have not been initiated
|
||||
block_verify! {
|
||||
source_validator.exit_epoch == spec.far_future_epoch,
|
||||
BlockProcessingError::SourceValidatorExiting{
|
||||
index: consolidation.source_index,
|
||||
}
|
||||
}
|
||||
block_verify! {
|
||||
target_validator.exit_epoch == spec.far_future_epoch,
|
||||
BlockProcessingError::TargetValidatorExiting{
|
||||
index: consolidation.target_index,
|
||||
}
|
||||
}
|
||||
|
||||
// Consolidations must specify an epoch when they become valid; they are not valid before then
|
||||
block_verify! {
|
||||
current_epoch >= consolidation.epoch,
|
||||
BlockProcessingError::FutureConsolidationEpoch {
|
||||
current_epoch,
|
||||
consolidation_epoch: consolidation.epoch
|
||||
}
|
||||
}
|
||||
|
||||
// Verify the source and the target have Execution layer withdrawal credentials
|
||||
block_verify! {
|
||||
source_validator.has_execution_withdrawal_credential(spec),
|
||||
BlockProcessingError::NoSourceExecutionWithdrawalCredential {
|
||||
index: consolidation.source_index,
|
||||
}
|
||||
}
|
||||
block_verify! {
|
||||
target_validator.has_execution_withdrawal_credential(spec),
|
||||
BlockProcessingError::NoTargetExecutionWithdrawalCredential {
|
||||
index: consolidation.target_index,
|
||||
}
|
||||
}
|
||||
|
||||
// Verify the same withdrawal address
|
||||
let source_address = source_validator
|
||||
.get_execution_withdrawal_address(spec)
|
||||
.ok_or(BeaconStateError::NonExecutionAddresWithdrawalCredential)?;
|
||||
let target_address = target_validator
|
||||
.get_execution_withdrawal_address(spec)
|
||||
.ok_or(BeaconStateError::NonExecutionAddresWithdrawalCredential)?;
|
||||
block_verify! {
|
||||
source_address == target_address,
|
||||
BlockProcessingError::MismatchedWithdrawalCredentials {
|
||||
source_address,
|
||||
target_address
|
||||
}
|
||||
}
|
||||
|
||||
if verify_signatures.is_true() {
|
||||
let signature_set = consolidation_signature_set(
|
||||
state,
|
||||
|i| get_pubkey_from_state(state, i),
|
||||
signed_consolidation,
|
||||
spec,
|
||||
)?;
|
||||
block_verify! {
|
||||
signature_set.verify(),
|
||||
BlockProcessingError::InavlidConsolidationSignature
|
||||
}
|
||||
}
|
||||
let exit_epoch = state.compute_consolidation_epoch_and_update_churn(
|
||||
source_validator.effective_balance,
|
||||
spec,
|
||||
)?;
|
||||
let source_validator = state.get_validator_mut(consolidation.source_index as usize)?;
|
||||
// Initiate source validator exit and append pending consolidation
|
||||
source_validator.exit_epoch = exit_epoch;
|
||||
source_validator.withdrawable_epoch = source_validator
|
||||
.exit_epoch
|
||||
.safe_add(spec.min_validator_withdrawability_delay)?;
|
||||
state
|
||||
.pending_consolidations_mut()?
|
||||
.push(PendingConsolidation {
|
||||
source_index: consolidation.source_index,
|
||||
target_index: consolidation.target_index,
|
||||
})?;
|
||||
for request in consolidation_requests {
|
||||
process_consolidation_request(state, request, spec)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn process_consolidation_request<E: EthSpec>(
|
||||
state: &mut BeaconState<E>,
|
||||
consolidation_request: &ConsolidationRequest,
|
||||
spec: &ChainSpec,
|
||||
) -> Result<(), BlockProcessingError> {
|
||||
// If the pending consolidations queue is full, consolidation requests are ignored
|
||||
if state.pending_consolidations()?.len() == E::PendingConsolidationsLimit::to_usize() {
|
||||
return Ok(());
|
||||
}
|
||||
// If there is too little available consolidation churn limit, consolidation requests are ignored
|
||||
if state.get_consolidation_churn_limit(spec)? <= spec.min_activation_balance {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let Some(source_index) = state
|
||||
.pubkey_cache()
|
||||
.get(&consolidation_request.source_pubkey)
|
||||
else {
|
||||
// source validator doesn't exist
|
||||
return Ok(());
|
||||
};
|
||||
let Some(target_index) = state
|
||||
.pubkey_cache()
|
||||
.get(&consolidation_request.target_pubkey)
|
||||
else {
|
||||
// target validator doesn't exist
|
||||
return Ok(());
|
||||
};
|
||||
// Verify that source != target, so a consolidation cannot be used as an exit.
|
||||
if source_index == target_index {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let source_validator = state.get_validator(source_index)?;
|
||||
// Verify the source withdrawal credentials
|
||||
if let Some(withdrawal_address) = source_validator.get_execution_withdrawal_address(spec) {
|
||||
if withdrawal_address != consolidation_request.source_address {
|
||||
return Ok(());
|
||||
}
|
||||
} else {
|
||||
// Source doen't have execution withdrawal credentials
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let target_validator = state.get_validator(target_index)?;
|
||||
// Verify the target has execution withdrawal credentials
|
||||
if !target_validator.has_execution_withdrawal_credential(spec) {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Verify the source and target are active
|
||||
let current_epoch = state.current_epoch();
|
||||
if !source_validator.is_active_at(current_epoch)
|
||||
|| !target_validator.is_active_at(current_epoch)
|
||||
{
|
||||
return Ok(());
|
||||
}
|
||||
// Verify exits for source and target have not been initiated
|
||||
if source_validator.exit_epoch != spec.far_future_epoch
|
||||
|| target_validator.exit_epoch != spec.far_future_epoch
|
||||
{
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Initiate source validator exit and append pending consolidation
|
||||
let source_exit_epoch = state
|
||||
.compute_consolidation_epoch_and_update_churn(source_validator.effective_balance, spec)?;
|
||||
let source_validator = state.get_validator_mut(source_index)?;
|
||||
source_validator.exit_epoch = source_exit_epoch;
|
||||
source_validator.withdrawable_epoch =
|
||||
source_exit_epoch.safe_add(spec.min_validator_withdrawability_delay)?;
|
||||
state
|
||||
.pending_consolidations_mut()?
|
||||
.push(PendingConsolidation {
|
||||
source_index: source_index as u64,
|
||||
target_index: target_index as u64,
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ use types::{
|
||||
BeaconStateError, ChainSpec, DepositData, Domain, Epoch, EthSpec, Fork, Hash256,
|
||||
InconsistentFork, IndexedAttestation, IndexedAttestationRef, ProposerSlashing, PublicKey,
|
||||
PublicKeyBytes, Signature, SignedAggregateAndProof, SignedBeaconBlock, SignedBeaconBlockHeader,
|
||||
SignedBlsToExecutionChange, SignedConsolidation, SignedContributionAndProof, SignedRoot,
|
||||
SignedVoluntaryExit, SigningData, Slot, SyncAggregate, SyncAggregatorSelectionData, Unsigned,
|
||||
SignedBlsToExecutionChange, SignedContributionAndProof, SignedRoot, SignedVoluntaryExit,
|
||||
SigningData, Slot, SyncAggregate, SyncAggregatorSelectionData, Unsigned,
|
||||
};
|
||||
|
||||
pub type Result<T> = std::result::Result<T, Error>;
|
||||
@@ -664,37 +664,3 @@ where
|
||||
message,
|
||||
)))
|
||||
}
|
||||
|
||||
/// Returns two signature sets, one for the source and one for the target validator
|
||||
/// in the `SignedConsolidation`.
|
||||
pub fn consolidation_signature_set<'a, E, F>(
|
||||
state: &'a BeaconState<E>,
|
||||
get_pubkey: F,
|
||||
consolidation: &'a SignedConsolidation,
|
||||
spec: &'a ChainSpec,
|
||||
) -> Result<SignatureSet<'a>>
|
||||
where
|
||||
E: EthSpec,
|
||||
F: Fn(usize) -> Option<Cow<'a, PublicKey>>,
|
||||
{
|
||||
let source_index = consolidation.message.source_index as usize;
|
||||
let target_index = consolidation.message.target_index as usize;
|
||||
|
||||
let domain = spec.compute_domain(
|
||||
Domain::Consolidation,
|
||||
spec.genesis_fork_version,
|
||||
state.genesis_validators_root(),
|
||||
);
|
||||
|
||||
let message = consolidation.message.signing_root(domain);
|
||||
let source_pubkey =
|
||||
get_pubkey(source_index).ok_or(Error::ValidatorUnknown(source_index as u64))?;
|
||||
let target_pubkey =
|
||||
get_pubkey(target_index).ok_or(Error::ValidatorUnknown(target_index as u64))?;
|
||||
|
||||
Ok(SignatureSet::multiple_pubkeys(
|
||||
&consolidation.signature,
|
||||
vec![source_pubkey, target_pubkey],
|
||||
message,
|
||||
))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user