mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-08 03:01:41 +00:00
* 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 * 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 * 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 * 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 * update committee offset * update committee offset * only increment deposit index on state for old deposit flow * Revert "only increment deposit index on state for old deposit flow" This reverts commit817d4235ae. * 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 * 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 * read electra payloads from file * accept new payload v4 in mock el * use correct max eb in epoch cache initialization * drop initiate validator ordering optimization * fix initiate exit for single pass * 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 * 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 * 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 * 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 * 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 * 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 * add light client ssz tests * disable failing light client ssz tests * correctly exclude light client struct from accessed files * 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 * 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 * Merge branch 'unstable' of https://github.com/sigp/lighthouse into ef-tests-electra * add deposit request file
898 lines
22 KiB
Rust
898 lines
22 KiB
Rust
use crate::cases::{self, Case, Cases, EpochTransition, LoadCase, Operation};
|
|
use crate::type_name;
|
|
use crate::type_name::TypeName;
|
|
use derivative::Derivative;
|
|
use std::fs::{self, DirEntry};
|
|
use std::marker::PhantomData;
|
|
use std::path::PathBuf;
|
|
use types::{BeaconState, EthSpec, ForkName};
|
|
|
|
pub trait Handler {
|
|
type Case: Case + LoadCase;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str;
|
|
|
|
fn handler_name(&self) -> String;
|
|
|
|
// Add forks here to exclude them from EF spec testing. Helpful for adding future or
|
|
// unspecified forks.
|
|
fn disabled_forks(&self) -> Vec<ForkName> {
|
|
vec![]
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
Self::Case::is_enabled_for_fork(fork_name)
|
|
}
|
|
|
|
fn run(&self) {
|
|
for fork_name in ForkName::list_all() {
|
|
if !self.disabled_forks().contains(&fork_name) && self.is_enabled_for_fork(fork_name) {
|
|
self.run_for_fork(fork_name)
|
|
}
|
|
}
|
|
}
|
|
|
|
fn use_rayon() -> bool {
|
|
true
|
|
}
|
|
|
|
fn run_for_fork(&self, fork_name: ForkName) {
|
|
let fork_name_str = fork_name.to_string();
|
|
|
|
let handler_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
|
.join("consensus-spec-tests")
|
|
.join("tests")
|
|
.join(Self::config_name())
|
|
.join(&fork_name_str)
|
|
.join(Self::runner_name())
|
|
.join(self.handler_name());
|
|
|
|
// Iterate through test suites
|
|
let as_directory = |entry: Result<DirEntry, std::io::Error>| -> Option<DirEntry> {
|
|
entry
|
|
.ok()
|
|
.filter(|e| e.file_type().map(|ty| ty.is_dir()).unwrap())
|
|
};
|
|
|
|
let test_cases = fs::read_dir(&handler_path)
|
|
.unwrap_or_else(|e| panic!("handler dir {} exists: {:?}", handler_path.display(), e))
|
|
.filter_map(as_directory)
|
|
.flat_map(|suite| fs::read_dir(suite.path()).expect("suite dir exists"))
|
|
.filter_map(as_directory)
|
|
.map(|test_case_dir| {
|
|
let path = test_case_dir.path();
|
|
|
|
let case = Self::Case::load_from_dir(&path, fork_name).expect("test should load");
|
|
(path, case)
|
|
})
|
|
.collect();
|
|
|
|
let results = Cases { test_cases }.test_results(fork_name, Self::use_rayon());
|
|
|
|
let name = format!(
|
|
"{}/{}/{}",
|
|
fork_name_str,
|
|
Self::runner_name(),
|
|
self.handler_name()
|
|
);
|
|
crate::results::assert_tests_pass(&name, &handler_path, &results);
|
|
}
|
|
}
|
|
|
|
macro_rules! bls_eth_handler {
|
|
($runner_name: ident, $case_name:ident, $handler_name:expr) => {
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct $runner_name;
|
|
|
|
impl Handler for $runner_name {
|
|
type Case = cases::$case_name;
|
|
|
|
fn runner_name() -> &'static str {
|
|
"bls"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
$handler_name.into()
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
macro_rules! bls_handler {
|
|
($runner_name: ident, $case_name:ident, $handler_name:expr) => {
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct $runner_name;
|
|
|
|
impl Handler for $runner_name {
|
|
type Case = cases::$case_name;
|
|
|
|
fn runner_name() -> &'static str {
|
|
"bls"
|
|
}
|
|
|
|
fn config_name() -> &'static str {
|
|
"bls12-381-tests"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
$handler_name.into()
|
|
}
|
|
|
|
fn run(&self) {
|
|
let fork_name = ForkName::Base;
|
|
let fork_name_str = fork_name.to_string();
|
|
let handler_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
|
.join("consensus-spec-tests")
|
|
.join(Self::config_name())
|
|
.join(self.handler_name());
|
|
|
|
let as_file = |entry: Result<DirEntry, std::io::Error>| -> Option<DirEntry> {
|
|
entry
|
|
.ok()
|
|
.filter(|e| e.file_type().map(|ty| ty.is_file()).unwrap_or(false))
|
|
};
|
|
let test_cases: Vec<(PathBuf, Self::Case)> = fs::read_dir(&handler_path)
|
|
.expect("handler dir exists")
|
|
.filter_map(as_file)
|
|
.map(|test_case_path| {
|
|
let path = test_case_path.path();
|
|
let case =
|
|
Self::Case::load_from_dir(&path, fork_name).expect("test should load");
|
|
|
|
(path, case)
|
|
})
|
|
.collect();
|
|
|
|
let results = Cases { test_cases }.test_results(fork_name, Self::use_rayon());
|
|
|
|
let name = format!(
|
|
"{}/{}/{}",
|
|
fork_name_str,
|
|
Self::runner_name(),
|
|
self.handler_name()
|
|
);
|
|
crate::results::assert_tests_pass(&name, &handler_path, &results);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
bls_handler!(BlsAggregateSigsHandler, BlsAggregateSigs, "aggregate");
|
|
bls_handler!(BlsSignMsgHandler, BlsSign, "sign");
|
|
bls_handler!(BlsBatchVerifyHandler, BlsBatchVerify, "batch_verify");
|
|
bls_handler!(BlsVerifyMsgHandler, BlsVerify, "verify");
|
|
bls_handler!(
|
|
BlsAggregateVerifyHandler,
|
|
BlsAggregateVerify,
|
|
"aggregate_verify"
|
|
);
|
|
bls_handler!(
|
|
BlsFastAggregateVerifyHandler,
|
|
BlsFastAggregateVerify,
|
|
"fast_aggregate_verify"
|
|
);
|
|
bls_eth_handler!(
|
|
BlsEthAggregatePubkeysHandler,
|
|
BlsEthAggregatePubkeys,
|
|
"eth_aggregate_pubkeys"
|
|
);
|
|
bls_eth_handler!(
|
|
BlsEthFastAggregateVerifyHandler,
|
|
BlsEthFastAggregateVerify,
|
|
"eth_fast_aggregate_verify"
|
|
);
|
|
|
|
/// Handler for SSZ types.
|
|
pub struct SszStaticHandler<T, E> {
|
|
supported_forks: Vec<ForkName>,
|
|
_phantom: PhantomData<(T, E)>,
|
|
}
|
|
|
|
impl<T, E> Default for SszStaticHandler<T, E> {
|
|
fn default() -> Self {
|
|
Self::for_forks(ForkName::list_all())
|
|
}
|
|
}
|
|
|
|
impl<T, E> SszStaticHandler<T, E> {
|
|
pub fn for_forks(supported_forks: Vec<ForkName>) -> Self {
|
|
SszStaticHandler {
|
|
supported_forks,
|
|
_phantom: PhantomData,
|
|
}
|
|
}
|
|
|
|
pub fn base_only() -> Self {
|
|
Self::for_forks(vec![ForkName::Base])
|
|
}
|
|
|
|
pub fn altair_only() -> Self {
|
|
Self::for_forks(vec![ForkName::Altair])
|
|
}
|
|
|
|
pub fn bellatrix_only() -> Self {
|
|
Self::for_forks(vec![ForkName::Bellatrix])
|
|
}
|
|
|
|
pub fn capella_only() -> Self {
|
|
Self::for_forks(vec![ForkName::Capella])
|
|
}
|
|
|
|
pub fn deneb_only() -> Self {
|
|
Self::for_forks(vec![ForkName::Deneb])
|
|
}
|
|
|
|
pub fn electra_only() -> Self {
|
|
Self::for_forks(vec![ForkName::Electra])
|
|
}
|
|
|
|
pub fn altair_and_later() -> Self {
|
|
Self::for_forks(ForkName::list_all()[1..].to_vec())
|
|
}
|
|
|
|
pub fn merge_and_later() -> Self {
|
|
Self::for_forks(ForkName::list_all()[2..].to_vec())
|
|
}
|
|
|
|
pub fn capella_and_later() -> Self {
|
|
Self::for_forks(ForkName::list_all()[3..].to_vec())
|
|
}
|
|
|
|
pub fn deneb_and_later() -> Self {
|
|
Self::for_forks(ForkName::list_all()[4..].to_vec())
|
|
}
|
|
|
|
pub fn electra_and_later() -> Self {
|
|
Self::for_forks(ForkName::list_all()[5..].to_vec())
|
|
}
|
|
|
|
pub fn pre_electra() -> Self {
|
|
Self::for_forks(ForkName::list_all()[0..5].to_vec())
|
|
}
|
|
}
|
|
|
|
/// Handler for SSZ types that implement `CachedTreeHash`.
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct SszStaticTHCHandler<T, E>(PhantomData<(T, E)>);
|
|
|
|
/// Handler for SSZ types that don't implement `ssz::Decode`.
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct SszStaticWithSpecHandler<T, E>(PhantomData<(T, E)>);
|
|
|
|
impl<T, E> Handler for SszStaticHandler<T, E>
|
|
where
|
|
T: cases::SszStaticType + tree_hash::TreeHash + ssz::Decode + TypeName,
|
|
E: TypeName,
|
|
{
|
|
type Case = cases::SszStatic<T>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"ssz_static"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
T::name().into()
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
self.supported_forks.contains(&fork_name)
|
|
}
|
|
}
|
|
|
|
impl<E> Handler for SszStaticTHCHandler<BeaconState<E>, E>
|
|
where
|
|
E: EthSpec + TypeName,
|
|
{
|
|
type Case = cases::SszStaticTHC<BeaconState<E>>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"ssz_static"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
BeaconState::<E>::name().into()
|
|
}
|
|
}
|
|
|
|
impl<T, E> Handler for SszStaticWithSpecHandler<T, E>
|
|
where
|
|
T: TypeName,
|
|
E: EthSpec + TypeName,
|
|
cases::SszStaticWithSpec<T>: Case + LoadCase,
|
|
{
|
|
type Case = cases::SszStaticWithSpec<T>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"ssz_static"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
T::name().into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct ShufflingHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for ShufflingHandler<E> {
|
|
type Case = cases::Shuffling<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"shuffling"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"core".into()
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
fork_name == ForkName::Base
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct SanityBlocksHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for SanityBlocksHandler<E> {
|
|
type Case = cases::SanityBlocks<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"sanity"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"blocks".into()
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, _fork_name: ForkName) -> bool {
|
|
// NOTE: v1.1.0-beta.4 doesn't mark the historical blocks test as requiring real crypto, so
|
|
// only run these tests with real crypto for now.
|
|
cfg!(not(feature = "fake_crypto"))
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct SanitySlotsHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for SanitySlotsHandler<E> {
|
|
type Case = cases::SanitySlots<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"sanity"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"slots".into()
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
// Some sanity tests compute sync committees, which requires real crypto.
|
|
fork_name == ForkName::Base || cfg!(not(feature = "fake_crypto"))
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct RandomHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for RandomHandler<E> {
|
|
type Case = cases::SanityBlocks<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"random"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"random".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct EpochProcessingHandler<E, T>(PhantomData<(E, T)>);
|
|
|
|
impl<E: EthSpec + TypeName, T: EpochTransition<E>> Handler for EpochProcessingHandler<E, T> {
|
|
type Case = cases::EpochProcessing<E, T>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"epoch_processing"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
T::name().into()
|
|
}
|
|
}
|
|
|
|
pub struct RewardsHandler<E: EthSpec> {
|
|
handler_name: &'static str,
|
|
_phantom: PhantomData<E>,
|
|
}
|
|
|
|
impl<E: EthSpec> RewardsHandler<E> {
|
|
pub fn new(handler_name: &'static str) -> Self {
|
|
Self {
|
|
handler_name,
|
|
_phantom: PhantomData,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<E: EthSpec + TypeName> Handler for RewardsHandler<E> {
|
|
type Case = cases::RewardsTest<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"rewards"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
self.handler_name.to_string()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct ForkHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for ForkHandler<E> {
|
|
type Case = cases::ForkTest<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"fork"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"fork".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct TransitionHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for TransitionHandler<E> {
|
|
type Case = cases::TransitionTest<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"transition"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"core".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct FinalityHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for FinalityHandler<E> {
|
|
// Reuse the blocks case runner.
|
|
type Case = cases::SanityBlocks<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"finality"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"finality".into()
|
|
}
|
|
}
|
|
|
|
pub struct ForkChoiceHandler<E> {
|
|
handler_name: String,
|
|
_phantom: PhantomData<E>,
|
|
}
|
|
|
|
impl<E: EthSpec> ForkChoiceHandler<E> {
|
|
pub fn new(handler_name: &str) -> Self {
|
|
Self {
|
|
handler_name: handler_name.into(),
|
|
_phantom: PhantomData,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<E: EthSpec + TypeName> Handler for ForkChoiceHandler<E> {
|
|
type Case = cases::ForkChoiceTest<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"fork_choice"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
self.handler_name.clone()
|
|
}
|
|
|
|
fn use_rayon() -> bool {
|
|
// The fork choice tests use `block_on` which can cause panics with rayon.
|
|
false
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
// Merge block tests are only enabled for Bellatrix.
|
|
if self.handler_name == "on_merge_block" && fork_name != ForkName::Bellatrix {
|
|
return false;
|
|
}
|
|
|
|
// Tests are no longer generated for the base/phase0 specification.
|
|
if fork_name == ForkName::Base {
|
|
return false;
|
|
}
|
|
|
|
// No FCU override tests prior to bellatrix.
|
|
if self.handler_name == "should_override_forkchoice_update"
|
|
&& !fork_name.bellatrix_enabled()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// These tests check block validity (which may include signatures) and there is no need to
|
|
// run them with fake crypto.
|
|
cfg!(not(feature = "fake_crypto"))
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct OptimisticSyncHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for OptimisticSyncHandler<E> {
|
|
type Case = cases::ForkChoiceTest<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"sync"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"optimistic".into()
|
|
}
|
|
|
|
fn use_rayon() -> bool {
|
|
// The opt sync tests use `block_on` which can cause panics with rayon.
|
|
false
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
fork_name.bellatrix_enabled() && cfg!(not(feature = "fake_crypto"))
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct GenesisValidityHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for GenesisValidityHandler<E> {
|
|
type Case = cases::GenesisValidity<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"genesis"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"validity".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct GenesisInitializationHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for GenesisInitializationHandler<E> {
|
|
type Case = cases::GenesisInitialization<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"genesis"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"initialization".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KZGBlobToKZGCommitmentHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec> Handler for KZGBlobToKZGCommitmentHandler<E> {
|
|
type Case = cases::KZGBlobToKZGCommitment<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"kzg"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"blob_to_kzg_commitment".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KZGComputeBlobKZGProofHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec> Handler for KZGComputeBlobKZGProofHandler<E> {
|
|
type Case = cases::KZGComputeBlobKZGProof<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"kzg"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"compute_blob_kzg_proof".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KZGComputeKZGProofHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec> Handler for KZGComputeKZGProofHandler<E> {
|
|
type Case = cases::KZGComputeKZGProof<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"kzg"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"compute_kzg_proof".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KZGVerifyBlobKZGProofHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec> Handler for KZGVerifyBlobKZGProofHandler<E> {
|
|
type Case = cases::KZGVerifyBlobKZGProof<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"kzg"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"verify_blob_kzg_proof".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KZGVerifyBlobKZGProofBatchHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec> Handler for KZGVerifyBlobKZGProofBatchHandler<E> {
|
|
type Case = cases::KZGVerifyBlobKZGProofBatch<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"kzg"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"verify_blob_kzg_proof_batch".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KZGVerifyKZGProofHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec> Handler for KZGVerifyKZGProofHandler<E> {
|
|
type Case = cases::KZGVerifyKZGProof<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"kzg"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"verify_kzg_proof".into()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct MerkleProofValidityHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for MerkleProofValidityHandler<E> {
|
|
type Case = cases::MerkleProofValidity<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"light_client"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"single_merkle_proof".into()
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, _fork_name: ForkName) -> bool {
|
|
// Test is skipped due to some changes in the Capella light client
|
|
// spec.
|
|
//
|
|
// https://github.com/sigp/lighthouse/issues/4022
|
|
false
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct KzgInclusionMerkleProofValidityHandler<E>(PhantomData<E>);
|
|
|
|
impl<E: EthSpec + TypeName> Handler for KzgInclusionMerkleProofValidityHandler<E> {
|
|
type Case = cases::KzgInclusionMerkleProofValidity<E>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"merkle_proof"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
"single_merkle_proof".into()
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
// Enabled in Deneb
|
|
fork_name == ForkName::Deneb
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct OperationsHandler<E, O>(PhantomData<(E, O)>);
|
|
|
|
impl<E: EthSpec + TypeName, O: Operation<E>> Handler for OperationsHandler<E, O> {
|
|
type Case = cases::Operations<E, O>;
|
|
|
|
fn config_name() -> &'static str {
|
|
E::name()
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"operations"
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
O::handler_name()
|
|
}
|
|
}
|
|
|
|
#[derive(Derivative)]
|
|
#[derivative(Default(bound = ""))]
|
|
pub struct SszGenericHandler<H>(PhantomData<H>);
|
|
|
|
impl<H: TypeName> Handler for SszGenericHandler<H> {
|
|
type Case = cases::SszGeneric;
|
|
|
|
fn config_name() -> &'static str {
|
|
"general"
|
|
}
|
|
|
|
fn runner_name() -> &'static str {
|
|
"ssz_generic"
|
|
}
|
|
|
|
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
|
|
// SSZ generic tests are genesis only
|
|
fork_name == ForkName::Base
|
|
}
|
|
|
|
fn handler_name(&self) -> String {
|
|
H::name().into()
|
|
}
|
|
}
|
|
|
|
// Supported SSZ generic handlers
|
|
pub struct BasicVector;
|
|
type_name!(BasicVector, "basic_vector");
|
|
pub struct Bitlist;
|
|
type_name!(Bitlist, "bitlist");
|
|
pub struct Bitvector;
|
|
type_name!(Bitvector, "bitvector");
|
|
pub struct Boolean;
|
|
type_name!(Boolean, "boolean");
|
|
pub struct Uints;
|
|
type_name!(Uints, "uints");
|
|
pub struct Containers;
|
|
type_name!(Containers, "containers");
|