mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-02-07 11:35:03 -05:00
Compare commits
9 Commits
feat/add-r
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db2bb5505c | ||
|
|
14f01bbc6c | ||
|
|
c3e74e4a5d | ||
|
|
e7ae6a004b | ||
|
|
862fb2eb4a | ||
|
|
bb80a9c832 | ||
|
|
c1b668a50a | ||
|
|
fab687d96d | ||
|
|
cf94ccbf72 |
@@ -1,25 +1,39 @@
|
|||||||
version: v1.7.0-alpha.1
|
version: v1.7.0-alpha.2
|
||||||
style: full
|
style: full
|
||||||
|
|
||||||
specrefs:
|
specrefs:
|
||||||
search_root: ..
|
search_root: .
|
||||||
|
auto_standardize_names: true
|
||||||
|
auto_add_missing_entries: true
|
||||||
|
require_exceptions_have_fork: true
|
||||||
|
|
||||||
files:
|
files:
|
||||||
- configs.yml
|
- specrefs/configs.yml
|
||||||
- constants.yml
|
- specrefs/constants.yml
|
||||||
- containers.yml
|
- specrefs/containers.yml
|
||||||
- dataclasses.yml
|
- specrefs/dataclasses.yml
|
||||||
- functions.yml
|
- specrefs/functions.yml
|
||||||
- presets.yml
|
- specrefs/presets.yml
|
||||||
|
|
||||||
exceptions:
|
exceptions:
|
||||||
presets:
|
presets:
|
||||||
# Not implemented: gloas (future fork)
|
# gloas
|
||||||
- BUILDER_PENDING_WITHDRAWALS_LIMIT#gloas
|
- BUILDER_PENDING_WITHDRAWALS_LIMIT#gloas
|
||||||
- MAX_PAYLOAD_ATTESTATIONS#gloas
|
- MAX_PAYLOAD_ATTESTATIONS#gloas
|
||||||
- PTC_SIZE#gloas
|
- PTC_SIZE#gloas
|
||||||
|
|
||||||
constants:
|
constants:
|
||||||
# Constants in the KZG library
|
# phase0
|
||||||
|
- BASIS_POINTS#phase0
|
||||||
|
- ENDIANNESS#phase0
|
||||||
|
- MAX_CONCURRENT_REQUESTS#phase0
|
||||||
|
- UINT64_MAX#phase0
|
||||||
|
- UINT64_MAX_SQRT#phase0
|
||||||
|
# altair
|
||||||
|
- PARTICIPATION_FLAG_WEIGHTS#altair
|
||||||
|
# bellatrix
|
||||||
|
- SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY#bellatrix
|
||||||
|
# deneb
|
||||||
- BLS_MODULUS#deneb
|
- BLS_MODULUS#deneb
|
||||||
- BYTES_PER_COMMITMENT#deneb
|
- BYTES_PER_COMMITMENT#deneb
|
||||||
- BYTES_PER_FIELD_ELEMENT#deneb
|
- BYTES_PER_FIELD_ELEMENT#deneb
|
||||||
@@ -33,18 +47,9 @@ exceptions:
|
|||||||
- PRIMITIVE_ROOT_OF_UNITY#deneb
|
- PRIMITIVE_ROOT_OF_UNITY#deneb
|
||||||
- RANDOM_CHALLENGE_KZG_BATCH_DOMAIN#deneb
|
- RANDOM_CHALLENGE_KZG_BATCH_DOMAIN#deneb
|
||||||
- RANDOM_CHALLENGE_KZG_CELL_BATCH_DOMAIN#fulu
|
- RANDOM_CHALLENGE_KZG_CELL_BATCH_DOMAIN#fulu
|
||||||
|
# fulu
|
||||||
# Not implemented
|
|
||||||
- BASIS_POINTS#phase0
|
|
||||||
- ENDIANNESS#phase0
|
|
||||||
- MAX_CONCURRENT_REQUESTS#phase0
|
|
||||||
- PARTICIPATION_FLAG_WEIGHTS#altair
|
|
||||||
- SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY#bellatrix
|
|
||||||
- UINT256_MAX#fulu
|
- UINT256_MAX#fulu
|
||||||
- UINT64_MAX#phase0
|
# gloas
|
||||||
- UINT64_MAX_SQRT#phase0
|
|
||||||
|
|
||||||
# Not implemented: gloas (future fork)
|
|
||||||
- BUILDER_PAYMENT_THRESHOLD_DENOMINATOR#gloas
|
- BUILDER_PAYMENT_THRESHOLD_DENOMINATOR#gloas
|
||||||
- BUILDER_PAYMENT_THRESHOLD_NUMERATOR#gloas
|
- BUILDER_PAYMENT_THRESHOLD_NUMERATOR#gloas
|
||||||
- BUILDER_WITHDRAWAL_PREFIX#gloas
|
- BUILDER_WITHDRAWAL_PREFIX#gloas
|
||||||
@@ -61,61 +66,62 @@ exceptions:
|
|||||||
- PTC_TIMELINESS_INDEX#gloas
|
- PTC_TIMELINESS_INDEX#gloas
|
||||||
|
|
||||||
configs:
|
configs:
|
||||||
# Not implemented: gloas (future fork)
|
# gloas
|
||||||
- AGGREGATE_DUE_BPS_GLOAS#gloas
|
- AGGREGATE_DUE_BPS_GLOAS#gloas
|
||||||
- ATTESTATION_DUE_BPS_GLOAS#gloas
|
- ATTESTATION_DUE_BPS_GLOAS#gloas
|
||||||
- CONTRIBUTION_DUE_BPS_GLOAS#gloas
|
- CONTRIBUTION_DUE_BPS_GLOAS#gloas
|
||||||
- GLOAS_FORK_EPOCH#gloas
|
- GLOAS_FORK_EPOCH#gloas
|
||||||
- GLOAS_FORK_VERSION#gloas
|
- GLOAS_FORK_VERSION#gloas
|
||||||
- MAX_REQUEST_PAYLOADS#gloas
|
- MAX_REQUEST_PAYLOADS#gloas
|
||||||
|
- MIN_BUILDER_WITHDRAWABILITY_DELAY#gloas
|
||||||
- PAYLOAD_ATTESTATION_DUE_BPS#gloas
|
- PAYLOAD_ATTESTATION_DUE_BPS#gloas
|
||||||
- SYNC_MESSAGE_DUE_BPS_GLOAS#gloas
|
- SYNC_MESSAGE_DUE_BPS_GLOAS#gloas
|
||||||
- MIN_BUILDER_WITHDRAWABILITY_DELAY#gloas
|
|
||||||
|
|
||||||
ssz_objects:
|
ssz_objects:
|
||||||
# Not implemented
|
# phase0
|
||||||
- Eth1Block#phase0
|
- Eth1Block#phase0
|
||||||
- MatrixEntry#fulu
|
# capella
|
||||||
|
|
||||||
# Not implemented: capella
|
|
||||||
- LightClientBootstrap#capella
|
- LightClientBootstrap#capella
|
||||||
- LightClientFinalityUpdate#capella
|
- LightClientFinalityUpdate#capella
|
||||||
- LightClientOptimisticUpdate#capella
|
- LightClientOptimisticUpdate#capella
|
||||||
- LightClientUpdate#capella
|
- LightClientUpdate#capella
|
||||||
|
# fulu
|
||||||
# Not implemented: gloas (future fork)
|
- MatrixEntry#fulu
|
||||||
|
# gloas
|
||||||
- BeaconBlockBody#gloas
|
- BeaconBlockBody#gloas
|
||||||
- BeaconState#gloas
|
- BeaconState#gloas
|
||||||
|
- Builder#gloas
|
||||||
- BuilderPendingPayment#gloas
|
- BuilderPendingPayment#gloas
|
||||||
- BuilderPendingWithdrawal#gloas
|
- BuilderPendingWithdrawal#gloas
|
||||||
- DataColumnSidecar#gloas
|
- DataColumnSidecar#gloas
|
||||||
- ExecutionPayloadEnvelope#gloas
|
|
||||||
- ExecutionPayloadBid#gloas
|
- ExecutionPayloadBid#gloas
|
||||||
|
- ExecutionPayloadEnvelope#gloas
|
||||||
- ForkChoiceNode#gloas
|
- ForkChoiceNode#gloas
|
||||||
- IndexedPayloadAttestation#gloas
|
- IndexedPayloadAttestation#gloas
|
||||||
- PayloadAttestation#gloas
|
- PayloadAttestation#gloas
|
||||||
- PayloadAttestationData#gloas
|
- PayloadAttestationData#gloas
|
||||||
- PayloadAttestationMessage#gloas
|
- PayloadAttestationMessage#gloas
|
||||||
- SignedExecutionPayloadEnvelope#gloas
|
|
||||||
- SignedExecutionPayloadBid#gloas
|
|
||||||
- Builder#gloas
|
|
||||||
- ProposerPreferences#gloas
|
- ProposerPreferences#gloas
|
||||||
|
- SignedExecutionPayloadBid#gloas
|
||||||
|
- SignedExecutionPayloadEnvelope#gloas
|
||||||
- SignedProposerPreferences#gloas
|
- SignedProposerPreferences#gloas
|
||||||
|
|
||||||
dataclasses:
|
dataclasses:
|
||||||
# Not implemented
|
# phase0
|
||||||
- BlobParameters#fulu
|
|
||||||
- ExpectedWithdrawals#capella
|
|
||||||
- ExpectedWithdrawals#electra
|
|
||||||
- LatestMessage#phase0
|
- LatestMessage#phase0
|
||||||
- LightClientStore#altair
|
|
||||||
- OptimisticStore#bellatrix
|
|
||||||
- Store#phase0
|
- Store#phase0
|
||||||
|
# altair
|
||||||
# Not implemented: capella
|
- LightClientStore#altair
|
||||||
|
# bellatrix
|
||||||
|
- OptimisticStore#bellatrix
|
||||||
|
# capella
|
||||||
|
- ExpectedWithdrawals#capella
|
||||||
- LightClientStore#capella
|
- LightClientStore#capella
|
||||||
|
# electra
|
||||||
# Not implemented: gloas (future fork)
|
- ExpectedWithdrawals#electra
|
||||||
|
# fulu
|
||||||
|
- BlobParameters#fulu
|
||||||
|
# gloas
|
||||||
- ExpectedWithdrawals#gloas
|
- ExpectedWithdrawals#gloas
|
||||||
- LatestMessage#gloas
|
- LatestMessage#gloas
|
||||||
- Store#gloas
|
- Store#gloas
|
||||||
@@ -140,7 +146,6 @@ exceptions:
|
|||||||
- g1_lincomb#deneb
|
- g1_lincomb#deneb
|
||||||
- hash_to_bls_field#deneb
|
- hash_to_bls_field#deneb
|
||||||
- is_power_of_two#deneb
|
- is_power_of_two#deneb
|
||||||
- multi_exp#deneb
|
|
||||||
- reverse_bits#deneb
|
- reverse_bits#deneb
|
||||||
- validate_kzg_g1#deneb
|
- validate_kzg_g1#deneb
|
||||||
- verify_blob_kzg_proof#deneb
|
- verify_blob_kzg_proof#deneb
|
||||||
@@ -175,7 +180,12 @@ exceptions:
|
|||||||
- verify_cell_kzg_proof_batch#fulu
|
- verify_cell_kzg_proof_batch#fulu
|
||||||
- verify_cell_kzg_proof_batch_impl#fulu
|
- verify_cell_kzg_proof_batch_impl#fulu
|
||||||
|
|
||||||
# Not implemented: phase0
|
# phase0
|
||||||
|
- update_proposer_boost_root#phase0
|
||||||
|
- is_proposer_equivocation#phase0
|
||||||
|
- record_block_timeliness#phase0
|
||||||
|
- compute_proposer_score#phase0
|
||||||
|
- get_attestation_score#phase0
|
||||||
- calculate_committee_fraction#phase0
|
- calculate_committee_fraction#phase0
|
||||||
- compute_fork_version#phase0
|
- compute_fork_version#phase0
|
||||||
- compute_pulled_up_tip#phase0
|
- compute_pulled_up_tip#phase0
|
||||||
@@ -221,8 +231,7 @@ exceptions:
|
|||||||
- validate_on_attestation#phase0
|
- validate_on_attestation#phase0
|
||||||
- validate_target_epoch_against_current_time#phase0
|
- validate_target_epoch_against_current_time#phase0
|
||||||
- xor#phase0
|
- xor#phase0
|
||||||
|
# altair
|
||||||
# Not implemented: altair
|
|
||||||
- compute_merkle_proof#altair
|
- compute_merkle_proof#altair
|
||||||
- compute_sync_committee_period_at_slot#altair
|
- compute_sync_committee_period_at_slot#altair
|
||||||
- get_contribution_and_proof#altair
|
- get_contribution_and_proof#altair
|
||||||
@@ -244,27 +253,29 @@ exceptions:
|
|||||||
- process_sync_committee_contributions#altair
|
- process_sync_committee_contributions#altair
|
||||||
- set_or_append_list#altair
|
- set_or_append_list#altair
|
||||||
- validate_light_client_update#altair
|
- validate_light_client_update#altair
|
||||||
|
# bellatrix
|
||||||
# Not implemented: bellatrix
|
|
||||||
- get_execution_payload#bellatrix
|
- get_execution_payload#bellatrix
|
||||||
- is_merge_transition_block#bellatrix
|
- is_merge_transition_block#bellatrix
|
||||||
- is_optimistic_candidate_block#bellatrix
|
- is_optimistic_candidate_block#bellatrix
|
||||||
- latest_verified_ancestor#bellatrix
|
- latest_verified_ancestor#bellatrix
|
||||||
- prepare_execution_payload#bellatrix
|
- prepare_execution_payload#bellatrix
|
||||||
|
# capella
|
||||||
# Not implemented: capella
|
- apply_withdrawals#capella
|
||||||
|
- get_balance_after_withdrawals#capella
|
||||||
- get_lc_execution_root#capella
|
- get_lc_execution_root#capella
|
||||||
|
- get_validators_sweep_withdrawals#capella
|
||||||
- is_valid_light_client_header#capella
|
- is_valid_light_client_header#capella
|
||||||
- prepare_execution_payload#capella
|
- prepare_execution_payload#capella
|
||||||
- process_epoch#capella
|
- process_epoch#capella
|
||||||
|
- update_next_withdrawal_index#capella
|
||||||
|
- update_next_withdrawal_validator_index#capella
|
||||||
- upgrade_lc_bootstrap_to_capella#capella
|
- upgrade_lc_bootstrap_to_capella#capella
|
||||||
- upgrade_lc_finality_update_to_capella#capella
|
- upgrade_lc_finality_update_to_capella#capella
|
||||||
- upgrade_lc_header_to_capella#capella
|
- upgrade_lc_header_to_capella#capella
|
||||||
- upgrade_lc_optimistic_update_to_capella#capella
|
- upgrade_lc_optimistic_update_to_capella#capella
|
||||||
- upgrade_lc_store_to_capella#capella
|
- upgrade_lc_store_to_capella#capella
|
||||||
- upgrade_lc_update_to_capella#capella
|
- upgrade_lc_update_to_capella#capella
|
||||||
|
# deneb
|
||||||
# Not implemented: deneb
|
|
||||||
- get_lc_execution_root#deneb
|
- get_lc_execution_root#deneb
|
||||||
- is_valid_light_client_header#deneb
|
- is_valid_light_client_header#deneb
|
||||||
- prepare_execution_payload#deneb
|
- prepare_execution_payload#deneb
|
||||||
@@ -274,33 +285,34 @@ exceptions:
|
|||||||
- upgrade_lc_optimistic_update_to_deneb#deneb
|
- upgrade_lc_optimistic_update_to_deneb#deneb
|
||||||
- upgrade_lc_store_to_deneb#deneb
|
- upgrade_lc_store_to_deneb#deneb
|
||||||
- upgrade_lc_update_to_deneb#deneb
|
- upgrade_lc_update_to_deneb#deneb
|
||||||
|
# electra
|
||||||
# Not implemented: electra
|
|
||||||
- compute_weak_subjectivity_period#electra
|
- compute_weak_subjectivity_period#electra
|
||||||
- current_sync_committee_gindex_at_slot#electra
|
- current_sync_committee_gindex_at_slot#electra
|
||||||
- finalized_root_gindex_at_slot#electra
|
- finalized_root_gindex_at_slot#electra
|
||||||
- get_eth1_vote#electra
|
- get_eth1_vote#electra
|
||||||
- get_lc_execution_root#electra
|
- get_lc_execution_root#electra
|
||||||
|
- get_pending_partial_withdrawals#electra
|
||||||
|
- get_validators_sweep_withdrawals#electra
|
||||||
- is_compounding_withdrawal_credential#electra
|
- is_compounding_withdrawal_credential#electra
|
||||||
|
- is_eligible_for_partial_withdrawals#electra
|
||||||
- is_within_weak_subjectivity_period#electra
|
- is_within_weak_subjectivity_period#electra
|
||||||
- next_sync_committee_gindex_at_slot#electra
|
- next_sync_committee_gindex_at_slot#electra
|
||||||
- normalize_merkle_branch#electra
|
- normalize_merkle_branch#electra
|
||||||
- prepare_execution_payload#electra
|
- prepare_execution_payload#electra
|
||||||
|
- update_pending_partial_withdrawals#electra
|
||||||
- upgrade_lc_bootstrap_to_electra#electra
|
- upgrade_lc_bootstrap_to_electra#electra
|
||||||
- upgrade_lc_finality_update_to_electra#electra
|
- upgrade_lc_finality_update_to_electra#electra
|
||||||
- upgrade_lc_header_to_electra#electra
|
- upgrade_lc_header_to_electra#electra
|
||||||
- upgrade_lc_optimistic_update_to_electra#electra
|
- upgrade_lc_optimistic_update_to_electra#electra
|
||||||
- upgrade_lc_store_to_electra#electra
|
- upgrade_lc_store_to_electra#electra
|
||||||
- upgrade_lc_update_to_electra#electra
|
- upgrade_lc_update_to_electra#electra
|
||||||
|
# fulu
|
||||||
# Not implemented: fulu
|
|
||||||
- compute_matrix#fulu
|
- compute_matrix#fulu
|
||||||
- get_blob_parameters#fulu
|
- get_blob_parameters#fulu
|
||||||
- get_data_column_sidecars_from_block#fulu
|
- get_data_column_sidecars_from_block#fulu
|
||||||
- get_data_column_sidecars_from_column_sidecar#fulu
|
- get_data_column_sidecars_from_column_sidecar#fulu
|
||||||
- recover_matrix#fulu
|
- recover_matrix#fulu
|
||||||
|
# gloas
|
||||||
# Not implemented: gloas (future fork)
|
|
||||||
- compute_balance_weighted_acceptance#gloas
|
- compute_balance_weighted_acceptance#gloas
|
||||||
- compute_balance_weighted_selection#gloas
|
- compute_balance_weighted_selection#gloas
|
||||||
- compute_fork_version#gloas
|
- compute_fork_version#gloas
|
||||||
@@ -368,49 +380,42 @@ exceptions:
|
|||||||
- verify_execution_payload_bid_signature#gloas
|
- verify_execution_payload_bid_signature#gloas
|
||||||
- add_builder_to_registry#gloas
|
- add_builder_to_registry#gloas
|
||||||
- apply_deposit_for_builder#gloas
|
- apply_deposit_for_builder#gloas
|
||||||
- apply_withdrawals#capella
|
|
||||||
- apply_withdrawals#gloas
|
- apply_withdrawals#gloas
|
||||||
- can_builder_cover_bid#gloas
|
- can_builder_cover_bid#gloas
|
||||||
- compute_proposer_score#phase0
|
|
||||||
- convert_builder_index_to_validator_index#gloas
|
- convert_builder_index_to_validator_index#gloas
|
||||||
- convert_validator_index_to_builder_index#gloas
|
- convert_validator_index_to_builder_index#gloas
|
||||||
- get_attestation_score#gloas
|
- get_attestation_score#gloas
|
||||||
- get_attestation_score#phase0
|
- get_attestation_score#phase0
|
||||||
- get_balance_after_withdrawals#capella
|
- get_balance_after_withdrawals#capella
|
||||||
- get_builder_from_deposit#gloas
|
|
||||||
- get_builder_withdrawals#gloas
|
- get_builder_withdrawals#gloas
|
||||||
- get_builders_sweep_withdrawals#gloas
|
- get_builders_sweep_withdrawals#gloas
|
||||||
- get_index_for_new_builder#gloas
|
- get_index_for_new_builder#gloas
|
||||||
- get_pending_balance_to_withdraw_for_builder#gloas
|
- get_pending_balance_to_withdraw_for_builder#gloas
|
||||||
- get_pending_partial_withdrawals#electra
|
|
||||||
- get_proposer_preferences_signature#gloas
|
- get_proposer_preferences_signature#gloas
|
||||||
- get_upcoming_proposal_slots#gloas
|
- get_upcoming_proposal_slots#gloas
|
||||||
- get_validators_sweep_withdrawals#capella
|
|
||||||
- get_validators_sweep_withdrawals#electra
|
|
||||||
- initiate_builder_exit#gloas
|
- initiate_builder_exit#gloas
|
||||||
- is_active_builder#gloas
|
- is_active_builder#gloas
|
||||||
- is_builder_index#gloas
|
- is_builder_index#gloas
|
||||||
|
- is_data_available#gloas
|
||||||
- is_eligible_for_partial_withdrawals#electra
|
- is_eligible_for_partial_withdrawals#electra
|
||||||
- is_head_late#gloas
|
- is_head_late#gloas
|
||||||
- is_head_weak#gloas
|
- is_head_weak#gloas
|
||||||
- is_parent_strong#gloas
|
- is_parent_strong#gloas
|
||||||
- is_proposer_equivocation#phase0
|
|
||||||
- is_valid_proposal_slot#gloas
|
- is_valid_proposal_slot#gloas
|
||||||
|
- onboard_builders_from_pending_deposits#gloas
|
||||||
- process_deposit_request#gloas
|
- process_deposit_request#gloas
|
||||||
- process_voluntary_exit#gloas
|
- process_voluntary_exit#gloas
|
||||||
- record_block_timeliness#gloas
|
- record_block_timeliness#gloas
|
||||||
- record_block_timeliness#phase0
|
- record_block_timeliness#phase0
|
||||||
|
- verify_data_column_sidecar_kzg_proofs#gloas
|
||||||
- should_apply_proposer_boost#gloas
|
- should_apply_proposer_boost#gloas
|
||||||
- update_builder_pending_withdrawals#gloas
|
- update_builder_pending_withdrawals#gloas
|
||||||
- update_next_withdrawal_builder_index#gloas
|
- update_next_withdrawal_builder_index#gloas
|
||||||
- update_next_withdrawal_index#capella
|
|
||||||
- update_next_withdrawal_validator_index#capella
|
|
||||||
- update_payload_expected_withdrawals#gloas
|
- update_payload_expected_withdrawals#gloas
|
||||||
- update_pending_partial_withdrawals#electra
|
|
||||||
- update_proposer_boost_root#gloas
|
- update_proposer_boost_root#gloas
|
||||||
- update_proposer_boost_root#phase0
|
|
||||||
|
|
||||||
presets:
|
presets:
|
||||||
|
# gloas
|
||||||
- BUILDER_PENDING_WITHDRAWALS_LIMIT#gloas
|
- BUILDER_PENDING_WITHDRAWALS_LIMIT#gloas
|
||||||
- BUILDER_REGISTRY_LIMIT#gloas
|
- BUILDER_REGISTRY_LIMIT#gloas
|
||||||
- MAX_BUILDERS_PER_WITHDRAWALS_SWEEP#gloas
|
- MAX_BUILDERS_PER_WITHDRAWALS_SWEEP#gloas
|
||||||
8
.github/workflows/check-specrefs.yml
vendored
8
.github/workflows/check-specrefs.yml
vendored
@@ -12,11 +12,11 @@ jobs:
|
|||||||
- name: Check version consistency
|
- name: Check version consistency
|
||||||
run: |
|
run: |
|
||||||
WORKSPACE_VERSION=$(grep 'consensus_spec_version = ' WORKSPACE | sed 's/.*"\(.*\)"/\1/')
|
WORKSPACE_VERSION=$(grep 'consensus_spec_version = ' WORKSPACE | sed 's/.*"\(.*\)"/\1/')
|
||||||
ETHSPECIFY_VERSION=$(grep '^version:' specrefs/.ethspecify.yml | sed 's/version: //')
|
ETHSPECIFY_VERSION=$(grep '^version:' .ethspecify.yml | sed 's/version: //')
|
||||||
if [ "$WORKSPACE_VERSION" != "$ETHSPECIFY_VERSION" ]; then
|
if [ "$WORKSPACE_VERSION" != "$ETHSPECIFY_VERSION" ]; then
|
||||||
echo "Version mismatch between WORKSPACE and ethspecify"
|
echo "Version mismatch between WORKSPACE and ethspecify"
|
||||||
echo " WORKSPACE: $WORKSPACE_VERSION"
|
echo " WORKSPACE: $WORKSPACE_VERSION"
|
||||||
echo " specrefs/.ethspecify.yml: $ETHSPECIFY_VERSION"
|
echo " .ethspecify.yml: $ETHSPECIFY_VERSION"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
echo "Versions match: $WORKSPACE_VERSION"
|
echo "Versions match: $WORKSPACE_VERSION"
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
run: python3 -mpip install ethspecify
|
run: python3 -mpip install ethspecify
|
||||||
|
|
||||||
- name: Update spec references
|
- name: Update spec references
|
||||||
run: ethspecify process --path=specrefs
|
run: ethspecify
|
||||||
|
|
||||||
- name: Check for differences
|
- name: Check for differences
|
||||||
run: |
|
run: |
|
||||||
@@ -40,4 +40,4 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Check spec references
|
- name: Check spec references
|
||||||
run: ethspecify check --path=specrefs
|
run: ethspecify check
|
||||||
|
|||||||
10
WORKSPACE
10
WORKSPACE
@@ -273,16 +273,16 @@ filegroup(
|
|||||||
url = "https://github.com/ethereum/EIPs/archive/5480440fe51742ed23342b68cf106cefd427e39d.tar.gz",
|
url = "https://github.com/ethereum/EIPs/archive/5480440fe51742ed23342b68cf106cefd427e39d.tar.gz",
|
||||||
)
|
)
|
||||||
|
|
||||||
consensus_spec_version = "v1.7.0-alpha.1"
|
consensus_spec_version = "v1.7.0-alpha.2"
|
||||||
|
|
||||||
load("@prysm//tools:download_spectests.bzl", "consensus_spec_tests")
|
load("@prysm//tools:download_spectests.bzl", "consensus_spec_tests")
|
||||||
|
|
||||||
consensus_spec_tests(
|
consensus_spec_tests(
|
||||||
name = "consensus_spec_tests",
|
name = "consensus_spec_tests",
|
||||||
flavors = {
|
flavors = {
|
||||||
"general": "sha256-j5R3jA7Oo4OSDMTvpMuD+8RomaCByeFSwtfkq6fL0Zg=",
|
"general": "sha256-iGQsGZ1cHah+2CSod9jC3kN8Ku4n6KO0hIwfINrn/po=",
|
||||||
"minimal": "sha256-tdTqByoyswOS4r6OxFmo70y2BP7w1TgEok+gf4cbxB0=",
|
"minimal": "sha256-TgcYt8N8sXSttdHTGvOa+exUZ1zn1UzlAMz0V7i37xc=",
|
||||||
"mainnet": "sha256-5gB4dt6SnSDKzdBc06VedId3NkgvSYyv9n9FRxWKwYI=",
|
"mainnet": "sha256-LnXyiLoJtrvEvbqLDSAAqpLMdN/lXv92SAgYG8fNjCs=",
|
||||||
},
|
},
|
||||||
version = consensus_spec_version,
|
version = consensus_spec_version,
|
||||||
)
|
)
|
||||||
@@ -298,7 +298,7 @@ filegroup(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
)
|
)
|
||||||
""",
|
""",
|
||||||
integrity = "sha256-J+43DrK1pF658kTXTwMS6zGf4KDjvas++m8w2a8swpg=",
|
integrity = "sha256-Y/67Dg393PksZj5rTFNLntiJ6hNdB7Rxbu5gZE2gebY=",
|
||||||
strip_prefix = "consensus-specs-" + consensus_spec_version[1:],
|
strip_prefix = "consensus-specs-" + consensus_spec_version[1:],
|
||||||
url = "https://github.com/ethereum/consensus-specs/archive/refs/tags/%s.tar.gz" % consensus_spec_version,
|
url = "https://github.com/ethereum/consensus-specs/archive/refs/tags/%s.tar.gz" % consensus_spec_version,
|
||||||
)
|
)
|
||||||
|
|||||||
19
api/fallback/BUILD.bazel
Normal file
19
api/fallback/BUILD.bazel
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
load("@prysm//tools/go:def.bzl", "go_library", "go_test")
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"fallback.go",
|
||||||
|
"log.go",
|
||||||
|
],
|
||||||
|
importpath = "github.com/OffchainLabs/prysm/v7/api/fallback",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = ["@com_github_sirupsen_logrus//:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
go_test(
|
||||||
|
name = "go_default_test",
|
||||||
|
srcs = ["fallback_test.go"],
|
||||||
|
embed = [":go_default_library"],
|
||||||
|
deps = ["//testing/assert:go_default_library"],
|
||||||
|
)
|
||||||
66
api/fallback/fallback.go
Normal file
66
api/fallback/fallback.go
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
package fallback
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HostProvider is the subset of connection-provider methods that EnsureReady
|
||||||
|
// needs. Both grpc.GrpcConnectionProvider and rest.RestConnectionProvider
|
||||||
|
// satisfy this interface.
|
||||||
|
type HostProvider interface {
|
||||||
|
Hosts() []string
|
||||||
|
CurrentHost() string
|
||||||
|
SwitchHost(index int) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadyChecker can report whether the current endpoint is ready.
|
||||||
|
// iface.NodeClient satisfies this implicitly.
|
||||||
|
type ReadyChecker interface {
|
||||||
|
IsReady(ctx context.Context) bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnsureReady iterates through the configured hosts and returns true as soon as
|
||||||
|
// one responds as ready. It starts from the provider's current host and wraps
|
||||||
|
// around using modular arithmetic, performing failover when a host is not ready.
|
||||||
|
func EnsureReady(ctx context.Context, provider HostProvider, checker ReadyChecker) bool {
|
||||||
|
hosts := provider.Hosts()
|
||||||
|
numHosts := len(hosts)
|
||||||
|
startingHost := provider.CurrentHost()
|
||||||
|
var attemptedHosts []string
|
||||||
|
|
||||||
|
// Find current index
|
||||||
|
currentIdx := 0
|
||||||
|
for i, h := range hosts {
|
||||||
|
if h == startingHost {
|
||||||
|
currentIdx = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range numHosts {
|
||||||
|
if checker.IsReady(ctx) {
|
||||||
|
if len(attemptedHosts) > 0 {
|
||||||
|
log.WithFields(logrus.Fields{
|
||||||
|
"previous": startingHost,
|
||||||
|
"current": provider.CurrentHost(),
|
||||||
|
"tried": attemptedHosts,
|
||||||
|
}).Info("Switched to responsive beacon node")
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
attemptedHosts = append(attemptedHosts, provider.CurrentHost())
|
||||||
|
|
||||||
|
// Try next host if not the last iteration
|
||||||
|
if i < numHosts-1 {
|
||||||
|
nextIdx := (currentIdx + i + 1) % numHosts
|
||||||
|
if err := provider.SwitchHost(nextIdx); err != nil {
|
||||||
|
log.WithError(err).Error("Failed to switch host")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.WithField("tried", attemptedHosts).Warn("No responsive beacon node found")
|
||||||
|
return false
|
||||||
|
}
|
||||||
94
api/fallback/fallback_test.go
Normal file
94
api/fallback/fallback_test.go
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
package fallback
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/OffchainLabs/prysm/v7/testing/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
// mockHostProvider is a minimal HostProvider for unit tests.
|
||||||
|
type mockHostProvider struct {
|
||||||
|
hosts []string
|
||||||
|
hostIndex int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockHostProvider) Hosts() []string { return m.hosts }
|
||||||
|
func (m *mockHostProvider) CurrentHost() string {
|
||||||
|
return m.hosts[m.hostIndex%len(m.hosts)]
|
||||||
|
}
|
||||||
|
func (m *mockHostProvider) SwitchHost(index int) error { m.hostIndex = index; return nil }
|
||||||
|
|
||||||
|
// mockReadyChecker records per-call IsReady results in sequence.
|
||||||
|
type mockReadyChecker struct {
|
||||||
|
results []bool
|
||||||
|
idx int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockReadyChecker) IsReady(_ context.Context) bool {
|
||||||
|
if m.idx >= len(m.results) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
r := m.results[m.idx]
|
||||||
|
m.idx++
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_SingleHostReady(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{hosts: []string{"http://host1:3500"}, hostIndex: 0}
|
||||||
|
checker := &mockReadyChecker{results: []bool{true}}
|
||||||
|
assert.Equal(t, true, EnsureReady(t.Context(), provider, checker))
|
||||||
|
assert.Equal(t, 0, provider.hostIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_SingleHostNotReady(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{hosts: []string{"http://host1:3500"}, hostIndex: 0}
|
||||||
|
checker := &mockReadyChecker{results: []bool{false}}
|
||||||
|
assert.Equal(t, false, EnsureReady(t.Context(), provider, checker))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_SingleHostError(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{hosts: []string{"http://host1:3500"}, hostIndex: 0}
|
||||||
|
checker := &mockReadyChecker{results: []bool{false}}
|
||||||
|
assert.Equal(t, false, EnsureReady(t.Context(), provider, checker))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_MultipleHostsFirstReady(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{
|
||||||
|
hosts: []string{"http://host1:3500", "http://host2:3500"},
|
||||||
|
hostIndex: 0,
|
||||||
|
}
|
||||||
|
checker := &mockReadyChecker{results: []bool{true}}
|
||||||
|
assert.Equal(t, true, EnsureReady(t.Context(), provider, checker))
|
||||||
|
assert.Equal(t, 0, provider.hostIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_MultipleHostsFailoverToSecond(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{
|
||||||
|
hosts: []string{"http://host1:3500", "http://host2:3500"},
|
||||||
|
hostIndex: 0,
|
||||||
|
}
|
||||||
|
checker := &mockReadyChecker{results: []bool{false, true}}
|
||||||
|
assert.Equal(t, true, EnsureReady(t.Context(), provider, checker))
|
||||||
|
assert.Equal(t, 1, provider.hostIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_MultipleHostsNoneReady(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{
|
||||||
|
hosts: []string{"http://host1:3500", "http://host2:3500", "http://host3:3500"},
|
||||||
|
hostIndex: 0,
|
||||||
|
}
|
||||||
|
checker := &mockReadyChecker{results: []bool{false, false, false}}
|
||||||
|
assert.Equal(t, false, EnsureReady(t.Context(), provider, checker))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEnsureReady_WrapAroundFromNonZeroIndex(t *testing.T) {
|
||||||
|
provider := &mockHostProvider{
|
||||||
|
hosts: []string{"http://host0:3500", "http://host1:3500", "http://host2:3500"},
|
||||||
|
hostIndex: 1,
|
||||||
|
}
|
||||||
|
// host1 (start) fails, host2 fails, host0 succeeds
|
||||||
|
checker := &mockReadyChecker{results: []bool{false, false, true}}
|
||||||
|
assert.Equal(t, true, EnsureReady(t.Context(), provider, checker))
|
||||||
|
assert.Equal(t, 0, provider.hostIndex)
|
||||||
|
}
|
||||||
9
api/fallback/log.go
Normal file
9
api/fallback/log.go
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
// Code generated by hack/gen-logs.sh; DO NOT EDIT.
|
||||||
|
// This file is created and regenerated automatically. Anything added here might get removed.
|
||||||
|
package fallback
|
||||||
|
|
||||||
|
import "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
// The prefix for logs from this package will be the text after the last slash in the package path.
|
||||||
|
// If you wish to change this, you should add your desired name in the runtime/logging/logrus-prefixed-formatter/prefix-replacement.go file.
|
||||||
|
var log = logrus.WithField("package", "api/fallback")
|
||||||
@@ -25,6 +25,11 @@ type GrpcConnectionProvider interface {
|
|||||||
// SwitchHost switches to the endpoint at the given index.
|
// SwitchHost switches to the endpoint at the given index.
|
||||||
// The new connection is created lazily on next CurrentConn() call.
|
// The new connection is created lazily on next CurrentConn() call.
|
||||||
SwitchHost(index int) error
|
SwitchHost(index int) error
|
||||||
|
// ConnectionCounter returns a monotonically increasing counter that increments
|
||||||
|
// each time SwitchHost changes the active endpoint. This allows consumers to
|
||||||
|
// detect connection changes even when the host string returns to a previous value
|
||||||
|
// (e.g., host0 → host1 → host0).
|
||||||
|
ConnectionCounter() uint64
|
||||||
// Close closes the current connection.
|
// Close closes the current connection.
|
||||||
Close()
|
Close()
|
||||||
}
|
}
|
||||||
@@ -38,6 +43,7 @@ type grpcConnectionProvider struct {
|
|||||||
// Current connection state (protected by mutex)
|
// Current connection state (protected by mutex)
|
||||||
currentIndex uint64
|
currentIndex uint64
|
||||||
conn *grpc.ClientConn
|
conn *grpc.ClientConn
|
||||||
|
connCounter uint64
|
||||||
|
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
closed bool
|
closed bool
|
||||||
@@ -138,6 +144,7 @@ func (p *grpcConnectionProvider) SwitchHost(index int) error {
|
|||||||
|
|
||||||
p.conn = nil // Clear immediately - new connection created lazily
|
p.conn = nil // Clear immediately - new connection created lazily
|
||||||
p.currentIndex = uint64(index)
|
p.currentIndex = uint64(index)
|
||||||
|
p.connCounter++
|
||||||
|
|
||||||
// Close old connection asynchronously to avoid blocking the caller
|
// Close old connection asynchronously to avoid blocking the caller
|
||||||
if oldConn != nil {
|
if oldConn != nil {
|
||||||
@@ -155,6 +162,12 @@ func (p *grpcConnectionProvider) SwitchHost(index int) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *grpcConnectionProvider) ConnectionCounter() uint64 {
|
||||||
|
p.mu.Lock()
|
||||||
|
defer p.mu.Unlock()
|
||||||
|
return p.connCounter
|
||||||
|
}
|
||||||
|
|
||||||
func (p *grpcConnectionProvider) Close() {
|
func (p *grpcConnectionProvider) Close() {
|
||||||
p.mu.Lock()
|
p.mu.Lock()
|
||||||
defer p.mu.Unlock()
|
defer p.mu.Unlock()
|
||||||
|
|||||||
@@ -4,17 +4,24 @@ import "google.golang.org/grpc"
|
|||||||
|
|
||||||
// MockGrpcProvider implements GrpcConnectionProvider for testing.
|
// MockGrpcProvider implements GrpcConnectionProvider for testing.
|
||||||
type MockGrpcProvider struct {
|
type MockGrpcProvider struct {
|
||||||
MockConn *grpc.ClientConn
|
MockConn *grpc.ClientConn
|
||||||
MockHosts []string
|
MockHosts []string
|
||||||
|
CurrentIndex int
|
||||||
|
ConnCounter uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockGrpcProvider) CurrentConn() *grpc.ClientConn { return m.MockConn }
|
func (m *MockGrpcProvider) CurrentConn() *grpc.ClientConn { return m.MockConn }
|
||||||
func (m *MockGrpcProvider) CurrentHost() string {
|
func (m *MockGrpcProvider) CurrentHost() string {
|
||||||
if len(m.MockHosts) > 0 {
|
if len(m.MockHosts) > 0 {
|
||||||
return m.MockHosts[0]
|
return m.MockHosts[m.CurrentIndex]
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
func (m *MockGrpcProvider) Hosts() []string { return m.MockHosts }
|
func (m *MockGrpcProvider) Hosts() []string { return m.MockHosts }
|
||||||
func (m *MockGrpcProvider) SwitchHost(int) error { return nil }
|
func (m *MockGrpcProvider) SwitchHost(idx int) error {
|
||||||
func (m *MockGrpcProvider) Close() {}
|
m.CurrentIndex = idx
|
||||||
|
m.ConnCounter++
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (m *MockGrpcProvider) ConnectionCounter() uint64 { return m.ConnCounter }
|
||||||
|
func (m *MockGrpcProvider) Close() {}
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ import (
|
|||||||
// MockRestProvider implements RestConnectionProvider for testing.
|
// MockRestProvider implements RestConnectionProvider for testing.
|
||||||
type MockRestProvider struct {
|
type MockRestProvider struct {
|
||||||
MockClient *http.Client
|
MockClient *http.Client
|
||||||
MockHandler RestHandler
|
MockHandler Handler
|
||||||
MockHosts []string
|
MockHosts []string
|
||||||
HostIndex int
|
HostIndex int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockRestProvider) HttpClient() *http.Client { return m.MockClient }
|
func (m *MockRestProvider) HttpClient() *http.Client { return m.MockClient }
|
||||||
func (m *MockRestProvider) RestHandler() RestHandler { return m.MockHandler }
|
func (m *MockRestProvider) Handler() Handler { return m.MockHandler }
|
||||||
func (m *MockRestProvider) CurrentHost() string {
|
func (m *MockRestProvider) CurrentHost() string {
|
||||||
if len(m.MockHosts) > 0 {
|
if len(m.MockHosts) > 0 {
|
||||||
return m.MockHosts[m.HostIndex%len(m.MockHosts)]
|
return m.MockHosts[m.HostIndex%len(m.MockHosts)]
|
||||||
@@ -25,25 +25,22 @@ func (m *MockRestProvider) CurrentHost() string {
|
|||||||
func (m *MockRestProvider) Hosts() []string { return m.MockHosts }
|
func (m *MockRestProvider) Hosts() []string { return m.MockHosts }
|
||||||
func (m *MockRestProvider) SwitchHost(index int) error { m.HostIndex = index; return nil }
|
func (m *MockRestProvider) SwitchHost(index int) error { m.HostIndex = index; return nil }
|
||||||
|
|
||||||
// MockRestHandler implements RestHandler for testing.
|
// MockHandler implements Handler for testing.
|
||||||
type MockRestHandler struct {
|
type MockHandler struct {
|
||||||
MockHost string
|
MockHost string
|
||||||
MockClient *http.Client
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockRestHandler) Get(_ context.Context, _ string, _ any) error { return nil }
|
func (m *MockHandler) Get(_ context.Context, _ string, _ any) error { return nil }
|
||||||
func (m *MockRestHandler) GetStatusCode(_ context.Context, _ string) (int, error) {
|
func (m *MockHandler) GetStatusCode(_ context.Context, _ string) (int, error) {
|
||||||
return http.StatusOK, nil
|
return http.StatusOK, nil
|
||||||
}
|
}
|
||||||
func (m *MockRestHandler) GetSSZ(_ context.Context, _ string) ([]byte, http.Header, error) {
|
func (m *MockHandler) GetSSZ(_ context.Context, _ string) ([]byte, http.Header, error) {
|
||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
func (m *MockRestHandler) Post(_ context.Context, _ string, _ map[string]string, _ *bytes.Buffer, _ any) error {
|
func (m *MockHandler) Post(_ context.Context, _ string, _ map[string]string, _ *bytes.Buffer, _ any) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (m *MockRestHandler) PostSSZ(_ context.Context, _ string, _ map[string]string, _ *bytes.Buffer) ([]byte, http.Header, error) {
|
func (m *MockHandler) PostSSZ(_ context.Context, _ string, _ map[string]string, _ *bytes.Buffer) ([]byte, http.Header, error) {
|
||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
func (m *MockRestHandler) HttpClient() *http.Client { return m.MockClient }
|
func (m *MockHandler) Host() string { return m.MockHost }
|
||||||
func (m *MockRestHandler) Host() string { return m.MockHost }
|
|
||||||
func (m *MockRestHandler) SwitchHost(host string) { m.MockHost = host }
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import (
|
|||||||
type RestConnectionProvider interface {
|
type RestConnectionProvider interface {
|
||||||
// HttpClient returns the configured HTTP client with headers, timeout, and optional tracing.
|
// HttpClient returns the configured HTTP client with headers, timeout, and optional tracing.
|
||||||
HttpClient() *http.Client
|
HttpClient() *http.Client
|
||||||
// RestHandler returns the REST handler for making API requests.
|
// Handler returns the REST handler for making API requests.
|
||||||
RestHandler() RestHandler
|
Handler() Handler
|
||||||
// CurrentHost returns the current REST API endpoint URL.
|
// CurrentHost returns the current REST API endpoint URL.
|
||||||
CurrentHost() string
|
CurrentHost() string
|
||||||
// Hosts returns all configured REST API endpoint URLs.
|
// Hosts returns all configured REST API endpoint URLs.
|
||||||
@@ -54,7 +54,7 @@ func WithTracing() RestConnectionProviderOption {
|
|||||||
type restConnectionProvider struct {
|
type restConnectionProvider struct {
|
||||||
endpoints []string
|
endpoints []string
|
||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
restHandler RestHandler
|
restHandler *handler
|
||||||
currentIndex atomic.Uint64
|
currentIndex atomic.Uint64
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
headers map[string][]string
|
headers map[string][]string
|
||||||
@@ -96,7 +96,7 @@ func NewRestConnectionProvider(endpoint string, opts ...RestConnectionProviderOp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create the REST handler with the HTTP client and initial host
|
// Create the REST handler with the HTTP client and initial host
|
||||||
p.restHandler = newRestHandler(*p.httpClient, endpoints[0])
|
p.restHandler = newHandler(*p.httpClient, endpoints[0])
|
||||||
|
|
||||||
log.WithFields(logrus.Fields{
|
log.WithFields(logrus.Fields{
|
||||||
"endpoints": endpoints,
|
"endpoints": endpoints,
|
||||||
@@ -124,7 +124,7 @@ func (p *restConnectionProvider) HttpClient() *http.Client {
|
|||||||
return p.httpClient
|
return p.httpClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *restConnectionProvider) RestHandler() RestHandler {
|
func (p *restConnectionProvider) Handler() Handler {
|
||||||
return p.restHandler
|
return p.restHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,32 +21,35 @@ import (
|
|||||||
|
|
||||||
type reqOption func(*http.Request)
|
type reqOption func(*http.Request)
|
||||||
|
|
||||||
// RestHandler defines the interface for making REST API requests.
|
// Handler defines the interface for making REST API requests.
|
||||||
type RestHandler interface {
|
type Handler interface {
|
||||||
Get(ctx context.Context, endpoint string, resp any) error
|
Get(ctx context.Context, endpoint string, resp any) error
|
||||||
GetStatusCode(ctx context.Context, endpoint string) (int, error)
|
GetStatusCode(ctx context.Context, endpoint string) (int, error)
|
||||||
GetSSZ(ctx context.Context, endpoint string) ([]byte, http.Header, error)
|
GetSSZ(ctx context.Context, endpoint string) ([]byte, http.Header, error)
|
||||||
Post(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer, resp any) error
|
Post(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer, resp any) error
|
||||||
PostSSZ(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer) ([]byte, http.Header, error)
|
PostSSZ(ctx context.Context, endpoint string, headers map[string]string, data *bytes.Buffer) ([]byte, http.Header, error)
|
||||||
HttpClient() *http.Client
|
|
||||||
Host() string
|
Host() string
|
||||||
SwitchHost(host string)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type restHandler struct {
|
type handler struct {
|
||||||
client http.Client
|
client http.Client
|
||||||
host string
|
host string
|
||||||
reqOverrides []reqOption
|
reqOverrides []reqOption
|
||||||
}
|
}
|
||||||
|
|
||||||
// newRestHandler returns a RestHandler (internal use)
|
// newHandler returns a *handler for internal use within the rest package.
|
||||||
func newRestHandler(client http.Client, host string) RestHandler {
|
func newHandler(client http.Client, host string) *handler {
|
||||||
return NewRestHandler(client, host)
|
rh := &handler{
|
||||||
|
client: client,
|
||||||
|
host: host,
|
||||||
|
}
|
||||||
|
rh.appendAcceptOverride()
|
||||||
|
return rh
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRestHandler returns a RestHandler
|
// NewHandler returns a Handler
|
||||||
func NewRestHandler(client http.Client, host string) RestHandler {
|
func NewHandler(client http.Client, host string) Handler {
|
||||||
rh := &restHandler{
|
rh := &handler{
|
||||||
client: client,
|
client: client,
|
||||||
host: host,
|
host: host,
|
||||||
}
|
}
|
||||||
@@ -57,7 +60,7 @@ func NewRestHandler(client http.Client, host string) RestHandler {
|
|||||||
// appendAcceptOverride enables the Accept header to be customized at runtime via an environment variable.
|
// appendAcceptOverride enables the Accept header to be customized at runtime via an environment variable.
|
||||||
// This is specified as an env var because it is a niche option that prysm may use for performance testing or debugging
|
// This is specified as an env var because it is a niche option that prysm may use for performance testing or debugging
|
||||||
// bug which users are unlikely to need. Using an env var keeps the set of user-facing flags cleaner.
|
// bug which users are unlikely to need. Using an env var keeps the set of user-facing flags cleaner.
|
||||||
func (c *restHandler) appendAcceptOverride() {
|
func (c *handler) appendAcceptOverride() {
|
||||||
if accept := os.Getenv(params.EnvNameOverrideAccept); accept != "" {
|
if accept := os.Getenv(params.EnvNameOverrideAccept); accept != "" {
|
||||||
c.reqOverrides = append(c.reqOverrides, func(req *http.Request) {
|
c.reqOverrides = append(c.reqOverrides, func(req *http.Request) {
|
||||||
req.Header.Set("Accept", accept)
|
req.Header.Set("Accept", accept)
|
||||||
@@ -66,18 +69,18 @@ func (c *restHandler) appendAcceptOverride() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// HttpClient returns the underlying HTTP client of the handler
|
// HttpClient returns the underlying HTTP client of the handler
|
||||||
func (c *restHandler) HttpClient() *http.Client {
|
func (c *handler) HttpClient() *http.Client {
|
||||||
return &c.client
|
return &c.client
|
||||||
}
|
}
|
||||||
|
|
||||||
// Host returns the underlying HTTP host
|
// Host returns the underlying HTTP host
|
||||||
func (c *restHandler) Host() string {
|
func (c *handler) Host() string {
|
||||||
return c.host
|
return c.host
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get sends a GET request and decodes the response body as a JSON object into the passed in object.
|
// Get sends a GET request and decodes the response body as a JSON object into the passed in object.
|
||||||
// If an HTTP error is returned, the body is decoded as a DefaultJsonError JSON object and returned as the first return value.
|
// If an HTTP error is returned, the body is decoded as a DefaultJsonError JSON object and returned as the first return value.
|
||||||
func (c *restHandler) Get(ctx context.Context, endpoint string, resp any) error {
|
func (c *handler) Get(ctx context.Context, endpoint string, resp any) error {
|
||||||
url := c.host + endpoint
|
url := c.host + endpoint
|
||||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -100,7 +103,7 @@ func (c *restHandler) Get(ctx context.Context, endpoint string, resp any) error
|
|||||||
// GetStatusCode sends a GET request and returns only the HTTP status code.
|
// GetStatusCode sends a GET request and returns only the HTTP status code.
|
||||||
// This is useful for endpoints like /eth/v1/node/health that communicate status via HTTP codes
|
// This is useful for endpoints like /eth/v1/node/health that communicate status via HTTP codes
|
||||||
// (200 = ready, 206 = syncing, 503 = unavailable) rather than response bodies.
|
// (200 = ready, 206 = syncing, 503 = unavailable) rather than response bodies.
|
||||||
func (c *restHandler) GetStatusCode(ctx context.Context, endpoint string) (int, error) {
|
func (c *handler) GetStatusCode(ctx context.Context, endpoint string) (int, error) {
|
||||||
url := c.host + endpoint
|
url := c.host + endpoint
|
||||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -119,7 +122,7 @@ func (c *restHandler) GetStatusCode(ctx context.Context, endpoint string) (int,
|
|||||||
return httpResp.StatusCode, nil
|
return httpResp.StatusCode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *restHandler) GetSSZ(ctx context.Context, endpoint string) ([]byte, http.Header, error) {
|
func (c *handler) GetSSZ(ctx context.Context, endpoint string) ([]byte, http.Header, error) {
|
||||||
url := c.host + endpoint
|
url := c.host + endpoint
|
||||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -174,7 +177,7 @@ func (c *restHandler) GetSSZ(ctx context.Context, endpoint string) ([]byte, http
|
|||||||
|
|
||||||
// Post sends a POST request and decodes the response body as a JSON object into the passed in object.
|
// Post sends a POST request and decodes the response body as a JSON object into the passed in object.
|
||||||
// If an HTTP error is returned, the body is decoded as a DefaultJsonError JSON object and returned as the first return value.
|
// If an HTTP error is returned, the body is decoded as a DefaultJsonError JSON object and returned as the first return value.
|
||||||
func (c *restHandler) Post(
|
func (c *handler) Post(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
apiEndpoint string,
|
apiEndpoint string,
|
||||||
headers map[string]string,
|
headers map[string]string,
|
||||||
@@ -210,7 +213,7 @@ func (c *restHandler) Post(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PostSSZ sends a POST request and prefers an SSZ (application/octet-stream) response body.
|
// PostSSZ sends a POST request and prefers an SSZ (application/octet-stream) response body.
|
||||||
func (c *restHandler) PostSSZ(
|
func (c *handler) PostSSZ(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
apiEndpoint string,
|
apiEndpoint string,
|
||||||
headers map[string]string,
|
headers map[string]string,
|
||||||
@@ -311,6 +314,6 @@ func decodeResp(httpResp *http.Response, resp any) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *restHandler) SwitchHost(host string) {
|
func (c *handler) SwitchHost(host string) {
|
||||||
c.host = host
|
c.host = host
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -509,17 +509,17 @@ func (s *SignedBlindedBeaconBlockFulu) SigString() string {
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
type ExecutionPayloadBid struct {
|
type ExecutionPayloadBid struct {
|
||||||
ParentBlockHash string `json:"parent_block_hash"`
|
ParentBlockHash string `json:"parent_block_hash"`
|
||||||
ParentBlockRoot string `json:"parent_block_root"`
|
ParentBlockRoot string `json:"parent_block_root"`
|
||||||
BlockHash string `json:"block_hash"`
|
BlockHash string `json:"block_hash"`
|
||||||
PrevRandao string `json:"prev_randao"`
|
PrevRandao string `json:"prev_randao"`
|
||||||
FeeRecipient string `json:"fee_recipient"`
|
FeeRecipient string `json:"fee_recipient"`
|
||||||
GasLimit string `json:"gas_limit"`
|
GasLimit string `json:"gas_limit"`
|
||||||
BuilderIndex string `json:"builder_index"`
|
BuilderIndex string `json:"builder_index"`
|
||||||
Slot string `json:"slot"`
|
Slot string `json:"slot"`
|
||||||
Value string `json:"value"`
|
Value string `json:"value"`
|
||||||
ExecutionPayment string `json:"execution_payment"`
|
ExecutionPayment string `json:"execution_payment"`
|
||||||
BlobKzgCommitmentsRoot string `json:"blob_kzg_commitments_root"`
|
BlobKzgCommitments []string `json:"blob_kzg_commitments"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SignedExecutionPayloadBid struct {
|
type SignedExecutionPayloadBid struct {
|
||||||
|
|||||||
@@ -2939,18 +2939,22 @@ func SignedExecutionPayloadBidFromConsensus(b *eth.SignedExecutionPayloadBid) *S
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ExecutionPayloadBidFromConsensus(b *eth.ExecutionPayloadBid) *ExecutionPayloadBid {
|
func ExecutionPayloadBidFromConsensus(b *eth.ExecutionPayloadBid) *ExecutionPayloadBid {
|
||||||
|
blobKzgCommitments := make([]string, len(b.BlobKzgCommitments))
|
||||||
|
for i := range b.BlobKzgCommitments {
|
||||||
|
blobKzgCommitments[i] = hexutil.Encode(b.BlobKzgCommitments[i])
|
||||||
|
}
|
||||||
return &ExecutionPayloadBid{
|
return &ExecutionPayloadBid{
|
||||||
ParentBlockHash: hexutil.Encode(b.ParentBlockHash),
|
ParentBlockHash: hexutil.Encode(b.ParentBlockHash),
|
||||||
ParentBlockRoot: hexutil.Encode(b.ParentBlockRoot),
|
ParentBlockRoot: hexutil.Encode(b.ParentBlockRoot),
|
||||||
BlockHash: hexutil.Encode(b.BlockHash),
|
BlockHash: hexutil.Encode(b.BlockHash),
|
||||||
PrevRandao: hexutil.Encode(b.PrevRandao),
|
PrevRandao: hexutil.Encode(b.PrevRandao),
|
||||||
FeeRecipient: hexutil.Encode(b.FeeRecipient),
|
FeeRecipient: hexutil.Encode(b.FeeRecipient),
|
||||||
GasLimit: fmt.Sprintf("%d", b.GasLimit),
|
GasLimit: fmt.Sprintf("%d", b.GasLimit),
|
||||||
BuilderIndex: fmt.Sprintf("%d", b.BuilderIndex),
|
BuilderIndex: fmt.Sprintf("%d", b.BuilderIndex),
|
||||||
Slot: fmt.Sprintf("%d", b.Slot),
|
Slot: fmt.Sprintf("%d", b.Slot),
|
||||||
Value: fmt.Sprintf("%d", b.Value),
|
Value: fmt.Sprintf("%d", b.Value),
|
||||||
ExecutionPayment: fmt.Sprintf("%d", b.ExecutionPayment),
|
ExecutionPayment: fmt.Sprintf("%d", b.ExecutionPayment),
|
||||||
BlobKzgCommitmentsRoot: hexutil.Encode(b.BlobKzgCommitmentsRoot),
|
BlobKzgCommitments: blobKzgCommitments,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3187,22 +3191,30 @@ func (b *ExecutionPayloadBid) ToConsensus() (*eth.ExecutionPayloadBid, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, server.NewDecodeError(err, "ExecutionPayment")
|
return nil, server.NewDecodeError(err, "ExecutionPayment")
|
||||||
}
|
}
|
||||||
blobKzgCommitmentsRoot, err := bytesutil.DecodeHexWithLength(b.BlobKzgCommitmentsRoot, fieldparams.RootLength)
|
err = slice.VerifyMaxLength(b.BlobKzgCommitments, fieldparams.MaxBlobCommitmentsPerBlock)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, server.NewDecodeError(err, "BlobKzgCommitmentsRoot")
|
return nil, server.NewDecodeError(err, "BlobKzgCommitments")
|
||||||
|
}
|
||||||
|
blobKzgCommitments := make([][]byte, len(b.BlobKzgCommitments))
|
||||||
|
for i, commitment := range b.BlobKzgCommitments {
|
||||||
|
kzg, err := bytesutil.DecodeHexWithLength(commitment, fieldparams.BLSPubkeyLength)
|
||||||
|
if err != nil {
|
||||||
|
return nil, server.NewDecodeError(err, fmt.Sprintf("BlobKzgCommitments[%d]", i))
|
||||||
|
}
|
||||||
|
blobKzgCommitments[i] = kzg
|
||||||
}
|
}
|
||||||
return ð.ExecutionPayloadBid{
|
return ð.ExecutionPayloadBid{
|
||||||
ParentBlockHash: parentBlockHash,
|
ParentBlockHash: parentBlockHash,
|
||||||
ParentBlockRoot: parentBlockRoot,
|
ParentBlockRoot: parentBlockRoot,
|
||||||
BlockHash: blockHash,
|
BlockHash: blockHash,
|
||||||
PrevRandao: prevRandao,
|
PrevRandao: prevRandao,
|
||||||
FeeRecipient: feeRecipient,
|
FeeRecipient: feeRecipient,
|
||||||
GasLimit: gasLimit,
|
GasLimit: gasLimit,
|
||||||
BuilderIndex: primitives.BuilderIndex(builderIndex),
|
BuilderIndex: primitives.BuilderIndex(builderIndex),
|
||||||
Slot: primitives.Slot(slot),
|
Slot: primitives.Slot(slot),
|
||||||
Value: primitives.Gwei(value),
|
Value: primitives.Gwei(value),
|
||||||
ExecutionPayment: primitives.Gwei(executionPayment),
|
ExecutionPayment: primitives.Gwei(executionPayment),
|
||||||
BlobKzgCommitmentsRoot: blobKzgCommitmentsRoot,
|
BlobKzgCommitments: blobKzgCommitments,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ go_library(
|
|||||||
"//consensus-types/primitives:go_default_library",
|
"//consensus-types/primitives:go_default_library",
|
||||||
"//crypto/bls:go_default_library",
|
"//crypto/bls:go_default_library",
|
||||||
"//encoding/bytesutil:go_default_library",
|
"//encoding/bytesutil:go_default_library",
|
||||||
|
"//io/logs:go_default_library",
|
||||||
"//math:go_default_library",
|
"//math:go_default_library",
|
||||||
"//monitoring/tracing:go_default_library",
|
"//monitoring/tracing:go_default_library",
|
||||||
"//monitoring/tracing/trace:go_default_library",
|
"//monitoring/tracing/trace:go_default_library",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
|
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
||||||
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/io/logs"
|
||||||
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
||||||
"github.com/OffchainLabs/prysm/v7/runtime/version"
|
"github.com/OffchainLabs/prysm/v7/runtime/version"
|
||||||
prysmTime "github.com/OffchainLabs/prysm/v7/time"
|
prysmTime "github.com/OffchainLabs/prysm/v7/time"
|
||||||
@@ -87,36 +88,45 @@ func logStateTransitionData(b interfaces.ReadOnlyBeaconBlock) error {
|
|||||||
func logBlockSyncStatus(block interfaces.ReadOnlyBeaconBlock, blockRoot [32]byte, justified, finalized *ethpb.Checkpoint, receivedTime time.Time, genesis time.Time, daWaitedTime time.Duration) error {
|
func logBlockSyncStatus(block interfaces.ReadOnlyBeaconBlock, blockRoot [32]byte, justified, finalized *ethpb.Checkpoint, receivedTime time.Time, genesis time.Time, daWaitedTime time.Duration) error {
|
||||||
startTime, err := slots.StartTime(genesis, block.Slot())
|
startTime, err := slots.StartTime(genesis, block.Slot())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Wrap(err, "failed to get slot start time")
|
||||||
}
|
}
|
||||||
level := log.Logger.GetLevel()
|
parentRoot := block.ParentRoot()
|
||||||
|
blkRoot := fmt.Sprintf("0x%s...", hex.EncodeToString(blockRoot[:])[:8])
|
||||||
|
finalizedRoot := fmt.Sprintf("0x%s...", hex.EncodeToString(finalized.Root)[:8])
|
||||||
|
sinceSlotStartTime := prysmTime.Now().Sub(startTime)
|
||||||
|
|
||||||
|
lessFields := logrus.Fields{
|
||||||
|
"slot": block.Slot(),
|
||||||
|
"block": blkRoot,
|
||||||
|
"finalizedEpoch": finalized.Epoch,
|
||||||
|
"finalizedRoot": finalizedRoot,
|
||||||
|
"epoch": slots.ToEpoch(block.Slot()),
|
||||||
|
"sinceSlotStartTime": sinceSlotStartTime,
|
||||||
|
}
|
||||||
|
moreFields := logrus.Fields{
|
||||||
|
"slot": block.Slot(),
|
||||||
|
"slotInEpoch": block.Slot() % params.BeaconConfig().SlotsPerEpoch,
|
||||||
|
"block": blkRoot,
|
||||||
|
"epoch": slots.ToEpoch(block.Slot()),
|
||||||
|
"justifiedEpoch": justified.Epoch,
|
||||||
|
"justifiedRoot": fmt.Sprintf("0x%s...", hex.EncodeToString(justified.Root)[:8]),
|
||||||
|
"finalizedEpoch": finalized.Epoch,
|
||||||
|
"finalizedRoot": finalizedRoot,
|
||||||
|
"parentRoot": fmt.Sprintf("0x%s...", hex.EncodeToString(parentRoot[:])[:8]),
|
||||||
|
"version": version.String(block.Version()),
|
||||||
|
"sinceSlotStartTime": sinceSlotStartTime,
|
||||||
|
"chainServiceProcessedTime": prysmTime.Now().Sub(receivedTime) - daWaitedTime,
|
||||||
|
"dataAvailabilityWaitedTime": daWaitedTime,
|
||||||
|
}
|
||||||
|
|
||||||
|
level := logs.PackageVerbosity("beacon-chain/blockchain")
|
||||||
if level >= logrus.DebugLevel {
|
if level >= logrus.DebugLevel {
|
||||||
parentRoot := block.ParentRoot()
|
log.WithFields(moreFields).Info("Synced new block")
|
||||||
lf := logrus.Fields{
|
return nil
|
||||||
"slot": block.Slot(),
|
|
||||||
"slotInEpoch": block.Slot() % params.BeaconConfig().SlotsPerEpoch,
|
|
||||||
"block": fmt.Sprintf("0x%s...", hex.EncodeToString(blockRoot[:])[:8]),
|
|
||||||
"epoch": slots.ToEpoch(block.Slot()),
|
|
||||||
"justifiedEpoch": justified.Epoch,
|
|
||||||
"justifiedRoot": fmt.Sprintf("0x%s...", hex.EncodeToString(justified.Root)[:8]),
|
|
||||||
"finalizedEpoch": finalized.Epoch,
|
|
||||||
"finalizedRoot": fmt.Sprintf("0x%s...", hex.EncodeToString(finalized.Root)[:8]),
|
|
||||||
"parentRoot": fmt.Sprintf("0x%s...", hex.EncodeToString(parentRoot[:])[:8]),
|
|
||||||
"version": version.String(block.Version()),
|
|
||||||
"sinceSlotStartTime": prysmTime.Now().Sub(startTime),
|
|
||||||
"chainServiceProcessedTime": prysmTime.Now().Sub(receivedTime) - daWaitedTime,
|
|
||||||
"dataAvailabilityWaitedTime": daWaitedTime,
|
|
||||||
}
|
|
||||||
log.WithFields(lf).Debug("Synced new block")
|
|
||||||
} else {
|
|
||||||
log.WithFields(logrus.Fields{
|
|
||||||
"slot": block.Slot(),
|
|
||||||
"block": fmt.Sprintf("0x%s...", hex.EncodeToString(blockRoot[:])[:8]),
|
|
||||||
"finalizedEpoch": finalized.Epoch,
|
|
||||||
"finalizedRoot": fmt.Sprintf("0x%s...", hex.EncodeToString(finalized.Root)[:8]),
|
|
||||||
"epoch": slots.ToEpoch(block.Slot()),
|
|
||||||
}).Info("Synced new block")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.WithFields(lessFields).WithField(logs.LogTargetField, logs.LogTargetUser).Info("Synced new block")
|
||||||
|
log.WithFields(moreFields).WithField(logs.LogTargetField, logs.LogTargetEphemeral).Info("Synced new block")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,27 +17,56 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ProcessExecutionPayloadBid processes a signed execution payload bid in the Gloas fork.
|
// ProcessExecutionPayloadBid processes a signed execution payload bid in the Gloas fork.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// process_execution_payload_bid(state: BeaconState, block: BeaconBlock):
|
|
||||||
//
|
//
|
||||||
// signed_bid = block.body.signed_execution_payload_bid
|
// <spec fn="process_execution_payload_bid" fork="gloas" hash="823c9f3a">
|
||||||
// bid = signed_bid.message
|
// def process_execution_payload_bid(state: BeaconState, block: BeaconBlock) -> None:
|
||||||
// builder_index = bid.builder_index
|
// signed_bid = block.body.signed_execution_payload_bid
|
||||||
// amount = bid.value
|
// bid = signed_bid.message
|
||||||
// if builder_index == BUILDER_INDEX_SELF_BUILD:
|
// builder_index = bid.builder_index
|
||||||
// assert amount == 0
|
// amount = bid.value
|
||||||
// assert signed_bid.signature == G2_POINT_AT_INFINITY
|
//
|
||||||
// else:
|
// # For self-builds, amount must be zero regardless of withdrawal credential prefix
|
||||||
// assert is_active_builder(state, builder_index)
|
// if builder_index == BUILDER_INDEX_SELF_BUILD:
|
||||||
// assert can_builder_cover_bid(state, builder_index, amount)
|
// assert amount == 0
|
||||||
// assert verify_execution_payload_bid_signature(state, signed_bid)
|
// assert signed_bid.signature == bls.G2_POINT_AT_INFINITY
|
||||||
// assert bid.slot == block.slot
|
// else:
|
||||||
// assert bid.parent_block_hash == state.latest_block_hash
|
// # Verify that the builder is active
|
||||||
// assert bid.parent_block_root == block.parent_root
|
// assert is_active_builder(state, builder_index)
|
||||||
// assert bid.prev_randao == get_randao_mix(state, get_current_epoch(state))
|
// # Verify that the builder has funds to cover the bid
|
||||||
// if amount > 0:
|
// assert can_builder_cover_bid(state, builder_index, amount)
|
||||||
// state.builder_pending_payments[...] = BuilderPendingPayment(weight=0, withdrawal=BuilderPendingWithdrawal(fee_recipient=bid.fee_recipient, amount=amount, builder_index=builder_index))
|
// # Verify that the bid signature is valid
|
||||||
// state.latest_execution_payload_bid = bid
|
// assert verify_execution_payload_bid_signature(state, signed_bid)
|
||||||
|
//
|
||||||
|
// # Verify commitments are under limit
|
||||||
|
// assert (
|
||||||
|
// len(bid.blob_kzg_commitments)
|
||||||
|
// <= get_blob_parameters(get_current_epoch(state)).max_blobs_per_block
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// # Verify that the bid is for the current slot
|
||||||
|
// assert bid.slot == block.slot
|
||||||
|
// # Verify that the bid is for the right parent block
|
||||||
|
// assert bid.parent_block_hash == state.latest_block_hash
|
||||||
|
// assert bid.parent_block_root == block.parent_root
|
||||||
|
// assert bid.prev_randao == get_randao_mix(state, get_current_epoch(state))
|
||||||
|
//
|
||||||
|
// # Record the pending payment if there is some payment
|
||||||
|
// if amount > 0:
|
||||||
|
// pending_payment = BuilderPendingPayment(
|
||||||
|
// weight=0,
|
||||||
|
// withdrawal=BuilderPendingWithdrawal(
|
||||||
|
// fee_recipient=bid.fee_recipient,
|
||||||
|
// amount=amount,
|
||||||
|
// builder_index=builder_index,
|
||||||
|
// ),
|
||||||
|
// )
|
||||||
|
// state.builder_pending_payments[SLOTS_PER_EPOCH + bid.slot % SLOTS_PER_EPOCH] = (
|
||||||
|
// pending_payment
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// # Cache the signed execution payload bid
|
||||||
|
// state.latest_execution_payload_bid = bid
|
||||||
|
// </spec>
|
||||||
func ProcessExecutionPayloadBid(st state.BeaconState, block interfaces.ReadOnlyBeaconBlock) error {
|
func ProcessExecutionPayloadBid(st state.BeaconState, block interfaces.ReadOnlyBeaconBlock) error {
|
||||||
signedBid, err := block.Body().SignedExecutionPayloadBid()
|
signedBid, err := block.Body().SignedExecutionPayloadBid()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -86,6 +115,12 @@ func ProcessExecutionPayloadBid(st state.BeaconState, block interfaces.ReadOnlyB
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maxBlobsPerBlock := params.BeaconConfig().MaxBlobsPerBlockAtEpoch(slots.ToEpoch(block.Slot()))
|
||||||
|
commitmentCount := bid.BlobKzgCommitmentCount()
|
||||||
|
if commitmentCount > uint64(maxBlobsPerBlock) {
|
||||||
|
return fmt.Errorf("bid has %d blob KZG commitments over max %d", commitmentCount, maxBlobsPerBlock)
|
||||||
|
}
|
||||||
|
|
||||||
if err := validateBidConsistency(st, bid, block); err != nil {
|
if err := validateBidConsistency(st, bid, block); err != nil {
|
||||||
return errors.Wrap(err, "bid consistency validation failed")
|
return errors.Wrap(err, "bid consistency validation failed")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,6 +184,28 @@ func signBid(t *testing.T, sk common.SecretKey, bid *ethpb.ExecutionPayloadBid,
|
|||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func blobCommitmentsForSlot(slot primitives.Slot, count int) [][]byte {
|
||||||
|
max := int(params.BeaconConfig().MaxBlobsPerBlockAtEpoch(slots.ToEpoch(slot)))
|
||||||
|
if count > max {
|
||||||
|
count = max
|
||||||
|
}
|
||||||
|
commitments := make([][]byte, count)
|
||||||
|
for i := range commitments {
|
||||||
|
commitments[i] = bytes.Repeat([]byte{0xEE}, 48)
|
||||||
|
}
|
||||||
|
return commitments
|
||||||
|
}
|
||||||
|
|
||||||
|
func tooManyBlobCommitmentsForSlot(slot primitives.Slot) [][]byte {
|
||||||
|
max := int(params.BeaconConfig().MaxBlobsPerBlockAtEpoch(slots.ToEpoch(slot)))
|
||||||
|
count := max + 1
|
||||||
|
commitments := make([][]byte, count)
|
||||||
|
for i := range commitments {
|
||||||
|
commitments[i] = bytes.Repeat([]byte{0xEE}, 48)
|
||||||
|
}
|
||||||
|
return commitments
|
||||||
|
}
|
||||||
|
|
||||||
func TestProcessExecutionPayloadBid_SelfBuildSuccess(t *testing.T) {
|
func TestProcessExecutionPayloadBid_SelfBuildSuccess(t *testing.T) {
|
||||||
slot := primitives.Slot(12)
|
slot := primitives.Slot(12)
|
||||||
proposerIdx := primitives.ValidatorIndex(0)
|
proposerIdx := primitives.ValidatorIndex(0)
|
||||||
@@ -194,17 +216,17 @@ func TestProcessExecutionPayloadBid_SelfBuildSuccess(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinActivationBalance+1000, randao, latestHash, pubKey)
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinActivationBalance+1000, randao, latestHash, pubKey)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 0,
|
Value: 0,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0xEE}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
||||||
}
|
}
|
||||||
signed := ðpb.SignedExecutionPayloadBid{
|
signed := ðpb.SignedExecutionPayloadBid{
|
||||||
Message: bid,
|
Message: bid,
|
||||||
@@ -236,16 +258,16 @@ func TestProcessExecutionPayloadBid_SelfBuildNonZeroAmountFails(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinActivationBalance+1000, randao, latestHash, [48]byte{})
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinActivationBalance+1000, randao, latestHash, [48]byte{})
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0xAA}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0xAA}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0xBB}, 32),
|
BlockHash: bytes.Repeat([]byte{0xBB}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 10,
|
Value: 10,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0xCC}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0xDD}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0xDD}, 20),
|
||||||
}
|
}
|
||||||
signed := ðpb.SignedExecutionPayloadBid{
|
signed := ðpb.SignedExecutionPayloadBid{
|
||||||
Message: bid,
|
Message: bid,
|
||||||
@@ -280,17 +302,17 @@ func TestProcessExecutionPayloadBid_PendingPaymentAndCacheBid(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, balance, randao, latestHash, pubKey)
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, balance, randao, latestHash, pubKey)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 500_000,
|
Value: 500_000,
|
||||||
ExecutionPayment: 1,
|
ExecutionPayment: 1,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0xEE}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
||||||
}
|
}
|
||||||
|
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
@@ -341,17 +363,17 @@ func TestProcessExecutionPayloadBid_BuilderNotActive(t *testing.T) {
|
|||||||
state = stateIface.(*state_native.BeaconState)
|
state = stateIface.(*state_native.BeaconState)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0x03}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0x03}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0x04}, 32),
|
BlockHash: bytes.Repeat([]byte{0x04}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 10,
|
Value: 10,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0x05}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0x06}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0x06}, 20),
|
||||||
}
|
}
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
||||||
@@ -394,17 +416,17 @@ func TestProcessExecutionPayloadBid_CannotCoverBid(t *testing.T) {
|
|||||||
state = stateIface.(*state_native.BeaconState)
|
state = stateIface.(*state_native.BeaconState)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 25,
|
Value: 25,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0xEE}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
||||||
}
|
}
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
||||||
@@ -436,17 +458,17 @@ func TestProcessExecutionPayloadBid_InvalidSignature(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 10,
|
Value: 10,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0xEE}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
||||||
}
|
}
|
||||||
// Use an invalid signature.
|
// Use an invalid signature.
|
||||||
invalidSig := [96]byte{1}
|
invalidSig := [96]byte{1}
|
||||||
@@ -463,6 +485,42 @@ func TestProcessExecutionPayloadBid_InvalidSignature(t *testing.T) {
|
|||||||
require.ErrorContains(t, "bid signature validation failed", err)
|
require.ErrorContains(t, "bid signature validation failed", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProcessExecutionPayloadBid_TooManyBlobCommitments(t *testing.T) {
|
||||||
|
slot := primitives.Slot(9)
|
||||||
|
proposerIdx := primitives.ValidatorIndex(0)
|
||||||
|
builderIdx := params.BeaconConfig().BuilderIndexSelfBuild
|
||||||
|
randao := [32]byte(bytes.Repeat([]byte{0xAA}, 32))
|
||||||
|
latestHash := [32]byte(bytes.Repeat([]byte{0xBB}, 32))
|
||||||
|
pubKey := [48]byte{}
|
||||||
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinActivationBalance+1000, randao, latestHash, pubKey)
|
||||||
|
|
||||||
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
|
ParentBlockHash: latestHash[:],
|
||||||
|
ParentBlockRoot: bytes.Repeat([]byte{0xCC}, 32),
|
||||||
|
BlockHash: bytes.Repeat([]byte{0xDD}, 32),
|
||||||
|
PrevRandao: randao[:],
|
||||||
|
BuilderIndex: builderIdx,
|
||||||
|
Slot: slot,
|
||||||
|
BlobKzgCommitments: tooManyBlobCommitmentsForSlot(slot),
|
||||||
|
FeeRecipient: bytes.Repeat([]byte{0xFF}, 20),
|
||||||
|
}
|
||||||
|
signed := ðpb.SignedExecutionPayloadBid{
|
||||||
|
Message: bid,
|
||||||
|
Signature: common.InfiniteSignature[:],
|
||||||
|
}
|
||||||
|
|
||||||
|
block := stubBlock{
|
||||||
|
slot: slot,
|
||||||
|
proposer: proposerIdx,
|
||||||
|
parentRoot: bytesutil.ToBytes32(bid.ParentBlockRoot),
|
||||||
|
body: stubBlockBody{signedBid: signed},
|
||||||
|
v: version.Gloas,
|
||||||
|
}
|
||||||
|
|
||||||
|
err := ProcessExecutionPayloadBid(state, block)
|
||||||
|
require.ErrorContains(t, "blob KZG commitments over max", err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestProcessExecutionPayloadBid_SlotMismatch(t *testing.T) {
|
func TestProcessExecutionPayloadBid_SlotMismatch(t *testing.T) {
|
||||||
slot := primitives.Slot(10)
|
slot := primitives.Slot(10)
|
||||||
builderIdx := primitives.BuilderIndex(1)
|
builderIdx := primitives.BuilderIndex(1)
|
||||||
@@ -478,17 +536,17 @@ func TestProcessExecutionPayloadBid_SlotMismatch(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0xAA}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0xAA}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0xBB}, 32),
|
BlockHash: bytes.Repeat([]byte{0xBB}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot + 1, // mismatch
|
Slot: slot + 1, // mismatch
|
||||||
Value: 1,
|
Value: 1,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0xCC}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0xDD}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0xDD}, 20),
|
||||||
}
|
}
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
||||||
@@ -520,17 +578,17 @@ func TestProcessExecutionPayloadBid_ParentHashMismatch(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: bytes.Repeat([]byte{0x11}, 32), // mismatch
|
ParentBlockHash: bytes.Repeat([]byte{0x11}, 32), // mismatch
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0x22}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0x22}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0x33}, 32),
|
BlockHash: bytes.Repeat([]byte{0x33}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 1,
|
Value: 1,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0x44}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0x55}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0x55}, 20),
|
||||||
}
|
}
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
||||||
@@ -563,17 +621,17 @@ func TestProcessExecutionPayloadBid_ParentRootMismatch(t *testing.T) {
|
|||||||
|
|
||||||
parentRoot := bytes.Repeat([]byte{0x22}, 32)
|
parentRoot := bytes.Repeat([]byte{0x22}, 32)
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: parentRoot,
|
ParentBlockRoot: parentRoot,
|
||||||
BlockHash: bytes.Repeat([]byte{0x33}, 32),
|
BlockHash: bytes.Repeat([]byte{0x33}, 32),
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 1,
|
Value: 1,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0x44}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0x55}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0x55}, 20),
|
||||||
}
|
}
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
||||||
@@ -605,17 +663,17 @@ func TestProcessExecutionPayloadBid_PrevRandaoMismatch(t *testing.T) {
|
|||||||
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
state := buildGloasState(t, slot, proposerIdx, builderIdx, params.BeaconConfig().MinDepositAmount+1000, randao, latestHash, pubKey)
|
||||||
|
|
||||||
bid := ðpb.ExecutionPayloadBid{
|
bid := ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: latestHash[:],
|
ParentBlockHash: latestHash[:],
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0x22}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0x22}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0x33}, 32),
|
BlockHash: bytes.Repeat([]byte{0x33}, 32),
|
||||||
PrevRandao: bytes.Repeat([]byte{0x01}, 32), // mismatch
|
PrevRandao: bytes.Repeat([]byte{0x01}, 32), // mismatch
|
||||||
GasLimit: 1,
|
GasLimit: 1,
|
||||||
BuilderIndex: builderIdx,
|
BuilderIndex: builderIdx,
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
Value: 1,
|
Value: 1,
|
||||||
ExecutionPayment: 0,
|
ExecutionPayment: 0,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0x44}, 32),
|
BlobKzgCommitments: blobCommitmentsForSlot(slot, 1),
|
||||||
FeeRecipient: bytes.Repeat([]byte{0x55}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0x55}, 20),
|
||||||
}
|
}
|
||||||
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
genesis := bytesutil.ToBytes32(state.GenesisValidatorsRoot())
|
||||||
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
sig := signBid(t, sk, bid, state.Fork(), genesis)
|
||||||
|
|||||||
@@ -24,14 +24,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ProcessPayloadAttestations validates payload attestations in a block body.
|
// ProcessPayloadAttestations validates payload attestations in a block body.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// process_payload_attestation(state: BeaconState, payload_attestation: PayloadAttestation):
|
|
||||||
//
|
//
|
||||||
// data = payload_attestation.data
|
// <spec fn="process_payload_attestation" fork="gloas" hash="f46bf0b0">
|
||||||
// assert data.beacon_block_root == state.latest_block_header.parent_root
|
// def process_payload_attestation(
|
||||||
// assert data.slot + 1 == state.slot
|
// state: BeaconState, payload_attestation: PayloadAttestation
|
||||||
// indexed = get_indexed_payload_attestation(state, data.slot, payload_attestation)
|
// ) -> None:
|
||||||
// assert is_valid_indexed_payload_attestation(state, indexed)
|
// data = payload_attestation.data
|
||||||
|
//
|
||||||
|
// # Check that the attestation is for the parent beacon block
|
||||||
|
// assert data.beacon_block_root == state.latest_block_header.parent_root
|
||||||
|
// # Check that the attestation is for the previous slot
|
||||||
|
// assert data.slot + 1 == state.slot
|
||||||
|
// # Verify signature
|
||||||
|
// indexed_payload_attestation = get_indexed_payload_attestation(state, payload_attestation)
|
||||||
|
// assert is_valid_indexed_payload_attestation(state, indexed_payload_attestation)
|
||||||
|
// </spec>
|
||||||
func ProcessPayloadAttestations(ctx context.Context, st state.BeaconState, body interfaces.ReadOnlyBeaconBlockBody) error {
|
func ProcessPayloadAttestations(ctx context.Context, st state.BeaconState, body interfaces.ReadOnlyBeaconBlockBody) error {
|
||||||
atts, err := body.PayloadAttestations()
|
atts, err := body.PayloadAttestations()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -90,17 +97,24 @@ func indexedPayloadAttestation(ctx context.Context, st state.ReadOnlyBeaconState
|
|||||||
}
|
}
|
||||||
|
|
||||||
// payloadCommittee returns the payload timeliness committee for a given slot for the state.
|
// payloadCommittee returns the payload timeliness committee for a given slot for the state.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// get_ptc(state: BeaconState, slot: Slot) -> Vector[ValidatorIndex, PTC_SIZE]:
|
|
||||||
//
|
//
|
||||||
// epoch = compute_epoch_at_slot(slot)
|
// <spec fn="get_ptc" fork="gloas" hash="ae15f761">
|
||||||
// seed = hash(get_seed(state, epoch, DOMAIN_PTC_ATTESTER) + uint_to_bytes(slot))
|
// def get_ptc(state: BeaconState, slot: Slot) -> Vector[ValidatorIndex, PTC_SIZE]:
|
||||||
// indices = []
|
// """
|
||||||
// committees_per_slot = get_committee_count_per_slot(state, epoch)
|
// Get the payload timeliness committee for the given ``slot``.
|
||||||
// for i in range(committees_per_slot):
|
// """
|
||||||
// committee = get_beacon_committee(state, slot, CommitteeIndex(i))
|
// epoch = compute_epoch_at_slot(slot)
|
||||||
// indices.extend(committee)
|
// seed = hash(get_seed(state, epoch, DOMAIN_PTC_ATTESTER) + uint_to_bytes(slot))
|
||||||
// return compute_balance_weighted_selection(state, indices, seed, size=PTC_SIZE, shuffle_indices=False)
|
// indices: List[ValidatorIndex] = []
|
||||||
|
// # Concatenate all committees for this slot in order
|
||||||
|
// committees_per_slot = get_committee_count_per_slot(state, epoch)
|
||||||
|
// for i in range(committees_per_slot):
|
||||||
|
// committee = get_beacon_committee(state, slot, CommitteeIndex(i))
|
||||||
|
// indices.extend(committee)
|
||||||
|
// return compute_balance_weighted_selection(
|
||||||
|
// state, indices, seed, size=PTC_SIZE, shuffle_indices=False
|
||||||
|
// )
|
||||||
|
// </spec>
|
||||||
func payloadCommittee(ctx context.Context, st state.ReadOnlyBeaconState, slot primitives.Slot) ([]primitives.ValidatorIndex, error) {
|
func payloadCommittee(ctx context.Context, st state.ReadOnlyBeaconState, slot primitives.Slot) ([]primitives.ValidatorIndex, error) {
|
||||||
epoch := slots.ToEpoch(slot)
|
epoch := slots.ToEpoch(slot)
|
||||||
seed, err := ptcSeed(st, epoch, slot)
|
seed, err := ptcSeed(st, epoch, slot)
|
||||||
@@ -152,17 +166,35 @@ func ptcSeed(st state.ReadOnlyBeaconState, epoch primitives.Epoch, slot primitiv
|
|||||||
}
|
}
|
||||||
|
|
||||||
// selectByBalance selects a balance-weighted subset of input candidates.
|
// selectByBalance selects a balance-weighted subset of input candidates.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// compute_balance_weighted_selection(state, indices, seed, size, shuffle_indices):
|
|
||||||
// Note: shuffle_indices is false for PTC.
|
|
||||||
//
|
//
|
||||||
// total = len(indices); selected = []; i = 0
|
// <spec fn="compute_balance_weighted_selection" fork="gloas" hash="2c9f1c23">
|
||||||
// while len(selected) < size:
|
// def compute_balance_weighted_selection(
|
||||||
// next = i % total
|
// state: BeaconState,
|
||||||
// if shuffle_indices: next = compute_shuffled_index(next, total, seed)
|
// indices: Sequence[ValidatorIndex],
|
||||||
// if compute_balance_weighted_acceptance(state, indices[next], seed, i):
|
// seed: Bytes32,
|
||||||
// selected.append(indices[next])
|
// size: uint64,
|
||||||
// i += 1
|
// shuffle_indices: bool,
|
||||||
|
// ) -> Sequence[ValidatorIndex]:
|
||||||
|
// """
|
||||||
|
// Return ``size`` indices sampled by effective balance, using ``indices``
|
||||||
|
// as candidates. If ``shuffle_indices`` is ``True``, candidate indices
|
||||||
|
// are themselves sampled from ``indices`` by shuffling it, otherwise
|
||||||
|
// ``indices`` is traversed in order.
|
||||||
|
// """
|
||||||
|
// total = uint64(len(indices))
|
||||||
|
// assert total > 0
|
||||||
|
// selected: List[ValidatorIndex] = []
|
||||||
|
// i = uint64(0)
|
||||||
|
// while len(selected) < size:
|
||||||
|
// next_index = i % total
|
||||||
|
// if shuffle_indices:
|
||||||
|
// next_index = compute_shuffled_index(next_index, total, seed)
|
||||||
|
// candidate_index = indices[next_index]
|
||||||
|
// if compute_balance_weighted_acceptance(state, candidate_index, seed, i):
|
||||||
|
// selected.append(candidate_index)
|
||||||
|
// i += 1
|
||||||
|
// return selected
|
||||||
|
// </spec>
|
||||||
func selectByBalanceFill(
|
func selectByBalanceFill(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
st state.ReadOnlyBeaconState,
|
st state.ReadOnlyBeaconState,
|
||||||
@@ -199,15 +231,22 @@ func selectByBalanceFill(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// acceptByBalance determines if a validator is accepted based on its effective balance.
|
// acceptByBalance determines if a validator is accepted based on its effective balance.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// compute_balance_weighted_acceptance(state, index, seed, i):
|
|
||||||
//
|
//
|
||||||
// MAX_RANDOM_VALUE = 2**16 - 1
|
// <spec fn="compute_balance_weighted_acceptance" fork="gloas" hash="9954dcd0">
|
||||||
// random_bytes = hash(seed + uint_to_bytes(i // 16))
|
// def compute_balance_weighted_acceptance(
|
||||||
// offset = i % 16 * 2
|
// state: BeaconState, index: ValidatorIndex, seed: Bytes32, i: uint64
|
||||||
// random_value = bytes_to_uint64(random_bytes[offset:offset+2])
|
// ) -> bool:
|
||||||
// effective_balance = state.validators[index].effective_balance
|
// """
|
||||||
// return effective_balance * MAX_RANDOM_VALUE >= MAX_EFFECTIVE_BALANCE_ELECTRA * random_value
|
// Return whether to accept the selection of the validator ``index``, with probability
|
||||||
|
// proportional to its ``effective_balance``, and randomness given by ``seed`` and ``i``.
|
||||||
|
// """
|
||||||
|
// MAX_RANDOM_VALUE = 2**16 - 1
|
||||||
|
// random_bytes = hash(seed + uint_to_bytes(i // 16))
|
||||||
|
// offset = i % 16 * 2
|
||||||
|
// random_value = bytes_to_uint64(random_bytes[offset : offset + 2])
|
||||||
|
// effective_balance = state.validators[index].effective_balance
|
||||||
|
// return effective_balance * MAX_RANDOM_VALUE >= MAX_EFFECTIVE_BALANCE_ELECTRA * random_value
|
||||||
|
// </spec>
|
||||||
func acceptByBalance(st state.ReadOnlyBeaconState, idx primitives.ValidatorIndex, seedBuf []byte, hashFunc func([]byte) [32]byte, maxBalance uint64, round uint64) (bool, error) {
|
func acceptByBalance(st state.ReadOnlyBeaconState, idx primitives.ValidatorIndex, seedBuf []byte, hashFunc func([]byte) [32]byte, maxBalance uint64, round uint64) (bool, error) {
|
||||||
// Reuse the seed buffer by overwriting the last 8 bytes with the round counter.
|
// Reuse the seed buffer by overwriting the last 8 bytes with the round counter.
|
||||||
binary.LittleEndian.PutUint64(seedBuf[len(seedBuf)-8:], round/16)
|
binary.LittleEndian.PutUint64(seedBuf[len(seedBuf)-8:], round/16)
|
||||||
@@ -224,16 +263,26 @@ func acceptByBalance(st state.ReadOnlyBeaconState, idx primitives.ValidatorIndex
|
|||||||
}
|
}
|
||||||
|
|
||||||
// validIndexedPayloadAttestation verifies the signature of an indexed payload attestation.
|
// validIndexedPayloadAttestation verifies the signature of an indexed payload attestation.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// is_valid_indexed_payload_attestation(state: BeaconState, indexed_payload_attestation: IndexedPayloadAttestation) -> bool:
|
|
||||||
//
|
//
|
||||||
// indices = indexed_payload_attestation.attesting_indices
|
// <spec fn="is_valid_indexed_payload_attestation" fork="gloas" hash="d76e0f89">
|
||||||
// return len(indices) > 0 and indices == sorted(indices) and
|
// def is_valid_indexed_payload_attestation(
|
||||||
// bls.FastAggregateVerify(
|
// state: BeaconState, attestation: IndexedPayloadAttestation
|
||||||
// [state.validators[i].pubkey for i in indices],
|
// ) -> bool:
|
||||||
// compute_signing_root(indexed_payload_attestation.data, get_domain(state, DOMAIN_PTC_ATTESTER, compute_epoch_at_slot(attestation.data.slot)),
|
// """
|
||||||
// indexed_payload_attestation.signature,
|
// Check if ``attestation`` is non-empty, has sorted indices, and has
|
||||||
// )
|
// a valid aggregate signature.
|
||||||
|
// """
|
||||||
|
// # Verify indices are non-empty and sorted
|
||||||
|
// indices = attestation.attesting_indices
|
||||||
|
// if len(indices) == 0 or not indices == sorted(indices):
|
||||||
|
// return False
|
||||||
|
//
|
||||||
|
// # Verify aggregate signature
|
||||||
|
// pubkeys = [state.validators[i].pubkey for i in indices]
|
||||||
|
// domain = get_domain(state, DOMAIN_PTC_ATTESTER, compute_epoch_at_slot(attestation.data.slot))
|
||||||
|
// signing_root = compute_signing_root(attestation.data, domain)
|
||||||
|
// return bls.FastAggregateVerify(pubkeys, signing_root, attestation.signature)
|
||||||
|
// </spec>
|
||||||
func validIndexedPayloadAttestation(st state.ReadOnlyBeaconState, att *consensus_types.IndexedPayloadAttestation) error {
|
func validIndexedPayloadAttestation(st state.ReadOnlyBeaconState, att *consensus_types.IndexedPayloadAttestation) error {
|
||||||
indices := att.AttestingIndices
|
indices := att.AttestingIndices
|
||||||
if len(indices) == 0 || !slices.IsSorted(indices) {
|
if len(indices) == 0 || !slices.IsSorted(indices) {
|
||||||
|
|||||||
@@ -10,17 +10,21 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ProcessBuilderPendingPayments processes the builder pending payments from the previous epoch.
|
// ProcessBuilderPendingPayments processes the builder pending payments from the previous epoch.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// def process_builder_pending_payments(state: BeaconState) -> None:
|
|
||||||
//
|
//
|
||||||
// quorum = get_builder_payment_quorum_threshold(state)
|
// <spec fn="process_builder_pending_payments" fork="gloas" hash="10da48dd">
|
||||||
// for payment in state.builder_pending_payments[:SLOTS_PER_EPOCH]:
|
// def process_builder_pending_payments(state: BeaconState) -> None:
|
||||||
// if payment.weight >= quorum:
|
// """
|
||||||
// state.builder_pending_withdrawals.append(payment.withdrawal)
|
// Processes the builder pending payments from the previous epoch.
|
||||||
|
// """
|
||||||
|
// quorum = get_builder_payment_quorum_threshold(state)
|
||||||
|
// for payment in state.builder_pending_payments[:SLOTS_PER_EPOCH]:
|
||||||
|
// if payment.weight >= quorum:
|
||||||
|
// state.builder_pending_withdrawals.append(payment.withdrawal)
|
||||||
//
|
//
|
||||||
// old_payments = state.builder_pending_payments[SLOTS_PER_EPOCH:]
|
// old_payments = state.builder_pending_payments[SLOTS_PER_EPOCH:]
|
||||||
// new_payments = [BuilderPendingPayment() for _ in range(SLOTS_PER_EPOCH)]
|
// new_payments = [BuilderPendingPayment() for _ in range(SLOTS_PER_EPOCH)]
|
||||||
// state.builder_pending_payments = old_payments + new_payments
|
// state.builder_pending_payments = old_payments + new_payments
|
||||||
|
// </spec>
|
||||||
func ProcessBuilderPendingPayments(state state.BeaconState) error {
|
func ProcessBuilderPendingPayments(state state.BeaconState) error {
|
||||||
quorum, err := builderQuorumThreshold(state)
|
quorum, err := builderQuorumThreshold(state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -53,12 +57,16 @@ func ProcessBuilderPendingPayments(state state.BeaconState) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// builderQuorumThreshold calculates the quorum threshold for builder payments.
|
// builderQuorumThreshold calculates the quorum threshold for builder payments.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// def get_builder_payment_quorum_threshold(state: BeaconState) -> uint64:
|
|
||||||
//
|
//
|
||||||
// per_slot_balance = get_total_active_balance(state) // SLOTS_PER_EPOCH
|
// <spec fn="get_builder_payment_quorum_threshold" fork="gloas" hash="a64b7ffb">
|
||||||
// quorum = per_slot_balance * BUILDER_PAYMENT_THRESHOLD_NUMERATOR
|
// def get_builder_payment_quorum_threshold(state: BeaconState) -> uint64:
|
||||||
// return uint64(quorum // BUILDER_PAYMENT_THRESHOLD_DENOMINATOR)
|
// """
|
||||||
|
// Calculate the quorum threshold for builder payments.
|
||||||
|
// """
|
||||||
|
// per_slot_balance = get_total_active_balance(state) // SLOTS_PER_EPOCH
|
||||||
|
// quorum = per_slot_balance * BUILDER_PAYMENT_THRESHOLD_NUMERATOR
|
||||||
|
// return uint64(quorum // BUILDER_PAYMENT_THRESHOLD_DENOMINATOR)
|
||||||
|
// </spec>
|
||||||
func builderQuorumThreshold(state state.ReadOnlyBeaconState) (primitives.Gwei, error) {
|
func builderQuorumThreshold(state state.ReadOnlyBeaconState) (primitives.Gwei, error) {
|
||||||
activeBalance, err := helpers.TotalActiveBalance(state)
|
activeBalance, err := helpers.TotalActiveBalance(state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -11,16 +11,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// RemoveBuilderPendingPayment removes the pending builder payment for the proposal slot.
|
// RemoveBuilderPendingPayment removes the pending builder payment for the proposal slot.
|
||||||
// Spec v1.7.0 (pseudocode):
|
|
||||||
//
|
//
|
||||||
|
// <spec fn="process_proposer_slashing" fork="gloas" lines="22-32" hash="4da721ef">
|
||||||
|
// # [New in Gloas:EIP7732]
|
||||||
|
// # Remove the BuilderPendingPayment corresponding to
|
||||||
|
// # this proposal if it is still in the 2-epoch window.
|
||||||
// slot = header_1.slot
|
// slot = header_1.slot
|
||||||
// proposal_epoch = compute_epoch_at_slot(slot)
|
// proposal_epoch = compute_epoch_at_slot(slot)
|
||||||
// if proposal_epoch == get_current_epoch(state):
|
// if proposal_epoch == get_current_epoch(state):
|
||||||
// payment_index = SLOTS_PER_EPOCH + slot % SLOTS_PER_EPOCH
|
// payment_index = SLOTS_PER_EPOCH + slot % SLOTS_PER_EPOCH
|
||||||
// state.builder_pending_payments[payment_index] = BuilderPendingPayment()
|
// state.builder_pending_payments[payment_index] = BuilderPendingPayment()
|
||||||
// elif proposal_epoch == get_previous_epoch(state):
|
// elif proposal_epoch == get_previous_epoch(state):
|
||||||
// payment_index = slot % SLOTS_PER_EPOCH
|
// payment_index = slot % SLOTS_PER_EPOCH
|
||||||
// state.builder_pending_payments[payment_index] = BuilderPendingPayment()
|
// state.builder_pending_payments[payment_index] = BuilderPendingPayment()
|
||||||
|
// </spec>
|
||||||
func RemoveBuilderPendingPayment(st state.BeaconState, header *eth.BeaconBlockHeader) error {
|
func RemoveBuilderPendingPayment(st state.BeaconState, header *eth.BeaconBlockHeader) error {
|
||||||
proposalEpoch := slots.ToEpoch(header.Slot)
|
proposalEpoch := slots.ToEpoch(header.Slot)
|
||||||
currentEpoch := time.CurrentEpoch(st)
|
currentEpoch := time.CurrentEpoch(st)
|
||||||
|
|||||||
@@ -143,10 +143,11 @@ func ProcessSlot(ctx context.Context, state state.BeaconState) (state.BeaconStat
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spec v1.6.1 (pseudocode):
|
// <spec fn="process_slot" fork="gloas" lines="11-13" hash="62b28839">
|
||||||
// # [New in Gloas:EIP7732]
|
// # [New in Gloas:EIP7732]
|
||||||
// # Unset the next payload availability
|
// # Unset the next payload availability
|
||||||
// state.execution_payload_availability[(state.slot + 1) % SLOTS_PER_HISTORICAL_ROOT] = 0b0
|
// state.execution_payload_availability[(state.slot + 1) % SLOTS_PER_HISTORICAL_ROOT] = 0b0
|
||||||
|
// </spec>
|
||||||
if state.Version() >= version.Gloas {
|
if state.Version() >= version.Gloas {
|
||||||
index := uint64((state.Slot() + 1) % params.BeaconConfig().SlotsPerHistoricalRoot)
|
index := uint64((state.Slot() + 1) % params.BeaconConfig().SlotsPerHistoricalRoot)
|
||||||
if err := state.UpdateExecutionPayloadAvailabilityAtIndex(index, 0x0); err != nil {
|
if err := state.UpdateExecutionPayloadAvailabilityAtIndex(index, 0x0); err != nil {
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ func newGloasState(t *testing.T, slot primitives.Slot, availability []byte) stat
|
|||||||
BlockHash: make([]byte, 32),
|
BlockHash: make([]byte, 32),
|
||||||
PrevRandao: make([]byte, 32),
|
PrevRandao: make([]byte, 32),
|
||||||
FeeRecipient: make([]byte, 20),
|
FeeRecipient: make([]byte, 20),
|
||||||
BlobKzgCommitmentsRoot: make([]byte, 32),
|
BlobKzgCommitments: [][]byte{make([]byte, 48)},
|
||||||
},
|
},
|
||||||
Eth1Data: ðpb.Eth1Data{
|
Eth1Data: ðpb.Eth1Data{
|
||||||
DepositRoot: make([]byte, 32),
|
DepositRoot: make([]byte, 32),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package kv
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"slices"
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
||||||
@@ -33,6 +34,9 @@ func (s *Store) LastArchivedRoot(ctx context.Context) [32]byte {
|
|||||||
if err := s.db.View(func(tx *bolt.Tx) error {
|
if err := s.db.View(func(tx *bolt.Tx) error {
|
||||||
bkt := tx.Bucket(stateSlotIndicesBucket)
|
bkt := tx.Bucket(stateSlotIndicesBucket)
|
||||||
_, blockRoot = bkt.Cursor().Last()
|
_, blockRoot = bkt.Cursor().Last()
|
||||||
|
if len(blockRoot) > 0 {
|
||||||
|
blockRoot = slices.Clone(blockRoot)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
|
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
|
||||||
panic(err) // lint:nopanic -- View never returns an error.
|
panic(err) // lint:nopanic -- View never returns an error.
|
||||||
@@ -51,6 +55,9 @@ func (s *Store) ArchivedPointRoot(ctx context.Context, slot primitives.Slot) [32
|
|||||||
if err := s.db.View(func(tx *bolt.Tx) error {
|
if err := s.db.View(func(tx *bolt.Tx) error {
|
||||||
bucket := tx.Bucket(stateSlotIndicesBucket)
|
bucket := tx.Bucket(stateSlotIndicesBucket)
|
||||||
blockRoot = bucket.Get(bytesutil.SlotToBytesBigEndian(slot))
|
blockRoot = bucket.Get(bytesutil.SlotToBytesBigEndian(slot))
|
||||||
|
if len(blockRoot) > 0 {
|
||||||
|
blockRoot = slices.Clone(blockRoot)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
|
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
|
||||||
panic(err) // lint:nopanic -- View never returns an error.
|
panic(err) // lint:nopanic -- View never returns an error.
|
||||||
|
|||||||
@@ -812,7 +812,10 @@ func (s *Store) FeeRecipientByValidatorID(ctx context.Context, id primitives.Val
|
|||||||
var addr []byte
|
var addr []byte
|
||||||
err := s.db.View(func(tx *bolt.Tx) error {
|
err := s.db.View(func(tx *bolt.Tx) error {
|
||||||
bkt := tx.Bucket(feeRecipientBucket)
|
bkt := tx.Bucket(feeRecipientBucket)
|
||||||
addr = bkt.Get(bytesutil.Uint64ToBytesBigEndian(uint64(id)))
|
stored := bkt.Get(bytesutil.Uint64ToBytesBigEndian(uint64(id)))
|
||||||
|
if len(stored) > 0 {
|
||||||
|
addr = slices.Clone(stored)
|
||||||
|
}
|
||||||
// IF the fee recipient is not found in the standard fee recipient bucket, then
|
// IF the fee recipient is not found in the standard fee recipient bucket, then
|
||||||
// check the registration bucket. The fee recipient may be there.
|
// check the registration bucket. The fee recipient may be there.
|
||||||
// This is to resolve imcompatility until we fully migrate to the registration bucket.
|
// This is to resolve imcompatility until we fully migrate to the registration bucket.
|
||||||
@@ -826,7 +829,7 @@ func (s *Store) FeeRecipientByValidatorID(ctx context.Context, id primitives.Val
|
|||||||
if err := decode(ctx, enc, reg); err != nil {
|
if err := decode(ctx, enc, reg); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
addr = reg.FeeRecipient
|
addr = slices.Clone(reg.FeeRecipient)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package kv
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"slices"
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
|
"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
@@ -17,7 +18,10 @@ func (s *Store) DepositContractAddress(ctx context.Context) ([]byte, error) {
|
|||||||
var addr []byte
|
var addr []byte
|
||||||
if err := s.db.View(func(tx *bolt.Tx) error {
|
if err := s.db.View(func(tx *bolt.Tx) error {
|
||||||
chainInfo := tx.Bucket(chainMetadataBucket)
|
chainInfo := tx.Bucket(chainMetadataBucket)
|
||||||
addr = chainInfo.Get(depositContractAddressKey)
|
stored := chainInfo.Get(depositContractAddressKey)
|
||||||
|
if len(stored) > 0 {
|
||||||
|
addr = slices.Clone(stored)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
|
}); err != nil { // This view never returns an error, but we'll handle anyway for sanity.
|
||||||
panic(err) // lint:nopanic -- View never returns an error.
|
panic(err) // lint:nopanic -- View never returns an error.
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ func performValidatorStateMigration(ctx context.Context, bar *progressbar.Progre
|
|||||||
func stateBucketKeys(stateBucket *bolt.Bucket) ([][]byte, error) {
|
func stateBucketKeys(stateBucket *bolt.Bucket) ([][]byte, error) {
|
||||||
var keys [][]byte
|
var keys [][]byte
|
||||||
if err := stateBucket.ForEach(func(pubKey, v []byte) error {
|
if err := stateBucket.ForEach(func(pubKey, v []byte) error {
|
||||||
keys = append(keys, pubKey)
|
keys = append(keys, bytes.Clone(pubKey))
|
||||||
return nil
|
return nil
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package kv
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"slices"
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/state"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/state"
|
||||||
"github.com/OffchainLabs/prysm/v7/cmd/beacon-chain/flags"
|
"github.com/OffchainLabs/prysm/v7/cmd/beacon-chain/flags"
|
||||||
@@ -187,20 +188,23 @@ func (s *Store) getDiff(lvl int, slot uint64) (hdiff.HdiffBytes, error) {
|
|||||||
return bolt.ErrBucketNotFound
|
return bolt.ErrBucketNotFound
|
||||||
}
|
}
|
||||||
buf := append(key, stateSuffix...)
|
buf := append(key, stateSuffix...)
|
||||||
stateDiff = bucket.Get(buf)
|
rawStateDiff := bucket.Get(buf)
|
||||||
if stateDiff == nil {
|
if len(rawStateDiff) == 0 {
|
||||||
return errors.New("state diff not found")
|
return errors.New("state diff not found")
|
||||||
}
|
}
|
||||||
|
stateDiff = slices.Clone(rawStateDiff)
|
||||||
buf = append(key, validatorSuffix...)
|
buf = append(key, validatorSuffix...)
|
||||||
validatorDiff = bucket.Get(buf)
|
rawValidatorDiff := bucket.Get(buf)
|
||||||
if validatorDiff == nil {
|
if len(rawValidatorDiff) == 0 {
|
||||||
return errors.New("validator diff not found")
|
return errors.New("validator diff not found")
|
||||||
}
|
}
|
||||||
|
validatorDiff = slices.Clone(rawValidatorDiff)
|
||||||
buf = append(key, balancesSuffix...)
|
buf = append(key, balancesSuffix...)
|
||||||
balancesDiff = bucket.Get(buf)
|
rawBalancesDiff := bucket.Get(buf)
|
||||||
if balancesDiff == nil {
|
if len(rawBalancesDiff) == 0 {
|
||||||
return errors.New("balances diff not found")
|
return errors.New("balances diff not found")
|
||||||
}
|
}
|
||||||
|
balancesDiff = slices.Clone(rawBalancesDiff)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -224,10 +228,11 @@ func (s *Store) getFullSnapshot(slot uint64) (state.BeaconState, error) {
|
|||||||
if bucket == nil {
|
if bucket == nil {
|
||||||
return bolt.ErrBucketNotFound
|
return bolt.ErrBucketNotFound
|
||||||
}
|
}
|
||||||
enc = bucket.Get(key)
|
rawEnc := bucket.Get(key)
|
||||||
if enc == nil {
|
if rawEnc == nil {
|
||||||
return errors.New("state not found")
|
return errors.New("state not found")
|
||||||
}
|
}
|
||||||
|
enc = slices.Clone(rawEnc)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package kv
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"slices"
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
||||||
"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
|
"github.com/OffchainLabs/prysm/v7/monitoring/tracing/trace"
|
||||||
@@ -47,7 +48,11 @@ func (s *Store) StateSummary(ctx context.Context, blockRoot [32]byte) (*ethpb.St
|
|||||||
}
|
}
|
||||||
var enc []byte
|
var enc []byte
|
||||||
if err := s.db.View(func(tx *bolt.Tx) error {
|
if err := s.db.View(func(tx *bolt.Tx) error {
|
||||||
enc = tx.Bucket(stateSummaryBucket).Get(blockRoot[:])
|
rawEnc := tx.Bucket(stateSummaryBucket).Get(blockRoot[:])
|
||||||
|
if len(rawEnc) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
enc = slices.Clone(rawEnc)
|
||||||
return nil
|
return nil
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ go_library(
|
|||||||
"doc.go",
|
"doc.go",
|
||||||
"errors.go",
|
"errors.go",
|
||||||
"forkchoice.go",
|
"forkchoice.go",
|
||||||
"last_root.go",
|
|
||||||
"log.go",
|
"log.go",
|
||||||
"metrics.go",
|
"metrics.go",
|
||||||
"node.go",
|
"node.go",
|
||||||
@@ -51,7 +50,6 @@ go_test(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"ffg_update_test.go",
|
"ffg_update_test.go",
|
||||||
"forkchoice_test.go",
|
"forkchoice_test.go",
|
||||||
"last_root_test.go",
|
|
||||||
"no_vote_test.go",
|
"no_vote_test.go",
|
||||||
"node_test.go",
|
"node_test.go",
|
||||||
"on_tick_test.go",
|
"on_tick_test.go",
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ func New() *ForkChoice {
|
|||||||
finalizedCheckpoint: &forkchoicetypes.Checkpoint{},
|
finalizedCheckpoint: &forkchoicetypes.Checkpoint{},
|
||||||
proposerBoostRoot: [32]byte{},
|
proposerBoostRoot: [32]byte{},
|
||||||
nodeByRoot: make(map[[fieldparams.RootLength]byte]*Node),
|
nodeByRoot: make(map[[fieldparams.RootLength]byte]*Node),
|
||||||
nodeByPayload: make(map[[fieldparams.RootLength]byte]*Node),
|
|
||||||
slashedIndices: make(map[primitives.ValidatorIndex]bool),
|
slashedIndices: make(map[primitives.ValidatorIndex]bool),
|
||||||
receivedBlocksLastEpoch: [fieldparams.SlotsPerEpoch]primitives.Slot{},
|
receivedBlocksLastEpoch: [fieldparams.SlotsPerEpoch]primitives.Slot{},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
package doublylinkedtree
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
|
||||||
"github.com/OffchainLabs/prysm/v7/time/slots"
|
|
||||||
)
|
|
||||||
|
|
||||||
// LastRoot returns the last canonical block root in the given epoch
|
|
||||||
func (f *ForkChoice) LastRoot(epoch primitives.Epoch) [32]byte {
|
|
||||||
head := f.store.headNode
|
|
||||||
headEpoch := slots.ToEpoch(head.slot)
|
|
||||||
epochEnd, err := slots.EpochEnd(epoch)
|
|
||||||
if err != nil {
|
|
||||||
return [32]byte{}
|
|
||||||
}
|
|
||||||
if headEpoch <= epoch {
|
|
||||||
return head.root
|
|
||||||
}
|
|
||||||
for head != nil && head.slot > epochEnd {
|
|
||||||
head = head.parent
|
|
||||||
}
|
|
||||||
if head == nil {
|
|
||||||
return [32]byte{}
|
|
||||||
}
|
|
||||||
return head.root
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package doublylinkedtree
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/config/params"
|
|
||||||
"github.com/OffchainLabs/prysm/v7/testing/require"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestLastRoot(t *testing.T) {
|
|
||||||
f := setup(0, 0)
|
|
||||||
ctx := t.Context()
|
|
||||||
|
|
||||||
st, root, err := prepareForkchoiceState(ctx, 1, [32]byte{'1'}, params.BeaconConfig().ZeroHash, [32]byte{'1'}, 0, 0)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, f.InsertNode(ctx, st, root))
|
|
||||||
st, root, err = prepareForkchoiceState(ctx, 2, [32]byte{'2'}, [32]byte{'1'}, [32]byte{'2'}, 0, 0)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, f.InsertNode(ctx, st, root))
|
|
||||||
st, root, err = prepareForkchoiceState(ctx, 3, [32]byte{'3'}, [32]byte{'1'}, [32]byte{'3'}, 0, 0)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, f.InsertNode(ctx, st, root))
|
|
||||||
st, root, err = prepareForkchoiceState(ctx, 32, [32]byte{'4'}, [32]byte{'3'}, [32]byte{'4'}, 0, 0)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, f.InsertNode(ctx, st, root))
|
|
||||||
st, root, err = prepareForkchoiceState(ctx, 33, [32]byte{'5'}, [32]byte{'2'}, [32]byte{'5'}, 0, 0)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, f.InsertNode(ctx, st, root))
|
|
||||||
st, root, err = prepareForkchoiceState(ctx, 34, [32]byte{'6'}, [32]byte{'5'}, [32]byte{'6'}, 0, 0)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, f.InsertNode(ctx, st, root))
|
|
||||||
headNode := f.store.nodeByRoot[[32]byte{'6'}]
|
|
||||||
f.store.headNode = headNode
|
|
||||||
require.Equal(t, [32]byte{'6'}, f.store.headNode.root)
|
|
||||||
require.Equal(t, [32]byte{'2'}, f.LastRoot(0))
|
|
||||||
require.Equal(t, [32]byte{'6'}, f.LastRoot(1))
|
|
||||||
require.Equal(t, [32]byte{'6'}, f.LastRoot(2))
|
|
||||||
}
|
|
||||||
@@ -94,6 +94,5 @@ func (s *Store) removeNodeAndChildren(ctx context.Context, node *Node, invalidRo
|
|||||||
s.previousProposerBoostScore = 0
|
s.previousProposerBoostScore = 0
|
||||||
}
|
}
|
||||||
delete(s.nodeByRoot, node.root)
|
delete(s.nodeByRoot, node.root)
|
||||||
delete(s.nodeByPayload, node.payloadHash)
|
|
||||||
return invalidRoots, nil
|
return invalidRoots, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ func (s *Store) insert(ctx context.Context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.nodeByPayload[payloadHash] = n
|
|
||||||
s.nodeByRoot[root] = n
|
s.nodeByRoot[root] = n
|
||||||
if parent == nil {
|
if parent == nil {
|
||||||
if s.treeRootNode == nil {
|
if s.treeRootNode == nil {
|
||||||
@@ -122,7 +121,6 @@ func (s *Store) insert(ctx context.Context,
|
|||||||
s.highestReceivedNode = n
|
s.highestReceivedNode = n
|
||||||
} else {
|
} else {
|
||||||
delete(s.nodeByRoot, root)
|
delete(s.nodeByRoot, root)
|
||||||
delete(s.nodeByPayload, payloadHash)
|
|
||||||
return nil, errInvalidParentRoot
|
return nil, errInvalidParentRoot
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -191,7 +189,6 @@ func (s *Store) pruneFinalizedNodeByRootMap(ctx context.Context, node, finalized
|
|||||||
|
|
||||||
node.children = nil
|
node.children = nil
|
||||||
delete(s.nodeByRoot, node.root)
|
delete(s.nodeByRoot, node.root)
|
||||||
delete(s.nodeByPayload, node.payloadHash)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,21 +270,6 @@ func (f *ForkChoice) HighestReceivedBlockSlot() primitives.Slot {
|
|||||||
return f.store.highestReceivedNode.slot
|
return f.store.highestReceivedNode.slot
|
||||||
}
|
}
|
||||||
|
|
||||||
// HighestReceivedBlockDelay returns the number of slots that the highest
|
|
||||||
// received block was late when receiving it. For example, a block was late by 12 slots,
|
|
||||||
// then this method is expected to return 12.
|
|
||||||
func (f *ForkChoice) HighestReceivedBlockDelay() primitives.Slot {
|
|
||||||
n := f.store.highestReceivedNode
|
|
||||||
if n == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
sss, err := slots.SinceSlotStart(n.slot, f.store.genesisTime, n.timestamp)
|
|
||||||
if err != nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return primitives.Slot(uint64(sss/time.Second) / params.BeaconConfig().SecondsPerSlot)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReceivedBlocksLastEpoch returns the number of blocks received in the last epoch
|
// ReceivedBlocksLastEpoch returns the number of blocks received in the last epoch
|
||||||
func (f *ForkChoice) ReceivedBlocksLastEpoch() (uint64, error) {
|
func (f *ForkChoice) ReceivedBlocksLastEpoch() (uint64, error) {
|
||||||
count := uint64(0)
|
count := uint64(0)
|
||||||
|
|||||||
@@ -128,10 +128,9 @@ func TestStore_Insert(t *testing.T) {
|
|||||||
// The new node does not have a parent.
|
// The new node does not have a parent.
|
||||||
treeRootNode := &Node{slot: 0, root: indexToHash(0)}
|
treeRootNode := &Node{slot: 0, root: indexToHash(0)}
|
||||||
nodeByRoot := map[[32]byte]*Node{indexToHash(0): treeRootNode}
|
nodeByRoot := map[[32]byte]*Node{indexToHash(0): treeRootNode}
|
||||||
nodeByPayload := map[[32]byte]*Node{indexToHash(0): treeRootNode}
|
|
||||||
jc := &forkchoicetypes.Checkpoint{Epoch: 0}
|
jc := &forkchoicetypes.Checkpoint{Epoch: 0}
|
||||||
fc := &forkchoicetypes.Checkpoint{Epoch: 0}
|
fc := &forkchoicetypes.Checkpoint{Epoch: 0}
|
||||||
s := &Store{nodeByRoot: nodeByRoot, treeRootNode: treeRootNode, nodeByPayload: nodeByPayload, justifiedCheckpoint: jc, finalizedCheckpoint: fc, highestReceivedNode: &Node{}}
|
s := &Store{nodeByRoot: nodeByRoot, treeRootNode: treeRootNode, justifiedCheckpoint: jc, finalizedCheckpoint: fc, highestReceivedNode: &Node{}}
|
||||||
payloadHash := [32]byte{'a'}
|
payloadHash := [32]byte{'a'}
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
_, blk, err := prepareForkchoiceState(ctx, 100, indexToHash(100), indexToHash(0), payloadHash, 1, 1)
|
_, blk, err := prepareForkchoiceState(ctx, 100, indexToHash(100), indexToHash(0), payloadHash, 1, 1)
|
||||||
@@ -238,7 +237,6 @@ func TestStore_Prune_NoDanglingBranch(t *testing.T) {
|
|||||||
s.finalizedCheckpoint.Root = indexToHash(1)
|
s.finalizedCheckpoint.Root = indexToHash(1)
|
||||||
require.NoError(t, s.prune(t.Context()))
|
require.NoError(t, s.prune(t.Context()))
|
||||||
require.Equal(t, len(s.nodeByRoot), 1)
|
require.Equal(t, len(s.nodeByRoot), 1)
|
||||||
require.Equal(t, len(s.nodeByPayload), 1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This test starts with the following branching diagram
|
// This test starts with the following branching diagram
|
||||||
@@ -319,8 +317,6 @@ func TestStore_PruneMapsNodes(t *testing.T) {
|
|||||||
s.finalizedCheckpoint.Root = indexToHash(1)
|
s.finalizedCheckpoint.Root = indexToHash(1)
|
||||||
require.NoError(t, s.prune(t.Context()))
|
require.NoError(t, s.prune(t.Context()))
|
||||||
require.Equal(t, len(s.nodeByRoot), 1)
|
require.Equal(t, len(s.nodeByRoot), 1)
|
||||||
require.Equal(t, len(s.nodeByPayload), 1)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestForkChoice_ReceivedBlocksLastEpoch(t *testing.T) {
|
func TestForkChoice_ReceivedBlocksLastEpoch(t *testing.T) {
|
||||||
@@ -339,7 +335,6 @@ func TestForkChoice_ReceivedBlocksLastEpoch(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, uint64(1), count)
|
require.Equal(t, uint64(1), count)
|
||||||
require.Equal(t, primitives.Slot(1), f.HighestReceivedBlockSlot())
|
require.Equal(t, primitives.Slot(1), f.HighestReceivedBlockSlot())
|
||||||
require.Equal(t, primitives.Slot(0), f.HighestReceivedBlockDelay())
|
|
||||||
|
|
||||||
// 64
|
// 64
|
||||||
// Received block last epoch is 1
|
// Received block last epoch is 1
|
||||||
@@ -352,7 +347,6 @@ func TestForkChoice_ReceivedBlocksLastEpoch(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, uint64(1), count)
|
require.Equal(t, uint64(1), count)
|
||||||
require.Equal(t, primitives.Slot(64), f.HighestReceivedBlockSlot())
|
require.Equal(t, primitives.Slot(64), f.HighestReceivedBlockSlot())
|
||||||
require.Equal(t, primitives.Slot(0), f.HighestReceivedBlockDelay())
|
|
||||||
|
|
||||||
// 64 65
|
// 64 65
|
||||||
// Received block last epoch is 2
|
// Received block last epoch is 2
|
||||||
@@ -365,7 +359,6 @@ func TestForkChoice_ReceivedBlocksLastEpoch(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, uint64(2), count)
|
require.Equal(t, uint64(2), count)
|
||||||
require.Equal(t, primitives.Slot(65), f.HighestReceivedBlockSlot())
|
require.Equal(t, primitives.Slot(65), f.HighestReceivedBlockSlot())
|
||||||
require.Equal(t, primitives.Slot(1), f.HighestReceivedBlockDelay())
|
|
||||||
|
|
||||||
// 64 65 66
|
// 64 65 66
|
||||||
// Received block last epoch is 3
|
// Received block last epoch is 3
|
||||||
@@ -717,17 +710,3 @@ func TestStore_CleanupInserting(t *testing.T) {
|
|||||||
require.NotNil(t, f.InsertNode(ctx, st, blk))
|
require.NotNil(t, f.InsertNode(ctx, st, blk))
|
||||||
require.Equal(t, false, f.HasNode(blk.Root()))
|
require.Equal(t, false, f.HasNode(blk.Root()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStore_HighestReceivedBlockDelay(t *testing.T) {
|
|
||||||
f := ForkChoice{
|
|
||||||
store: &Store{
|
|
||||||
genesisTime: time.Unix(0, 0),
|
|
||||||
highestReceivedNode: &Node{
|
|
||||||
slot: 10,
|
|
||||||
timestamp: time.Unix(int64(((10 + 12) * params.BeaconConfig().SecondsPerSlot)), 0), // 12 slots late
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
require.Equal(t, primitives.Slot(12), f.HighestReceivedBlockDelay())
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ type Store struct {
|
|||||||
treeRootNode *Node // the root node of the store tree.
|
treeRootNode *Node // the root node of the store tree.
|
||||||
headNode *Node // last head Node
|
headNode *Node // last head Node
|
||||||
nodeByRoot map[[fieldparams.RootLength]byte]*Node // nodes indexed by roots.
|
nodeByRoot map[[fieldparams.RootLength]byte]*Node // nodes indexed by roots.
|
||||||
nodeByPayload map[[fieldparams.RootLength]byte]*Node // nodes indexed by payload Hash
|
|
||||||
slashedIndices map[primitives.ValidatorIndex]bool // the list of equivocating validator indices
|
slashedIndices map[primitives.ValidatorIndex]bool // the list of equivocating validator indices
|
||||||
originRoot [fieldparams.RootLength]byte // The genesis block root
|
originRoot [fieldparams.RootLength]byte // The genesis block root
|
||||||
genesisTime time.Time
|
genesisTime time.Time
|
||||||
|
|||||||
@@ -67,13 +67,11 @@ type FastGetter interface {
|
|||||||
HasNode([32]byte) bool
|
HasNode([32]byte) bool
|
||||||
HighestReceivedBlockSlot() primitives.Slot
|
HighestReceivedBlockSlot() primitives.Slot
|
||||||
HighestReceivedBlockRoot() [32]byte
|
HighestReceivedBlockRoot() [32]byte
|
||||||
HighestReceivedBlockDelay() primitives.Slot
|
|
||||||
IsCanonical(root [32]byte) bool
|
IsCanonical(root [32]byte) bool
|
||||||
IsOptimistic(root [32]byte) (bool, error)
|
IsOptimistic(root [32]byte) (bool, error)
|
||||||
IsViableForCheckpoint(*forkchoicetypes.Checkpoint) (bool, error)
|
IsViableForCheckpoint(*forkchoicetypes.Checkpoint) (bool, error)
|
||||||
JustifiedCheckpoint() *forkchoicetypes.Checkpoint
|
JustifiedCheckpoint() *forkchoicetypes.Checkpoint
|
||||||
JustifiedPayloadBlockHash() [32]byte
|
JustifiedPayloadBlockHash() [32]byte
|
||||||
LastRoot(primitives.Epoch) [32]byte
|
|
||||||
NodeCount() int
|
NodeCount() int
|
||||||
PreviousJustifiedCheckpoint() *forkchoicetypes.Checkpoint
|
PreviousJustifiedCheckpoint() *forkchoicetypes.Checkpoint
|
||||||
ProposerBoost() [fieldparams.RootLength]byte
|
ProposerBoost() [fieldparams.RootLength]byte
|
||||||
|
|||||||
@@ -121,13 +121,6 @@ func (ro *ROForkChoice) HighestReceivedBlockRoot() [32]byte {
|
|||||||
return ro.getter.HighestReceivedBlockRoot()
|
return ro.getter.HighestReceivedBlockRoot()
|
||||||
}
|
}
|
||||||
|
|
||||||
// HighestReceivedBlockDelay delegates to the underlying forkchoice call, under a lock.
|
|
||||||
func (ro *ROForkChoice) HighestReceivedBlockDelay() primitives.Slot {
|
|
||||||
ro.l.RLock()
|
|
||||||
defer ro.l.RUnlock()
|
|
||||||
return ro.getter.HighestReceivedBlockDelay()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReceivedBlocksLastEpoch delegates to the underlying forkchoice call, under a lock.
|
// ReceivedBlocksLastEpoch delegates to the underlying forkchoice call, under a lock.
|
||||||
func (ro *ROForkChoice) ReceivedBlocksLastEpoch() (uint64, error) {
|
func (ro *ROForkChoice) ReceivedBlocksLastEpoch() (uint64, error) {
|
||||||
ro.l.RLock()
|
ro.l.RLock()
|
||||||
@@ -163,13 +156,6 @@ func (ro *ROForkChoice) Slot(root [32]byte) (primitives.Slot, error) {
|
|||||||
return ro.getter.Slot(root)
|
return ro.getter.Slot(root)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LastRoot delegates to the underlying forkchoice call, under a lock.
|
|
||||||
func (ro *ROForkChoice) LastRoot(e primitives.Epoch) [32]byte {
|
|
||||||
ro.l.RLock()
|
|
||||||
defer ro.l.RUnlock()
|
|
||||||
return ro.getter.LastRoot(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DependentRoot delegates to the underlying forkchoice call, under a lock.
|
// DependentRoot delegates to the underlying forkchoice call, under a lock.
|
||||||
func (ro *ROForkChoice) DependentRoot(epoch primitives.Epoch) ([32]byte, error) {
|
func (ro *ROForkChoice) DependentRoot(epoch primitives.Epoch) ([32]byte, error) {
|
||||||
ro.l.RLock()
|
ro.l.RLock()
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ const (
|
|||||||
nodeCountCalled
|
nodeCountCalled
|
||||||
highestReceivedBlockSlotCalled
|
highestReceivedBlockSlotCalled
|
||||||
highestReceivedBlockRootCalled
|
highestReceivedBlockRootCalled
|
||||||
highestReceivedBlockDelayCalled
|
|
||||||
receivedBlocksLastEpochCalled
|
receivedBlocksLastEpochCalled
|
||||||
weightCalled
|
weightCalled
|
||||||
isOptimisticCalled
|
isOptimisticCalled
|
||||||
@@ -118,11 +117,6 @@ func TestROLocking(t *testing.T) {
|
|||||||
call: highestReceivedBlockSlotCalled,
|
call: highestReceivedBlockSlotCalled,
|
||||||
cb: func(g FastGetter) { g.HighestReceivedBlockSlot() },
|
cb: func(g FastGetter) { g.HighestReceivedBlockSlot() },
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "highestReceivedBlockDelayCalled",
|
|
||||||
call: highestReceivedBlockDelayCalled,
|
|
||||||
cb: func(g FastGetter) { g.HighestReceivedBlockDelay() },
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "receivedBlocksLastEpochCalled",
|
name: "receivedBlocksLastEpochCalled",
|
||||||
call: receivedBlocksLastEpochCalled,
|
call: receivedBlocksLastEpochCalled,
|
||||||
@@ -148,11 +142,6 @@ func TestROLocking(t *testing.T) {
|
|||||||
call: slotCalled,
|
call: slotCalled,
|
||||||
cb: func(g FastGetter) { _, err := g.Slot([32]byte{}); _discard(t, err) },
|
cb: func(g FastGetter) { _, err := g.Slot([32]byte{}); _discard(t, err) },
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "lastRootCalled",
|
|
||||||
call: lastRootCalled,
|
|
||||||
cb: func(g FastGetter) { g.LastRoot(0) },
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "targetRootForEpochCalled",
|
name: "targetRootForEpochCalled",
|
||||||
call: targetRootForEpochCalled,
|
call: targetRootForEpochCalled,
|
||||||
@@ -265,11 +254,6 @@ func (ro *mockROForkchoice) HighestReceivedBlockRoot() [32]byte {
|
|||||||
return [32]byte{}
|
return [32]byte{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ro *mockROForkchoice) HighestReceivedBlockDelay() primitives.Slot {
|
|
||||||
ro.calls = append(ro.calls, highestReceivedBlockDelayCalled)
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ro *mockROForkchoice) ReceivedBlocksLastEpoch() (uint64, error) {
|
func (ro *mockROForkchoice) ReceivedBlocksLastEpoch() (uint64, error) {
|
||||||
ro.calls = append(ro.calls, receivedBlocksLastEpochCalled)
|
ro.calls = append(ro.calls, receivedBlocksLastEpochCalled)
|
||||||
return 0, nil
|
return 0, nil
|
||||||
@@ -295,11 +279,6 @@ func (ro *mockROForkchoice) Slot(_ [32]byte) (primitives.Slot, error) {
|
|||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ro *mockROForkchoice) LastRoot(_ primitives.Epoch) [32]byte {
|
|
||||||
ro.calls = append(ro.calls, lastRootCalled)
|
|
||||||
return [32]byte{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DependentRoot impoements FastGetter.
|
// DependentRoot impoements FastGetter.
|
||||||
func (ro *mockROForkchoice) DependentRoot(_ primitives.Epoch) ([32]byte, error) {
|
func (ro *mockROForkchoice) DependentRoot(_ primitives.Epoch) ([32]byte, error) {
|
||||||
ro.calls = append(ro.calls, dependentRootCalled)
|
ro.calls = append(ro.calls, dependentRootCalled)
|
||||||
|
|||||||
@@ -46,14 +46,20 @@ func (b *BeaconState) BuilderPubkey(builderIndex primitives.BuilderIndex) ([fiel
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsActiveBuilder returns true if the builder placement is finalized and it has not initiated exit.
|
// IsActiveBuilder returns true if the builder placement is finalized and it has not initiated exit.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// def is_active_builder(state: BeaconState, builder_index: BuilderIndex) -> bool:
|
|
||||||
//
|
//
|
||||||
// builder = state.builders[builder_index]
|
// <spec fn="is_active_builder" fork="gloas" hash="1a599fb2">
|
||||||
// return (
|
// def is_active_builder(state: BeaconState, builder_index: BuilderIndex) -> bool:
|
||||||
// builder.deposit_epoch < state.finalized_checkpoint.epoch
|
// """
|
||||||
// and builder.withdrawable_epoch == FAR_FUTURE_EPOCH
|
// Check if the builder at ``builder_index`` is active for the given ``state``.
|
||||||
// )
|
// """
|
||||||
|
// builder = state.builders[builder_index]
|
||||||
|
// return (
|
||||||
|
// # Placement in builder list is finalized
|
||||||
|
// builder.deposit_epoch < state.finalized_checkpoint.epoch
|
||||||
|
// # Has not initiated exit
|
||||||
|
// and builder.withdrawable_epoch == FAR_FUTURE_EPOCH
|
||||||
|
// )
|
||||||
|
// </spec>
|
||||||
func (b *BeaconState) IsActiveBuilder(builderIndex primitives.BuilderIndex) (bool, error) {
|
func (b *BeaconState) IsActiveBuilder(builderIndex primitives.BuilderIndex) (bool, error) {
|
||||||
if b.version < version.Gloas {
|
if b.version < version.Gloas {
|
||||||
return false, errNotSupported("IsActiveBuilder", b.version)
|
return false, errNotSupported("IsActiveBuilder", b.version)
|
||||||
@@ -72,15 +78,18 @@ func (b *BeaconState) IsActiveBuilder(builderIndex primitives.BuilderIndex) (boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CanBuilderCoverBid returns true if the builder has enough balance to cover the given bid amount.
|
// CanBuilderCoverBid returns true if the builder has enough balance to cover the given bid amount.
|
||||||
// Spec v1.7.0-alpha.0 (pseudocode):
|
|
||||||
// def can_builder_cover_bid(state: BeaconState, builder_index: BuilderIndex, bid_amount: Gwei) -> bool:
|
|
||||||
//
|
//
|
||||||
// builder_balance = state.builders[builder_index].balance
|
// <spec fn="can_builder_cover_bid" fork="gloas" hash="9e3f2d7c">
|
||||||
// pending_withdrawals_amount = get_pending_balance_to_withdraw_for_builder(state, builder_index)
|
// def can_builder_cover_bid(
|
||||||
// min_balance = MIN_DEPOSIT_AMOUNT + pending_withdrawals_amount
|
// state: BeaconState, builder_index: BuilderIndex, bid_amount: Gwei
|
||||||
// if builder_balance < min_balance:
|
// ) -> bool:
|
||||||
// return False
|
// builder_balance = state.builders[builder_index].balance
|
||||||
// return builder_balance - min_balance >= bid_amount
|
// pending_withdrawals_amount = get_pending_balance_to_withdraw_for_builder(state, builder_index)
|
||||||
|
// min_balance = MIN_DEPOSIT_AMOUNT + pending_withdrawals_amount
|
||||||
|
// if builder_balance < min_balance:
|
||||||
|
// return False
|
||||||
|
// return builder_balance - min_balance >= bid_amount
|
||||||
|
// </spec>
|
||||||
func (b *BeaconState) CanBuilderCoverBid(builderIndex primitives.BuilderIndex, bidAmount primitives.Gwei) (bool, error) {
|
func (b *BeaconState) CanBuilderCoverBid(builderIndex primitives.BuilderIndex, bidAmount primitives.Gwei) (bool, error) {
|
||||||
if b.version < version.Gloas {
|
if b.version < version.Gloas {
|
||||||
return false, errNotSupported("CanBuilderCoverBid", b.version)
|
return false, errNotSupported("CanBuilderCoverBid", b.version)
|
||||||
|
|||||||
@@ -82,20 +82,20 @@ func (b *BeaconState) SetExecutionPayloadBid(h interfaces.ROExecutionPayloadBid)
|
|||||||
parentBlockRoot := h.ParentBlockRoot()
|
parentBlockRoot := h.ParentBlockRoot()
|
||||||
blockHash := h.BlockHash()
|
blockHash := h.BlockHash()
|
||||||
randao := h.PrevRandao()
|
randao := h.PrevRandao()
|
||||||
blobKzgCommitmentsRoot := h.BlobKzgCommitmentsRoot()
|
blobKzgCommitments := h.BlobKzgCommitments()
|
||||||
feeRecipient := h.FeeRecipient()
|
feeRecipient := h.FeeRecipient()
|
||||||
b.latestExecutionPayloadBid = ðpb.ExecutionPayloadBid{
|
b.latestExecutionPayloadBid = ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: parentBlockHash[:],
|
ParentBlockHash: parentBlockHash[:],
|
||||||
ParentBlockRoot: parentBlockRoot[:],
|
ParentBlockRoot: parentBlockRoot[:],
|
||||||
BlockHash: blockHash[:],
|
BlockHash: blockHash[:],
|
||||||
PrevRandao: randao[:],
|
PrevRandao: randao[:],
|
||||||
GasLimit: h.GasLimit(),
|
GasLimit: h.GasLimit(),
|
||||||
BuilderIndex: h.BuilderIndex(),
|
BuilderIndex: h.BuilderIndex(),
|
||||||
Slot: h.Slot(),
|
Slot: h.Slot(),
|
||||||
Value: h.Value(),
|
Value: h.Value(),
|
||||||
ExecutionPayment: h.ExecutionPayment(),
|
ExecutionPayment: h.ExecutionPayment(),
|
||||||
BlobKzgCommitmentsRoot: blobKzgCommitmentsRoot[:],
|
BlobKzgCommitments: blobKzgCommitments,
|
||||||
FeeRecipient: feeRecipient[:],
|
FeeRecipient: feeRecipient[:],
|
||||||
}
|
}
|
||||||
b.markFieldAsDirty(types.LatestExecutionPayloadBid)
|
b.markFieldAsDirty(types.LatestExecutionPayloadBid)
|
||||||
|
|
||||||
|
|||||||
@@ -14,17 +14,17 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type testExecutionPayloadBid struct {
|
type testExecutionPayloadBid struct {
|
||||||
parentBlockHash [32]byte
|
parentBlockHash [32]byte
|
||||||
parentBlockRoot [32]byte
|
parentBlockRoot [32]byte
|
||||||
blockHash [32]byte
|
blockHash [32]byte
|
||||||
prevRandao [32]byte
|
prevRandao [32]byte
|
||||||
blobKzgCommitmentsRoot [32]byte
|
blobKzgCommitments [][]byte
|
||||||
feeRecipient [20]byte
|
feeRecipient [20]byte
|
||||||
gasLimit uint64
|
gasLimit uint64
|
||||||
builderIndex primitives.BuilderIndex
|
builderIndex primitives.BuilderIndex
|
||||||
slot primitives.Slot
|
slot primitives.Slot
|
||||||
value primitives.Gwei
|
value primitives.Gwei
|
||||||
executionPayment primitives.Gwei
|
executionPayment primitives.Gwei
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t testExecutionPayloadBid) ParentBlockHash() [32]byte { return t.parentBlockHash }
|
func (t testExecutionPayloadBid) ParentBlockHash() [32]byte { return t.parentBlockHash }
|
||||||
@@ -40,9 +40,12 @@ func (t testExecutionPayloadBid) Value() primitives.Gwei { return t.value }
|
|||||||
func (t testExecutionPayloadBid) ExecutionPayment() primitives.Gwei {
|
func (t testExecutionPayloadBid) ExecutionPayment() primitives.Gwei {
|
||||||
return t.executionPayment
|
return t.executionPayment
|
||||||
}
|
}
|
||||||
func (t testExecutionPayloadBid) BlobKzgCommitmentsRoot() [32]byte { return t.blobKzgCommitmentsRoot }
|
func (t testExecutionPayloadBid) BlobKzgCommitments() [][]byte { return t.blobKzgCommitments }
|
||||||
func (t testExecutionPayloadBid) FeeRecipient() [20]byte { return t.feeRecipient }
|
func (t testExecutionPayloadBid) BlobKzgCommitmentCount() uint64 {
|
||||||
func (t testExecutionPayloadBid) IsNil() bool { return false }
|
return uint64(len(t.blobKzgCommitments))
|
||||||
|
}
|
||||||
|
func (t testExecutionPayloadBid) FeeRecipient() [20]byte { return t.feeRecipient }
|
||||||
|
func (t testExecutionPayloadBid) IsNil() bool { return false }
|
||||||
|
|
||||||
func TestSetExecutionPayloadBid(t *testing.T) {
|
func TestSetExecutionPayloadBid(t *testing.T) {
|
||||||
t.Run("previous fork returns expected error", func(t *testing.T) {
|
t.Run("previous fork returns expected error", func(t *testing.T) {
|
||||||
@@ -57,7 +60,7 @@ func TestSetExecutionPayloadBid(t *testing.T) {
|
|||||||
parentBlockRoot = [32]byte(bytes.Repeat([]byte{0xCD}, 32))
|
parentBlockRoot = [32]byte(bytes.Repeat([]byte{0xCD}, 32))
|
||||||
blockHash = [32]byte(bytes.Repeat([]byte{0xEF}, 32))
|
blockHash = [32]byte(bytes.Repeat([]byte{0xEF}, 32))
|
||||||
prevRandao = [32]byte(bytes.Repeat([]byte{0x11}, 32))
|
prevRandao = [32]byte(bytes.Repeat([]byte{0x11}, 32))
|
||||||
blobRoot = [32]byte(bytes.Repeat([]byte{0x22}, 32))
|
blobCommitments = [][]byte{bytes.Repeat([]byte{0x22}, 48)}
|
||||||
feeRecipient [20]byte
|
feeRecipient [20]byte
|
||||||
)
|
)
|
||||||
copy(feeRecipient[:], bytes.Repeat([]byte{0x33}, len(feeRecipient)))
|
copy(feeRecipient[:], bytes.Repeat([]byte{0x33}, len(feeRecipient)))
|
||||||
@@ -66,17 +69,17 @@ func TestSetExecutionPayloadBid(t *testing.T) {
|
|||||||
dirtyFields: make(map[types.FieldIndex]bool),
|
dirtyFields: make(map[types.FieldIndex]bool),
|
||||||
}
|
}
|
||||||
bid := testExecutionPayloadBid{
|
bid := testExecutionPayloadBid{
|
||||||
parentBlockHash: parentBlockHash,
|
parentBlockHash: parentBlockHash,
|
||||||
parentBlockRoot: parentBlockRoot,
|
parentBlockRoot: parentBlockRoot,
|
||||||
blockHash: blockHash,
|
blockHash: blockHash,
|
||||||
prevRandao: prevRandao,
|
prevRandao: prevRandao,
|
||||||
blobKzgCommitmentsRoot: blobRoot,
|
blobKzgCommitments: blobCommitments,
|
||||||
feeRecipient: feeRecipient,
|
feeRecipient: feeRecipient,
|
||||||
gasLimit: 123,
|
gasLimit: 123,
|
||||||
builderIndex: 7,
|
builderIndex: 7,
|
||||||
slot: 9,
|
slot: 9,
|
||||||
value: 11,
|
value: 11,
|
||||||
executionPayment: 22,
|
executionPayment: 22,
|
||||||
}
|
}
|
||||||
|
|
||||||
require.NoError(t, st.SetExecutionPayloadBid(bid))
|
require.NoError(t, st.SetExecutionPayloadBid(bid))
|
||||||
@@ -86,7 +89,7 @@ func TestSetExecutionPayloadBid(t *testing.T) {
|
|||||||
require.DeepEqual(t, parentBlockRoot[:], st.latestExecutionPayloadBid.ParentBlockRoot)
|
require.DeepEqual(t, parentBlockRoot[:], st.latestExecutionPayloadBid.ParentBlockRoot)
|
||||||
require.DeepEqual(t, blockHash[:], st.latestExecutionPayloadBid.BlockHash)
|
require.DeepEqual(t, blockHash[:], st.latestExecutionPayloadBid.BlockHash)
|
||||||
require.DeepEqual(t, prevRandao[:], st.latestExecutionPayloadBid.PrevRandao)
|
require.DeepEqual(t, prevRandao[:], st.latestExecutionPayloadBid.PrevRandao)
|
||||||
require.DeepEqual(t, blobRoot[:], st.latestExecutionPayloadBid.BlobKzgCommitmentsRoot)
|
require.DeepEqual(t, blobCommitments, st.latestExecutionPayloadBid.BlobKzgCommitments)
|
||||||
require.DeepEqual(t, feeRecipient[:], st.latestExecutionPayloadBid.FeeRecipient)
|
require.DeepEqual(t, feeRecipient[:], st.latestExecutionPayloadBid.FeeRecipient)
|
||||||
require.Equal(t, uint64(123), st.latestExecutionPayloadBid.GasLimit)
|
require.Equal(t, uint64(123), st.latestExecutionPayloadBid.GasLimit)
|
||||||
require.Equal(t, primitives.BuilderIndex(7), st.latestExecutionPayloadBid.BuilderIndex)
|
require.Equal(t, primitives.BuilderIndex(7), st.latestExecutionPayloadBid.BuilderIndex)
|
||||||
|
|||||||
3
changelog/bastin_fix-genlogs-gitignore-bug.md
Normal file
3
changelog/bastin_fix-genlogs-gitignore-bug.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed a bug where `cmd/beacon-chain/execution` was being ignored by `hack/gen-logs.sh` due to a `.gitignore` rule.
|
||||||
3
changelog/bastin_fix-logging-issue.md
Normal file
3
changelog/bastin_fix-logging-issue.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Changed
|
||||||
|
|
||||||
|
- Fixed the logging issue described in #16314.
|
||||||
11
changelog/james-prysm_host-fallback-cleanup.md
Normal file
11
changelog/james-prysm_host-fallback-cleanup.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
### Ignored
|
||||||
|
|
||||||
|
- moved finding healthy node logic to connection provider and other various cleanup on naming.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Improved node fallback logs.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- a potential race condition when switching hosts quickly and reconnecting to same host on an old connection.
|
||||||
3
changelog/jtraglia-improve-ethspecify-integration.md
Normal file
3
changelog/jtraglia-improve-ethspecify-integration.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Changed
|
||||||
|
|
||||||
|
- Improved integrations with ethspecify so specrefs can be used throughout the codebase.
|
||||||
2
changelog/potuz_forkchoice_unused_highestblockdelay.md
Normal file
2
changelog/potuz_forkchoice_unused_highestblockdelay.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
### Ignored
|
||||||
|
- Remove unused `HighestBlockDelay` method in forkchoice.
|
||||||
2
changelog/potuz_forkchoice_unused_last_root.md
Normal file
2
changelog/potuz_forkchoice_unused_last_root.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
### Ignored
|
||||||
|
- Remove unused method in forkchoice.
|
||||||
2
changelog/potuz_remove_unused_map.md
Normal file
2
changelog/potuz_remove_unused_map.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
### Ignored
|
||||||
|
- Remove unused map in forkchoice.
|
||||||
3
changelog/pvl-bbolt-read-copy.md
Normal file
3
changelog/pvl-bbolt-read-copy.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed some database slices that were used outside of a read transaction. See [bbolt README](https://github.com/etcd-io/bbolt/blob/7b38172caf8cde993d187be4b8738fbe9266fde8/README.md?plain=1#L852) for more on this caveat.
|
||||||
3
changelog/tt_move-kzg-commitments.md
Normal file
3
changelog/tt_move-kzg-commitments.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Changed
|
||||||
|
|
||||||
|
- Moved blob KZG commitments into `ExecutionPayloadBid` and removed them from `ExecutionPayloadEnvelope` for Gloas.
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
|
// Code generated by hack/gen-logs.sh; DO NOT EDIT.
|
||||||
|
// This file is created and regenerated automatically. Anything added here might get removed.
|
||||||
package execution
|
package execution
|
||||||
|
|
||||||
import "github.com/sirupsen/logrus"
|
import "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
var log = logrus.WithField("prefix", "execution")
|
// The prefix for logs from this package will be the text after the last slash in the package path.
|
||||||
|
// If you wish to change this, you should add your desired name in the runtime/logging/logrus-prefixed-formatter/prefix-replacement.go file.
|
||||||
|
var log = logrus.WithField("package", "cmd/beacon-chain/execution")
|
||||||
|
|||||||
@@ -188,8 +188,8 @@ func before(ctx *cli.Context) error {
|
|||||||
return errors.Wrap(err, "failed to parse log vmodule")
|
return errors.Wrap(err, "failed to parse log vmodule")
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the global logging level to allow for the highest verbosity requested
|
// set the global logging level and data
|
||||||
logs.SetLoggingLevel(max(verbosityLevel, maxLevel))
|
logs.SetLoggingLevelAndData(verbosityLevel, vmodule, maxLevel, ctx.Bool(flags.DisableEphemeralLogFile.Name))
|
||||||
|
|
||||||
format := ctx.String(cmd.LogFormat.Name)
|
format := ctx.String(cmd.LogFormat.Name)
|
||||||
switch format {
|
switch format {
|
||||||
@@ -210,6 +210,7 @@ func before(ctx *cli.Context) error {
|
|||||||
Formatter: formatter,
|
Formatter: formatter,
|
||||||
Writer: os.Stderr,
|
Writer: os.Stderr,
|
||||||
AllowedLevels: logrus.AllLevels[:max(verbosityLevel, maxLevel)+1],
|
AllowedLevels: logrus.AllLevels[:max(verbosityLevel, maxLevel)+1],
|
||||||
|
Identifier: logs.LogTargetUser,
|
||||||
})
|
})
|
||||||
case "fluentd":
|
case "fluentd":
|
||||||
f := joonix.NewFormatter()
|
f := joonix.NewFormatter()
|
||||||
|
|||||||
@@ -164,8 +164,8 @@ func main() {
|
|||||||
return errors.Wrap(err, "failed to parse log vmodule")
|
return errors.Wrap(err, "failed to parse log vmodule")
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the global logging level to allow for the highest verbosity requested
|
// set the global logging level and data
|
||||||
logs.SetLoggingLevel(max(maxLevel, verbosityLevel))
|
logs.SetLoggingLevelAndData(verbosityLevel, vmodule, maxLevel, ctx.Bool(flags.DisableEphemeralLogFile.Name))
|
||||||
|
|
||||||
logFileName := ctx.String(cmd.LogFileName.Name)
|
logFileName := ctx.String(cmd.LogFileName.Name)
|
||||||
|
|
||||||
@@ -188,6 +188,7 @@ func main() {
|
|||||||
Formatter: formatter,
|
Formatter: formatter,
|
||||||
Writer: os.Stderr,
|
Writer: os.Stderr,
|
||||||
AllowedLevels: logrus.AllLevels[:max(verbosityLevel, maxLevel)+1],
|
AllowedLevels: logrus.AllLevels[:max(verbosityLevel, maxLevel)+1],
|
||||||
|
Identifier: logs.LogTargetUser,
|
||||||
})
|
})
|
||||||
case "fluentd":
|
case "fluentd":
|
||||||
f := joonix.NewFormatter()
|
f := joonix.NewFormatter()
|
||||||
|
|||||||
@@ -671,7 +671,7 @@ func hydrateBeaconBlockBodyGloas() *eth.BeaconBlockBodyGloas {
|
|||||||
BlockHash: make([]byte, fieldparams.RootLength),
|
BlockHash: make([]byte, fieldparams.RootLength),
|
||||||
PrevRandao: make([]byte, fieldparams.RootLength),
|
PrevRandao: make([]byte, fieldparams.RootLength),
|
||||||
FeeRecipient: make([]byte, 20),
|
FeeRecipient: make([]byte, 20),
|
||||||
BlobKzgCommitmentsRoot: make([]byte, fieldparams.RootLength),
|
BlobKzgCommitments: [][]byte{make([]byte, fieldparams.BLSPubkeyLength)},
|
||||||
},
|
},
|
||||||
Signature: make([]byte, fieldparams.BLSSignatureLength),
|
Signature: make([]byte, fieldparams.BLSSignatureLength),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
|
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
||||||
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -43,11 +44,16 @@ func (h executionPayloadBidGloas) IsNil() bool {
|
|||||||
len(h.payload.ParentBlockRoot) != 32 ||
|
len(h.payload.ParentBlockRoot) != 32 ||
|
||||||
len(h.payload.BlockHash) != 32 ||
|
len(h.payload.BlockHash) != 32 ||
|
||||||
len(h.payload.PrevRandao) != 32 ||
|
len(h.payload.PrevRandao) != 32 ||
|
||||||
len(h.payload.BlobKzgCommitmentsRoot) != 32 ||
|
|
||||||
len(h.payload.FeeRecipient) != 20 {
|
len(h.payload.FeeRecipient) != 20 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, commitment := range h.payload.BlobKzgCommitments {
|
||||||
|
if len(commitment) != 48 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,9 +137,14 @@ func (h executionPayloadBidGloas) ExecutionPayment() primitives.Gwei {
|
|||||||
return primitives.Gwei(h.payload.ExecutionPayment)
|
return primitives.Gwei(h.payload.ExecutionPayment)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlobKzgCommitmentsRoot returns the root of the KZG commitments for blobs.
|
// BlobKzgCommitments returns the KZG commitments for blobs.
|
||||||
func (h executionPayloadBidGloas) BlobKzgCommitmentsRoot() [32]byte {
|
func (h executionPayloadBidGloas) BlobKzgCommitments() [][]byte {
|
||||||
return [32]byte(h.payload.BlobKzgCommitmentsRoot)
|
return bytesutil.SafeCopy2dBytes(h.payload.BlobKzgCommitments)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BlobKzgCommitmentCount returns the number of blob KZG commitments.
|
||||||
|
func (h executionPayloadBidGloas) BlobKzgCommitmentCount() uint64 {
|
||||||
|
return uint64(len(h.payload.BlobKzgCommitments))
|
||||||
}
|
}
|
||||||
|
|
||||||
// FeeRecipient returns the execution address that will receive the builder payment.
|
// FeeRecipient returns the execution address that will receive the builder payment.
|
||||||
|
|||||||
@@ -15,17 +15,17 @@ import (
|
|||||||
|
|
||||||
func validExecutionPayloadBid() *ethpb.ExecutionPayloadBid {
|
func validExecutionPayloadBid() *ethpb.ExecutionPayloadBid {
|
||||||
return ðpb.ExecutionPayloadBid{
|
return ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: bytes.Repeat([]byte{0x01}, 32),
|
ParentBlockHash: bytes.Repeat([]byte{0x01}, 32),
|
||||||
ParentBlockRoot: bytes.Repeat([]byte{0x02}, 32),
|
ParentBlockRoot: bytes.Repeat([]byte{0x02}, 32),
|
||||||
BlockHash: bytes.Repeat([]byte{0x03}, 32),
|
BlockHash: bytes.Repeat([]byte{0x03}, 32),
|
||||||
PrevRandao: bytes.Repeat([]byte{0x04}, 32),
|
PrevRandao: bytes.Repeat([]byte{0x04}, 32),
|
||||||
GasLimit: 123,
|
GasLimit: 123,
|
||||||
BuilderIndex: 5,
|
BuilderIndex: 5,
|
||||||
Slot: 6,
|
Slot: 6,
|
||||||
Value: 7,
|
Value: 7,
|
||||||
ExecutionPayment: 8,
|
ExecutionPayment: 8,
|
||||||
BlobKzgCommitmentsRoot: bytes.Repeat([]byte{0x05}, 32),
|
BlobKzgCommitments: [][]byte{bytes.Repeat([]byte{0x05}, 48)},
|
||||||
FeeRecipient: bytes.Repeat([]byte{0x06}, 20),
|
FeeRecipient: bytes.Repeat([]byte{0x06}, 20),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,8 +52,8 @@ func TestWrappedROExecutionPayloadBid(t *testing.T) {
|
|||||||
mutate: func(b *ethpb.ExecutionPayloadBid) { b.PrevRandao = []byte{0x04} },
|
mutate: func(b *ethpb.ExecutionPayloadBid) { b.PrevRandao = []byte{0x04} },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "blob kzg commitments root",
|
name: "blob kzg commitments length",
|
||||||
mutate: func(b *ethpb.ExecutionPayloadBid) { b.BlobKzgCommitmentsRoot = []byte{0x05} },
|
mutate: func(b *ethpb.ExecutionPayloadBid) { b.BlobKzgCommitments = [][]byte{[]byte{0x05}} },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "fee recipient",
|
name: "fee recipient",
|
||||||
@@ -85,7 +85,8 @@ func TestWrappedROExecutionPayloadBid(t *testing.T) {
|
|||||||
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x02}, 32)), wrapped.ParentBlockRoot())
|
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x02}, 32)), wrapped.ParentBlockRoot())
|
||||||
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x03}, 32)), wrapped.BlockHash())
|
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x03}, 32)), wrapped.BlockHash())
|
||||||
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x04}, 32)), wrapped.PrevRandao())
|
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x04}, 32)), wrapped.PrevRandao())
|
||||||
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0x05}, 32)), wrapped.BlobKzgCommitmentsRoot())
|
assert.DeepEqual(t, [][]byte{bytes.Repeat([]byte{0x05}, 48)}, wrapped.BlobKzgCommitments())
|
||||||
|
require.Equal(t, uint64(1), wrapped.BlobKzgCommitmentCount())
|
||||||
assert.DeepEqual(t, [20]byte(bytes.Repeat([]byte{0x06}, 20)), wrapped.FeeRecipient())
|
assert.DeepEqual(t, [20]byte(bytes.Repeat([]byte{0x06}, 20)), wrapped.FeeRecipient())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ type ROExecutionPayloadBid interface {
|
|||||||
Slot() primitives.Slot
|
Slot() primitives.Slot
|
||||||
Value() primitives.Gwei
|
Value() primitives.Gwei
|
||||||
ExecutionPayment() primitives.Gwei
|
ExecutionPayment() primitives.Gwei
|
||||||
BlobKzgCommitmentsRoot() [32]byte
|
BlobKzgCommitments() [][]byte
|
||||||
|
BlobKzgCommitmentCount() uint64
|
||||||
FeeRecipient() [20]byte
|
FeeRecipient() [20]byte
|
||||||
IsNil() bool
|
IsNil() bool
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ EXCLUDED_PATH_PREFIXES=(
|
|||||||
".vscode"
|
".vscode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Gitignore overrides: paths that should still be scanned even if ignored by VCS.
|
||||||
|
GITIGNORE_OVERRIDES=(
|
||||||
|
"cmd/beacon-chain/execution"
|
||||||
|
)
|
||||||
|
|
||||||
# The logrus import path
|
# The logrus import path
|
||||||
LOGRUS_IMPORT="github.com/sirupsen/logrus"
|
LOGRUS_IMPORT="github.com/sirupsen/logrus"
|
||||||
# ----------------------------
|
# ----------------------------
|
||||||
@@ -70,6 +75,14 @@ rg_args=(
|
|||||||
-0 # NUL-delimited output
|
-0 # NUL-delimited output
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if [[ ${#GITIGNORE_OVERRIDES[@]} -gt 0 ]]; then
|
||||||
|
# Disable VCS ignores so overrides are honored.
|
||||||
|
rg_args+=( --no-ignore-vcs )
|
||||||
|
for ov in "${GITIGNORE_OVERRIDES[@]}"; do
|
||||||
|
rg_args+=( --glob "$ov/**" )
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
for ex in "${EXCLUDED_PATH_PREFIXES[@]}"; do
|
for ex in "${EXCLUDED_PATH_PREFIXES[@]}"; do
|
||||||
rg_args+=( --glob "!$ex/**" )
|
rg_args+=( --glob "!$ex/**" )
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -6,20 +6,28 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type HookIdentifier string
|
||||||
|
|
||||||
type WriterHook struct {
|
type WriterHook struct {
|
||||||
AllowedLevels []logrus.Level
|
AllowedLevels []logrus.Level
|
||||||
Writer io.Writer
|
Writer io.Writer
|
||||||
Formatter logrus.Formatter
|
Formatter logrus.Formatter
|
||||||
|
Identifier HookIdentifier
|
||||||
}
|
}
|
||||||
|
|
||||||
func (hook *WriterHook) Levels() []logrus.Level {
|
func (hook *WriterHook) Levels() []logrus.Level {
|
||||||
if hook.AllowedLevels == nil || len(hook.AllowedLevels) == 0 {
|
if len(hook.AllowedLevels) == 0 {
|
||||||
return logrus.AllLevels
|
return logrus.AllLevels
|
||||||
}
|
}
|
||||||
return hook.AllowedLevels
|
return hook.AllowedLevels
|
||||||
}
|
}
|
||||||
|
|
||||||
func (hook *WriterHook) Fire(entry *logrus.Entry) error {
|
func (hook *WriterHook) Fire(entry *logrus.Entry) error {
|
||||||
|
val, ok := entry.Data[LogTargetField]
|
||||||
|
if ok && val != hook.Identifier {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
line, err := hook.Formatter.Format(entry)
|
line, err := hook.Formatter.Format(entry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -17,11 +17,43 @@ import (
|
|||||||
"gopkg.in/natefinch/lumberjack.v2"
|
"gopkg.in/natefinch/lumberjack.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ephemeralLogFileVerbosity = logrus.DebugLevel
|
var (
|
||||||
|
userVerbosity = logrus.InfoLevel
|
||||||
|
vmodule = make(map[string]logrus.Level)
|
||||||
|
)
|
||||||
|
|
||||||
// SetLoggingLevel sets the base logging level for logrus.
|
const (
|
||||||
func SetLoggingLevel(lvl logrus.Level) {
|
ephemeralLogFileVerbosity = logrus.DebugLevel
|
||||||
logrus.SetLevel(max(lvl, ephemeralLogFileVerbosity))
|
LogTargetField = "log_target"
|
||||||
|
LogTargetEphemeral HookIdentifier = "ephemeral"
|
||||||
|
LogTargetUser HookIdentifier = "user"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetLoggingLevelAndData sets the base logging level for logrus.
|
||||||
|
func SetLoggingLevelAndData(baseVerbosity logrus.Level, vmoduleMap map[string]logrus.Level, maxVmoduleLevel logrus.Level, disableEphemeral bool) {
|
||||||
|
userVerbosity = baseVerbosity
|
||||||
|
vmodule = vmoduleMap
|
||||||
|
|
||||||
|
globalLevel := max(baseVerbosity, maxVmoduleLevel)
|
||||||
|
if !disableEphemeral {
|
||||||
|
globalLevel = max(globalLevel, ephemeralLogFileVerbosity)
|
||||||
|
}
|
||||||
|
logrus.SetLevel(globalLevel)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PackageVerbosity returns the verbosity of a given package.
|
||||||
|
func PackageVerbosity(packagePath string) logrus.Level {
|
||||||
|
bestLen := 0
|
||||||
|
bestLevel := userVerbosity
|
||||||
|
for k, v := range vmodule {
|
||||||
|
if k == packagePath || strings.HasPrefix(packagePath, k+"/") {
|
||||||
|
if len(k) > bestLen {
|
||||||
|
bestLen = len(k)
|
||||||
|
bestLevel = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bestLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
func addLogWriter(w io.Writer) {
|
func addLogWriter(w io.Writer) {
|
||||||
@@ -68,6 +100,7 @@ func ConfigurePersistentLogging(logFileName string, format string, lvl logrus.Le
|
|||||||
Formatter: formatter,
|
Formatter: formatter,
|
||||||
Writer: f,
|
Writer: f,
|
||||||
AllowedLevels: logrus.AllLevels[:max(lvl, maxVmoduleLevel)+1],
|
AllowedLevels: logrus.AllLevels[:max(lvl, maxVmoduleLevel)+1],
|
||||||
|
Identifier: LogTargetUser,
|
||||||
})
|
})
|
||||||
|
|
||||||
logrus.Debug("File logging initialized")
|
logrus.Debug("File logging initialized")
|
||||||
@@ -101,6 +134,7 @@ func ConfigureEphemeralLogFile(datadirPath string, app string) error {
|
|||||||
Formatter: formatter,
|
Formatter: formatter,
|
||||||
Writer: debugWriter,
|
Writer: debugWriter,
|
||||||
AllowedLevels: logrus.AllLevels[:ephemeralLogFileVerbosity+1],
|
AllowedLevels: logrus.AllLevels[:ephemeralLogFileVerbosity+1],
|
||||||
|
Identifier: LogTargetEphemeral,
|
||||||
})
|
})
|
||||||
|
|
||||||
logrus.WithField("path", logFilePath).Debug("Ephemeral log file initialized")
|
logrus.WithField("path", logFilePath).Debug("Ephemeral log file initialized")
|
||||||
|
|||||||
288
proto/engine/v1/gloas.pb.go
generated
288
proto/engine/v1/gloas.pb.go
generated
@@ -1,288 +0,0 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// versions:
|
|
||||||
// protoc-gen-go v1.36.3
|
|
||||||
// protoc v3.21.7
|
|
||||||
// source: proto/engine/v1/gloas.proto
|
|
||||||
|
|
||||||
package enginev1
|
|
||||||
|
|
||||||
import (
|
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
|
|
||||||
github_com_OffchainLabs_prysm_v6_consensus_types_primitives "github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
|
||||||
_ "github.com/OffchainLabs/prysm/v7/proto/eth/ext"
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Verify that this generated code is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
|
||||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
||||||
)
|
|
||||||
|
|
||||||
type ExecutionPayloadEnvelope struct {
|
|
||||||
state protoimpl.MessageState `protogen:"open.v1"`
|
|
||||||
Payload *ExecutionPayloadDeneb `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"`
|
|
||||||
ExecutionRequests *ExecutionRequests `protobuf:"bytes,2,opt,name=execution_requests,json=executionRequests,proto3" json:"execution_requests,omitempty"`
|
|
||||||
BuilderIndex github_com_OffchainLabs_prysm_v6_consensus_types_primitives.ValidatorIndex `protobuf:"varint,3,opt,name=builder_index,json=builderIndex,proto3" json:"builder_index,omitempty" cast-type:"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.ValidatorIndex"`
|
|
||||||
BeaconBlockRoot []byte `protobuf:"bytes,4,opt,name=beacon_block_root,json=beaconBlockRoot,proto3" json:"beacon_block_root,omitempty" ssz-size:"32"`
|
|
||||||
Slot github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot `protobuf:"varint,5,opt,name=slot,proto3" json:"slot,omitempty" cast-type:"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.Slot"`
|
|
||||||
BlobKzgCommitments [][]byte `protobuf:"bytes,6,rep,name=blob_kzg_commitments,json=blobKzgCommitments,proto3" json:"blob_kzg_commitments,omitempty" ssz-max:"4096" ssz-size:"?,48"`
|
|
||||||
StateRoot []byte `protobuf:"bytes,7,opt,name=state_root,json=stateRoot,proto3" json:"state_root,omitempty" ssz-size:"32"`
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) Reset() {
|
|
||||||
*x = ExecutionPayloadEnvelope{}
|
|
||||||
mi := &file_proto_engine_v1_gloas_proto_msgTypes[0]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ExecutionPayloadEnvelope) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_proto_engine_v1_gloas_proto_msgTypes[0]
|
|
||||||
if x != nil {
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
if ms.LoadMessageInfo() == nil {
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
return mi.MessageOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use ExecutionPayloadEnvelope.ProtoReflect.Descriptor instead.
|
|
||||||
func (*ExecutionPayloadEnvelope) Descriptor() ([]byte, []int) {
|
|
||||||
return file_proto_engine_v1_gloas_proto_rawDescGZIP(), []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetPayload() *ExecutionPayloadDeneb {
|
|
||||||
if x != nil {
|
|
||||||
return x.Payload
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetExecutionRequests() *ExecutionRequests {
|
|
||||||
if x != nil {
|
|
||||||
return x.ExecutionRequests
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetBuilderIndex() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.ValidatorIndex {
|
|
||||||
if x != nil {
|
|
||||||
return x.BuilderIndex
|
|
||||||
}
|
|
||||||
return github_com_OffchainLabs_prysm_v6_consensus_types_primitives.ValidatorIndex(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetBeaconBlockRoot() []byte {
|
|
||||||
if x != nil {
|
|
||||||
return x.BeaconBlockRoot
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetSlot() github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot {
|
|
||||||
if x != nil {
|
|
||||||
return x.Slot
|
|
||||||
}
|
|
||||||
return github_com_OffchainLabs_prysm_v6_consensus_types_primitives.Slot(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetBlobKzgCommitments() [][]byte {
|
|
||||||
if x != nil {
|
|
||||||
return x.BlobKzgCommitments
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExecutionPayloadEnvelope) GetStateRoot() []byte {
|
|
||||||
if x != nil {
|
|
||||||
return x.StateRoot
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type SignedExecutionPayloadEnvelope struct {
|
|
||||||
state protoimpl.MessageState `protogen:"open.v1"`
|
|
||||||
Message *ExecutionPayloadEnvelope `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
|
|
||||||
Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty" ssz-size:"96"`
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *SignedExecutionPayloadEnvelope) Reset() {
|
|
||||||
*x = SignedExecutionPayloadEnvelope{}
|
|
||||||
mi := &file_proto_engine_v1_gloas_proto_msgTypes[1]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *SignedExecutionPayloadEnvelope) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*SignedExecutionPayloadEnvelope) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *SignedExecutionPayloadEnvelope) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_proto_engine_v1_gloas_proto_msgTypes[1]
|
|
||||||
if x != nil {
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
if ms.LoadMessageInfo() == nil {
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
return mi.MessageOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use SignedExecutionPayloadEnvelope.ProtoReflect.Descriptor instead.
|
|
||||||
func (*SignedExecutionPayloadEnvelope) Descriptor() ([]byte, []int) {
|
|
||||||
return file_proto_engine_v1_gloas_proto_rawDescGZIP(), []int{1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *SignedExecutionPayloadEnvelope) GetMessage() *ExecutionPayloadEnvelope {
|
|
||||||
if x != nil {
|
|
||||||
return x.Message
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *SignedExecutionPayloadEnvelope) GetSignature() []byte {
|
|
||||||
if x != nil {
|
|
||||||
return x.Signature
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var File_proto_engine_v1_gloas_proto protoreflect.FileDescriptor
|
|
||||||
|
|
||||||
var file_proto_engine_v1_gloas_proto_rawDesc = []byte{
|
|
||||||
0x0a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2f, 0x76,
|
|
||||||
0x31, 0x2f, 0x67, 0x6c, 0x6f, 0x61, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x65,
|
|
||||||
0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76,
|
|
||||||
0x31, 0x1a, 0x26, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2f,
|
|
||||||
0x76, 0x31, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x67,
|
|
||||||
0x69, 0x6e, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6c, 0x65, 0x63, 0x74,
|
|
||||||
0x72, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
|
|
||||||
0x65, 0x74, 0x68, 0x2f, 0x65, 0x78, 0x74, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
|
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa3, 0x04, 0x0a, 0x18, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
|
|
||||||
0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f,
|
|
||||||
0x70, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20,
|
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65,
|
|
||||||
0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x65, 0x6e, 0x65, 0x62, 0x52, 0x07,
|
|
||||||
0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x54, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75,
|
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20,
|
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65,
|
|
||||||
0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x52, 0x11, 0x65, 0x78, 0x65, 0x63,
|
|
||||||
0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x73, 0x0a,
|
|
||||||
0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03,
|
|
||||||
0x20, 0x01, 0x28, 0x04, 0x42, 0x4e, 0x82, 0xb5, 0x18, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
|
||||||
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62,
|
|
||||||
0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x36, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65,
|
|
||||||
0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69,
|
|
||||||
0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49,
|
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x64,
|
|
||||||
0x65, 0x78, 0x12, 0x32, 0x0a, 0x11, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f,
|
|
||||||
0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a,
|
|
||||||
0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x0f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f,
|
|
||||||
0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x58, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05,
|
|
||||||
0x20, 0x01, 0x28, 0x04, 0x42, 0x44, 0x82, 0xb5, 0x18, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
|
||||||
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62,
|
|
||||||
0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x36, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x65,
|
|
||||||
0x6e, 0x73, 0x75, 0x73, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x69, 0x6d, 0x69,
|
|
||||||
0x74, 0x69, 0x76, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74,
|
|
||||||
0x12, 0x42, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x6b, 0x7a, 0x67, 0x5f, 0x63, 0x6f, 0x6d,
|
|
||||||
0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x42, 0x10,
|
|
||||||
0x8a, 0xb5, 0x18, 0x04, 0x3f, 0x2c, 0x34, 0x38, 0x92, 0xb5, 0x18, 0x04, 0x34, 0x30, 0x39, 0x36,
|
|
||||||
0x52, 0x12, 0x62, 0x6c, 0x6f, 0x62, 0x4b, 0x7a, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d,
|
|
||||||
0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f,
|
|
||||||
0x6f, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32,
|
|
||||||
0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x1e,
|
|
||||||
0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50,
|
|
||||||
0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x46,
|
|
||||||
0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
|
||||||
0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x6e, 0x67, 0x69, 0x6e,
|
|
||||||
0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61,
|
|
||||||
0x79, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x52, 0x07, 0x6d,
|
|
||||||
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x24, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74,
|
|
||||||
0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x39,
|
|
||||||
0x36, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x3b, 0x5a, 0x39,
|
|
||||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x66, 0x66, 0x63, 0x68,
|
|
||||||
0x61, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x36,
|
|
||||||
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x2f, 0x76, 0x31,
|
|
||||||
0x3b, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x33,
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
file_proto_engine_v1_gloas_proto_rawDescOnce sync.Once
|
|
||||||
file_proto_engine_v1_gloas_proto_rawDescData = file_proto_engine_v1_gloas_proto_rawDesc
|
|
||||||
)
|
|
||||||
|
|
||||||
func file_proto_engine_v1_gloas_proto_rawDescGZIP() []byte {
|
|
||||||
file_proto_engine_v1_gloas_proto_rawDescOnce.Do(func() {
|
|
||||||
file_proto_engine_v1_gloas_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_engine_v1_gloas_proto_rawDescData)
|
|
||||||
})
|
|
||||||
return file_proto_engine_v1_gloas_proto_rawDescData
|
|
||||||
}
|
|
||||||
|
|
||||||
var file_proto_engine_v1_gloas_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
|
||||||
var file_proto_engine_v1_gloas_proto_goTypes = []any{
|
|
||||||
(*ExecutionPayloadEnvelope)(nil), // 0: ethereum.engine.v1.ExecutionPayloadEnvelope
|
|
||||||
(*SignedExecutionPayloadEnvelope)(nil), // 1: ethereum.engine.v1.SignedExecutionPayloadEnvelope
|
|
||||||
(*ExecutionPayloadDeneb)(nil), // 2: ethereum.engine.v1.ExecutionPayloadDeneb
|
|
||||||
(*ExecutionRequests)(nil), // 3: ethereum.engine.v1.ExecutionRequests
|
|
||||||
}
|
|
||||||
var file_proto_engine_v1_gloas_proto_depIdxs = []int32{
|
|
||||||
2, // 0: ethereum.engine.v1.ExecutionPayloadEnvelope.payload:type_name -> ethereum.engine.v1.ExecutionPayloadDeneb
|
|
||||||
3, // 1: ethereum.engine.v1.ExecutionPayloadEnvelope.execution_requests:type_name -> ethereum.engine.v1.ExecutionRequests
|
|
||||||
0, // 2: ethereum.engine.v1.SignedExecutionPayloadEnvelope.message:type_name -> ethereum.engine.v1.ExecutionPayloadEnvelope
|
|
||||||
3, // [3:3] is the sub-list for method output_type
|
|
||||||
3, // [3:3] is the sub-list for method input_type
|
|
||||||
3, // [3:3] is the sub-list for extension type_name
|
|
||||||
3, // [3:3] is the sub-list for extension extendee
|
|
||||||
0, // [0:3] is the sub-list for field type_name
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { file_proto_engine_v1_gloas_proto_init() }
|
|
||||||
func file_proto_engine_v1_gloas_proto_init() {
|
|
||||||
if File_proto_engine_v1_gloas_proto != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
file_proto_engine_v1_execution_engine_proto_init()
|
|
||||||
file_proto_engine_v1_electra_proto_init()
|
|
||||||
type x struct{}
|
|
||||||
out := protoimpl.TypeBuilder{
|
|
||||||
File: protoimpl.DescBuilder{
|
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
||||||
RawDescriptor: file_proto_engine_v1_gloas_proto_rawDesc,
|
|
||||||
NumEnums: 0,
|
|
||||||
NumMessages: 2,
|
|
||||||
NumExtensions: 0,
|
|
||||||
NumServices: 0,
|
|
||||||
},
|
|
||||||
GoTypes: file_proto_engine_v1_gloas_proto_goTypes,
|
|
||||||
DependencyIndexes: file_proto_engine_v1_gloas_proto_depIdxs,
|
|
||||||
MessageInfos: file_proto_engine_v1_gloas_proto_msgTypes,
|
|
||||||
}.Build()
|
|
||||||
File_proto_engine_v1_gloas_proto = out.File
|
|
||||||
file_proto_engine_v1_gloas_proto_rawDesc = nil
|
|
||||||
file_proto_engine_v1_gloas_proto_goTypes = nil
|
|
||||||
file_proto_engine_v1_gloas_proto_depIdxs = nil
|
|
||||||
}
|
|
||||||
@@ -144,15 +144,17 @@ func copySignedExecutionPayloadBid(header *SignedExecutionPayloadBid) *SignedExe
|
|||||||
}
|
}
|
||||||
if header.Message != nil {
|
if header.Message != nil {
|
||||||
copied.Message = &ExecutionPayloadBid{
|
copied.Message = &ExecutionPayloadBid{
|
||||||
ParentBlockHash: bytesutil.SafeCopyBytes(header.Message.ParentBlockHash),
|
ParentBlockHash: bytesutil.SafeCopyBytes(header.Message.ParentBlockHash),
|
||||||
ParentBlockRoot: bytesutil.SafeCopyBytes(header.Message.ParentBlockRoot),
|
ParentBlockRoot: bytesutil.SafeCopyBytes(header.Message.ParentBlockRoot),
|
||||||
BlockHash: bytesutil.SafeCopyBytes(header.Message.BlockHash),
|
BlockHash: bytesutil.SafeCopyBytes(header.Message.BlockHash),
|
||||||
FeeRecipient: bytesutil.SafeCopyBytes(header.Message.FeeRecipient),
|
PrevRandao: bytesutil.SafeCopyBytes(header.Message.PrevRandao),
|
||||||
GasLimit: header.Message.GasLimit,
|
FeeRecipient: bytesutil.SafeCopyBytes(header.Message.FeeRecipient),
|
||||||
BuilderIndex: header.Message.BuilderIndex,
|
GasLimit: header.Message.GasLimit,
|
||||||
Slot: header.Message.Slot,
|
BuilderIndex: header.Message.BuilderIndex,
|
||||||
Value: header.Message.Value,
|
Slot: header.Message.Slot,
|
||||||
BlobKzgCommitmentsRoot: bytesutil.SafeCopyBytes(header.Message.BlobKzgCommitmentsRoot),
|
Value: header.Message.Value,
|
||||||
|
ExecutionPayment: header.Message.ExecutionPayment,
|
||||||
|
BlobKzgCommitments: bytesutil.SafeCopy2dBytes(header.Message.BlobKzgCommitments),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return copied
|
return copied
|
||||||
|
|||||||
@@ -1215,15 +1215,16 @@ func genSignedExecutionPayloadBidGloas() *v1alpha1.SignedExecutionPayloadBid {
|
|||||||
|
|
||||||
func genExecutionPayloadBidGloas() *v1alpha1.ExecutionPayloadBid {
|
func genExecutionPayloadBidGloas() *v1alpha1.ExecutionPayloadBid {
|
||||||
return &v1alpha1.ExecutionPayloadBid{
|
return &v1alpha1.ExecutionPayloadBid{
|
||||||
ParentBlockHash: bytes(32),
|
ParentBlockHash: bytes(32),
|
||||||
ParentBlockRoot: bytes(32),
|
ParentBlockRoot: bytes(32),
|
||||||
BlockHash: bytes(32),
|
BlockHash: bytes(32),
|
||||||
FeeRecipient: bytes(20),
|
FeeRecipient: bytes(20),
|
||||||
GasLimit: rand.Uint64(),
|
GasLimit: rand.Uint64(),
|
||||||
BuilderIndex: primitives.BuilderIndex(rand.Uint64()),
|
BuilderIndex: primitives.BuilderIndex(rand.Uint64()),
|
||||||
Slot: primitives.Slot(rand.Uint64()),
|
Slot: primitives.Slot(rand.Uint64()),
|
||||||
Value: primitives.Gwei(rand.Uint64()),
|
Value: primitives.Gwei(rand.Uint64()),
|
||||||
BlobKzgCommitmentsRoot: bytes(32),
|
ExecutionPayment: primitives.Gwei(rand.Uint64()),
|
||||||
|
BlobKzgCommitments: [][]byte{bytes(48)},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,17 +10,17 @@ func (header *ExecutionPayloadBid) Copy() *ExecutionPayloadBid {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &ExecutionPayloadBid{
|
return &ExecutionPayloadBid{
|
||||||
ParentBlockHash: bytesutil.SafeCopyBytes(header.ParentBlockHash),
|
ParentBlockHash: bytesutil.SafeCopyBytes(header.ParentBlockHash),
|
||||||
ParentBlockRoot: bytesutil.SafeCopyBytes(header.ParentBlockRoot),
|
ParentBlockRoot: bytesutil.SafeCopyBytes(header.ParentBlockRoot),
|
||||||
BlockHash: bytesutil.SafeCopyBytes(header.BlockHash),
|
BlockHash: bytesutil.SafeCopyBytes(header.BlockHash),
|
||||||
PrevRandao: bytesutil.SafeCopyBytes(header.PrevRandao),
|
PrevRandao: bytesutil.SafeCopyBytes(header.PrevRandao),
|
||||||
FeeRecipient: bytesutil.SafeCopyBytes(header.FeeRecipient),
|
FeeRecipient: bytesutil.SafeCopyBytes(header.FeeRecipient),
|
||||||
GasLimit: header.GasLimit,
|
GasLimit: header.GasLimit,
|
||||||
BuilderIndex: header.BuilderIndex,
|
BuilderIndex: header.BuilderIndex,
|
||||||
Slot: header.Slot,
|
Slot: header.Slot,
|
||||||
Value: header.Value,
|
Value: header.Value,
|
||||||
ExecutionPayment: header.ExecutionPayment,
|
ExecutionPayment: header.ExecutionPayment,
|
||||||
BlobKzgCommitmentsRoot: bytesutil.SafeCopyBytes(header.BlobKzgCommitmentsRoot),
|
BlobKzgCommitments: bytesutil.SafeCopy2dBytes(header.BlobKzgCommitments),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1089
proto/prysm/v1alpha1/gloas.pb.go
generated
1089
proto/prysm/v1alpha1/gloas.pb.go
generated
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,7 @@ option go_package = "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1;eth";
|
|||||||
// slot: Slot
|
// slot: Slot
|
||||||
// value: Gwei
|
// value: Gwei
|
||||||
// execution_payment: Gwei
|
// execution_payment: Gwei
|
||||||
// blob_kzg_commitments_root: Root
|
// blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
message ExecutionPayloadBid {
|
message ExecutionPayloadBid {
|
||||||
bytes parent_block_hash = 1 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
bytes parent_block_hash = 1 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
||||||
bytes parent_block_root = 2 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
bytes parent_block_root = 2 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
||||||
@@ -56,7 +56,10 @@ message ExecutionPayloadBid {
|
|||||||
(ethereum.eth.ext.cast_type) =
|
(ethereum.eth.ext.cast_type) =
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.Gwei"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.Gwei"
|
||||||
];
|
];
|
||||||
bytes blob_kzg_commitments_root = 11 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
repeated bytes blob_kzg_commitments = 11 [
|
||||||
|
(ethereum.eth.ext.ssz_size) = "?,48",
|
||||||
|
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignedExecutionPayloadBid wraps an execution payload bid with a signature.
|
// SignedExecutionPayloadBid wraps an execution payload bid with a signature.
|
||||||
@@ -366,7 +369,6 @@ message BuilderPendingWithdrawal {
|
|||||||
// class DataColumnSidecar(Container):
|
// class DataColumnSidecar(Container):
|
||||||
// index: ColumnIndex
|
// index: ColumnIndex
|
||||||
// column: List[Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
// column: List[Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
// kzg_commitents: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
|
||||||
// kzg_proofs: List[KZGProof, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
// kzg_proofs: List[KZGProof, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
// slot: Slot
|
// slot: Slot
|
||||||
// beacon_block_root: Root
|
// beacon_block_root: Root
|
||||||
@@ -376,10 +378,6 @@ message DataColumnSidecarGloas {
|
|||||||
(ethereum.eth.ext.ssz_size) = "?,bytes_per_cell.size",
|
(ethereum.eth.ext.ssz_size) = "?,bytes_per_cell.size",
|
||||||
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
||||||
];
|
];
|
||||||
repeated bytes kzg_commitments = 3 [
|
|
||||||
(ethereum.eth.ext.ssz_size) = "?,48",
|
|
||||||
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
|
||||||
];
|
|
||||||
repeated bytes kzg_proofs = 4 [
|
repeated bytes kzg_proofs = 4 [
|
||||||
(ethereum.eth.ext.ssz_size) = "?,48",
|
(ethereum.eth.ext.ssz_size) = "?,48",
|
||||||
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
||||||
@@ -402,7 +400,6 @@ message DataColumnSidecarGloas {
|
|||||||
// builder_index: BuilderIndex
|
// builder_index: BuilderIndex
|
||||||
// beacon_block_root: Root
|
// beacon_block_root: Root
|
||||||
// slot: Slot
|
// slot: Slot
|
||||||
// blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
|
||||||
// state_root: Root
|
// state_root: Root
|
||||||
message ExecutionPayloadEnvelope {
|
message ExecutionPayloadEnvelope {
|
||||||
ethereum.engine.v1.ExecutionPayloadDeneb payload = 1;
|
ethereum.engine.v1.ExecutionPayloadDeneb payload = 1;
|
||||||
@@ -415,11 +412,7 @@ message ExecutionPayloadEnvelope {
|
|||||||
(ethereum.eth.ext.cast_type) =
|
(ethereum.eth.ext.cast_type) =
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.Slot"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives.Slot"
|
||||||
];
|
];
|
||||||
repeated bytes blob_kzg_commitments = 6 [
|
bytes state_root = 6 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
||||||
(ethereum.eth.ext.ssz_size) = "?,48",
|
|
||||||
(ethereum.eth.ext.ssz_max) = "max_blob_commitments.size"
|
|
||||||
];
|
|
||||||
bytes state_root = 7 [ (ethereum.eth.ext.ssz_size) = "32" ];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignedExecutionPayloadEnvelope wraps an execution payload envelope with a signature.
|
// SignedExecutionPayloadEnvelope wraps an execution payload envelope with a signature.
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ func (e *ExecutionPayloadBid) MarshalSSZ() ([]byte, error) {
|
|||||||
// MarshalSSZTo ssz marshals the ExecutionPayloadBid object to a target array
|
// MarshalSSZTo ssz marshals the ExecutionPayloadBid object to a target array
|
||||||
func (e *ExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
func (e *ExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
dst = buf
|
dst = buf
|
||||||
|
offset := int(192)
|
||||||
|
|
||||||
// Field (0) 'ParentBlockHash'
|
// Field (0) 'ParentBlockHash'
|
||||||
if size := len(e.ParentBlockHash); size != 32 {
|
if size := len(e.ParentBlockHash); size != 32 {
|
||||||
@@ -66,12 +67,22 @@ func (e *ExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
|||||||
// Field (9) 'ExecutionPayment'
|
// Field (9) 'ExecutionPayment'
|
||||||
dst = ssz.MarshalUint64(dst, uint64(e.ExecutionPayment))
|
dst = ssz.MarshalUint64(dst, uint64(e.ExecutionPayment))
|
||||||
|
|
||||||
// Field (10) 'BlobKzgCommitmentsRoot'
|
// Offset (10) 'BlobKzgCommitments'
|
||||||
if size := len(e.BlobKzgCommitmentsRoot); size != 32 {
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
err = ssz.ErrBytesLengthFn("--.BlobKzgCommitmentsRoot", size, 32)
|
offset += len(e.BlobKzgCommitments) * 48
|
||||||
|
|
||||||
|
// Field (10) 'BlobKzgCommitments'
|
||||||
|
if size := len(e.BlobKzgCommitments); size > 4096 {
|
||||||
|
err = ssz.ErrListTooBigFn("--.BlobKzgCommitments", size, 4096)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
dst = append(dst, e.BlobKzgCommitmentsRoot...)
|
for ii := 0; ii < len(e.BlobKzgCommitments); ii++ {
|
||||||
|
if size := len(e.BlobKzgCommitments[ii]); size != 48 {
|
||||||
|
err = ssz.ErrBytesLengthFn("--.BlobKzgCommitments[ii]", size, 48)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dst = append(dst, e.BlobKzgCommitments[ii]...)
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -80,10 +91,13 @@ func (e *ExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
|||||||
func (e *ExecutionPayloadBid) UnmarshalSSZ(buf []byte) error {
|
func (e *ExecutionPayloadBid) UnmarshalSSZ(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
size := uint64(len(buf))
|
size := uint64(len(buf))
|
||||||
if size != 220 {
|
if size < 192 {
|
||||||
return ssz.ErrSize
|
return ssz.ErrSize
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tail := buf
|
||||||
|
var o10 uint64
|
||||||
|
|
||||||
// Field (0) 'ParentBlockHash'
|
// Field (0) 'ParentBlockHash'
|
||||||
if cap(e.ParentBlockHash) == 0 {
|
if cap(e.ParentBlockHash) == 0 {
|
||||||
e.ParentBlockHash = make([]byte, 0, len(buf[0:32]))
|
e.ParentBlockHash = make([]byte, 0, len(buf[0:32]))
|
||||||
@@ -129,18 +143,40 @@ func (e *ExecutionPayloadBid) UnmarshalSSZ(buf []byte) error {
|
|||||||
// Field (9) 'ExecutionPayment'
|
// Field (9) 'ExecutionPayment'
|
||||||
e.ExecutionPayment = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[180:188]))
|
e.ExecutionPayment = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[180:188]))
|
||||||
|
|
||||||
// Field (10) 'BlobKzgCommitmentsRoot'
|
// Offset (10) 'BlobKzgCommitments'
|
||||||
if cap(e.BlobKzgCommitmentsRoot) == 0 {
|
if o10 = ssz.ReadOffset(buf[188:192]); o10 > size {
|
||||||
e.BlobKzgCommitmentsRoot = make([]byte, 0, len(buf[188:220]))
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
e.BlobKzgCommitmentsRoot = append(e.BlobKzgCommitmentsRoot, buf[188:220]...)
|
|
||||||
|
|
||||||
|
if o10 != 192 {
|
||||||
|
return ssz.ErrInvalidVariableOffset
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field (10) 'BlobKzgCommitments'
|
||||||
|
{
|
||||||
|
buf = tail[o10:]
|
||||||
|
num, err := ssz.DivideInt2(len(buf), 48, 4096)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
e.BlobKzgCommitments = make([][]byte, num)
|
||||||
|
for ii := 0; ii < num; ii++ {
|
||||||
|
if cap(e.BlobKzgCommitments[ii]) == 0 {
|
||||||
|
e.BlobKzgCommitments[ii] = make([]byte, 0, len(buf[ii*48:(ii+1)*48]))
|
||||||
|
}
|
||||||
|
e.BlobKzgCommitments[ii] = append(e.BlobKzgCommitments[ii], buf[ii*48:(ii+1)*48]...)
|
||||||
|
}
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SizeSSZ returns the ssz encoded size in bytes for the ExecutionPayloadBid object
|
// SizeSSZ returns the ssz encoded size in bytes for the ExecutionPayloadBid object
|
||||||
func (e *ExecutionPayloadBid) SizeSSZ() (size int) {
|
func (e *ExecutionPayloadBid) SizeSSZ() (size int) {
|
||||||
size = 220
|
size = 192
|
||||||
|
|
||||||
|
// Field (10) 'BlobKzgCommitments'
|
||||||
|
size += len(e.BlobKzgCommitments) * 48
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,12 +239,24 @@ func (e *ExecutionPayloadBid) HashTreeRootWith(hh *ssz.Hasher) (err error) {
|
|||||||
// Field (9) 'ExecutionPayment'
|
// Field (9) 'ExecutionPayment'
|
||||||
hh.PutUint64(uint64(e.ExecutionPayment))
|
hh.PutUint64(uint64(e.ExecutionPayment))
|
||||||
|
|
||||||
// Field (10) 'BlobKzgCommitmentsRoot'
|
// Field (10) 'BlobKzgCommitments'
|
||||||
if size := len(e.BlobKzgCommitmentsRoot); size != 32 {
|
{
|
||||||
err = ssz.ErrBytesLengthFn("--.BlobKzgCommitmentsRoot", size, 32)
|
if size := len(e.BlobKzgCommitments); size > 4096 {
|
||||||
return
|
err = ssz.ErrListTooBigFn("--.BlobKzgCommitments", size, 4096)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
subIndx := hh.Index()
|
||||||
|
for _, i := range e.BlobKzgCommitments {
|
||||||
|
if len(i) != 48 {
|
||||||
|
err = ssz.ErrBytesLength
|
||||||
|
return
|
||||||
|
}
|
||||||
|
hh.PutBytes(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
numItems := uint64(len(e.BlobKzgCommitments))
|
||||||
|
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
||||||
}
|
}
|
||||||
hh.PutBytes(e.BlobKzgCommitmentsRoot)
|
|
||||||
|
|
||||||
hh.Merkleize(indx)
|
hh.Merkleize(indx)
|
||||||
return
|
return
|
||||||
@@ -222,14 +270,14 @@ func (s *SignedExecutionPayloadBid) MarshalSSZ() ([]byte, error) {
|
|||||||
// MarshalSSZTo ssz marshals the SignedExecutionPayloadBid object to a target array
|
// MarshalSSZTo ssz marshals the SignedExecutionPayloadBid object to a target array
|
||||||
func (s *SignedExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
func (s *SignedExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
dst = buf
|
dst = buf
|
||||||
|
offset := int(100)
|
||||||
|
|
||||||
// Field (0) 'Message'
|
// Offset (0) 'Message'
|
||||||
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
if s.Message == nil {
|
if s.Message == nil {
|
||||||
s.Message = new(ExecutionPayloadBid)
|
s.Message = new(ExecutionPayloadBid)
|
||||||
}
|
}
|
||||||
if dst, err = s.Message.MarshalSSZTo(dst); err != nil {
|
offset += s.Message.SizeSSZ()
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (1) 'Signature'
|
// Field (1) 'Signature'
|
||||||
if size := len(s.Signature); size != 96 {
|
if size := len(s.Signature); size != 96 {
|
||||||
@@ -238,6 +286,11 @@ func (s *SignedExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err er
|
|||||||
}
|
}
|
||||||
dst = append(dst, s.Signature...)
|
dst = append(dst, s.Signature...)
|
||||||
|
|
||||||
|
// Field (0) 'Message'
|
||||||
|
if dst, err = s.Message.MarshalSSZTo(dst); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,30 +298,51 @@ func (s *SignedExecutionPayloadBid) MarshalSSZTo(buf []byte) (dst []byte, err er
|
|||||||
func (s *SignedExecutionPayloadBid) UnmarshalSSZ(buf []byte) error {
|
func (s *SignedExecutionPayloadBid) UnmarshalSSZ(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
size := uint64(len(buf))
|
size := uint64(len(buf))
|
||||||
if size != 316 {
|
if size < 100 {
|
||||||
return ssz.ErrSize
|
return ssz.ErrSize
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (0) 'Message'
|
tail := buf
|
||||||
if s.Message == nil {
|
var o0 uint64
|
||||||
s.Message = new(ExecutionPayloadBid)
|
|
||||||
|
// Offset (0) 'Message'
|
||||||
|
if o0 = ssz.ReadOffset(buf[0:4]); o0 > size {
|
||||||
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
if err = s.Message.UnmarshalSSZ(buf[0:220]); err != nil {
|
|
||||||
return err
|
if o0 != 100 {
|
||||||
|
return ssz.ErrInvalidVariableOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (1) 'Signature'
|
// Field (1) 'Signature'
|
||||||
if cap(s.Signature) == 0 {
|
if cap(s.Signature) == 0 {
|
||||||
s.Signature = make([]byte, 0, len(buf[220:316]))
|
s.Signature = make([]byte, 0, len(buf[4:100]))
|
||||||
}
|
}
|
||||||
s.Signature = append(s.Signature, buf[220:316]...)
|
s.Signature = append(s.Signature, buf[4:100]...)
|
||||||
|
|
||||||
|
// Field (0) 'Message'
|
||||||
|
{
|
||||||
|
buf = tail[o0:]
|
||||||
|
if s.Message == nil {
|
||||||
|
s.Message = new(ExecutionPayloadBid)
|
||||||
|
}
|
||||||
|
if err = s.Message.UnmarshalSSZ(buf); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SizeSSZ returns the ssz encoded size in bytes for the SignedExecutionPayloadBid object
|
// SizeSSZ returns the ssz encoded size in bytes for the SignedExecutionPayloadBid object
|
||||||
func (s *SignedExecutionPayloadBid) SizeSSZ() (size int) {
|
func (s *SignedExecutionPayloadBid) SizeSSZ() (size int) {
|
||||||
size = 316
|
size = 100
|
||||||
|
|
||||||
|
// Field (0) 'Message'
|
||||||
|
if s.Message == nil {
|
||||||
|
s.Message = new(ExecutionPayloadBid)
|
||||||
|
}
|
||||||
|
size += s.Message.SizeSSZ()
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -742,7 +816,7 @@ func (b *BeaconBlockBodyGloas) MarshalSSZ() ([]byte, error) {
|
|||||||
// MarshalSSZTo ssz marshals the BeaconBlockBodyGloas object to a target array
|
// MarshalSSZTo ssz marshals the BeaconBlockBodyGloas object to a target array
|
||||||
func (b *BeaconBlockBodyGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
func (b *BeaconBlockBodyGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
dst = buf
|
dst = buf
|
||||||
offset := int(704)
|
offset := int(392)
|
||||||
|
|
||||||
// Field (0) 'RandaoReveal'
|
// Field (0) 'RandaoReveal'
|
||||||
if size := len(b.RandaoReveal); size != 96 {
|
if size := len(b.RandaoReveal); size != 96 {
|
||||||
@@ -804,13 +878,12 @@ func (b *BeaconBlockBodyGloas) MarshalSSZTo(buf []byte) (dst []byte, err error)
|
|||||||
dst = ssz.WriteOffset(dst, offset)
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
offset += len(b.BlsToExecutionChanges) * 172
|
offset += len(b.BlsToExecutionChanges) * 172
|
||||||
|
|
||||||
// Field (10) 'SignedExecutionPayloadBid'
|
// Offset (10) 'SignedExecutionPayloadBid'
|
||||||
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
if b.SignedExecutionPayloadBid == nil {
|
if b.SignedExecutionPayloadBid == nil {
|
||||||
b.SignedExecutionPayloadBid = new(SignedExecutionPayloadBid)
|
b.SignedExecutionPayloadBid = new(SignedExecutionPayloadBid)
|
||||||
}
|
}
|
||||||
if dst, err = b.SignedExecutionPayloadBid.MarshalSSZTo(dst); err != nil {
|
offset += b.SignedExecutionPayloadBid.SizeSSZ()
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Offset (11) 'PayloadAttestations'
|
// Offset (11) 'PayloadAttestations'
|
||||||
dst = ssz.WriteOffset(dst, offset)
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
@@ -896,6 +969,11 @@ func (b *BeaconBlockBodyGloas) MarshalSSZTo(buf []byte) (dst []byte, err error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Field (10) 'SignedExecutionPayloadBid'
|
||||||
|
if dst, err = b.SignedExecutionPayloadBid.MarshalSSZTo(dst); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Field (11) 'PayloadAttestations'
|
// Field (11) 'PayloadAttestations'
|
||||||
if size := len(b.PayloadAttestations); size > 4 {
|
if size := len(b.PayloadAttestations); size > 4 {
|
||||||
err = ssz.ErrListTooBigFn("--.PayloadAttestations", size, 4)
|
err = ssz.ErrListTooBigFn("--.PayloadAttestations", size, 4)
|
||||||
@@ -914,12 +992,12 @@ func (b *BeaconBlockBodyGloas) MarshalSSZTo(buf []byte) (dst []byte, err error)
|
|||||||
func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
size := uint64(len(buf))
|
size := uint64(len(buf))
|
||||||
if size < 704 {
|
if size < 392 {
|
||||||
return ssz.ErrSize
|
return ssz.ErrSize
|
||||||
}
|
}
|
||||||
|
|
||||||
tail := buf
|
tail := buf
|
||||||
var o3, o4, o5, o6, o7, o9, o11 uint64
|
var o3, o4, o5, o6, o7, o9, o10, o11 uint64
|
||||||
|
|
||||||
// Field (0) 'RandaoReveal'
|
// Field (0) 'RandaoReveal'
|
||||||
if cap(b.RandaoReveal) == 0 {
|
if cap(b.RandaoReveal) == 0 {
|
||||||
@@ -946,7 +1024,7 @@ func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
if o3 != 704 {
|
if o3 != 392 {
|
||||||
return ssz.ErrInvalidVariableOffset
|
return ssz.ErrInvalidVariableOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -983,16 +1061,13 @@ func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (10) 'SignedExecutionPayloadBid'
|
// Offset (10) 'SignedExecutionPayloadBid'
|
||||||
if b.SignedExecutionPayloadBid == nil {
|
if o10 = ssz.ReadOffset(buf[384:388]); o10 > size || o9 > o10 {
|
||||||
b.SignedExecutionPayloadBid = new(SignedExecutionPayloadBid)
|
return ssz.ErrOffset
|
||||||
}
|
|
||||||
if err = b.SignedExecutionPayloadBid.UnmarshalSSZ(buf[384:700]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (11) 'PayloadAttestations'
|
// Offset (11) 'PayloadAttestations'
|
||||||
if o11 = ssz.ReadOffset(buf[700:704]); o11 > size || o9 > o11 {
|
if o11 = ssz.ReadOffset(buf[388:392]); o11 > size || o10 > o11 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1096,7 +1171,7 @@ func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
|
|
||||||
// Field (9) 'BlsToExecutionChanges'
|
// Field (9) 'BlsToExecutionChanges'
|
||||||
{
|
{
|
||||||
buf = tail[o9:o11]
|
buf = tail[o9:o10]
|
||||||
num, err := ssz.DivideInt2(len(buf), 172, 16)
|
num, err := ssz.DivideInt2(len(buf), 172, 16)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -1112,6 +1187,17 @@ func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Field (10) 'SignedExecutionPayloadBid'
|
||||||
|
{
|
||||||
|
buf = tail[o10:o11]
|
||||||
|
if b.SignedExecutionPayloadBid == nil {
|
||||||
|
b.SignedExecutionPayloadBid = new(SignedExecutionPayloadBid)
|
||||||
|
}
|
||||||
|
if err = b.SignedExecutionPayloadBid.UnmarshalSSZ(buf); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Field (11) 'PayloadAttestations'
|
// Field (11) 'PayloadAttestations'
|
||||||
{
|
{
|
||||||
buf = tail[o11:]
|
buf = tail[o11:]
|
||||||
@@ -1134,7 +1220,7 @@ func (b *BeaconBlockBodyGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
|
|
||||||
// SizeSSZ returns the ssz encoded size in bytes for the BeaconBlockBodyGloas object
|
// SizeSSZ returns the ssz encoded size in bytes for the BeaconBlockBodyGloas object
|
||||||
func (b *BeaconBlockBodyGloas) SizeSSZ() (size int) {
|
func (b *BeaconBlockBodyGloas) SizeSSZ() (size int) {
|
||||||
size = 704
|
size = 392
|
||||||
|
|
||||||
// Field (3) 'ProposerSlashings'
|
// Field (3) 'ProposerSlashings'
|
||||||
size += len(b.ProposerSlashings) * 416
|
size += len(b.ProposerSlashings) * 416
|
||||||
@@ -1160,6 +1246,12 @@ func (b *BeaconBlockBodyGloas) SizeSSZ() (size int) {
|
|||||||
// Field (9) 'BlsToExecutionChanges'
|
// Field (9) 'BlsToExecutionChanges'
|
||||||
size += len(b.BlsToExecutionChanges) * 172
|
size += len(b.BlsToExecutionChanges) * 172
|
||||||
|
|
||||||
|
// Field (10) 'SignedExecutionPayloadBid'
|
||||||
|
if b.SignedExecutionPayloadBid == nil {
|
||||||
|
b.SignedExecutionPayloadBid = new(SignedExecutionPayloadBid)
|
||||||
|
}
|
||||||
|
size += b.SignedExecutionPayloadBid.SizeSSZ()
|
||||||
|
|
||||||
// Field (11) 'PayloadAttestations'
|
// Field (11) 'PayloadAttestations'
|
||||||
size += len(b.PayloadAttestations) * 202
|
size += len(b.PayloadAttestations) * 202
|
||||||
|
|
||||||
@@ -1437,7 +1529,7 @@ func (b *BeaconStateGloas) MarshalSSZ() ([]byte, error) {
|
|||||||
// MarshalSSZTo ssz marshals the BeaconStateGloas object to a target array
|
// MarshalSSZTo ssz marshals the BeaconStateGloas object to a target array
|
||||||
func (b *BeaconStateGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
func (b *BeaconStateGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
dst = buf
|
dst = buf
|
||||||
offset := int(2741333)
|
offset := int(2741117)
|
||||||
|
|
||||||
// Field (0) 'GenesisTime'
|
// Field (0) 'GenesisTime'
|
||||||
dst = ssz.MarshalUint64(dst, b.GenesisTime)
|
dst = ssz.MarshalUint64(dst, b.GenesisTime)
|
||||||
@@ -1602,13 +1694,12 @@ func (b *BeaconStateGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (24) 'LatestExecutionPayloadBid'
|
// Offset (24) 'LatestExecutionPayloadBid'
|
||||||
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
if b.LatestExecutionPayloadBid == nil {
|
if b.LatestExecutionPayloadBid == nil {
|
||||||
b.LatestExecutionPayloadBid = new(ExecutionPayloadBid)
|
b.LatestExecutionPayloadBid = new(ExecutionPayloadBid)
|
||||||
}
|
}
|
||||||
if dst, err = b.LatestExecutionPayloadBid.MarshalSSZTo(dst); err != nil {
|
offset += b.LatestExecutionPayloadBid.SizeSSZ()
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (25) 'NextWithdrawalIndex'
|
// Field (25) 'NextWithdrawalIndex'
|
||||||
dst = ssz.MarshalUint64(dst, b.NextWithdrawalIndex)
|
dst = ssz.MarshalUint64(dst, b.NextWithdrawalIndex)
|
||||||
@@ -1766,6 +1857,11 @@ func (b *BeaconStateGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
|||||||
dst = ssz.MarshalUint64(dst, b.InactivityScores[ii])
|
dst = ssz.MarshalUint64(dst, b.InactivityScores[ii])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Field (24) 'LatestExecutionPayloadBid'
|
||||||
|
if dst, err = b.LatestExecutionPayloadBid.MarshalSSZTo(dst); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Field (27) 'HistoricalSummaries'
|
// Field (27) 'HistoricalSummaries'
|
||||||
if size := len(b.HistoricalSummaries); size > 16777216 {
|
if size := len(b.HistoricalSummaries); size > 16777216 {
|
||||||
err = ssz.ErrListTooBigFn("--.HistoricalSummaries", size, 16777216)
|
err = ssz.ErrListTooBigFn("--.HistoricalSummaries", size, 16777216)
|
||||||
@@ -1850,12 +1946,12 @@ func (b *BeaconStateGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
|||||||
func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
size := uint64(len(buf))
|
size := uint64(len(buf))
|
||||||
if size < 2741333 {
|
if size < 2741117 {
|
||||||
return ssz.ErrSize
|
return ssz.ErrSize
|
||||||
}
|
}
|
||||||
|
|
||||||
tail := buf
|
tail := buf
|
||||||
var o7, o9, o11, o12, o15, o16, o21, o27, o34, o35, o36, o38, o42, o44 uint64
|
var o7, o9, o11, o12, o15, o16, o21, o24, o27, o34, o35, o36, o38, o42, o44 uint64
|
||||||
|
|
||||||
// Field (0) 'GenesisTime'
|
// Field (0) 'GenesisTime'
|
||||||
b.GenesisTime = ssz.UnmarshallUint64(buf[0:8])
|
b.GenesisTime = ssz.UnmarshallUint64(buf[0:8])
|
||||||
@@ -1908,7 +2004,7 @@ func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
if o7 != 2741333 {
|
if o7 != 2741117 {
|
||||||
return ssz.ErrInvalidVariableOffset
|
return ssz.ErrInvalidVariableOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2014,77 +2110,74 @@ func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (24) 'LatestExecutionPayloadBid'
|
// Offset (24) 'LatestExecutionPayloadBid'
|
||||||
if b.LatestExecutionPayloadBid == nil {
|
if o24 = ssz.ReadOffset(buf[2736629:2736633]); o24 > size || o21 > o24 {
|
||||||
b.LatestExecutionPayloadBid = new(ExecutionPayloadBid)
|
return ssz.ErrOffset
|
||||||
}
|
|
||||||
if err = b.LatestExecutionPayloadBid.UnmarshalSSZ(buf[2736629:2736849]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (25) 'NextWithdrawalIndex'
|
// Field (25) 'NextWithdrawalIndex'
|
||||||
b.NextWithdrawalIndex = ssz.UnmarshallUint64(buf[2736849:2736857])
|
b.NextWithdrawalIndex = ssz.UnmarshallUint64(buf[2736633:2736641])
|
||||||
|
|
||||||
// Field (26) 'NextWithdrawalValidatorIndex'
|
// Field (26) 'NextWithdrawalValidatorIndex'
|
||||||
b.NextWithdrawalValidatorIndex = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.ValidatorIndex(ssz.UnmarshallUint64(buf[2736857:2736865]))
|
b.NextWithdrawalValidatorIndex = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.ValidatorIndex(ssz.UnmarshallUint64(buf[2736641:2736649]))
|
||||||
|
|
||||||
// Offset (27) 'HistoricalSummaries'
|
// Offset (27) 'HistoricalSummaries'
|
||||||
if o27 = ssz.ReadOffset(buf[2736865:2736869]); o27 > size || o21 > o27 {
|
if o27 = ssz.ReadOffset(buf[2736649:2736653]); o27 > size || o24 > o27 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (28) 'DepositRequestsStartIndex'
|
// Field (28) 'DepositRequestsStartIndex'
|
||||||
b.DepositRequestsStartIndex = ssz.UnmarshallUint64(buf[2736869:2736877])
|
b.DepositRequestsStartIndex = ssz.UnmarshallUint64(buf[2736653:2736661])
|
||||||
|
|
||||||
// Field (29) 'DepositBalanceToConsume'
|
// Field (29) 'DepositBalanceToConsume'
|
||||||
b.DepositBalanceToConsume = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[2736877:2736885]))
|
b.DepositBalanceToConsume = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[2736661:2736669]))
|
||||||
|
|
||||||
// Field (30) 'ExitBalanceToConsume'
|
// Field (30) 'ExitBalanceToConsume'
|
||||||
b.ExitBalanceToConsume = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[2736885:2736893]))
|
b.ExitBalanceToConsume = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[2736669:2736677]))
|
||||||
|
|
||||||
// Field (31) 'EarliestExitEpoch'
|
// Field (31) 'EarliestExitEpoch'
|
||||||
b.EarliestExitEpoch = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Epoch(ssz.UnmarshallUint64(buf[2736893:2736901]))
|
b.EarliestExitEpoch = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Epoch(ssz.UnmarshallUint64(buf[2736677:2736685]))
|
||||||
|
|
||||||
// Field (32) 'ConsolidationBalanceToConsume'
|
// Field (32) 'ConsolidationBalanceToConsume'
|
||||||
b.ConsolidationBalanceToConsume = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[2736901:2736909]))
|
b.ConsolidationBalanceToConsume = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Gwei(ssz.UnmarshallUint64(buf[2736685:2736693]))
|
||||||
|
|
||||||
// Field (33) 'EarliestConsolidationEpoch'
|
// Field (33) 'EarliestConsolidationEpoch'
|
||||||
b.EarliestConsolidationEpoch = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Epoch(ssz.UnmarshallUint64(buf[2736909:2736917]))
|
b.EarliestConsolidationEpoch = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Epoch(ssz.UnmarshallUint64(buf[2736693:2736701]))
|
||||||
|
|
||||||
// Offset (34) 'PendingDeposits'
|
// Offset (34) 'PendingDeposits'
|
||||||
if o34 = ssz.ReadOffset(buf[2736917:2736921]); o34 > size || o27 > o34 {
|
if o34 = ssz.ReadOffset(buf[2736701:2736705]); o34 > size || o27 > o34 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (35) 'PendingPartialWithdrawals'
|
// Offset (35) 'PendingPartialWithdrawals'
|
||||||
if o35 = ssz.ReadOffset(buf[2736921:2736925]); o35 > size || o34 > o35 {
|
if o35 = ssz.ReadOffset(buf[2736705:2736709]); o35 > size || o34 > o35 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (36) 'PendingConsolidations'
|
// Offset (36) 'PendingConsolidations'
|
||||||
if o36 = ssz.ReadOffset(buf[2736925:2736929]); o36 > size || o35 > o36 {
|
if o36 = ssz.ReadOffset(buf[2736709:2736713]); o36 > size || o35 > o36 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (37) 'ProposerLookahead'
|
// Field (37) 'ProposerLookahead'
|
||||||
b.ProposerLookahead = ssz.ExtendUint64(b.ProposerLookahead, 64)
|
b.ProposerLookahead = ssz.ExtendUint64(b.ProposerLookahead, 64)
|
||||||
for ii := 0; ii < 64; ii++ {
|
for ii := 0; ii < 64; ii++ {
|
||||||
b.ProposerLookahead[ii] = ssz.UnmarshallUint64(buf[2736929:2737441][ii*8 : (ii+1)*8])
|
b.ProposerLookahead[ii] = ssz.UnmarshallUint64(buf[2736713:2737225][ii*8 : (ii+1)*8])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (38) 'Builders'
|
// Offset (38) 'Builders'
|
||||||
if o38 = ssz.ReadOffset(buf[2737441:2737445]); o38 > size || o36 > o38 {
|
if o38 = ssz.ReadOffset(buf[2737225:2737229]); o38 > size || o36 > o38 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (39) 'NextWithdrawalBuilderIndex'
|
// Field (39) 'NextWithdrawalBuilderIndex'
|
||||||
b.NextWithdrawalBuilderIndex = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex(ssz.UnmarshallUint64(buf[2737445:2737453]))
|
b.NextWithdrawalBuilderIndex = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.BuilderIndex(ssz.UnmarshallUint64(buf[2737229:2737237]))
|
||||||
|
|
||||||
// Field (40) 'ExecutionPayloadAvailability'
|
// Field (40) 'ExecutionPayloadAvailability'
|
||||||
if cap(b.ExecutionPayloadAvailability) == 0 {
|
if cap(b.ExecutionPayloadAvailability) == 0 {
|
||||||
b.ExecutionPayloadAvailability = make([]byte, 0, len(buf[2737453:2738477]))
|
b.ExecutionPayloadAvailability = make([]byte, 0, len(buf[2737237:2738261]))
|
||||||
}
|
}
|
||||||
b.ExecutionPayloadAvailability = append(b.ExecutionPayloadAvailability, buf[2737453:2738477]...)
|
b.ExecutionPayloadAvailability = append(b.ExecutionPayloadAvailability, buf[2737237:2738261]...)
|
||||||
|
|
||||||
// Field (41) 'BuilderPendingPayments'
|
// Field (41) 'BuilderPendingPayments'
|
||||||
b.BuilderPendingPayments = make([]*BuilderPendingPayment, 64)
|
b.BuilderPendingPayments = make([]*BuilderPendingPayment, 64)
|
||||||
@@ -2092,24 +2185,24 @@ func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
if b.BuilderPendingPayments[ii] == nil {
|
if b.BuilderPendingPayments[ii] == nil {
|
||||||
b.BuilderPendingPayments[ii] = new(BuilderPendingPayment)
|
b.BuilderPendingPayments[ii] = new(BuilderPendingPayment)
|
||||||
}
|
}
|
||||||
if err = b.BuilderPendingPayments[ii].UnmarshalSSZ(buf[2738477:2741293][ii*44 : (ii+1)*44]); err != nil {
|
if err = b.BuilderPendingPayments[ii].UnmarshalSSZ(buf[2738261:2741077][ii*44 : (ii+1)*44]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (42) 'BuilderPendingWithdrawals'
|
// Offset (42) 'BuilderPendingWithdrawals'
|
||||||
if o42 = ssz.ReadOffset(buf[2741293:2741297]); o42 > size || o38 > o42 {
|
if o42 = ssz.ReadOffset(buf[2741077:2741081]); o42 > size || o38 > o42 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (43) 'LatestBlockHash'
|
// Field (43) 'LatestBlockHash'
|
||||||
if cap(b.LatestBlockHash) == 0 {
|
if cap(b.LatestBlockHash) == 0 {
|
||||||
b.LatestBlockHash = make([]byte, 0, len(buf[2741297:2741329]))
|
b.LatestBlockHash = make([]byte, 0, len(buf[2741081:2741113]))
|
||||||
}
|
}
|
||||||
b.LatestBlockHash = append(b.LatestBlockHash, buf[2741297:2741329]...)
|
b.LatestBlockHash = append(b.LatestBlockHash, buf[2741081:2741113]...)
|
||||||
|
|
||||||
// Offset (44) 'PayloadExpectedWithdrawals'
|
// Offset (44) 'PayloadExpectedWithdrawals'
|
||||||
if o44 = ssz.ReadOffset(buf[2741329:2741333]); o44 > size || o42 > o44 {
|
if o44 = ssz.ReadOffset(buf[2741113:2741117]); o44 > size || o42 > o44 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2204,7 +2297,7 @@ func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
|
|
||||||
// Field (21) 'InactivityScores'
|
// Field (21) 'InactivityScores'
|
||||||
{
|
{
|
||||||
buf = tail[o21:o27]
|
buf = tail[o21:o24]
|
||||||
num, err := ssz.DivideInt2(len(buf), 8, 1099511627776)
|
num, err := ssz.DivideInt2(len(buf), 8, 1099511627776)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -2215,6 +2308,17 @@ func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Field (24) 'LatestExecutionPayloadBid'
|
||||||
|
{
|
||||||
|
buf = tail[o24:o27]
|
||||||
|
if b.LatestExecutionPayloadBid == nil {
|
||||||
|
b.LatestExecutionPayloadBid = new(ExecutionPayloadBid)
|
||||||
|
}
|
||||||
|
if err = b.LatestExecutionPayloadBid.UnmarshalSSZ(buf); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Field (27) 'HistoricalSummaries'
|
// Field (27) 'HistoricalSummaries'
|
||||||
{
|
{
|
||||||
buf = tail[o27:o34]
|
buf = tail[o27:o34]
|
||||||
@@ -2345,7 +2449,7 @@ func (b *BeaconStateGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
|
|
||||||
// SizeSSZ returns the ssz encoded size in bytes for the BeaconStateGloas object
|
// SizeSSZ returns the ssz encoded size in bytes for the BeaconStateGloas object
|
||||||
func (b *BeaconStateGloas) SizeSSZ() (size int) {
|
func (b *BeaconStateGloas) SizeSSZ() (size int) {
|
||||||
size = 2741333
|
size = 2741117
|
||||||
|
|
||||||
// Field (7) 'HistoricalRoots'
|
// Field (7) 'HistoricalRoots'
|
||||||
size += len(b.HistoricalRoots) * 32
|
size += len(b.HistoricalRoots) * 32
|
||||||
@@ -2368,6 +2472,12 @@ func (b *BeaconStateGloas) SizeSSZ() (size int) {
|
|||||||
// Field (21) 'InactivityScores'
|
// Field (21) 'InactivityScores'
|
||||||
size += len(b.InactivityScores) * 8
|
size += len(b.InactivityScores) * 8
|
||||||
|
|
||||||
|
// Field (24) 'LatestExecutionPayloadBid'
|
||||||
|
if b.LatestExecutionPayloadBid == nil {
|
||||||
|
b.LatestExecutionPayloadBid = new(ExecutionPayloadBid)
|
||||||
|
}
|
||||||
|
size += b.LatestExecutionPayloadBid.SizeSSZ()
|
||||||
|
|
||||||
// Field (27) 'HistoricalSummaries'
|
// Field (27) 'HistoricalSummaries'
|
||||||
size += len(b.HistoricalSummaries) * 64
|
size += len(b.HistoricalSummaries) * 64
|
||||||
|
|
||||||
@@ -2981,7 +3091,7 @@ func (d *DataColumnSidecarGloas) MarshalSSZ() ([]byte, error) {
|
|||||||
// MarshalSSZTo ssz marshals the DataColumnSidecarGloas object to a target array
|
// MarshalSSZTo ssz marshals the DataColumnSidecarGloas object to a target array
|
||||||
func (d *DataColumnSidecarGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
func (d *DataColumnSidecarGloas) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
dst = buf
|
dst = buf
|
||||||
offset := int(60)
|
offset := int(56)
|
||||||
|
|
||||||
// Field (0) 'Index'
|
// Field (0) 'Index'
|
||||||
dst = ssz.MarshalUint64(dst, d.Index)
|
dst = ssz.MarshalUint64(dst, d.Index)
|
||||||
@@ -2990,18 +3100,14 @@ func (d *DataColumnSidecarGloas) MarshalSSZTo(buf []byte) (dst []byte, err error
|
|||||||
dst = ssz.WriteOffset(dst, offset)
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
offset += len(d.Column) * 2048
|
offset += len(d.Column) * 2048
|
||||||
|
|
||||||
// Offset (2) 'KzgCommitments'
|
// Offset (2) 'KzgProofs'
|
||||||
dst = ssz.WriteOffset(dst, offset)
|
|
||||||
offset += len(d.KzgCommitments) * 48
|
|
||||||
|
|
||||||
// Offset (3) 'KzgProofs'
|
|
||||||
dst = ssz.WriteOffset(dst, offset)
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
offset += len(d.KzgProofs) * 48
|
offset += len(d.KzgProofs) * 48
|
||||||
|
|
||||||
// Field (4) 'Slot'
|
// Field (3) 'Slot'
|
||||||
dst = ssz.MarshalUint64(dst, uint64(d.Slot))
|
dst = ssz.MarshalUint64(dst, uint64(d.Slot))
|
||||||
|
|
||||||
// Field (5) 'BeaconBlockRoot'
|
// Field (4) 'BeaconBlockRoot'
|
||||||
if size := len(d.BeaconBlockRoot); size != 32 {
|
if size := len(d.BeaconBlockRoot); size != 32 {
|
||||||
err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32)
|
err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32)
|
||||||
return
|
return
|
||||||
@@ -3021,20 +3127,7 @@ func (d *DataColumnSidecarGloas) MarshalSSZTo(buf []byte) (dst []byte, err error
|
|||||||
dst = append(dst, d.Column[ii]...)
|
dst = append(dst, d.Column[ii]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (2) 'KzgCommitments'
|
// Field (2) 'KzgProofs'
|
||||||
if size := len(d.KzgCommitments); size > 4096 {
|
|
||||||
err = ssz.ErrListTooBigFn("--.KzgCommitments", size, 4096)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for ii := 0; ii < len(d.KzgCommitments); ii++ {
|
|
||||||
if size := len(d.KzgCommitments[ii]); size != 48 {
|
|
||||||
err = ssz.ErrBytesLengthFn("--.KzgCommitments[ii]", size, 48)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dst = append(dst, d.KzgCommitments[ii]...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (3) 'KzgProofs'
|
|
||||||
if size := len(d.KzgProofs); size > 4096 {
|
if size := len(d.KzgProofs); size > 4096 {
|
||||||
err = ssz.ErrListTooBigFn("--.KzgProofs", size, 4096)
|
err = ssz.ErrListTooBigFn("--.KzgProofs", size, 4096)
|
||||||
return
|
return
|
||||||
@@ -3054,12 +3147,12 @@ func (d *DataColumnSidecarGloas) MarshalSSZTo(buf []byte) (dst []byte, err error
|
|||||||
func (d *DataColumnSidecarGloas) UnmarshalSSZ(buf []byte) error {
|
func (d *DataColumnSidecarGloas) UnmarshalSSZ(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
size := uint64(len(buf))
|
size := uint64(len(buf))
|
||||||
if size < 60 {
|
if size < 56 {
|
||||||
return ssz.ErrSize
|
return ssz.ErrSize
|
||||||
}
|
}
|
||||||
|
|
||||||
tail := buf
|
tail := buf
|
||||||
var o1, o2, o3 uint64
|
var o1, o2 uint64
|
||||||
|
|
||||||
// Field (0) 'Index'
|
// Field (0) 'Index'
|
||||||
d.Index = ssz.UnmarshallUint64(buf[0:8])
|
d.Index = ssz.UnmarshallUint64(buf[0:8])
|
||||||
@@ -3069,28 +3162,23 @@ func (d *DataColumnSidecarGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
if o1 != 60 {
|
if o1 != 56 {
|
||||||
return ssz.ErrInvalidVariableOffset
|
return ssz.ErrInvalidVariableOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (2) 'KzgCommitments'
|
// Offset (2) 'KzgProofs'
|
||||||
if o2 = ssz.ReadOffset(buf[12:16]); o2 > size || o1 > o2 {
|
if o2 = ssz.ReadOffset(buf[12:16]); o2 > size || o1 > o2 {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
// Offset (3) 'KzgProofs'
|
// Field (3) 'Slot'
|
||||||
if o3 = ssz.ReadOffset(buf[16:20]); o3 > size || o2 > o3 {
|
d.Slot = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Slot(ssz.UnmarshallUint64(buf[16:24]))
|
||||||
return ssz.ErrOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (4) 'Slot'
|
// Field (4) 'BeaconBlockRoot'
|
||||||
d.Slot = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Slot(ssz.UnmarshallUint64(buf[20:28]))
|
|
||||||
|
|
||||||
// Field (5) 'BeaconBlockRoot'
|
|
||||||
if cap(d.BeaconBlockRoot) == 0 {
|
if cap(d.BeaconBlockRoot) == 0 {
|
||||||
d.BeaconBlockRoot = make([]byte, 0, len(buf[28:60]))
|
d.BeaconBlockRoot = make([]byte, 0, len(buf[24:56]))
|
||||||
}
|
}
|
||||||
d.BeaconBlockRoot = append(d.BeaconBlockRoot, buf[28:60]...)
|
d.BeaconBlockRoot = append(d.BeaconBlockRoot, buf[24:56]...)
|
||||||
|
|
||||||
// Field (1) 'Column'
|
// Field (1) 'Column'
|
||||||
{
|
{
|
||||||
@@ -3108,25 +3196,9 @@ func (d *DataColumnSidecarGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (2) 'KzgCommitments'
|
// Field (2) 'KzgProofs'
|
||||||
{
|
{
|
||||||
buf = tail[o2:o3]
|
buf = tail[o2:]
|
||||||
num, err := ssz.DivideInt2(len(buf), 48, 4096)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
d.KzgCommitments = make([][]byte, num)
|
|
||||||
for ii := 0; ii < num; ii++ {
|
|
||||||
if cap(d.KzgCommitments[ii]) == 0 {
|
|
||||||
d.KzgCommitments[ii] = make([]byte, 0, len(buf[ii*48:(ii+1)*48]))
|
|
||||||
}
|
|
||||||
d.KzgCommitments[ii] = append(d.KzgCommitments[ii], buf[ii*48:(ii+1)*48]...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (3) 'KzgProofs'
|
|
||||||
{
|
|
||||||
buf = tail[o3:]
|
|
||||||
num, err := ssz.DivideInt2(len(buf), 48, 4096)
|
num, err := ssz.DivideInt2(len(buf), 48, 4096)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -3144,15 +3216,12 @@ func (d *DataColumnSidecarGloas) UnmarshalSSZ(buf []byte) error {
|
|||||||
|
|
||||||
// SizeSSZ returns the ssz encoded size in bytes for the DataColumnSidecarGloas object
|
// SizeSSZ returns the ssz encoded size in bytes for the DataColumnSidecarGloas object
|
||||||
func (d *DataColumnSidecarGloas) SizeSSZ() (size int) {
|
func (d *DataColumnSidecarGloas) SizeSSZ() (size int) {
|
||||||
size = 60
|
size = 56
|
||||||
|
|
||||||
// Field (1) 'Column'
|
// Field (1) 'Column'
|
||||||
size += len(d.Column) * 2048
|
size += len(d.Column) * 2048
|
||||||
|
|
||||||
// Field (2) 'KzgCommitments'
|
// Field (2) 'KzgProofs'
|
||||||
size += len(d.KzgCommitments) * 48
|
|
||||||
|
|
||||||
// Field (3) 'KzgProofs'
|
|
||||||
size += len(d.KzgProofs) * 48
|
size += len(d.KzgProofs) * 48
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -3189,26 +3258,7 @@ func (d *DataColumnSidecarGloas) HashTreeRootWith(hh *ssz.Hasher) (err error) {
|
|||||||
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (2) 'KzgCommitments'
|
// Field (2) 'KzgProofs'
|
||||||
{
|
|
||||||
if size := len(d.KzgCommitments); size > 4096 {
|
|
||||||
err = ssz.ErrListTooBigFn("--.KzgCommitments", size, 4096)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
subIndx := hh.Index()
|
|
||||||
for _, i := range d.KzgCommitments {
|
|
||||||
if len(i) != 48 {
|
|
||||||
err = ssz.ErrBytesLength
|
|
||||||
return
|
|
||||||
}
|
|
||||||
hh.PutBytes(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
numItems := uint64(len(d.KzgCommitments))
|
|
||||||
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (3) 'KzgProofs'
|
|
||||||
{
|
{
|
||||||
if size := len(d.KzgProofs); size > 4096 {
|
if size := len(d.KzgProofs); size > 4096 {
|
||||||
err = ssz.ErrListTooBigFn("--.KzgProofs", size, 4096)
|
err = ssz.ErrListTooBigFn("--.KzgProofs", size, 4096)
|
||||||
@@ -3227,10 +3277,10 @@ func (d *DataColumnSidecarGloas) HashTreeRootWith(hh *ssz.Hasher) (err error) {
|
|||||||
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (4) 'Slot'
|
// Field (3) 'Slot'
|
||||||
hh.PutUint64(uint64(d.Slot))
|
hh.PutUint64(uint64(d.Slot))
|
||||||
|
|
||||||
// Field (5) 'BeaconBlockRoot'
|
// Field (4) 'BeaconBlockRoot'
|
||||||
if size := len(d.BeaconBlockRoot); size != 32 {
|
if size := len(d.BeaconBlockRoot); size != 32 {
|
||||||
err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32)
|
err = ssz.ErrBytesLengthFn("--.BeaconBlockRoot", size, 32)
|
||||||
return
|
return
|
||||||
@@ -3249,7 +3299,7 @@ func (e *ExecutionPayloadEnvelope) MarshalSSZ() ([]byte, error) {
|
|||||||
// MarshalSSZTo ssz marshals the ExecutionPayloadEnvelope object to a target array
|
// MarshalSSZTo ssz marshals the ExecutionPayloadEnvelope object to a target array
|
||||||
func (e *ExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
func (e *ExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err error) {
|
||||||
dst = buf
|
dst = buf
|
||||||
offset := int(92)
|
offset := int(88)
|
||||||
|
|
||||||
// Offset (0) 'Payload'
|
// Offset (0) 'Payload'
|
||||||
dst = ssz.WriteOffset(dst, offset)
|
dst = ssz.WriteOffset(dst, offset)
|
||||||
@@ -3278,11 +3328,7 @@ func (e *ExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err err
|
|||||||
// Field (4) 'Slot'
|
// Field (4) 'Slot'
|
||||||
dst = ssz.MarshalUint64(dst, uint64(e.Slot))
|
dst = ssz.MarshalUint64(dst, uint64(e.Slot))
|
||||||
|
|
||||||
// Offset (5) 'BlobKzgCommitments'
|
// Field (5) 'StateRoot'
|
||||||
dst = ssz.WriteOffset(dst, offset)
|
|
||||||
offset += len(e.BlobKzgCommitments) * 48
|
|
||||||
|
|
||||||
// Field (6) 'StateRoot'
|
|
||||||
if size := len(e.StateRoot); size != 32 {
|
if size := len(e.StateRoot); size != 32 {
|
||||||
err = ssz.ErrBytesLengthFn("--.StateRoot", size, 32)
|
err = ssz.ErrBytesLengthFn("--.StateRoot", size, 32)
|
||||||
return
|
return
|
||||||
@@ -3299,19 +3345,6 @@ func (e *ExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (5) 'BlobKzgCommitments'
|
|
||||||
if size := len(e.BlobKzgCommitments); size > 4096 {
|
|
||||||
err = ssz.ErrListTooBigFn("--.BlobKzgCommitments", size, 4096)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for ii := 0; ii < len(e.BlobKzgCommitments); ii++ {
|
|
||||||
if size := len(e.BlobKzgCommitments[ii]); size != 48 {
|
|
||||||
err = ssz.ErrBytesLengthFn("--.BlobKzgCommitments[ii]", size, 48)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
dst = append(dst, e.BlobKzgCommitments[ii]...)
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3319,19 +3352,19 @@ func (e *ExecutionPayloadEnvelope) MarshalSSZTo(buf []byte) (dst []byte, err err
|
|||||||
func (e *ExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error {
|
func (e *ExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error {
|
||||||
var err error
|
var err error
|
||||||
size := uint64(len(buf))
|
size := uint64(len(buf))
|
||||||
if size < 92 {
|
if size < 88 {
|
||||||
return ssz.ErrSize
|
return ssz.ErrSize
|
||||||
}
|
}
|
||||||
|
|
||||||
tail := buf
|
tail := buf
|
||||||
var o0, o1, o5 uint64
|
var o0, o1 uint64
|
||||||
|
|
||||||
// Offset (0) 'Payload'
|
// Offset (0) 'Payload'
|
||||||
if o0 = ssz.ReadOffset(buf[0:4]); o0 > size {
|
if o0 = ssz.ReadOffset(buf[0:4]); o0 > size {
|
||||||
return ssz.ErrOffset
|
return ssz.ErrOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
if o0 != 92 {
|
if o0 != 88 {
|
||||||
return ssz.ErrInvalidVariableOffset
|
return ssz.ErrInvalidVariableOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3352,16 +3385,11 @@ func (e *ExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error {
|
|||||||
// Field (4) 'Slot'
|
// Field (4) 'Slot'
|
||||||
e.Slot = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Slot(ssz.UnmarshallUint64(buf[48:56]))
|
e.Slot = github_com_OffchainLabs_prysm_v7_consensus_types_primitives.Slot(ssz.UnmarshallUint64(buf[48:56]))
|
||||||
|
|
||||||
// Offset (5) 'BlobKzgCommitments'
|
// Field (5) 'StateRoot'
|
||||||
if o5 = ssz.ReadOffset(buf[56:60]); o5 > size || o1 > o5 {
|
|
||||||
return ssz.ErrOffset
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (6) 'StateRoot'
|
|
||||||
if cap(e.StateRoot) == 0 {
|
if cap(e.StateRoot) == 0 {
|
||||||
e.StateRoot = make([]byte, 0, len(buf[60:92]))
|
e.StateRoot = make([]byte, 0, len(buf[56:88]))
|
||||||
}
|
}
|
||||||
e.StateRoot = append(e.StateRoot, buf[60:92]...)
|
e.StateRoot = append(e.StateRoot, buf[56:88]...)
|
||||||
|
|
||||||
// Field (0) 'Payload'
|
// Field (0) 'Payload'
|
||||||
{
|
{
|
||||||
@@ -3376,7 +3404,7 @@ func (e *ExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error {
|
|||||||
|
|
||||||
// Field (1) 'ExecutionRequests'
|
// Field (1) 'ExecutionRequests'
|
||||||
{
|
{
|
||||||
buf = tail[o1:o5]
|
buf = tail[o1:]
|
||||||
if e.ExecutionRequests == nil {
|
if e.ExecutionRequests == nil {
|
||||||
e.ExecutionRequests = new(v1.ExecutionRequests)
|
e.ExecutionRequests = new(v1.ExecutionRequests)
|
||||||
}
|
}
|
||||||
@@ -3384,28 +3412,12 @@ func (e *ExecutionPayloadEnvelope) UnmarshalSSZ(buf []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Field (5) 'BlobKzgCommitments'
|
|
||||||
{
|
|
||||||
buf = tail[o5:]
|
|
||||||
num, err := ssz.DivideInt2(len(buf), 48, 4096)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
e.BlobKzgCommitments = make([][]byte, num)
|
|
||||||
for ii := 0; ii < num; ii++ {
|
|
||||||
if cap(e.BlobKzgCommitments[ii]) == 0 {
|
|
||||||
e.BlobKzgCommitments[ii] = make([]byte, 0, len(buf[ii*48:(ii+1)*48]))
|
|
||||||
}
|
|
||||||
e.BlobKzgCommitments[ii] = append(e.BlobKzgCommitments[ii], buf[ii*48:(ii+1)*48]...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SizeSSZ returns the ssz encoded size in bytes for the ExecutionPayloadEnvelope object
|
// SizeSSZ returns the ssz encoded size in bytes for the ExecutionPayloadEnvelope object
|
||||||
func (e *ExecutionPayloadEnvelope) SizeSSZ() (size int) {
|
func (e *ExecutionPayloadEnvelope) SizeSSZ() (size int) {
|
||||||
size = 92
|
size = 88
|
||||||
|
|
||||||
// Field (0) 'Payload'
|
// Field (0) 'Payload'
|
||||||
if e.Payload == nil {
|
if e.Payload == nil {
|
||||||
@@ -3419,9 +3431,6 @@ func (e *ExecutionPayloadEnvelope) SizeSSZ() (size int) {
|
|||||||
}
|
}
|
||||||
size += e.ExecutionRequests.SizeSSZ()
|
size += e.ExecutionRequests.SizeSSZ()
|
||||||
|
|
||||||
// Field (5) 'BlobKzgCommitments'
|
|
||||||
size += len(e.BlobKzgCommitments) * 48
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3457,26 +3466,7 @@ func (e *ExecutionPayloadEnvelope) HashTreeRootWith(hh *ssz.Hasher) (err error)
|
|||||||
// Field (4) 'Slot'
|
// Field (4) 'Slot'
|
||||||
hh.PutUint64(uint64(e.Slot))
|
hh.PutUint64(uint64(e.Slot))
|
||||||
|
|
||||||
// Field (5) 'BlobKzgCommitments'
|
// Field (5) 'StateRoot'
|
||||||
{
|
|
||||||
if size := len(e.BlobKzgCommitments); size > 4096 {
|
|
||||||
err = ssz.ErrListTooBigFn("--.BlobKzgCommitments", size, 4096)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
subIndx := hh.Index()
|
|
||||||
for _, i := range e.BlobKzgCommitments {
|
|
||||||
if len(i) != 48 {
|
|
||||||
err = ssz.ErrBytesLength
|
|
||||||
return
|
|
||||||
}
|
|
||||||
hh.PutBytes(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
numItems := uint64(len(e.BlobKzgCommitments))
|
|
||||||
hh.MerkleizeWithMixin(subIndx, numItems, 4096)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Field (6) 'StateRoot'
|
|
||||||
if size := len(e.StateRoot); size != 32 {
|
if size := len(e.StateRoot); size != 32 {
|
||||||
err = ssz.ErrBytesLengthFn("--.StateRoot", size, 32)
|
err = ssz.ErrBytesLengthFn("--.StateRoot", size, 32)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -23,17 +23,17 @@ func TestExecutionPayloadBid_Copy(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "fully populated bid",
|
name: "fully populated bid",
|
||||||
bid: &ExecutionPayloadBid{
|
bid: &ExecutionPayloadBid{
|
||||||
ParentBlockHash: []byte("parent_block_hash_32_bytes_long!"),
|
ParentBlockHash: []byte("parent_block_hash_32_bytes_long!"),
|
||||||
ParentBlockRoot: []byte("parent_block_root_32_bytes_long!"),
|
ParentBlockRoot: []byte("parent_block_root_32_bytes_long!"),
|
||||||
BlockHash: []byte("block_hash_32_bytes_are_long!!"),
|
BlockHash: []byte("block_hash_32_bytes_are_long!!"),
|
||||||
PrevRandao: []byte("prev_randao_32_bytes_long!!!"),
|
PrevRandao: []byte("prev_randao_32_bytes_long!!!"),
|
||||||
FeeRecipient: []byte("fee_recipient_20_byt"),
|
FeeRecipient: []byte("fee_recipient_20_byt"),
|
||||||
GasLimit: 15000000,
|
GasLimit: 15000000,
|
||||||
BuilderIndex: primitives.BuilderIndex(42),
|
BuilderIndex: primitives.BuilderIndex(42),
|
||||||
Slot: primitives.Slot(12345),
|
Slot: primitives.Slot(12345),
|
||||||
ExecutionPayment: 5645654,
|
Value: 1000000000000000000,
|
||||||
Value: 1000000000000000000,
|
ExecutionPayment: 5645654,
|
||||||
BlobKzgCommitmentsRoot: []byte("blob_kzg_commitments_32_bytes!!"),
|
BlobKzgCommitments: [][]byte{[]byte("blob_kzg_commitments_48_bytes_longer_than_needed")},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ func (f *TextFormatter) printColored(b *bytes.Buffer, entry *logrus.Entry, keys
|
|||||||
_, err = fmt.Fprintf(b, "%s %s%s "+messageFormat, colorScheme.TimestampColor(timestamp), level, prefix, message)
|
_, err = fmt.Fprintf(b, "%s %s%s "+messageFormat, colorScheme.TimestampColor(timestamp), level, prefix, message)
|
||||||
}
|
}
|
||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
if k != "package" {
|
if k != "package" && k != "log_target" {
|
||||||
v := entry.Data[k]
|
v := entry.Data[k]
|
||||||
|
|
||||||
format := "%+v"
|
format := "%+v"
|
||||||
|
|||||||
@@ -11,17 +11,12 @@ Install `ethspecify` with the following command:
|
|||||||
pipx install ethspecify
|
pipx install ethspecify
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!NOTE]
|
|
||||||
> You can run `ethspecify <cmd>` in the `specrefs` directory or
|
|
||||||
> `ethspecify <cmd> --path=specrefs` from the project's root directory.
|
|
||||||
|
|
||||||
## Maintenance
|
## Maintenance
|
||||||
|
|
||||||
When adding support for a new specification version, follow these steps:
|
When adding support for a new specification version, follow these steps:
|
||||||
|
|
||||||
0. Change directory into the `specrefs` directory.
|
|
||||||
1. Update the version in `.ethspecify.yml` configuration.
|
1. Update the version in `.ethspecify.yml` configuration.
|
||||||
2. Run `ethspecify process` to update/populate specrefs.
|
2. Run `ethspecify` to update/populate specrefs.
|
||||||
3. Run `ethspecify check` to check specrefs.
|
3. Run `ethspecify check` to check specrefs.
|
||||||
4. If there are errors, use the error message as a guide to fix the issue. If
|
4. If there are errors, use the error message as a guide to fix the issue. If
|
||||||
there are new specrefs with empty sources, implement/locate each item and
|
there are new specrefs with empty sources, implement/locate each item and
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
- name: AGGREGATE_DUE_BPS
|
- name: AGGREGATE_DUE_BPS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AggregateDueBPS\s+primitives.BP
|
search: AggregateDueBPS\s+primitives.BP
|
||||||
@@ -8,7 +8,14 @@
|
|||||||
AGGREGATE_DUE_BPS: uint64 = 6667
|
AGGREGATE_DUE_BPS: uint64 = 6667
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ALTAIR_FORK_EPOCH
|
- name: AGGREGATE_DUE_BPS_GLOAS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="AGGREGATE_DUE_BPS_GLOAS" fork="gloas" hash="34aa3164">
|
||||||
|
AGGREGATE_DUE_BPS_GLOAS: uint64 = 5000
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ALTAIR_FORK_EPOCH#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AltairForkEpoch\s+primitives.Epoch
|
search: AltairForkEpoch\s+primitives.Epoch
|
||||||
@@ -18,7 +25,7 @@
|
|||||||
ALTAIR_FORK_EPOCH: Epoch = 74240
|
ALTAIR_FORK_EPOCH: Epoch = 74240
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ALTAIR_FORK_VERSION
|
- name: ALTAIR_FORK_VERSION#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AltairForkVersion\s+\[]byte
|
search: AltairForkVersion\s+\[]byte
|
||||||
@@ -28,7 +35,7 @@
|
|||||||
ALTAIR_FORK_VERSION: Version = '0x01000000'
|
ALTAIR_FORK_VERSION: Version = '0x01000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ATTESTATION_DUE_BPS
|
- name: ATTESTATION_DUE_BPS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AttestationDueBPS\s+primitives.BP
|
search: AttestationDueBPS\s+primitives.BP
|
||||||
@@ -38,7 +45,14 @@
|
|||||||
ATTESTATION_DUE_BPS: uint64 = 3333
|
ATTESTATION_DUE_BPS: uint64 = 3333
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ATTESTATION_PROPAGATION_SLOT_RANGE
|
- name: ATTESTATION_DUE_BPS_GLOAS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="ATTESTATION_DUE_BPS_GLOAS" fork="gloas" hash="3863c1ef">
|
||||||
|
ATTESTATION_DUE_BPS_GLOAS: uint64 = 2500
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ATTESTATION_PROPAGATION_SLOT_RANGE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AttestationPropagationSlotRange\s+primitives.Slot
|
search: AttestationPropagationSlotRange\s+primitives.Slot
|
||||||
@@ -48,7 +62,7 @@
|
|||||||
ATTESTATION_PROPAGATION_SLOT_RANGE = 32
|
ATTESTATION_PROPAGATION_SLOT_RANGE = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ATTESTATION_SUBNET_COUNT
|
- name: ATTESTATION_SUBNET_COUNT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AttestationSubnetCount\s+uint64
|
search: AttestationSubnetCount\s+uint64
|
||||||
@@ -58,7 +72,7 @@
|
|||||||
ATTESTATION_SUBNET_COUNT = 64
|
ATTESTATION_SUBNET_COUNT = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ATTESTATION_SUBNET_EXTRA_BITS
|
- name: ATTESTATION_SUBNET_EXTRA_BITS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AttestationSubnetExtraBits\s+uint64
|
search: AttestationSubnetExtraBits\s+uint64
|
||||||
@@ -68,7 +82,7 @@
|
|||||||
ATTESTATION_SUBNET_EXTRA_BITS = 0
|
ATTESTATION_SUBNET_EXTRA_BITS = 0
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ATTESTATION_SUBNET_PREFIX_BITS
|
- name: ATTESTATION_SUBNET_PREFIX_BITS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: AttestationSubnetPrefixBits\s+uint64
|
search: AttestationSubnetPrefixBits\s+uint64
|
||||||
@@ -78,7 +92,7 @@
|
|||||||
ATTESTATION_SUBNET_PREFIX_BITS: int = 6
|
ATTESTATION_SUBNET_PREFIX_BITS: int = 6
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BALANCE_PER_ADDITIONAL_CUSTODY_GROUP
|
- name: BALANCE_PER_ADDITIONAL_CUSTODY_GROUP#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BalancePerAdditionalCustodyGroup\s+uint64
|
search: BalancePerAdditionalCustodyGroup\s+uint64
|
||||||
@@ -88,7 +102,7 @@
|
|||||||
BALANCE_PER_ADDITIONAL_CUSTODY_GROUP: Gwei = 32000000000
|
BALANCE_PER_ADDITIONAL_CUSTODY_GROUP: Gwei = 32000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BELLATRIX_FORK_EPOCH
|
- name: BELLATRIX_FORK_EPOCH#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BellatrixForkEpoch\s+primitives.Epoch
|
search: BellatrixForkEpoch\s+primitives.Epoch
|
||||||
@@ -98,7 +112,7 @@
|
|||||||
BELLATRIX_FORK_EPOCH: Epoch = 144896
|
BELLATRIX_FORK_EPOCH: Epoch = 144896
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BELLATRIX_FORK_VERSION
|
- name: BELLATRIX_FORK_VERSION#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BellatrixForkVersion\s+\[]byte
|
search: BellatrixForkVersion\s+\[]byte
|
||||||
@@ -108,7 +122,7 @@
|
|||||||
BELLATRIX_FORK_VERSION: Version = '0x02000000'
|
BELLATRIX_FORK_VERSION: Version = '0x02000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BLOB_SCHEDULE
|
- name: BLOB_SCHEDULE#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BlobSchedule\s+\[]BlobScheduleEntry
|
search: BlobSchedule\s+\[]BlobScheduleEntry
|
||||||
@@ -127,7 +141,7 @@
|
|||||||
)
|
)
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BLOB_SIDECAR_SUBNET_COUNT
|
- name: BLOB_SIDECAR_SUBNET_COUNT#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BlobsidecarSubnetCount\s+uint64
|
search: BlobsidecarSubnetCount\s+uint64
|
||||||
@@ -137,7 +151,7 @@
|
|||||||
BLOB_SIDECAR_SUBNET_COUNT = 6
|
BLOB_SIDECAR_SUBNET_COUNT = 6
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BLOB_SIDECAR_SUBNET_COUNT_ELECTRA
|
- name: BLOB_SIDECAR_SUBNET_COUNT_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BlobsidecarSubnetCountElectra\s+uint64
|
search: BlobsidecarSubnetCountElectra\s+uint64
|
||||||
@@ -147,7 +161,7 @@
|
|||||||
BLOB_SIDECAR_SUBNET_COUNT_ELECTRA = 9
|
BLOB_SIDECAR_SUBNET_COUNT_ELECTRA = 9
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CAPELLA_FORK_EPOCH
|
- name: CAPELLA_FORK_EPOCH#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: CapellaForkEpoch\s+primitives.Epoch
|
search: CapellaForkEpoch\s+primitives.Epoch
|
||||||
@@ -157,7 +171,7 @@
|
|||||||
CAPELLA_FORK_EPOCH: Epoch = 194048
|
CAPELLA_FORK_EPOCH: Epoch = 194048
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CAPELLA_FORK_VERSION
|
- name: CAPELLA_FORK_VERSION#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: CapellaForkVersion\s+\[]byte
|
search: CapellaForkVersion\s+\[]byte
|
||||||
@@ -167,7 +181,7 @@
|
|||||||
CAPELLA_FORK_VERSION: Version = '0x03000000'
|
CAPELLA_FORK_VERSION: Version = '0x03000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CHURN_LIMIT_QUOTIENT
|
- name: CHURN_LIMIT_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ChurnLimitQuotient\s+uint64
|
search: ChurnLimitQuotient\s+uint64
|
||||||
@@ -177,7 +191,7 @@
|
|||||||
CHURN_LIMIT_QUOTIENT: uint64 = 65536
|
CHURN_LIMIT_QUOTIENT: uint64 = 65536
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CONTRIBUTION_DUE_BPS
|
- name: CONTRIBUTION_DUE_BPS#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ContributionDueBPS\s+primitives.BP
|
search: ContributionDueBPS\s+primitives.BP
|
||||||
@@ -187,7 +201,14 @@
|
|||||||
CONTRIBUTION_DUE_BPS: uint64 = 6667
|
CONTRIBUTION_DUE_BPS: uint64 = 6667
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CUSTODY_REQUIREMENT
|
- name: CONTRIBUTION_DUE_BPS_GLOAS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="CONTRIBUTION_DUE_BPS_GLOAS" fork="gloas" hash="0ead2ac1">
|
||||||
|
CONTRIBUTION_DUE_BPS_GLOAS: uint64 = 5000
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: CUSTODY_REQUIREMENT#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: CustodyRequirement\s+uint64.*yaml:"CUSTODY_REQUIREMENT"
|
search: CustodyRequirement\s+uint64.*yaml:"CUSTODY_REQUIREMENT"
|
||||||
@@ -197,7 +218,7 @@
|
|||||||
CUSTODY_REQUIREMENT = 4
|
CUSTODY_REQUIREMENT = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DATA_COLUMN_SIDECAR_SUBNET_COUNT
|
- name: DATA_COLUMN_SIDECAR_SUBNET_COUNT#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: DataColumnSidecarSubnetCount\s+uint64
|
search: DataColumnSidecarSubnetCount\s+uint64
|
||||||
@@ -207,7 +228,7 @@
|
|||||||
DATA_COLUMN_SIDECAR_SUBNET_COUNT = 128
|
DATA_COLUMN_SIDECAR_SUBNET_COUNT = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DENEB_FORK_EPOCH
|
- name: DENEB_FORK_EPOCH#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: DenebForkEpoch\s+primitives.Epoch
|
search: DenebForkEpoch\s+primitives.Epoch
|
||||||
@@ -217,7 +238,7 @@
|
|||||||
DENEB_FORK_EPOCH: Epoch = 269568
|
DENEB_FORK_EPOCH: Epoch = 269568
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DENEB_FORK_VERSION
|
- name: DENEB_FORK_VERSION#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: DenebForkVersion\s+\[]byte
|
search: DenebForkVersion\s+\[]byte
|
||||||
@@ -227,7 +248,7 @@
|
|||||||
DENEB_FORK_VERSION: Version = '0x04000000'
|
DENEB_FORK_VERSION: Version = '0x04000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EJECTION_BALANCE
|
- name: EJECTION_BALANCE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EjectionBalance\s+uint64
|
search: EjectionBalance\s+uint64
|
||||||
@@ -237,7 +258,7 @@
|
|||||||
EJECTION_BALANCE: Gwei = 16000000000
|
EJECTION_BALANCE: Gwei = 16000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ELECTRA_FORK_EPOCH
|
- name: ELECTRA_FORK_EPOCH#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ElectraForkEpoch\s+primitives.Epoch
|
search: ElectraForkEpoch\s+primitives.Epoch
|
||||||
@@ -247,7 +268,7 @@
|
|||||||
ELECTRA_FORK_EPOCH: Epoch = 364032
|
ELECTRA_FORK_EPOCH: Epoch = 364032
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ELECTRA_FORK_VERSION
|
- name: ELECTRA_FORK_VERSION#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ElectraForkVersion\s+\[]byte
|
search: ElectraForkVersion\s+\[]byte
|
||||||
@@ -257,7 +278,7 @@
|
|||||||
ELECTRA_FORK_VERSION: Version = '0x05000000'
|
ELECTRA_FORK_VERSION: Version = '0x05000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_SUBNET_SUBSCRIPTION
|
- name: EPOCHS_PER_SUBNET_SUBSCRIPTION#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EpochsPerSubnetSubscription\s+uint64
|
search: EpochsPerSubnetSubscription\s+uint64
|
||||||
@@ -267,7 +288,7 @@
|
|||||||
EPOCHS_PER_SUBNET_SUBSCRIPTION = 256
|
EPOCHS_PER_SUBNET_SUBSCRIPTION = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ETH1_FOLLOW_DISTANCE
|
- name: ETH1_FOLLOW_DISTANCE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: Eth1FollowDistance\s+uint64
|
search: Eth1FollowDistance\s+uint64
|
||||||
@@ -277,7 +298,7 @@
|
|||||||
ETH1_FOLLOW_DISTANCE: uint64 = 2048
|
ETH1_FOLLOW_DISTANCE: uint64 = 2048
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FULU_FORK_EPOCH
|
- name: FULU_FORK_EPOCH#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: FuluForkEpoch\s+primitives.Epoch
|
search: FuluForkEpoch\s+primitives.Epoch
|
||||||
@@ -287,7 +308,7 @@
|
|||||||
FULU_FORK_EPOCH: Epoch = 411392
|
FULU_FORK_EPOCH: Epoch = 411392
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FULU_FORK_VERSION
|
- name: FULU_FORK_VERSION#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: FuluForkVersion\s+\[]byte
|
search: FuluForkVersion\s+\[]byte
|
||||||
@@ -297,7 +318,7 @@
|
|||||||
FULU_FORK_VERSION: Version = '0x06000000'
|
FULU_FORK_VERSION: Version = '0x06000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: GENESIS_DELAY
|
- name: GENESIS_DELAY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: GenesisDelay\s+uint64
|
search: GenesisDelay\s+uint64
|
||||||
@@ -307,7 +328,7 @@
|
|||||||
GENESIS_DELAY: uint64 = 604800
|
GENESIS_DELAY: uint64 = 604800
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: GENESIS_FORK_VERSION
|
- name: GENESIS_FORK_VERSION#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: GenesisForkVersion\s+\[]byte
|
search: GenesisForkVersion\s+\[]byte
|
||||||
@@ -317,7 +338,21 @@
|
|||||||
GENESIS_FORK_VERSION: Version = '0x00000000'
|
GENESIS_FORK_VERSION: Version = '0x00000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_SCORE_BIAS
|
- name: GLOAS_FORK_EPOCH#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="GLOAS_FORK_EPOCH" fork="gloas" hash="c25152cf">
|
||||||
|
GLOAS_FORK_EPOCH: Epoch = 18446744073709551615
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: GLOAS_FORK_VERSION#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="GLOAS_FORK_VERSION" fork="gloas" hash="c1c5c007">
|
||||||
|
GLOAS_FORK_VERSION: Version = '0x07000000'
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: INACTIVITY_SCORE_BIAS#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityScoreBias\s+uint64
|
search: InactivityScoreBias\s+uint64
|
||||||
@@ -327,7 +362,7 @@
|
|||||||
INACTIVITY_SCORE_BIAS: uint64 = 4
|
INACTIVITY_SCORE_BIAS: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_SCORE_RECOVERY_RATE
|
- name: INACTIVITY_SCORE_RECOVERY_RATE#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityScoreRecoveryRate\s+uint64
|
search: InactivityScoreRecoveryRate\s+uint64
|
||||||
@@ -337,7 +372,7 @@
|
|||||||
INACTIVITY_SCORE_RECOVERY_RATE: uint64 = 16
|
INACTIVITY_SCORE_RECOVERY_RATE: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAXIMUM_GOSSIP_CLOCK_DISPARITY
|
- name: MAXIMUM_GOSSIP_CLOCK_DISPARITY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaximumGossipClockDisparity\s+uint64
|
search: MaximumGossipClockDisparity\s+uint64
|
||||||
@@ -347,7 +382,7 @@
|
|||||||
MAXIMUM_GOSSIP_CLOCK_DISPARITY = 500
|
MAXIMUM_GOSSIP_CLOCK_DISPARITY = 500
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BLOBS_PER_BLOCK
|
- name: MAX_BLOBS_PER_BLOCK#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: DeprecatedMaxBlobsPerBlock\s+int
|
search: DeprecatedMaxBlobsPerBlock\s+int
|
||||||
@@ -357,7 +392,7 @@
|
|||||||
MAX_BLOBS_PER_BLOCK: uint64 = 6
|
MAX_BLOBS_PER_BLOCK: uint64 = 6
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BLOBS_PER_BLOCK_ELECTRA
|
- name: MAX_BLOBS_PER_BLOCK_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: DeprecatedMaxBlobsPerBlockElectra\s+int
|
search: DeprecatedMaxBlobsPerBlockElectra\s+int
|
||||||
@@ -367,7 +402,7 @@
|
|||||||
MAX_BLOBS_PER_BLOCK_ELECTRA: uint64 = 9
|
MAX_BLOBS_PER_BLOCK_ELECTRA: uint64 = 9
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PAYLOAD_SIZE
|
- name: MAX_PAYLOAD_SIZE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPayloadSize\s+uint64
|
search: MaxPayloadSize\s+uint64
|
||||||
@@ -377,7 +412,7 @@
|
|||||||
MAX_PAYLOAD_SIZE = 10485760
|
MAX_PAYLOAD_SIZE = 10485760
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT
|
- name: MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPerEpochActivationChurnLimit\s+uint64
|
search: MaxPerEpochActivationChurnLimit\s+uint64
|
||||||
@@ -387,7 +422,7 @@
|
|||||||
MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: uint64 = 8
|
MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: uint64 = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT
|
- name: MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPerEpochActivationExitChurnLimit\s+uint64
|
search: MaxPerEpochActivationExitChurnLimit\s+uint64
|
||||||
@@ -397,7 +432,7 @@
|
|||||||
MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: Gwei = 256000000000
|
MAX_PER_EPOCH_ACTIVATION_EXIT_CHURN_LIMIT: Gwei = 256000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_REQUEST_BLOB_SIDECARS
|
- name: MAX_REQUEST_BLOB_SIDECARS#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxRequestBlobSidecars\s+uint64
|
search: MaxRequestBlobSidecars\s+uint64
|
||||||
@@ -407,7 +442,7 @@
|
|||||||
MAX_REQUEST_BLOB_SIDECARS = 768
|
MAX_REQUEST_BLOB_SIDECARS = 768
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_REQUEST_BLOB_SIDECARS_ELECTRA
|
- name: MAX_REQUEST_BLOB_SIDECARS_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxRequestBlobSidecarsElectra\s+uint64
|
search: MaxRequestBlobSidecarsElectra\s+uint64
|
||||||
@@ -417,7 +452,7 @@
|
|||||||
MAX_REQUEST_BLOB_SIDECARS_ELECTRA = 1152
|
MAX_REQUEST_BLOB_SIDECARS_ELECTRA = 1152
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_REQUEST_BLOCKS
|
- name: MAX_REQUEST_BLOCKS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxRequestBlocks\s+uint64
|
search: MaxRequestBlocks\s+uint64
|
||||||
@@ -427,7 +462,7 @@
|
|||||||
MAX_REQUEST_BLOCKS = 1024
|
MAX_REQUEST_BLOCKS = 1024
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_REQUEST_BLOCKS_DENEB
|
- name: MAX_REQUEST_BLOCKS_DENEB#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxRequestBlocksDeneb\s+uint64
|
search: MaxRequestBlocksDeneb\s+uint64
|
||||||
@@ -437,7 +472,7 @@
|
|||||||
MAX_REQUEST_BLOCKS_DENEB = 128
|
MAX_REQUEST_BLOCKS_DENEB = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_REQUEST_DATA_COLUMN_SIDECARS
|
- name: MAX_REQUEST_DATA_COLUMN_SIDECARS#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxRequestDataColumnSidecars\s+uint64
|
search: MaxRequestDataColumnSidecars\s+uint64
|
||||||
@@ -447,7 +482,14 @@
|
|||||||
MAX_REQUEST_DATA_COLUMN_SIDECARS = 16384
|
MAX_REQUEST_DATA_COLUMN_SIDECARS = 16384
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MESSAGE_DOMAIN_INVALID_SNAPPY
|
- name: MAX_REQUEST_PAYLOADS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="MAX_REQUEST_PAYLOADS" fork="gloas" hash="23399ee5">
|
||||||
|
MAX_REQUEST_PAYLOADS = 128
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MESSAGE_DOMAIN_INVALID_SNAPPY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MessageDomainInvalidSnappy\s+\[4\]byte
|
search: MessageDomainInvalidSnappy\s+\[4\]byte
|
||||||
@@ -457,7 +499,7 @@
|
|||||||
MESSAGE_DOMAIN_INVALID_SNAPPY: DomainType = '0x00000000'
|
MESSAGE_DOMAIN_INVALID_SNAPPY: DomainType = '0x00000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MESSAGE_DOMAIN_VALID_SNAPPY
|
- name: MESSAGE_DOMAIN_VALID_SNAPPY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MessageDomainValidSnappy\s+\[4\]byte
|
search: MessageDomainValidSnappy\s+\[4\]byte
|
||||||
@@ -467,7 +509,14 @@
|
|||||||
MESSAGE_DOMAIN_VALID_SNAPPY: DomainType = '0x01000000'
|
MESSAGE_DOMAIN_VALID_SNAPPY: DomainType = '0x01000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS
|
- name: MIN_BUILDER_WITHDRAWABILITY_DELAY#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="MIN_BUILDER_WITHDRAWABILITY_DELAY" fork="gloas" hash="be7f8473">
|
||||||
|
MIN_BUILDER_WITHDRAWABILITY_DELAY: uint64 = 64
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinEpochsForBlobsSidecarsRequest\s+primitives.Epoch
|
search: MinEpochsForBlobsSidecarsRequest\s+primitives.Epoch
|
||||||
@@ -477,7 +526,7 @@
|
|||||||
MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS = 4096
|
MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_EPOCHS_FOR_BLOCK_REQUESTS
|
- name: MIN_EPOCHS_FOR_BLOCK_REQUESTS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinEpochsForBlockRequests\s+uint64
|
search: MinEpochsForBlockRequests\s+uint64
|
||||||
@@ -487,7 +536,7 @@
|
|||||||
MIN_EPOCHS_FOR_BLOCK_REQUESTS = 33024
|
MIN_EPOCHS_FOR_BLOCK_REQUESTS = 33024
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS
|
- name: MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinEpochsForDataColumnSidecarsRequest\s+primitives.Epoch
|
search: MinEpochsForDataColumnSidecarsRequest\s+primitives.Epoch
|
||||||
@@ -497,7 +546,7 @@
|
|||||||
MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS = 4096
|
MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_GENESIS_ACTIVE_VALIDATOR_COUNT
|
- name: MIN_GENESIS_ACTIVE_VALIDATOR_COUNT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinGenesisActiveValidatorCount\s+uint64
|
search: MinGenesisActiveValidatorCount\s+uint64
|
||||||
@@ -507,7 +556,7 @@
|
|||||||
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: uint64 = 16384
|
MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: uint64 = 16384
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_GENESIS_TIME
|
- name: MIN_GENESIS_TIME#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinGenesisTime\s+uint64
|
search: MinGenesisTime\s+uint64
|
||||||
@@ -517,7 +566,7 @@
|
|||||||
MIN_GENESIS_TIME: uint64 = 1606824000
|
MIN_GENESIS_TIME: uint64 = 1606824000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_PER_EPOCH_CHURN_LIMIT
|
- name: MIN_PER_EPOCH_CHURN_LIMIT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinPerEpochChurnLimit\s+uint64
|
search: MinPerEpochChurnLimit\s+uint64
|
||||||
@@ -527,7 +576,7 @@
|
|||||||
MIN_PER_EPOCH_CHURN_LIMIT: uint64 = 4
|
MIN_PER_EPOCH_CHURN_LIMIT: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA
|
- name: MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinPerEpochChurnLimitElectra\s+uint64
|
search: MinPerEpochChurnLimitElectra\s+uint64
|
||||||
@@ -537,7 +586,7 @@
|
|||||||
MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: Gwei = 128000000000
|
MIN_PER_EPOCH_CHURN_LIMIT_ELECTRA: Gwei = 128000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_VALIDATOR_WITHDRAWABILITY_DELAY
|
- name: MIN_VALIDATOR_WITHDRAWABILITY_DELAY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinValidatorWithdrawabilityDelay\s+primitives.Epoch
|
search: MinValidatorWithdrawabilityDelay\s+primitives.Epoch
|
||||||
@@ -547,7 +596,7 @@
|
|||||||
MIN_VALIDATOR_WITHDRAWABILITY_DELAY: uint64 = 256
|
MIN_VALIDATOR_WITHDRAWABILITY_DELAY: uint64 = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: NUMBER_OF_CUSTODY_GROUPS
|
- name: NUMBER_OF_CUSTODY_GROUPS#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: NumberOfCustodyGroups\s+uint64
|
search: NumberOfCustodyGroups\s+uint64
|
||||||
@@ -557,7 +606,14 @@
|
|||||||
NUMBER_OF_CUSTODY_GROUPS = 128
|
NUMBER_OF_CUSTODY_GROUPS = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPOSER_REORG_CUTOFF_BPS
|
- name: PAYLOAD_ATTESTATION_DUE_BPS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="PAYLOAD_ATTESTATION_DUE_BPS" fork="gloas" hash="17307d0e">
|
||||||
|
PAYLOAD_ATTESTATION_DUE_BPS: uint64 = 7500
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PROPOSER_REORG_CUTOFF_BPS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProposerReorgCutoffBPS\s+primitives.BP
|
search: ProposerReorgCutoffBPS\s+primitives.BP
|
||||||
@@ -567,7 +623,7 @@
|
|||||||
PROPOSER_REORG_CUTOFF_BPS: uint64 = 1667
|
PROPOSER_REORG_CUTOFF_BPS: uint64 = 1667
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPOSER_SCORE_BOOST
|
- name: PROPOSER_SCORE_BOOST#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProposerScoreBoost\s+uint64
|
search: ProposerScoreBoost\s+uint64
|
||||||
@@ -577,7 +633,7 @@
|
|||||||
PROPOSER_SCORE_BOOST: uint64 = 40
|
PROPOSER_SCORE_BOOST: uint64 = 40
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: REORG_HEAD_WEIGHT_THRESHOLD
|
- name: REORG_HEAD_WEIGHT_THRESHOLD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ReorgHeadWeightThreshold\s+uint64
|
search: ReorgHeadWeightThreshold\s+uint64
|
||||||
@@ -587,7 +643,7 @@
|
|||||||
REORG_HEAD_WEIGHT_THRESHOLD: uint64 = 20
|
REORG_HEAD_WEIGHT_THRESHOLD: uint64 = 20
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: REORG_MAX_EPOCHS_SINCE_FINALIZATION
|
- name: REORG_MAX_EPOCHS_SINCE_FINALIZATION#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ReorgMaxEpochsSinceFinalization\s+primitives.Epoch
|
search: ReorgMaxEpochsSinceFinalization\s+primitives.Epoch
|
||||||
@@ -597,7 +653,7 @@
|
|||||||
REORG_MAX_EPOCHS_SINCE_FINALIZATION: Epoch = 2
|
REORG_MAX_EPOCHS_SINCE_FINALIZATION: Epoch = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: REORG_PARENT_WEIGHT_THRESHOLD
|
- name: REORG_PARENT_WEIGHT_THRESHOLD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ReorgParentWeightThreshold\s+uint64
|
search: ReorgParentWeightThreshold\s+uint64
|
||||||
@@ -607,7 +663,7 @@
|
|||||||
REORG_PARENT_WEIGHT_THRESHOLD: uint64 = 160
|
REORG_PARENT_WEIGHT_THRESHOLD: uint64 = 160
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SAMPLES_PER_SLOT
|
- name: SAMPLES_PER_SLOT#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: SamplesPerSlot\s+uint64
|
search: SamplesPerSlot\s+uint64
|
||||||
@@ -617,7 +673,7 @@
|
|||||||
SAMPLES_PER_SLOT = 8
|
SAMPLES_PER_SLOT = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SECONDS_PER_ETH1_BLOCK
|
- name: SECONDS_PER_ETH1_BLOCK#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: SecondsPerETH1Block\s+uint64
|
search: SecondsPerETH1Block\s+uint64
|
||||||
@@ -627,7 +683,7 @@
|
|||||||
SECONDS_PER_ETH1_BLOCK: uint64 = 14
|
SECONDS_PER_ETH1_BLOCK: uint64 = 14
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SECONDS_PER_SLOT
|
- name: SECONDS_PER_SLOT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: SecondsPerSlot\s+uint64
|
search: SecondsPerSlot\s+uint64
|
||||||
@@ -637,7 +693,7 @@
|
|||||||
SECONDS_PER_SLOT: uint64 = 12
|
SECONDS_PER_SLOT: uint64 = 12
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SHARD_COMMITTEE_PERIOD
|
- name: SHARD_COMMITTEE_PERIOD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ShardCommitteePeriod\s+primitives.Epoch
|
search: ShardCommitteePeriod\s+primitives.Epoch
|
||||||
@@ -647,7 +703,7 @@
|
|||||||
SHARD_COMMITTEE_PERIOD: uint64 = 256
|
SHARD_COMMITTEE_PERIOD: uint64 = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SLOT_DURATION_MS
|
- name: SLOT_DURATION_MS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: SlotDurationMilliseconds\s+uint64
|
search: SlotDurationMilliseconds\s+uint64
|
||||||
@@ -657,7 +713,7 @@
|
|||||||
SLOT_DURATION_MS: uint64 = 12000
|
SLOT_DURATION_MS: uint64 = 12000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SUBNETS_PER_NODE
|
- name: SUBNETS_PER_NODE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: SubnetsPerNode\s+uint64
|
search: SubnetsPerNode\s+uint64
|
||||||
@@ -667,7 +723,7 @@
|
|||||||
SUBNETS_PER_NODE = 2
|
SUBNETS_PER_NODE = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SYNC_MESSAGE_DUE_BPS
|
- name: SYNC_MESSAGE_DUE_BPS#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: SyncMessageDueBPS\s+primitives.BP
|
search: SyncMessageDueBPS\s+primitives.BP
|
||||||
@@ -677,7 +733,14 @@
|
|||||||
SYNC_MESSAGE_DUE_BPS: uint64 = 3333
|
SYNC_MESSAGE_DUE_BPS: uint64 = 3333
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: TERMINAL_BLOCK_HASH
|
- name: SYNC_MESSAGE_DUE_BPS_GLOAS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec config_var="SYNC_MESSAGE_DUE_BPS_GLOAS" fork="gloas" hash="47f14d95">
|
||||||
|
SYNC_MESSAGE_DUE_BPS_GLOAS: uint64 = 2500
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: TERMINAL_BLOCK_HASH#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: TerminalBlockHash\s+common.Hash
|
search: TerminalBlockHash\s+common.Hash
|
||||||
@@ -687,7 +750,7 @@
|
|||||||
TERMINAL_BLOCK_HASH: Hash32 = '0x0000000000000000000000000000000000000000000000000000000000000000'
|
TERMINAL_BLOCK_HASH: Hash32 = '0x0000000000000000000000000000000000000000000000000000000000000000'
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH
|
- name: TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: TerminalBlockHashActivationEpoch\s+primitives.Epoch
|
search: TerminalBlockHashActivationEpoch\s+primitives.Epoch
|
||||||
@@ -697,7 +760,7 @@
|
|||||||
TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH = 18446744073709551615
|
TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH = 18446744073709551615
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: TERMINAL_TOTAL_DIFFICULTY
|
- name: TERMINAL_TOTAL_DIFFICULTY#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: TerminalTotalDifficulty\s+string
|
search: TerminalTotalDifficulty\s+string
|
||||||
@@ -707,7 +770,7 @@
|
|||||||
TERMINAL_TOTAL_DIFFICULTY = 58750000000000000000000
|
TERMINAL_TOTAL_DIFFICULTY = 58750000000000000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: VALIDATOR_CUSTODY_REQUIREMENT
|
- name: VALIDATOR_CUSTODY_REQUIREMENT#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ValidatorCustodyRequirement\s+uint64
|
search: ValidatorCustodyRequirement\s+uint64
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -50,7 +50,7 @@
|
|||||||
committee_bits: Bitvector[MAX_COMMITTEES_PER_SLOT]
|
committee_bits: Bitvector[MAX_COMMITTEES_PER_SLOT]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: AttestationData
|
- name: AttestationData#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/attestation.proto
|
- file: proto/eth/v1/attestation.proto
|
||||||
search: message AttestationData {
|
search: message AttestationData {
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
attestation_2: IndexedAttestation
|
attestation_2: IndexedAttestation
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BLSToExecutionChange
|
- name: BLSToExecutionChange#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/withdrawals.proto
|
- file: proto/prysm/v1alpha1/withdrawals.proto
|
||||||
search: message BLSToExecutionChange {
|
search: message BLSToExecutionChange {
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
to_execution_address: ExecutionAddress
|
to_execution_address: ExecutionAddress
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BeaconBlock
|
- name: BeaconBlock#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message BeaconBlock {
|
search: message BeaconBlock {
|
||||||
@@ -239,7 +239,34 @@
|
|||||||
execution_requests: ExecutionRequests
|
execution_requests: ExecutionRequests
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BeaconBlockHeader
|
- name: BeaconBlockBody#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="BeaconBlockBody" fork="gloas" hash="7e472a77">
|
||||||
|
class BeaconBlockBody(Container):
|
||||||
|
randao_reveal: BLSSignature
|
||||||
|
eth1_data: Eth1Data
|
||||||
|
graffiti: Bytes32
|
||||||
|
proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS]
|
||||||
|
attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS_ELECTRA]
|
||||||
|
attestations: List[Attestation, MAX_ATTESTATIONS_ELECTRA]
|
||||||
|
deposits: List[Deposit, MAX_DEPOSITS]
|
||||||
|
voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS]
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `execution_payload`
|
||||||
|
bls_to_execution_changes: List[SignedBLSToExecutionChange, MAX_BLS_TO_EXECUTION_CHANGES]
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `blob_kzg_commitments`
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `execution_requests`
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
signed_execution_payload_bid: SignedExecutionPayloadBid
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
payload_attestations: List[PayloadAttestation, MAX_PAYLOAD_ATTESTATIONS]
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BeaconBlockHeader#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message BeaconBlockHeader {
|
search: message BeaconBlockHeader {
|
||||||
@@ -538,7 +565,69 @@
|
|||||||
proposer_lookahead: Vector[ValidatorIndex, (MIN_SEED_LOOKAHEAD + 1) * SLOTS_PER_EPOCH]
|
proposer_lookahead: Vector[ValidatorIndex, (MIN_SEED_LOOKAHEAD + 1) * SLOTS_PER_EPOCH]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BlobIdentifier
|
- name: BeaconState#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="BeaconState" fork="gloas" hash="c33b0db2">
|
||||||
|
class BeaconState(Container):
|
||||||
|
genesis_time: uint64
|
||||||
|
genesis_validators_root: Root
|
||||||
|
slot: Slot
|
||||||
|
fork: Fork
|
||||||
|
latest_block_header: BeaconBlockHeader
|
||||||
|
block_roots: Vector[Root, SLOTS_PER_HISTORICAL_ROOT]
|
||||||
|
state_roots: Vector[Root, SLOTS_PER_HISTORICAL_ROOT]
|
||||||
|
historical_roots: List[Root, HISTORICAL_ROOTS_LIMIT]
|
||||||
|
eth1_data: Eth1Data
|
||||||
|
eth1_data_votes: List[Eth1Data, EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH]
|
||||||
|
eth1_deposit_index: uint64
|
||||||
|
validators: List[Validator, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
balances: List[Gwei, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
randao_mixes: Vector[Bytes32, EPOCHS_PER_HISTORICAL_VECTOR]
|
||||||
|
slashings: Vector[Gwei, EPOCHS_PER_SLASHINGS_VECTOR]
|
||||||
|
previous_epoch_participation: List[ParticipationFlags, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
current_epoch_participation: List[ParticipationFlags, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
justification_bits: Bitvector[JUSTIFICATION_BITS_LENGTH]
|
||||||
|
previous_justified_checkpoint: Checkpoint
|
||||||
|
current_justified_checkpoint: Checkpoint
|
||||||
|
finalized_checkpoint: Checkpoint
|
||||||
|
inactivity_scores: List[uint64, VALIDATOR_REGISTRY_LIMIT]
|
||||||
|
current_sync_committee: SyncCommittee
|
||||||
|
next_sync_committee: SyncCommittee
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `latest_execution_payload_header`
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
latest_execution_payload_bid: ExecutionPayloadBid
|
||||||
|
next_withdrawal_index: WithdrawalIndex
|
||||||
|
next_withdrawal_validator_index: ValidatorIndex
|
||||||
|
historical_summaries: List[HistoricalSummary, HISTORICAL_ROOTS_LIMIT]
|
||||||
|
deposit_requests_start_index: uint64
|
||||||
|
deposit_balance_to_consume: Gwei
|
||||||
|
exit_balance_to_consume: Gwei
|
||||||
|
earliest_exit_epoch: Epoch
|
||||||
|
consolidation_balance_to_consume: Gwei
|
||||||
|
earliest_consolidation_epoch: Epoch
|
||||||
|
pending_deposits: List[PendingDeposit, PENDING_DEPOSITS_LIMIT]
|
||||||
|
pending_partial_withdrawals: List[PendingPartialWithdrawal, PENDING_PARTIAL_WITHDRAWALS_LIMIT]
|
||||||
|
pending_consolidations: List[PendingConsolidation, PENDING_CONSOLIDATIONS_LIMIT]
|
||||||
|
proposer_lookahead: Vector[ValidatorIndex, (MIN_SEED_LOOKAHEAD + 1) * SLOTS_PER_EPOCH]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
builders: List[Builder, BUILDER_REGISTRY_LIMIT]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
next_withdrawal_builder_index: BuilderIndex
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
execution_payload_availability: Bitvector[SLOTS_PER_HISTORICAL_ROOT]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
builder_pending_payments: Vector[BuilderPendingPayment, 2 * SLOTS_PER_EPOCH]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
builder_pending_withdrawals: List[BuilderPendingWithdrawal, BUILDER_PENDING_WITHDRAWALS_LIMIT]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
latest_block_hash: Hash32
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
payload_expected_withdrawals: List[Withdrawal, MAX_WITHDRAWALS_PER_PAYLOAD]
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BlobIdentifier#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/blobs.proto
|
- file: proto/prysm/v1alpha1/blobs.proto
|
||||||
search: message BlobIdentifier {
|
search: message BlobIdentifier {
|
||||||
@@ -549,7 +638,7 @@
|
|||||||
index: BlobIndex
|
index: BlobIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BlobSidecar
|
- name: BlobSidecar#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_block.proto
|
- file: proto/prysm/v1alpha1/beacon_block.proto
|
||||||
search: message BlobSidecar {
|
search: message BlobSidecar {
|
||||||
@@ -564,7 +653,39 @@
|
|||||||
kzg_commitment_inclusion_proof: Vector[Bytes32, KZG_COMMITMENT_INCLUSION_PROOF_DEPTH]
|
kzg_commitment_inclusion_proof: Vector[Bytes32, KZG_COMMITMENT_INCLUSION_PROOF_DEPTH]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Checkpoint
|
- name: Builder#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="Builder" fork="gloas" hash="ae177179">
|
||||||
|
class Builder(Container):
|
||||||
|
pubkey: BLSPubkey
|
||||||
|
version: uint8
|
||||||
|
execution_address: ExecutionAddress
|
||||||
|
balance: Gwei
|
||||||
|
deposit_epoch: Epoch
|
||||||
|
withdrawable_epoch: Epoch
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BuilderPendingPayment#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="BuilderPendingPayment" fork="gloas" hash="73cf1649">
|
||||||
|
class BuilderPendingPayment(Container):
|
||||||
|
weight: Gwei
|
||||||
|
withdrawal: BuilderPendingWithdrawal
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BuilderPendingWithdrawal#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="BuilderPendingWithdrawal" fork="gloas" hash="0579f0ac">
|
||||||
|
class BuilderPendingWithdrawal(Container):
|
||||||
|
fee_recipient: ExecutionAddress
|
||||||
|
amount: Gwei
|
||||||
|
builder_index: BuilderIndex
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: Checkpoint#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/attestation.proto
|
- file: proto/eth/v1/attestation.proto
|
||||||
search: message Checkpoint {
|
search: message Checkpoint {
|
||||||
@@ -575,7 +696,7 @@
|
|||||||
root: Root
|
root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ConsolidationRequest
|
- name: ConsolidationRequest#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/electra.proto
|
- file: proto/engine/v1/electra.proto
|
||||||
search: message ConsolidationRequest {
|
search: message ConsolidationRequest {
|
||||||
@@ -587,7 +708,7 @@
|
|||||||
target_pubkey: BLSPubkey
|
target_pubkey: BLSPubkey
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ContributionAndProof
|
- name: ContributionAndProof#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message ContributionAndProof {
|
search: message ContributionAndProof {
|
||||||
@@ -599,7 +720,7 @@
|
|||||||
selection_proof: BLSSignature
|
selection_proof: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DataColumnSidecar
|
- name: DataColumnSidecar#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/data_columns.proto
|
- file: proto/prysm/v1alpha1/data_columns.proto
|
||||||
search: message DataColumnSidecar {
|
search: message DataColumnSidecar {
|
||||||
@@ -614,7 +735,27 @@
|
|||||||
kzg_commitments_inclusion_proof: Vector[Bytes32, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH]
|
kzg_commitments_inclusion_proof: Vector[Bytes32, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DataColumnsByRootIdentifier
|
- name: DataColumnSidecar#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="DataColumnSidecar" fork="gloas" hash="332c7cfc">
|
||||||
|
class DataColumnSidecar(Container):
|
||||||
|
index: ColumnIndex
|
||||||
|
column: List[Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `kzg_commitments`
|
||||||
|
kzg_proofs: List[KZGProof, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `signed_block_header`
|
||||||
|
# [Modified in Gloas:EIP7732]
|
||||||
|
# Removed `kzg_commitments_inclusion_proof`
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
slot: Slot
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
beacon_block_root: Root
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: DataColumnsByRootIdentifier#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/data_columns.proto
|
- file: proto/prysm/v1alpha1/data_columns.proto
|
||||||
search: message DataColumnsByRootIdentifier {
|
search: message DataColumnsByRootIdentifier {
|
||||||
@@ -625,7 +766,7 @@
|
|||||||
columns: List[ColumnIndex, NUMBER_OF_COLUMNS]
|
columns: List[ColumnIndex, NUMBER_OF_COLUMNS]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Deposit
|
- name: Deposit#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message Deposit {
|
search: message Deposit {
|
||||||
@@ -636,7 +777,7 @@
|
|||||||
data: DepositData
|
data: DepositData
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DepositData
|
- name: DepositData#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message Data {
|
search: message Data {
|
||||||
@@ -649,7 +790,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DepositMessage
|
- name: DepositMessage#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message DepositMessage {
|
search: message DepositMessage {
|
||||||
@@ -661,7 +802,7 @@
|
|||||||
amount: Gwei
|
amount: Gwei
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: DepositRequest
|
- name: DepositRequest#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/electra.proto
|
- file: proto/engine/v1/electra.proto
|
||||||
search: message DepositRequest {
|
search: message DepositRequest {
|
||||||
@@ -675,7 +816,17 @@
|
|||||||
index: uint64
|
index: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Eth1Data
|
- name: Eth1Block#phase0
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="Eth1Block" fork="phase0" hash="0a5c6b45">
|
||||||
|
class Eth1Block(Container):
|
||||||
|
timestamp: uint64
|
||||||
|
deposit_root: Root
|
||||||
|
deposit_count: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: Eth1Data#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message Eth1Data {
|
search: message Eth1Data {
|
||||||
@@ -763,6 +914,37 @@
|
|||||||
excess_blob_gas: uint64
|
excess_blob_gas: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: ExecutionPayloadBid#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ExecutionPayloadBid" fork="gloas" hash="1a7b9dea">
|
||||||
|
class ExecutionPayloadBid(Container):
|
||||||
|
parent_block_hash: Hash32
|
||||||
|
parent_block_root: Root
|
||||||
|
block_hash: Hash32
|
||||||
|
prev_randao: Bytes32
|
||||||
|
fee_recipient: ExecutionAddress
|
||||||
|
gas_limit: uint64
|
||||||
|
builder_index: BuilderIndex
|
||||||
|
slot: Slot
|
||||||
|
value: Gwei
|
||||||
|
execution_payment: Gwei
|
||||||
|
blob_kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ExecutionPayloadEnvelope#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ExecutionPayloadEnvelope" fork="gloas" hash="ec5c0233">
|
||||||
|
class ExecutionPayloadEnvelope(Container):
|
||||||
|
payload: ExecutionPayload
|
||||||
|
execution_requests: ExecutionRequests
|
||||||
|
builder_index: BuilderIndex
|
||||||
|
beacon_block_root: Root
|
||||||
|
slot: Slot
|
||||||
|
state_root: Root
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: ExecutionPayloadHeader#bellatrix
|
- name: ExecutionPayloadHeader#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/execution_engine.proto
|
- file: proto/engine/v1/execution_engine.proto
|
||||||
@@ -839,7 +1021,7 @@
|
|||||||
excess_blob_gas: uint64
|
excess_blob_gas: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ExecutionRequests
|
- name: ExecutionRequests#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/electra.proto
|
- file: proto/engine/v1/electra.proto
|
||||||
search: message ExecutionRequests {
|
search: message ExecutionRequests {
|
||||||
@@ -854,7 +1036,7 @@
|
|||||||
consolidations: List[ConsolidationRequest, MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD]
|
consolidations: List[ConsolidationRequest, MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Fork
|
- name: Fork#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message Fork {
|
search: message Fork {
|
||||||
@@ -866,7 +1048,16 @@
|
|||||||
epoch: Epoch
|
epoch: Epoch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ForkData
|
- name: ForkChoiceNode#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ForkChoiceNode" fork="gloas" hash="755a4b34">
|
||||||
|
class ForkChoiceNode(Container):
|
||||||
|
root: Root
|
||||||
|
payload_status: PayloadStatus # One of PAYLOAD_STATUS_* values
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ForkData#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message ForkData {
|
search: message ForkData {
|
||||||
@@ -877,7 +1068,7 @@
|
|||||||
genesis_validators_root: Root
|
genesis_validators_root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HistoricalBatch
|
- name: HistoricalBatch#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message HistoricalBatch {
|
search: message HistoricalBatch {
|
||||||
@@ -888,7 +1079,7 @@
|
|||||||
state_roots: Vector[Root, SLOTS_PER_HISTORICAL_ROOT]
|
state_roots: Vector[Root, SLOTS_PER_HISTORICAL_ROOT]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HistoricalSummary
|
- name: HistoricalSummary#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message HistoricalSummary {
|
search: message HistoricalSummary {
|
||||||
@@ -924,7 +1115,17 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientBootstrap
|
- name: IndexedPayloadAttestation#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="IndexedPayloadAttestation" fork="gloas" hash="fa4832c8">
|
||||||
|
class IndexedPayloadAttestation(Container):
|
||||||
|
attesting_indices: List[ValidatorIndex, PTC_SIZE]
|
||||||
|
data: PayloadAttestationData
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientBootstrap#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientBootstrapAltair {
|
search: message LightClientBootstrapAltair {
|
||||||
@@ -938,7 +1139,18 @@
|
|||||||
current_sync_committee_branch: CurrentSyncCommitteeBranch
|
current_sync_committee_branch: CurrentSyncCommitteeBranch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientFinalityUpdate
|
- name: LightClientBootstrap#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientBootstrap" fork="capella" hash="85f4f5fe">
|
||||||
|
class LightClientBootstrap(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
header: LightClientHeader
|
||||||
|
current_sync_committee: SyncCommittee
|
||||||
|
current_sync_committee_branch: CurrentSyncCommitteeBranch
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientFinalityUpdate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientFinalityUpdateAltair {
|
search: message LightClientFinalityUpdateAltair {
|
||||||
@@ -956,6 +1168,20 @@
|
|||||||
signature_slot: Slot
|
signature_slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientFinalityUpdate#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientFinalityUpdate" fork="capella" hash="9d2b55dd">
|
||||||
|
class LightClientFinalityUpdate(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
attested_header: LightClientHeader
|
||||||
|
# [Modified in Capella]
|
||||||
|
finalized_header: LightClientHeader
|
||||||
|
finality_branch: FinalityBranch
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
signature_slot: Slot
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: LightClientHeader#altair
|
- name: LightClientHeader#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
@@ -980,7 +1206,7 @@
|
|||||||
execution_branch: ExecutionBranch
|
execution_branch: ExecutionBranch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientOptimisticUpdate
|
- name: LightClientOptimisticUpdate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientOptimisticUpdateAltair {
|
search: message LightClientOptimisticUpdateAltair {
|
||||||
@@ -995,7 +1221,18 @@
|
|||||||
signature_slot: Slot
|
signature_slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientUpdate
|
- name: LightClientOptimisticUpdate#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientOptimisticUpdate" fork="capella" hash="bdce7b1d">
|
||||||
|
class LightClientOptimisticUpdate(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
attested_header: LightClientHeader
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
signature_slot: Slot
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientUpdate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/light_client.proto
|
- file: proto/prysm/v1alpha1/light_client.proto
|
||||||
search: message LightClientUpdateAltair {
|
search: message LightClientUpdateAltair {
|
||||||
@@ -1016,7 +1253,65 @@
|
|||||||
signature_slot: Slot
|
signature_slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingAttestation
|
- name: LightClientUpdate#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="LightClientUpdate" fork="capella" hash="8d215165">
|
||||||
|
class LightClientUpdate(Container):
|
||||||
|
# [Modified in Capella]
|
||||||
|
attested_header: LightClientHeader
|
||||||
|
next_sync_committee: SyncCommittee
|
||||||
|
next_sync_committee_branch: NextSyncCommitteeBranch
|
||||||
|
# [Modified in Capella]
|
||||||
|
finalized_header: LightClientHeader
|
||||||
|
finality_branch: FinalityBranch
|
||||||
|
sync_aggregate: SyncAggregate
|
||||||
|
signature_slot: Slot
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MatrixEntry#fulu
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="MatrixEntry" fork="fulu" hash="0da9cc8e">
|
||||||
|
class MatrixEntry(Container):
|
||||||
|
cell: Cell
|
||||||
|
kzg_proof: KZGProof
|
||||||
|
column_index: ColumnIndex
|
||||||
|
row_index: RowIndex
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PayloadAttestation#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="PayloadAttestation" fork="gloas" hash="c769473d">
|
||||||
|
class PayloadAttestation(Container):
|
||||||
|
aggregation_bits: Bitvector[PTC_SIZE]
|
||||||
|
data: PayloadAttestationData
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PayloadAttestationData#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="PayloadAttestationData" fork="gloas" hash="9f1b7f92">
|
||||||
|
class PayloadAttestationData(Container):
|
||||||
|
beacon_block_root: Root
|
||||||
|
slot: Slot
|
||||||
|
payload_present: boolean
|
||||||
|
blob_data_available: boolean
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PayloadAttestationMessage#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="PayloadAttestationMessage" fork="gloas" hash="3707678d">
|
||||||
|
class PayloadAttestationMessage(Container):
|
||||||
|
validator_index: ValidatorIndex
|
||||||
|
data: PayloadAttestationData
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: PendingAttestation#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message PendingAttestation {
|
search: message PendingAttestation {
|
||||||
@@ -1029,7 +1324,7 @@
|
|||||||
proposer_index: ValidatorIndex
|
proposer_index: ValidatorIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingConsolidation
|
- name: PendingConsolidation#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/eip_7251.proto
|
- file: proto/prysm/v1alpha1/eip_7251.proto
|
||||||
search: message PendingConsolidation {
|
search: message PendingConsolidation {
|
||||||
@@ -1040,7 +1335,7 @@
|
|||||||
target_index: ValidatorIndex
|
target_index: ValidatorIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingDeposit
|
- name: PendingDeposit#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/eip_7251.proto
|
- file: proto/prysm/v1alpha1/eip_7251.proto
|
||||||
search: message PendingDeposit {
|
search: message PendingDeposit {
|
||||||
@@ -1054,7 +1349,7 @@
|
|||||||
slot: Slot
|
slot: Slot
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PendingPartialWithdrawal
|
- name: PendingPartialWithdrawal#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/eip_7251.proto
|
- file: proto/prysm/v1alpha1/eip_7251.proto
|
||||||
search: message PendingPartialWithdrawal {
|
search: message PendingPartialWithdrawal {
|
||||||
@@ -1066,7 +1361,7 @@
|
|||||||
withdrawable_epoch: Epoch
|
withdrawable_epoch: Epoch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PowBlock
|
- name: PowBlock#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message PowBlock {
|
search: message PowBlock {
|
||||||
@@ -1078,7 +1373,18 @@
|
|||||||
total_difficulty: uint256
|
total_difficulty: uint256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: ProposerSlashing
|
- name: ProposerPreferences#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="ProposerPreferences" fork="gloas" hash="2a38b149">
|
||||||
|
class ProposerPreferences(Container):
|
||||||
|
proposal_slot: Slot
|
||||||
|
validator_index: ValidatorIndex
|
||||||
|
fee_recipient: ExecutionAddress
|
||||||
|
gas_limit: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: ProposerSlashing#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message ProposerSlashing {
|
search: message ProposerSlashing {
|
||||||
@@ -1112,7 +1418,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedBLSToExecutionChange
|
- name: SignedBLSToExecutionChange#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/withdrawals.proto
|
- file: proto/prysm/v1alpha1/withdrawals.proto
|
||||||
search: message SignedBLSToExecutionChange {
|
search: message SignedBLSToExecutionChange {
|
||||||
@@ -1123,7 +1429,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedBeaconBlock
|
- name: SignedBeaconBlock#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_block.proto
|
- file: proto/prysm/v1alpha1/beacon_block.proto
|
||||||
search: message SignedBeaconBlock {
|
search: message SignedBeaconBlock {
|
||||||
@@ -1134,7 +1440,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedBeaconBlockHeader
|
- name: SignedBeaconBlockHeader#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SignedBeaconBlockHeader {
|
search: message SignedBeaconBlockHeader {
|
||||||
@@ -1145,7 +1451,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedContributionAndProof
|
- name: SignedContributionAndProof#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message SignedContributionAndProof {
|
search: message SignedContributionAndProof {
|
||||||
@@ -1156,7 +1462,34 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SignedVoluntaryExit
|
- name: SignedExecutionPayloadBid#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="SignedExecutionPayloadBid" fork="gloas" hash="6b344341">
|
||||||
|
class SignedExecutionPayloadBid(Container):
|
||||||
|
message: ExecutionPayloadBid
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SignedExecutionPayloadEnvelope#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="SignedExecutionPayloadEnvelope" fork="gloas" hash="ab8f3404">
|
||||||
|
class SignedExecutionPayloadEnvelope(Container):
|
||||||
|
message: ExecutionPayloadEnvelope
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SignedProposerPreferences#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec ssz_object="SignedProposerPreferences" fork="gloas" hash="2142774c">
|
||||||
|
class SignedProposerPreferences(Container):
|
||||||
|
message: ProposerPreferences
|
||||||
|
signature: BLSSignature
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SignedVoluntaryExit#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SignedVoluntaryExit {
|
search: message SignedVoluntaryExit {
|
||||||
@@ -1167,7 +1500,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SigningData
|
- name: SigningData#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message SigningData {
|
search: message SigningData {
|
||||||
@@ -1178,7 +1511,7 @@
|
|||||||
domain: Domain
|
domain: Domain
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SingleAttestation
|
- name: SingleAttestation#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/attestation.proto
|
- file: proto/prysm/v1alpha1/attestation.proto
|
||||||
search: message SingleAttestation {
|
search: message SingleAttestation {
|
||||||
@@ -1191,7 +1524,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncAggregate
|
- name: SyncAggregate#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SyncAggregate {
|
search: message SyncAggregate {
|
||||||
@@ -1202,7 +1535,7 @@
|
|||||||
sync_committee_signature: BLSSignature
|
sync_committee_signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncAggregatorSelectionData
|
- name: SyncAggregatorSelectionData#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_state.proto
|
- file: proto/prysm/v1alpha1/beacon_state.proto
|
||||||
search: message SyncAggregatorSelectionData {
|
search: message SyncAggregatorSelectionData {
|
||||||
@@ -1213,7 +1546,7 @@
|
|||||||
subcommittee_index: uint64
|
subcommittee_index: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncCommittee
|
- name: SyncCommittee#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message SyncCommittee {
|
search: message SyncCommittee {
|
||||||
@@ -1224,7 +1557,7 @@
|
|||||||
aggregate_pubkey: BLSPubkey
|
aggregate_pubkey: BLSPubkey
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncCommitteeContribution
|
- name: SyncCommitteeContribution#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message SyncCommitteeContribution {
|
search: message SyncCommitteeContribution {
|
||||||
@@ -1238,7 +1571,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SyncCommitteeMessage
|
- name: SyncCommitteeMessage#altair
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/sync_committee.proto
|
- file: proto/prysm/v1alpha1/sync_committee.proto
|
||||||
search: message SyncCommitteeMessage {
|
search: message SyncCommitteeMessage {
|
||||||
@@ -1251,7 +1584,7 @@
|
|||||||
signature: BLSSignature
|
signature: BLSSignature
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Validator
|
- name: Validator#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
- file: proto/prysm/v1alpha1/beacon_core_types.proto
|
||||||
search: message Validator {
|
search: message Validator {
|
||||||
@@ -1268,7 +1601,7 @@
|
|||||||
withdrawable_epoch: Epoch
|
withdrawable_epoch: Epoch
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: VoluntaryExit
|
- name: VoluntaryExit#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: proto/eth/v1/beacon_block.proto
|
- file: proto/eth/v1/beacon_block.proto
|
||||||
search: message VoluntaryExit {
|
search: message VoluntaryExit {
|
||||||
@@ -1279,7 +1612,7 @@
|
|||||||
validator_index: ValidatorIndex
|
validator_index: ValidatorIndex
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Withdrawal
|
- name: Withdrawal#capella
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/execution_engine.proto
|
- file: proto/engine/v1/execution_engine.proto
|
||||||
search: message Withdrawal {
|
search: message Withdrawal {
|
||||||
@@ -1292,7 +1625,7 @@
|
|||||||
amount: Gwei
|
amount: Gwei
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: WithdrawalRequest
|
- name: WithdrawalRequest#electra
|
||||||
sources:
|
sources:
|
||||||
- file: proto/engine/v1/electra.proto
|
- file: proto/engine/v1/electra.proto
|
||||||
search: message WithdrawalRequest {
|
search: message WithdrawalRequest {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
- name: BlobParameters
|
- name: BlobParameters#fulu
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="BlobParameters" fork="fulu" hash="a4575aa8">
|
<spec dataclass="BlobParameters" fork="fulu" hash="a4575aa8">
|
||||||
@@ -54,6 +54,20 @@
|
|||||||
processed_sweep_withdrawals_count: uint64
|
processed_sweep_withdrawals_count: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: ExpectedWithdrawals#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="ExpectedWithdrawals" fork="gloas" hash="b32cc9c9">
|
||||||
|
class ExpectedWithdrawals(object):
|
||||||
|
withdrawals: Sequence[Withdrawal]
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
processed_builder_withdrawals_count: uint64
|
||||||
|
processed_partial_withdrawals_count: uint64
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
processed_builders_sweep_count: uint64
|
||||||
|
processed_sweep_withdrawals_count: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: GetPayloadResponse#bellatrix
|
- name: GetPayloadResponse#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: consensus-types/blocks/get_payload.go
|
- file: consensus-types/blocks/get_payload.go
|
||||||
@@ -126,7 +140,7 @@
|
|||||||
execution_requests: Sequence[bytes]
|
execution_requests: Sequence[bytes]
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LatestMessage
|
- name: LatestMessage#phase0
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="LatestMessage" fork="phase0" hash="44e832d0">
|
<spec dataclass="LatestMessage" fork="phase0" hash="44e832d0">
|
||||||
@@ -136,7 +150,18 @@
|
|||||||
root: Root
|
root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: LightClientStore
|
- name: LatestMessage#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="LatestMessage" fork="gloas" hash="a0030894">
|
||||||
|
@dataclass(eq=True, frozen=True)
|
||||||
|
class LatestMessage(object):
|
||||||
|
slot: Slot
|
||||||
|
root: Root
|
||||||
|
payload_present: boolean
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientStore#altair
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="LightClientStore" fork="altair" hash="24725cec">
|
<spec dataclass="LightClientStore" fork="altair" hash="24725cec">
|
||||||
@@ -155,6 +180,23 @@
|
|||||||
current_max_active_participants: uint64
|
current_max_active_participants: uint64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: LightClientStore#capella
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="LightClientStore" fork="capella" hash="04b41062">
|
||||||
|
class LightClientStore(object):
|
||||||
|
# [Modified in Capella]
|
||||||
|
finalized_header: LightClientHeader
|
||||||
|
current_sync_committee: SyncCommittee
|
||||||
|
next_sync_committee: SyncCommittee
|
||||||
|
# [Modified in Capella]
|
||||||
|
best_valid_update: Optional[LightClientUpdate]
|
||||||
|
# [Modified in Capella]
|
||||||
|
optimistic_header: LightClientHeader
|
||||||
|
previous_max_active_participants: uint64
|
||||||
|
current_max_active_participants: uint64
|
||||||
|
</spec>
|
||||||
|
|
||||||
- name: NewPayloadRequest#bellatrix
|
- name: NewPayloadRequest#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: beacon-chain/execution/engine_client.go
|
- file: beacon-chain/execution/engine_client.go
|
||||||
@@ -191,7 +233,7 @@
|
|||||||
execution_requests: ExecutionRequests
|
execution_requests: ExecutionRequests
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: OptimisticStore
|
- name: OptimisticStore#bellatrix
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="OptimisticStore" fork="bellatrix" hash="a2b2182c">
|
<spec dataclass="OptimisticStore" fork="bellatrix" hash="a2b2182c">
|
||||||
@@ -246,7 +288,7 @@
|
|||||||
parent_beacon_block_root: Root
|
parent_beacon_block_root: Root
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: Store
|
- name: Store#phase0
|
||||||
sources: []
|
sources: []
|
||||||
spec: |
|
spec: |
|
||||||
<spec dataclass="Store" fork="phase0" hash="abe525d6">
|
<spec dataclass="Store" fork="phase0" hash="abe525d6">
|
||||||
@@ -266,3 +308,30 @@
|
|||||||
latest_messages: Dict[ValidatorIndex, LatestMessage] = field(default_factory=dict)
|
latest_messages: Dict[ValidatorIndex, LatestMessage] = field(default_factory=dict)
|
||||||
unrealized_justifications: Dict[Root, Checkpoint] = field(default_factory=dict)
|
unrealized_justifications: Dict[Root, Checkpoint] = field(default_factory=dict)
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
|
- name: Store#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec dataclass="Store" fork="gloas" hash="4dbfec46">
|
||||||
|
class Store(object):
|
||||||
|
time: uint64
|
||||||
|
genesis_time: uint64
|
||||||
|
justified_checkpoint: Checkpoint
|
||||||
|
finalized_checkpoint: Checkpoint
|
||||||
|
unrealized_justified_checkpoint: Checkpoint
|
||||||
|
unrealized_finalized_checkpoint: Checkpoint
|
||||||
|
proposer_boost_root: Root
|
||||||
|
equivocating_indices: Set[ValidatorIndex]
|
||||||
|
blocks: Dict[Root, BeaconBlock] = field(default_factory=dict)
|
||||||
|
block_states: Dict[Root, BeaconState] = field(default_factory=dict)
|
||||||
|
block_timeliness: Dict[Root, Vector[boolean, NUM_BLOCK_TIMELINESS_DEADLINES]] = field(
|
||||||
|
default_factory=dict
|
||||||
|
)
|
||||||
|
checkpoint_states: Dict[Checkpoint, BeaconState] = field(default_factory=dict)
|
||||||
|
latest_messages: Dict[ValidatorIndex, LatestMessage] = field(default_factory=dict)
|
||||||
|
unrealized_justifications: Dict[Root, Checkpoint] = field(default_factory=dict)
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
execution_payload_states: Dict[Root, BeaconState] = field(default_factory=dict)
|
||||||
|
# [New in Gloas:EIP7732]
|
||||||
|
ptc_vote: Dict[Root, Vector[boolean, PTC_SIZE]] = field(default_factory=dict)
|
||||||
|
</spec>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
- name: BASE_REWARD_FACTOR
|
- name: BASE_REWARD_FACTOR#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BaseRewardFactor\s+.*yaml:"BASE_REWARD_FACTOR"
|
search: BaseRewardFactor\s+.*yaml:"BASE_REWARD_FACTOR"
|
||||||
@@ -8,7 +8,21 @@
|
|||||||
BASE_REWARD_FACTOR: uint64 = 64
|
BASE_REWARD_FACTOR: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: BYTES_PER_LOGS_BLOOM
|
- name: BUILDER_PENDING_WITHDRAWALS_LIMIT#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="BUILDER_PENDING_WITHDRAWALS_LIMIT" fork="gloas" hash="40b31377">
|
||||||
|
BUILDER_PENDING_WITHDRAWALS_LIMIT: uint64 = 1048576
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BUILDER_REGISTRY_LIMIT#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="BUILDER_REGISTRY_LIMIT" fork="gloas" hash="e951ff73">
|
||||||
|
BUILDER_REGISTRY_LIMIT: uint64 = 1099511627776
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: BYTES_PER_LOGS_BLOOM#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: BytesPerLogsBloom\s+.*yaml:"BYTES_PER_LOGS_BLOOM"
|
search: BytesPerLogsBloom\s+.*yaml:"BYTES_PER_LOGS_BLOOM"
|
||||||
@@ -18,7 +32,7 @@
|
|||||||
BYTES_PER_LOGS_BLOOM: uint64 = 256
|
BYTES_PER_LOGS_BLOOM: uint64 = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: CELLS_PER_EXT_BLOB
|
- name: CELLS_PER_EXT_BLOB#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: beacon-chain/rpc/eth/config/handlers.go
|
- file: beacon-chain/rpc/eth/config/handlers.go
|
||||||
search: data\["CELLS_PER_EXT_BLOB"\]
|
search: data\["CELLS_PER_EXT_BLOB"\]
|
||||||
@@ -28,7 +42,7 @@
|
|||||||
CELLS_PER_EXT_BLOB = 128
|
CELLS_PER_EXT_BLOB = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EFFECTIVE_BALANCE_INCREMENT
|
- name: EFFECTIVE_BALANCE_INCREMENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EffectiveBalanceIncrement\s+.*yaml:"EFFECTIVE_BALANCE_INCREMENT"
|
search: EffectiveBalanceIncrement\s+.*yaml:"EFFECTIVE_BALANCE_INCREMENT"
|
||||||
@@ -38,7 +52,7 @@
|
|||||||
EFFECTIVE_BALANCE_INCREMENT: Gwei = 1000000000
|
EFFECTIVE_BALANCE_INCREMENT: Gwei = 1000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_ETH1_VOTING_PERIOD
|
- name: EPOCHS_PER_ETH1_VOTING_PERIOD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EpochsPerEth1VotingPeriod\s+.*yaml:"EPOCHS_PER_ETH1_VOTING_PERIOD"
|
search: EpochsPerEth1VotingPeriod\s+.*yaml:"EPOCHS_PER_ETH1_VOTING_PERIOD"
|
||||||
@@ -48,7 +62,7 @@
|
|||||||
EPOCHS_PER_ETH1_VOTING_PERIOD: uint64 = 64
|
EPOCHS_PER_ETH1_VOTING_PERIOD: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_HISTORICAL_VECTOR
|
- name: EPOCHS_PER_HISTORICAL_VECTOR#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: RandaoMixesLength\s*=
|
search: RandaoMixesLength\s*=
|
||||||
@@ -58,7 +72,7 @@
|
|||||||
EPOCHS_PER_HISTORICAL_VECTOR: uint64 = 65536
|
EPOCHS_PER_HISTORICAL_VECTOR: uint64 = 65536
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_SLASHINGS_VECTOR
|
- name: EPOCHS_PER_SLASHINGS_VECTOR#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: SlashingsLength\s*=
|
search: SlashingsLength\s*=
|
||||||
@@ -68,7 +82,7 @@
|
|||||||
EPOCHS_PER_SLASHINGS_VECTOR: uint64 = 8192
|
EPOCHS_PER_SLASHINGS_VECTOR: uint64 = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: EPOCHS_PER_SYNC_COMMITTEE_PERIOD
|
- name: EPOCHS_PER_SYNC_COMMITTEE_PERIOD#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: EpochsPerSyncCommitteePeriod\s+.*yaml:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD"
|
search: EpochsPerSyncCommitteePeriod\s+.*yaml:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD"
|
||||||
@@ -78,7 +92,7 @@
|
|||||||
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: uint64 = 256
|
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: uint64 = 256
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FIELD_ELEMENTS_PER_BLOB
|
- name: FIELD_ELEMENTS_PER_BLOB#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: FieldElementsPerBlob\s+.*yaml:"FIELD_ELEMENTS_PER_BLOB"
|
search: FieldElementsPerBlob\s+.*yaml:"FIELD_ELEMENTS_PER_BLOB"
|
||||||
@@ -88,7 +102,7 @@
|
|||||||
FIELD_ELEMENTS_PER_BLOB: uint64 = 4096
|
FIELD_ELEMENTS_PER_BLOB: uint64 = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FIELD_ELEMENTS_PER_CELL
|
- name: FIELD_ELEMENTS_PER_CELL#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: CellsPerBlob\s*=
|
search: CellsPerBlob\s*=
|
||||||
@@ -98,7 +112,7 @@
|
|||||||
FIELD_ELEMENTS_PER_CELL: uint64 = 64
|
FIELD_ELEMENTS_PER_CELL: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: FIELD_ELEMENTS_PER_EXT_BLOB
|
- name: FIELD_ELEMENTS_PER_EXT_BLOB#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: proto/ssz_proto_library.bzl
|
- file: proto/ssz_proto_library.bzl
|
||||||
search: mainnet\s*=\s*\{[^}]*"field_elements_per_ext_blob\.size".*[^}]*\}
|
search: mainnet\s*=\s*\{[^}]*"field_elements_per_ext_blob\.size".*[^}]*\}
|
||||||
@@ -108,7 +122,7 @@
|
|||||||
FIELD_ELEMENTS_PER_EXT_BLOB = 8192
|
FIELD_ELEMENTS_PER_EXT_BLOB = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HISTORICAL_ROOTS_LIMIT
|
- name: HISTORICAL_ROOTS_LIMIT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: HistoricalRootsLength\s*=
|
search: HistoricalRootsLength\s*=
|
||||||
@@ -118,7 +132,7 @@
|
|||||||
HISTORICAL_ROOTS_LIMIT: uint64 = 16777216
|
HISTORICAL_ROOTS_LIMIT: uint64 = 16777216
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HYSTERESIS_DOWNWARD_MULTIPLIER
|
- name: HYSTERESIS_DOWNWARD_MULTIPLIER#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: HysteresisDownwardMultiplier\s+.*yaml:"HYSTERESIS_DOWNWARD_MULTIPLIER"
|
search: HysteresisDownwardMultiplier\s+.*yaml:"HYSTERESIS_DOWNWARD_MULTIPLIER"
|
||||||
@@ -128,7 +142,7 @@
|
|||||||
HYSTERESIS_DOWNWARD_MULTIPLIER: uint64 = 1
|
HYSTERESIS_DOWNWARD_MULTIPLIER: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HYSTERESIS_QUOTIENT
|
- name: HYSTERESIS_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: HysteresisQuotient\s+.*yaml:"HYSTERESIS_QUOTIENT"
|
search: HysteresisQuotient\s+.*yaml:"HYSTERESIS_QUOTIENT"
|
||||||
@@ -138,7 +152,7 @@
|
|||||||
HYSTERESIS_QUOTIENT: uint64 = 4
|
HYSTERESIS_QUOTIENT: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: HYSTERESIS_UPWARD_MULTIPLIER
|
- name: HYSTERESIS_UPWARD_MULTIPLIER#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: HysteresisUpwardMultiplier\s+.*yaml:"HYSTERESIS_UPWARD_MULTIPLIER"
|
search: HysteresisUpwardMultiplier\s+.*yaml:"HYSTERESIS_UPWARD_MULTIPLIER"
|
||||||
@@ -148,7 +162,7 @@
|
|||||||
HYSTERESIS_UPWARD_MULTIPLIER: uint64 = 5
|
HYSTERESIS_UPWARD_MULTIPLIER: uint64 = 5
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_PENALTY_QUOTIENT
|
- name: INACTIVITY_PENALTY_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityPenaltyQuotient\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT"
|
search: InactivityPenaltyQuotient\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT"
|
||||||
@@ -158,7 +172,7 @@
|
|||||||
INACTIVITY_PENALTY_QUOTIENT: uint64 = 67108864
|
INACTIVITY_PENALTY_QUOTIENT: uint64 = 67108864
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_PENALTY_QUOTIENT_ALTAIR
|
- name: INACTIVITY_PENALTY_QUOTIENT_ALTAIR#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityPenaltyQuotientAltair\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR"
|
search: InactivityPenaltyQuotientAltair\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR"
|
||||||
@@ -168,7 +182,7 @@
|
|||||||
INACTIVITY_PENALTY_QUOTIENT_ALTAIR: uint64 = 50331648
|
INACTIVITY_PENALTY_QUOTIENT_ALTAIR: uint64 = 50331648
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: INACTIVITY_PENALTY_QUOTIENT_BELLATRIX
|
- name: INACTIVITY_PENALTY_QUOTIENT_BELLATRIX#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: InactivityPenaltyQuotientBellatrix\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX"
|
search: InactivityPenaltyQuotientBellatrix\s+.*yaml:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX"
|
||||||
@@ -178,7 +192,7 @@
|
|||||||
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: uint64 = 16777216
|
INACTIVITY_PENALTY_QUOTIENT_BELLATRIX: uint64 = 16777216
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH
|
- name: KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: proto/ssz_proto_library.bzl
|
- file: proto/ssz_proto_library.bzl
|
||||||
search: mainnet\s*=\s*\{[^}]*"kzg_commitments_inclusion_proof_depth\.size":.*[^}]*\}
|
search: mainnet\s*=\s*\{[^}]*"kzg_commitments_inclusion_proof_depth\.size":.*[^}]*\}
|
||||||
@@ -188,7 +202,7 @@
|
|||||||
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH: uint64 = 4
|
KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: KZG_COMMITMENT_INCLUSION_PROOF_DEPTH
|
- name: KZG_COMMITMENT_INCLUSION_PROOF_DEPTH#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: KzgCommitmentInclusionProofDepth\s*=
|
search: KzgCommitmentInclusionProofDepth\s*=
|
||||||
@@ -198,7 +212,7 @@
|
|||||||
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: uint64 = 17
|
KZG_COMMITMENT_INCLUSION_PROOF_DEPTH: uint64 = 17
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTATIONS
|
- name: MAX_ATTESTATIONS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttestations\s+.*yaml:"MAX_ATTESTATIONS"
|
search: MaxAttestations\s+.*yaml:"MAX_ATTESTATIONS"
|
||||||
@@ -208,7 +222,7 @@
|
|||||||
MAX_ATTESTATIONS = 128
|
MAX_ATTESTATIONS = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTATIONS_ELECTRA
|
- name: MAX_ATTESTATIONS_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttestationsElectra\s+.*yaml:"MAX_ATTESTATIONS_ELECTRA"
|
search: MaxAttestationsElectra\s+.*yaml:"MAX_ATTESTATIONS_ELECTRA"
|
||||||
@@ -218,7 +232,7 @@
|
|||||||
MAX_ATTESTATIONS_ELECTRA = 8
|
MAX_ATTESTATIONS_ELECTRA = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTER_SLASHINGS
|
- name: MAX_ATTESTER_SLASHINGS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttesterSlashings\s+.*yaml:"MAX_ATTESTER_SLASHINGS"
|
search: MaxAttesterSlashings\s+.*yaml:"MAX_ATTESTER_SLASHINGS"
|
||||||
@@ -228,7 +242,7 @@
|
|||||||
MAX_ATTESTER_SLASHINGS = 2
|
MAX_ATTESTER_SLASHINGS = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_ATTESTER_SLASHINGS_ELECTRA
|
- name: MAX_ATTESTER_SLASHINGS_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxAttesterSlashingsElectra\s+.*yaml:"MAX_ATTESTER_SLASHINGS_ELECTRA"
|
search: MaxAttesterSlashingsElectra\s+.*yaml:"MAX_ATTESTER_SLASHINGS_ELECTRA"
|
||||||
@@ -238,7 +252,7 @@
|
|||||||
MAX_ATTESTER_SLASHINGS_ELECTRA = 1
|
MAX_ATTESTER_SLASHINGS_ELECTRA = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BLOB_COMMITMENTS_PER_BLOCK
|
- name: MAX_BLOB_COMMITMENTS_PER_BLOCK#deneb
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: MaxBlobCommitmentsPerBlock\s*=
|
search: MaxBlobCommitmentsPerBlock\s*=
|
||||||
@@ -248,7 +262,7 @@
|
|||||||
MAX_BLOB_COMMITMENTS_PER_BLOCK: uint64 = 4096
|
MAX_BLOB_COMMITMENTS_PER_BLOCK: uint64 = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BLS_TO_EXECUTION_CHANGES
|
- name: MAX_BLS_TO_EXECUTION_CHANGES#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxBlsToExecutionChanges\s+.*yaml:"MAX_BLS_TO_EXECUTION_CHANGES"
|
search: MaxBlsToExecutionChanges\s+.*yaml:"MAX_BLS_TO_EXECUTION_CHANGES"
|
||||||
@@ -258,7 +272,14 @@
|
|||||||
MAX_BLS_TO_EXECUTION_CHANGES = 16
|
MAX_BLS_TO_EXECUTION_CHANGES = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_BYTES_PER_TRANSACTION
|
- name: MAX_BUILDERS_PER_WITHDRAWALS_SWEEP#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="MAX_BUILDERS_PER_WITHDRAWALS_SWEEP" fork="gloas" hash="1556b314">
|
||||||
|
MAX_BUILDERS_PER_WITHDRAWALS_SWEEP = 16384
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MAX_BYTES_PER_TRANSACTION#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxBytesPerTransaction\s+.*yaml:"MAX_BYTES_PER_TRANSACTION"
|
search: MaxBytesPerTransaction\s+.*yaml:"MAX_BYTES_PER_TRANSACTION"
|
||||||
@@ -288,7 +309,7 @@
|
|||||||
MAX_COMMITTEES_PER_SLOT: uint64 = 64
|
MAX_COMMITTEES_PER_SLOT: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD
|
- name: MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxConsolidationsRequestsPerPayload\s+.*yaml:"MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD"
|
search: MaxConsolidationsRequestsPerPayload\s+.*yaml:"MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD"
|
||||||
@@ -298,7 +319,7 @@
|
|||||||
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: uint64 = 2
|
MAX_CONSOLIDATION_REQUESTS_PER_PAYLOAD: uint64 = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_DEPOSITS
|
- name: MAX_DEPOSITS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxDeposits\s+.*yaml:"MAX_DEPOSITS"
|
search: MaxDeposits\s+.*yaml:"MAX_DEPOSITS"
|
||||||
@@ -308,7 +329,7 @@
|
|||||||
MAX_DEPOSITS = 16
|
MAX_DEPOSITS = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_DEPOSIT_REQUESTS_PER_PAYLOAD
|
- name: MAX_DEPOSIT_REQUESTS_PER_PAYLOAD#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxDepositRequestsPerPayload\s+.*yaml:"MAX_DEPOSIT_REQUESTS_PER_PAYLOAD"
|
search: MaxDepositRequestsPerPayload\s+.*yaml:"MAX_DEPOSIT_REQUESTS_PER_PAYLOAD"
|
||||||
@@ -318,7 +339,7 @@
|
|||||||
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: uint64 = 8192
|
MAX_DEPOSIT_REQUESTS_PER_PAYLOAD: uint64 = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_EFFECTIVE_BALANCE
|
- name: MAX_EFFECTIVE_BALANCE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxEffectiveBalance\s+.*yaml:"MAX_EFFECTIVE_BALANCE"
|
search: MaxEffectiveBalance\s+.*yaml:"MAX_EFFECTIVE_BALANCE"
|
||||||
@@ -328,7 +349,7 @@
|
|||||||
MAX_EFFECTIVE_BALANCE: Gwei = 32000000000
|
MAX_EFFECTIVE_BALANCE: Gwei = 32000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_EFFECTIVE_BALANCE_ELECTRA
|
- name: MAX_EFFECTIVE_BALANCE_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxEffectiveBalanceElectra\s+.*yaml:"MAX_EFFECTIVE_BALANCE_ELECTRA"
|
search: MaxEffectiveBalanceElectra\s+.*yaml:"MAX_EFFECTIVE_BALANCE_ELECTRA"
|
||||||
@@ -338,7 +359,7 @@
|
|||||||
MAX_EFFECTIVE_BALANCE_ELECTRA: Gwei = 2048000000000
|
MAX_EFFECTIVE_BALANCE_ELECTRA: Gwei = 2048000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_EXTRA_DATA_BYTES
|
- name: MAX_EXTRA_DATA_BYTES#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxExtraDataBytes\s+.*yaml:"MAX_EXTRA_DATA_BYTES"
|
search: MaxExtraDataBytes\s+.*yaml:"MAX_EXTRA_DATA_BYTES"
|
||||||
@@ -348,7 +369,14 @@
|
|||||||
MAX_EXTRA_DATA_BYTES = 32
|
MAX_EXTRA_DATA_BYTES = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PENDING_DEPOSITS_PER_EPOCH
|
- name: MAX_PAYLOAD_ATTESTATIONS#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="MAX_PAYLOAD_ATTESTATIONS" fork="gloas" hash="fc24e7ea">
|
||||||
|
MAX_PAYLOAD_ATTESTATIONS = 4
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: MAX_PENDING_DEPOSITS_PER_EPOCH#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPendingDepositsPerEpoch\s+.*yaml:"MAX_PENDING_DEPOSITS_PER_EPOCH"
|
search: MaxPendingDepositsPerEpoch\s+.*yaml:"MAX_PENDING_DEPOSITS_PER_EPOCH"
|
||||||
@@ -358,7 +386,7 @@
|
|||||||
MAX_PENDING_DEPOSITS_PER_EPOCH: uint64 = 16
|
MAX_PENDING_DEPOSITS_PER_EPOCH: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP
|
- name: MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxPendingPartialsPerWithdrawalsSweep\s+.*yaml:"MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP"
|
search: MaxPendingPartialsPerWithdrawalsSweep\s+.*yaml:"MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP"
|
||||||
@@ -368,7 +396,7 @@
|
|||||||
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: uint64 = 8
|
MAX_PENDING_PARTIALS_PER_WITHDRAWALS_SWEEP: uint64 = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_PROPOSER_SLASHINGS
|
- name: MAX_PROPOSER_SLASHINGS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxProposerSlashings\s+.*yaml:"MAX_PROPOSER_SLASHINGS"
|
search: MaxProposerSlashings\s+.*yaml:"MAX_PROPOSER_SLASHINGS"
|
||||||
@@ -378,7 +406,7 @@
|
|||||||
MAX_PROPOSER_SLASHINGS = 16
|
MAX_PROPOSER_SLASHINGS = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_SEED_LOOKAHEAD
|
- name: MAX_SEED_LOOKAHEAD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxSeedLookahead\s+.*yaml:"MAX_SEED_LOOKAHEAD"
|
search: MaxSeedLookahead\s+.*yaml:"MAX_SEED_LOOKAHEAD"
|
||||||
@@ -388,7 +416,7 @@
|
|||||||
MAX_SEED_LOOKAHEAD: uint64 = 4
|
MAX_SEED_LOOKAHEAD: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_TRANSACTIONS_PER_PAYLOAD
|
- name: MAX_TRANSACTIONS_PER_PAYLOAD#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxTransactionsPerPayload\s+.*yaml:"MAX_TRANSACTIONS_PER_PAYLOAD"
|
search: MaxTransactionsPerPayload\s+.*yaml:"MAX_TRANSACTIONS_PER_PAYLOAD"
|
||||||
@@ -418,7 +446,7 @@
|
|||||||
MAX_VALIDATORS_PER_COMMITTEE: uint64 = 2048
|
MAX_VALIDATORS_PER_COMMITTEE: uint64 = 2048
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP
|
- name: MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxValidatorsPerWithdrawalsSweep\s+.*yaml:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP"
|
search: MaxValidatorsPerWithdrawalsSweep\s+.*yaml:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP"
|
||||||
@@ -428,7 +456,7 @@
|
|||||||
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP = 16384
|
MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP = 16384
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_VOLUNTARY_EXITS
|
- name: MAX_VOLUNTARY_EXITS#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxVoluntaryExits\s+.*yaml:"MAX_VOLUNTARY_EXITS"
|
search: MaxVoluntaryExits\s+.*yaml:"MAX_VOLUNTARY_EXITS"
|
||||||
@@ -438,7 +466,7 @@
|
|||||||
MAX_VOLUNTARY_EXITS = 16
|
MAX_VOLUNTARY_EXITS = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_WITHDRAWALS_PER_PAYLOAD
|
- name: MAX_WITHDRAWALS_PER_PAYLOAD#capella
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: MaxWithdrawalsPerPayload\s*=
|
search: MaxWithdrawalsPerPayload\s*=
|
||||||
@@ -448,7 +476,7 @@
|
|||||||
MAX_WITHDRAWALS_PER_PAYLOAD: uint64 = 16
|
MAX_WITHDRAWALS_PER_PAYLOAD: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD
|
- name: MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MaxWithdrawalRequestsPerPayload\s+.*yaml:"MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD"
|
search: MaxWithdrawalRequestsPerPayload\s+.*yaml:"MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD"
|
||||||
@@ -458,7 +486,7 @@
|
|||||||
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: uint64 = 16
|
MAX_WITHDRAWAL_REQUESTS_PER_PAYLOAD: uint64 = 16
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_ACTIVATION_BALANCE
|
- name: MIN_ACTIVATION_BALANCE#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinActivationBalance\s+.*yaml:"MIN_ACTIVATION_BALANCE"
|
search: MinActivationBalance\s+.*yaml:"MIN_ACTIVATION_BALANCE"
|
||||||
@@ -468,7 +496,7 @@
|
|||||||
MIN_ACTIVATION_BALANCE: Gwei = 32000000000
|
MIN_ACTIVATION_BALANCE: Gwei = 32000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_ATTESTATION_INCLUSION_DELAY
|
- name: MIN_ATTESTATION_INCLUSION_DELAY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinAttestationInclusionDelay\s+.*yaml:"MIN_ATTESTATION_INCLUSION_DELAY"
|
search: MinAttestationInclusionDelay\s+.*yaml:"MIN_ATTESTATION_INCLUSION_DELAY"
|
||||||
@@ -478,7 +506,7 @@
|
|||||||
MIN_ATTESTATION_INCLUSION_DELAY: uint64 = 1
|
MIN_ATTESTATION_INCLUSION_DELAY: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_DEPOSIT_AMOUNT
|
- name: MIN_DEPOSIT_AMOUNT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinDepositAmount\s+.*yaml:"MIN_DEPOSIT_AMOUNT"
|
search: MinDepositAmount\s+.*yaml:"MIN_DEPOSIT_AMOUNT"
|
||||||
@@ -488,7 +516,7 @@
|
|||||||
MIN_DEPOSIT_AMOUNT: Gwei = 1000000000
|
MIN_DEPOSIT_AMOUNT: Gwei = 1000000000
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_EPOCHS_TO_INACTIVITY_PENALTY
|
- name: MIN_EPOCHS_TO_INACTIVITY_PENALTY#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinEpochsToInactivityPenalty\s+.*yaml:"MIN_EPOCHS_TO_INACTIVITY_PENALTY"
|
search: MinEpochsToInactivityPenalty\s+.*yaml:"MIN_EPOCHS_TO_INACTIVITY_PENALTY"
|
||||||
@@ -498,7 +526,7 @@
|
|||||||
MIN_EPOCHS_TO_INACTIVITY_PENALTY: uint64 = 4
|
MIN_EPOCHS_TO_INACTIVITY_PENALTY: uint64 = 4
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SEED_LOOKAHEAD
|
- name: MIN_SEED_LOOKAHEAD#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSeedLookahead\s+.*yaml:"MIN_SEED_LOOKAHEAD"
|
search: MinSeedLookahead\s+.*yaml:"MIN_SEED_LOOKAHEAD"
|
||||||
@@ -508,7 +536,7 @@
|
|||||||
MIN_SEED_LOOKAHEAD: uint64 = 1
|
MIN_SEED_LOOKAHEAD: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT
|
- name: MIN_SLASHING_PENALTY_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotient\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT"
|
search: MinSlashingPenaltyQuotient\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT"
|
||||||
@@ -518,7 +546,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT: uint64 = 128
|
MIN_SLASHING_PENALTY_QUOTIENT: uint64 = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR
|
- name: MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotientAltair\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR"
|
search: MinSlashingPenaltyQuotientAltair\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR"
|
||||||
@@ -528,7 +556,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: uint64 = 64
|
MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR: uint64 = 64
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX
|
- name: MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotientBellatrix\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX"
|
search: MinSlashingPenaltyQuotientBellatrix\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX"
|
||||||
@@ -538,7 +566,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: uint64 = 32
|
MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX: uint64 = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA
|
- name: MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSlashingPenaltyQuotientElectra\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA"
|
search: MinSlashingPenaltyQuotientElectra\s+.*yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA"
|
||||||
@@ -548,7 +576,7 @@
|
|||||||
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: uint64 = 4096
|
MIN_SLASHING_PENALTY_QUOTIENT_ELECTRA: uint64 = 4096
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: MIN_SYNC_COMMITTEE_PARTICIPANTS
|
- name: MIN_SYNC_COMMITTEE_PARTICIPANTS#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: MinSyncCommitteeParticipants\s+.*yaml:"MIN_SYNC_COMMITTEE_PARTICIPANTS"
|
search: MinSyncCommitteeParticipants\s+.*yaml:"MIN_SYNC_COMMITTEE_PARTICIPANTS"
|
||||||
@@ -558,7 +586,7 @@
|
|||||||
MIN_SYNC_COMMITTEE_PARTICIPANTS = 1
|
MIN_SYNC_COMMITTEE_PARTICIPANTS = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: NUMBER_OF_COLUMNS
|
- name: NUMBER_OF_COLUMNS#fulu
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: NumberOfColumns\s*=
|
search: NumberOfColumns\s*=
|
||||||
@@ -568,7 +596,7 @@
|
|||||||
NUMBER_OF_COLUMNS: uint64 = 128
|
NUMBER_OF_COLUMNS: uint64 = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PENDING_CONSOLIDATIONS_LIMIT
|
- name: PENDING_CONSOLIDATIONS_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: PendingConsolidationsLimit\s*=
|
search: PendingConsolidationsLimit\s*=
|
||||||
@@ -578,7 +606,7 @@
|
|||||||
PENDING_CONSOLIDATIONS_LIMIT: uint64 = 262144
|
PENDING_CONSOLIDATIONS_LIMIT: uint64 = 262144
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PENDING_DEPOSITS_LIMIT
|
- name: PENDING_DEPOSITS_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: PendingDepositsLimit\s*=
|
search: PendingDepositsLimit\s*=
|
||||||
@@ -588,7 +616,7 @@
|
|||||||
PENDING_DEPOSITS_LIMIT: uint64 = 134217728
|
PENDING_DEPOSITS_LIMIT: uint64 = 134217728
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PENDING_PARTIAL_WITHDRAWALS_LIMIT
|
- name: PENDING_PARTIAL_WITHDRAWALS_LIMIT#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: PendingPartialWithdrawalsLimit\s*=
|
search: PendingPartialWithdrawalsLimit\s*=
|
||||||
@@ -598,7 +626,7 @@
|
|||||||
PENDING_PARTIAL_WITHDRAWALS_LIMIT: uint64 = 134217728
|
PENDING_PARTIAL_WITHDRAWALS_LIMIT: uint64 = 134217728
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPORTIONAL_SLASHING_MULTIPLIER
|
- name: PROPORTIONAL_SLASHING_MULTIPLIER#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProportionalSlashingMultiplier\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER"
|
search: ProportionalSlashingMultiplier\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER"
|
||||||
@@ -608,7 +636,7 @@
|
|||||||
PROPORTIONAL_SLASHING_MULTIPLIER: uint64 = 1
|
PROPORTIONAL_SLASHING_MULTIPLIER: uint64 = 1
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR
|
- name: PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProportionalSlashingMultiplierAltair\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR"
|
search: ProportionalSlashingMultiplierAltair\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR"
|
||||||
@@ -618,7 +646,7 @@
|
|||||||
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: uint64 = 2
|
PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR: uint64 = 2
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX
|
- name: PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX#bellatrix
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProportionalSlashingMultiplierBellatrix\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX"
|
search: ProportionalSlashingMultiplierBellatrix\s+.*yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX"
|
||||||
@@ -628,7 +656,7 @@
|
|||||||
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: uint64 = 3
|
PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX: uint64 = 3
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: PROPOSER_REWARD_QUOTIENT
|
- name: PROPOSER_REWARD_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ProposerRewardQuotient\s+.*yaml:"PROPOSER_REWARD_QUOTIENT"
|
search: ProposerRewardQuotient\s+.*yaml:"PROPOSER_REWARD_QUOTIENT"
|
||||||
@@ -638,7 +666,14 @@
|
|||||||
PROPOSER_REWARD_QUOTIENT: uint64 = 8
|
PROPOSER_REWARD_QUOTIENT: uint64 = 8
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SHUFFLE_ROUND_COUNT
|
- name: PTC_SIZE#gloas
|
||||||
|
sources: []
|
||||||
|
spec: |
|
||||||
|
<spec preset_var="PTC_SIZE" fork="gloas" hash="d61c5930">
|
||||||
|
PTC_SIZE: uint64 = 512
|
||||||
|
</spec>
|
||||||
|
|
||||||
|
- name: SHUFFLE_ROUND_COUNT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: ShuffleRoundCount\s+.*yaml:"SHUFFLE_ROUND_COUNT"
|
search: ShuffleRoundCount\s+.*yaml:"SHUFFLE_ROUND_COUNT"
|
||||||
@@ -648,7 +683,7 @@
|
|||||||
SHUFFLE_ROUND_COUNT: uint64 = 90
|
SHUFFLE_ROUND_COUNT: uint64 = 90
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SLOTS_PER_EPOCH
|
- name: SLOTS_PER_EPOCH#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: SlotsPerEpoch\s*=
|
search: SlotsPerEpoch\s*=
|
||||||
@@ -658,7 +693,7 @@
|
|||||||
SLOTS_PER_EPOCH: uint64 = 32
|
SLOTS_PER_EPOCH: uint64 = 32
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SLOTS_PER_HISTORICAL_ROOT
|
- name: SLOTS_PER_HISTORICAL_ROOT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: BlockRootsLength\s*=
|
search: BlockRootsLength\s*=
|
||||||
@@ -668,7 +703,7 @@
|
|||||||
SLOTS_PER_HISTORICAL_ROOT: uint64 = 8192
|
SLOTS_PER_HISTORICAL_ROOT: uint64 = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: SYNC_COMMITTEE_SIZE
|
- name: SYNC_COMMITTEE_SIZE#altair
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: SyncCommitteeLength\s*=
|
search: SyncCommitteeLength\s*=
|
||||||
@@ -678,7 +713,7 @@
|
|||||||
SYNC_COMMITTEE_SIZE: uint64 = 512
|
SYNC_COMMITTEE_SIZE: uint64 = 512
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: TARGET_COMMITTEE_SIZE
|
- name: TARGET_COMMITTEE_SIZE#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: TargetCommitteeSize\s+.*yaml:"TARGET_COMMITTEE_SIZE"
|
search: TargetCommitteeSize\s+.*yaml:"TARGET_COMMITTEE_SIZE"
|
||||||
@@ -688,7 +723,7 @@
|
|||||||
TARGET_COMMITTEE_SIZE: uint64 = 128
|
TARGET_COMMITTEE_SIZE: uint64 = 128
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: UPDATE_TIMEOUT
|
- name: UPDATE_TIMEOUT#altair
|
||||||
sources:
|
sources:
|
||||||
- file: beacon-chain/rpc/eth/config/handlers.go
|
- file: beacon-chain/rpc/eth/config/handlers.go
|
||||||
search: data\["UPDATE_TIMEOUT"\]
|
search: data\["UPDATE_TIMEOUT"\]
|
||||||
@@ -698,7 +733,7 @@
|
|||||||
UPDATE_TIMEOUT = 8192
|
UPDATE_TIMEOUT = 8192
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: VALIDATOR_REGISTRY_LIMIT
|
- name: VALIDATOR_REGISTRY_LIMIT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/fieldparams/mainnet.go
|
- file: config/fieldparams/mainnet.go
|
||||||
search: ValidatorRegistryLimit\s*=
|
search: ValidatorRegistryLimit\s*=
|
||||||
@@ -708,7 +743,7 @@
|
|||||||
VALIDATOR_REGISTRY_LIMIT: uint64 = 1099511627776
|
VALIDATOR_REGISTRY_LIMIT: uint64 = 1099511627776
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: WHISTLEBLOWER_REWARD_QUOTIENT
|
- name: WHISTLEBLOWER_REWARD_QUOTIENT#phase0
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: WhistleBlowerRewardQuotient\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT"
|
search: WhistleBlowerRewardQuotient\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT"
|
||||||
@@ -718,7 +753,7 @@
|
|||||||
WHISTLEBLOWER_REWARD_QUOTIENT: uint64 = 512
|
WHISTLEBLOWER_REWARD_QUOTIENT: uint64 = 512
|
||||||
</spec>
|
</spec>
|
||||||
|
|
||||||
- name: WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA
|
- name: WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA#electra
|
||||||
sources:
|
sources:
|
||||||
- file: config/params/config.go
|
- file: config/params/config.go
|
||||||
search: WhistleBlowerRewardQuotientElectra\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA"
|
search: WhistleBlowerRewardQuotientElectra\s+.*yaml:"WHISTLEBLOWER_REWARD_QUOTIENT_ELECTRA"
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import (
|
|||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/gloas"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/gloas"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/helpers"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/helpers"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/state"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/state"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/config/params"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/runtime/version"
|
||||||
"github.com/OffchainLabs/prysm/v7/testing/require"
|
"github.com/OffchainLabs/prysm/v7/testing/require"
|
||||||
"github.com/OffchainLabs/prysm/v7/testing/spectest/utils"
|
"github.com/OffchainLabs/prysm/v7/testing/spectest/utils"
|
||||||
"github.com/OffchainLabs/prysm/v7/testing/util"
|
"github.com/OffchainLabs/prysm/v7/testing/util"
|
||||||
@@ -17,6 +19,9 @@ import (
|
|||||||
|
|
||||||
func runExecutionPayloadBidTest(t *testing.T, config string, fork string, objName string, block blockWithSSZObject, sszToState SSZToState, operationFn BlockOperation) {
|
func runExecutionPayloadBidTest(t *testing.T, config string, fork string, objName string, block blockWithSSZObject, sszToState SSZToState, operationFn BlockOperation) {
|
||||||
require.NoError(t, utils.SetConfig(t, config))
|
require.NoError(t, utils.SetConfig(t, config))
|
||||||
|
cfg := params.BeaconConfig()
|
||||||
|
params.SetGenesisFork(t, cfg, version.Fulu)
|
||||||
|
|
||||||
testFolders, testsFolderPath := utils.TestFolders(t, config, fork, "operations/"+objName+"/pyspec_tests")
|
testFolders, testsFolderPath := utils.TestFolders(t, config, fork, "operations/"+objName+"/pyspec_tests")
|
||||||
if len(testFolders) == 0 {
|
if len(testFolders) == 0 {
|
||||||
t.Fatalf("No test folders found for %s/%s/%s", config, fork, "operations/"+objName+"/pyspec_tests")
|
t.Fatalf("No test folders found for %s/%s/%s", config, fork, "operations/"+objName+"/pyspec_tests")
|
||||||
|
|||||||
@@ -1568,8 +1568,8 @@ func HydrateExecutionPayloadBid(b *ethpb.ExecutionPayloadBid) *ethpb.ExecutionPa
|
|||||||
if b.FeeRecipient == nil {
|
if b.FeeRecipient == nil {
|
||||||
b.FeeRecipient = make([]byte, fieldparams.FeeRecipientLength)
|
b.FeeRecipient = make([]byte, fieldparams.FeeRecipientLength)
|
||||||
}
|
}
|
||||||
if b.BlobKzgCommitmentsRoot == nil {
|
if b.BlobKzgCommitments == nil {
|
||||||
b.BlobKzgCommitmentsRoot = make([]byte, fieldparams.RootLength)
|
b.BlobKzgCommitments = make([][]byte, 0)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
@@ -1636,21 +1636,22 @@ func GenerateTestSignedExecutionPayloadBid(slot primitives.Slot) *ethpb.SignedEx
|
|||||||
blockHash := bytesutil.PadTo([]byte{0x03}, fieldparams.RootLength)
|
blockHash := bytesutil.PadTo([]byte{0x03}, fieldparams.RootLength)
|
||||||
prevRandao := bytesutil.PadTo([]byte{0x04}, fieldparams.RootLength)
|
prevRandao := bytesutil.PadTo([]byte{0x04}, fieldparams.RootLength)
|
||||||
feeRecipient := bytesutil.PadTo([]byte{0x05}, fieldparams.FeeRecipientLength)
|
feeRecipient := bytesutil.PadTo([]byte{0x05}, fieldparams.FeeRecipientLength)
|
||||||
blobKzgRoot := bytesutil.PadTo([]byte{0x06}, fieldparams.RootLength)
|
blobKzgCommitment := bytesutil.PadTo([]byte{0x06}, fieldparams.BLSPubkeyLength)
|
||||||
signature := bytesutil.PadTo([]byte{0x07}, fieldparams.BLSSignatureLength)
|
signature := bytesutil.PadTo([]byte{0x07}, fieldparams.BLSSignatureLength)
|
||||||
|
|
||||||
return ðpb.SignedExecutionPayloadBid{
|
return ðpb.SignedExecutionPayloadBid{
|
||||||
Message: ðpb.ExecutionPayloadBid{
|
Message: ðpb.ExecutionPayloadBid{
|
||||||
Slot: slot,
|
Slot: slot,
|
||||||
BuilderIndex: 1,
|
BuilderIndex: 1,
|
||||||
ParentBlockHash: parentBlockHash,
|
ParentBlockHash: parentBlockHash,
|
||||||
ParentBlockRoot: parentBlockRoot,
|
ParentBlockRoot: parentBlockRoot,
|
||||||
BlockHash: blockHash,
|
BlockHash: blockHash,
|
||||||
GasLimit: 30000000,
|
GasLimit: 30000000,
|
||||||
PrevRandao: prevRandao,
|
PrevRandao: prevRandao,
|
||||||
FeeRecipient: feeRecipient,
|
FeeRecipient: feeRecipient,
|
||||||
Value: 1000000,
|
Value: 1000000,
|
||||||
BlobKzgCommitmentsRoot: blobKzgRoot,
|
ExecutionPayment: 2000000,
|
||||||
|
BlobKzgCommitments: [][]byte{blobKzgCommitment},
|
||||||
},
|
},
|
||||||
Signature: signature,
|
Signature: signature,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -413,6 +413,7 @@ func TestGenerateTestSignedExecutionPayloadBid(t *testing.T) {
|
|||||||
require.Equal(t, primitives.BuilderIndex(1), bid.Message.BuilderIndex)
|
require.Equal(t, primitives.BuilderIndex(1), bid.Message.BuilderIndex)
|
||||||
require.Equal(t, uint64(30000000), bid.Message.GasLimit)
|
require.Equal(t, uint64(30000000), bid.Message.GasLimit)
|
||||||
require.Equal(t, primitives.Gwei(1000000), bid.Message.Value)
|
require.Equal(t, primitives.Gwei(1000000), bid.Message.Value)
|
||||||
|
require.Equal(t, primitives.Gwei(2000000), bid.Message.ExecutionPayment)
|
||||||
|
|
||||||
// Verify fields are populated
|
// Verify fields are populated
|
||||||
require.NotNil(t, bid.Message.ParentBlockHash)
|
require.NotNil(t, bid.Message.ParentBlockHash)
|
||||||
@@ -420,7 +421,8 @@ func TestGenerateTestSignedExecutionPayloadBid(t *testing.T) {
|
|||||||
require.NotNil(t, bid.Message.BlockHash)
|
require.NotNil(t, bid.Message.BlockHash)
|
||||||
require.NotNil(t, bid.Message.PrevRandao)
|
require.NotNil(t, bid.Message.PrevRandao)
|
||||||
require.NotNil(t, bid.Message.FeeRecipient)
|
require.NotNil(t, bid.Message.FeeRecipient)
|
||||||
require.NotNil(t, bid.Message.BlobKzgCommitmentsRoot)
|
require.NotNil(t, bid.Message.BlobKzgCommitments)
|
||||||
|
require.Equal(t, 1, len(bid.Message.BlobKzgCommitments))
|
||||||
|
|
||||||
// Verify HashTreeRoot works
|
// Verify HashTreeRoot works
|
||||||
_, err := bid.HashTreeRoot()
|
_, err := bid.HashTreeRoot()
|
||||||
|
|||||||
@@ -559,12 +559,12 @@ func NewBeaconStateGloas(options ...func(state *ethpb.BeaconStateGloas) error) (
|
|||||||
},
|
},
|
||||||
ProposerLookahead: make([]uint64, 64),
|
ProposerLookahead: make([]uint64, 64),
|
||||||
LatestExecutionPayloadBid: ðpb.ExecutionPayloadBid{
|
LatestExecutionPayloadBid: ðpb.ExecutionPayloadBid{
|
||||||
ParentBlockHash: make([]byte, 32),
|
ParentBlockHash: make([]byte, 32),
|
||||||
ParentBlockRoot: make([]byte, 32),
|
ParentBlockRoot: make([]byte, 32),
|
||||||
BlockHash: make([]byte, 32),
|
BlockHash: make([]byte, 32),
|
||||||
PrevRandao: make([]byte, 32),
|
PrevRandao: make([]byte, 32),
|
||||||
FeeRecipient: make([]byte, 20),
|
FeeRecipient: make([]byte, 20),
|
||||||
BlobKzgCommitmentsRoot: make([]byte, 32),
|
BlobKzgCommitments: [][]byte{make([]byte, 48)},
|
||||||
},
|
},
|
||||||
Builders: make([]*ethpb.Builder, 0),
|
Builders: make([]*ethpb.Builder, 0),
|
||||||
ExecutionPayloadAvailability: make([]byte, 1024),
|
ExecutionPayloadAvailability: make([]byte, 1024),
|
||||||
|
|||||||
14
testing/validator-mock/validator_client_mock.go
generated
14
testing/validator-mock/validator_client_mock.go
generated
@@ -283,16 +283,18 @@ func (mr *MockValidatorClientMockRecorder) ProposeExit(ctx, in any) *gomock.Call
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProposeExit", reflect.TypeOf((*MockValidatorClient)(nil).ProposeExit), ctx, in)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProposeExit", reflect.TypeOf((*MockValidatorClient)(nil).ProposeExit), ctx, in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SwitchHost mocks base method.
|
// EnsureReady mocks base method.
|
||||||
func (m *MockValidatorClient) SwitchHost(host string) {
|
func (m *MockValidatorClient) EnsureReady(ctx context.Context) bool {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
m.ctrl.Call(m, "SwitchHost", host)
|
ret := m.ctrl.Call(m, "EnsureReady", ctx)
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
return ret0
|
||||||
}
|
}
|
||||||
|
|
||||||
// SwitchHost indicates an expected call of SwitchHost.
|
// EnsureReady indicates an expected call of EnsureReady.
|
||||||
func (mr *MockValidatorClientMockRecorder) SwitchHost(host any) *gomock.Call {
|
func (mr *MockValidatorClientMockRecorder) EnsureReady(ctx any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SwitchHost", reflect.TypeOf((*MockValidatorClient)(nil).SwitchHost), host)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureReady", reflect.TypeOf((*MockValidatorClient)(nil).EnsureReady), ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartEventStream mocks base method.
|
// StartEventStream mocks base method.
|
||||||
|
|||||||
12
testing/validator-mock/validator_mock.go
generated
12
testing/validator-mock/validator_mock.go
generated
@@ -128,18 +128,18 @@ func (mr *MockValidatorMockRecorder) EventsChan() *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventsChan", reflect.TypeOf((*MockValidator)(nil).EventsChan))
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventsChan", reflect.TypeOf((*MockValidator)(nil).EventsChan))
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindHealthyHost mocks base method.
|
// EnsureReady mocks base method.
|
||||||
func (m *MockValidator) FindHealthyHost(arg0 context.Context) bool {
|
func (m *MockValidator) EnsureReady(arg0 context.Context) bool {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "FindHealthyHost", arg0)
|
ret := m.ctrl.Call(m, "EnsureReady", arg0)
|
||||||
ret0, _ := ret[0].(bool)
|
ret0, _ := ret[0].(bool)
|
||||||
return ret0
|
return ret0
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindHealthyHost indicates an expected call of FindHealthyHost.
|
// EnsureReady indicates an expected call of EnsureReady.
|
||||||
func (mr *MockValidatorMockRecorder) FindHealthyHost(arg0 any) *gomock.Call {
|
func (mr *MockValidatorMockRecorder) EnsureReady(arg0 any) *gomock.Call {
|
||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindHealthyHost", reflect.TypeOf((*MockValidator)(nil).FindHealthyHost), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureReady", reflect.TypeOf((*MockValidator)(nil).EnsureReady), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenesisTime mocks base method.
|
// GenesisTime mocks base method.
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ go_test(
|
|||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//api/grpc:go_default_library",
|
"//api/grpc:go_default_library",
|
||||||
"//api/rest:go_default_library",
|
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//async/event:go_default_library",
|
"//async/event:go_default_library",
|
||||||
"//beacon-chain/core/signing:go_default_library",
|
"//beacon-chain/core/signing:go_default_library",
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ go_library(
|
|||||||
"//api:go_default_library",
|
"//api:go_default_library",
|
||||||
"//api/apiutil:go_default_library",
|
"//api/apiutil:go_default_library",
|
||||||
"//api/client/event:go_default_library",
|
"//api/client/event:go_default_library",
|
||||||
|
"//api/fallback:go_default_library",
|
||||||
"//api/rest:go_default_library",
|
"//api/rest:go_default_library",
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//beacon-chain/core/helpers:go_default_library",
|
"//beacon-chain/core/helpers:go_default_library",
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ func (c *beaconApiValidatorClient) attestationData(
|
|||||||
query := apiutil.BuildURL("/eth/v1/validator/attestation_data", params)
|
query := apiutil.BuildURL("/eth/v1/validator/attestation_data", params)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, query, &produceAttestationDataResponseJson); err != nil {
|
if err := c.handler.Get(ctx, query, &produceAttestationDataResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ func TestGetAttestationData_ValidAttestation(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", expectedCommitteeIndex, expectedSlot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", expectedCommitteeIndex, expectedSlot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -56,7 +56,7 @@ func TestGetAttestationData_ValidAttestation(t *testing.T) {
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.attestationData(ctx, primitives.Slot(expectedSlot), primitives.CommitteeIndex(expectedCommitteeIndex))
|
resp, err := validatorClient.attestationData(ctx, primitives.Slot(expectedSlot), primitives.CommitteeIndex(expectedCommitteeIndex))
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
@@ -180,8 +180,8 @@ func TestGetAttestationData_InvalidData(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/attestation_data?committee_index=2&slot=1",
|
"/eth/v1/validator/attestation_data?committee_index=2&slot=1",
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -192,7 +192,7 @@ func TestGetAttestationData_InvalidData(t *testing.T) {
|
|||||||
testCase.generateData(),
|
testCase.generateData(),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.attestationData(ctx, 1, 2)
|
_, err := validatorClient.attestationData(ctx, 1, 2)
|
||||||
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
assert.ErrorContains(t, testCase.expectedErrorMessage, err)
|
||||||
})
|
})
|
||||||
@@ -208,9 +208,9 @@ func TestGetAttestationData_JsonResponseError(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -218,7 +218,7 @@ func TestGetAttestationData_JsonResponseError(t *testing.T) {
|
|||||||
errors.New("some specific json response error"),
|
errors.New("some specific json response error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.attestationData(ctx, slot, committeeIndex)
|
_, err := validatorClient.attestationData(ctx, slot, committeeIndex)
|
||||||
assert.ErrorContains(t, "some specific json response error", err)
|
assert.ErrorContains(t, "some specific json response error", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ import (
|
|||||||
|
|
||||||
type beaconApiChainClient struct {
|
type beaconApiChainClient struct {
|
||||||
fallbackClient iface.ChainClient
|
fallbackClient iface.ChainClient
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
stateValidatorsProvider StateValidatorsProvider
|
stateValidatorsProvider StateValidatorsProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c beaconApiChainClient) headBlockHeaders(ctx context.Context) (*structs.GetBlockHeaderResponse, error) {
|
func (c beaconApiChainClient) headBlockHeaders(ctx context.Context) (*structs.GetBlockHeaderResponse, error) {
|
||||||
blockHeader := structs.GetBlockHeaderResponse{}
|
blockHeader := structs.GetBlockHeaderResponse{}
|
||||||
err := c.jsonRestHandler.Get(ctx, "/eth/v1/beacon/headers/head", &blockHeader)
|
err := c.handler.Get(ctx, "/eth/v1/beacon/headers/head", &blockHeader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ func (c beaconApiChainClient) ChainHead(ctx context.Context, _ *empty.Empty) (*e
|
|||||||
const endpoint = "/eth/v1/beacon/states/head/finality_checkpoints"
|
const endpoint = "/eth/v1/beacon/states/head/finality_checkpoints"
|
||||||
|
|
||||||
finalityCheckpoints := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpoints := structs.GetFinalityCheckpointsResponse{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, &finalityCheckpoints); err != nil {
|
if err := c.handler.Get(ctx, endpoint, &finalityCheckpoints); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,10 +328,10 @@ func (c beaconApiChainClient) ValidatorParticipation(ctx context.Context, in *et
|
|||||||
return nil, errors.New("beaconApiChainClient.ValidatorParticipation is not implemented. To use a fallback client, pass a fallback client as the last argument of NewBeaconApiChainClientWithFallback.")
|
return nil, errors.New("beaconApiChainClient.ValidatorParticipation is not implemented. To use a fallback client, pass a fallback client as the last argument of NewBeaconApiChainClientWithFallback.")
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBeaconApiChainClientWithFallback(jsonRestHandler rest.RestHandler, fallbackClient iface.ChainClient) iface.ChainClient {
|
func NewBeaconApiChainClientWithFallback(handler rest.Handler, fallbackClient iface.ChainClient) iface.ChainClient {
|
||||||
return &beaconApiChainClient{
|
return &beaconApiChainClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
fallbackClient: fallbackClient,
|
fallbackClient: fallbackClient,
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler},
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{handler: handler},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,12 +115,12 @@ func TestListValidators(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(errors.New("bar error"))
|
handler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(errors.New("bar error"))
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{
|
beaconChainClient := beaconApiChainClient{
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
||||||
QueryFilter: nil,
|
QueryFilter: nil,
|
||||||
@@ -188,8 +188,8 @@ func TestListValidators(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
)
|
)
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(
|
handler.EXPECT().Get(gomock.Any(), blockHeaderEndpoint, gomock.Any()).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -198,7 +198,7 @@ func TestListValidators(t *testing.T) {
|
|||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{
|
beaconChainClient := beaconApiChainClient{
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
_, err := beaconChainClient.Validators(ctx, ðpb.ListValidatorsRequest{
|
||||||
QueryFilter: nil,
|
QueryFilter: nil,
|
||||||
@@ -740,15 +740,15 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
||||||
testCase.finalityCheckpointsError,
|
testCase.finalityCheckpointsError,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
testCase.generateFinalityCheckpointsResponse(),
|
testCase.generateFinalityCheckpointsResponse(),
|
||||||
)
|
)
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{jsonRestHandler: jsonRestHandler}
|
beaconChainClient := beaconApiChainClient{handler: handler}
|
||||||
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
||||||
assert.ErrorContains(t, testCase.expectedError, err)
|
assert.ErrorContains(t, testCase.expectedError, err)
|
||||||
})
|
})
|
||||||
@@ -837,10 +837,10 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -848,14 +848,14 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
||||||
testCase.headBlockHeadersError,
|
testCase.headBlockHeadersError,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
testCase.generateHeadBlockHeadersResponse(),
|
testCase.generateHeadBlockHeadersResponse(),
|
||||||
)
|
)
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{jsonRestHandler: jsonRestHandler}
|
beaconChainClient := beaconApiChainClient{handler: handler}
|
||||||
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
_, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
||||||
assert.ErrorContains(t, testCase.expectedError, err)
|
assert.ErrorContains(t, testCase.expectedError, err)
|
||||||
})
|
})
|
||||||
@@ -867,10 +867,10 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
finalityCheckpointsResponse := structs.GetFinalityCheckpointsResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), finalityCheckpointsEndpoint, &finalityCheckpointsResponse).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -878,7 +878,7 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
headBlockHeadersResponse := structs.GetBlockHeaderResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
handler.EXPECT().Get(gomock.Any(), headBlockHeadersEndpoint, &headBlockHeadersResponse).Return(
|
||||||
nil,
|
nil,
|
||||||
).SetArg(
|
).SetArg(
|
||||||
2,
|
2,
|
||||||
@@ -909,7 +909,7 @@ func TestGetChainHead(t *testing.T) {
|
|||||||
HeadEpoch: slots.ToEpoch(8),
|
HeadEpoch: slots.ToEpoch(8),
|
||||||
}
|
}
|
||||||
|
|
||||||
beaconChainClient := beaconApiChainClient{jsonRestHandler: jsonRestHandler}
|
beaconChainClient := beaconApiChainClient{handler: handler}
|
||||||
chainHead, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
chainHead, err := beaconChainClient.ChainHead(ctx, &emptypb.Empty{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.DeepEqual(t, expectedChainHead, chainHead)
|
assert.DeepEqual(t, expectedChainHead, chainHead)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ func (c *beaconApiValidatorClient) fork(ctx context.Context) (*structs.GetStateF
|
|||||||
|
|
||||||
stateForkResponseJson := &structs.GetStateForkResponse{}
|
stateForkResponseJson := &structs.GetStateForkResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, stateForkResponseJson); err != nil {
|
if err := c.handler.Get(ctx, endpoint, stateForkResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ func (c *beaconApiValidatorClient) headers(ctx context.Context) (*structs.GetBlo
|
|||||||
|
|
||||||
blockHeadersResponseJson := &structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := &structs.GetBlockHeadersResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, blockHeadersResponseJson); err != nil {
|
if err := c.handler.Get(ctx, endpoint, blockHeadersResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ func (c *beaconApiValidatorClient) liveness(ctx context.Context, epoch primitive
|
|||||||
return nil, errors.Wrapf(err, "failed to marshal validator indexes")
|
return nil, errors.Wrapf(err, "failed to marshal validator indexes")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = c.jsonRestHandler.Post(ctx, url, nil, bytes.NewBuffer(marshalledJsonValidatorIndexes), livenessResponseJson); err != nil {
|
if err = c.handler.Post(ctx, url, nil, bytes.NewBuffer(marshalledJsonValidatorIndexes), livenessResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ func (c *beaconApiValidatorClient) syncing(ctx context.Context) (*structs.SyncSt
|
|||||||
|
|
||||||
syncingResponseJson := &structs.SyncStatusResponse{}
|
syncingResponseJson := &structs.SyncStatusResponse{}
|
||||||
|
|
||||||
if err := c.jsonRestHandler.Get(ctx, endpoint, syncingResponseJson); err != nil {
|
if err := c.handler.Get(ctx, endpoint, syncingResponseJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func TestGetFork_Nominal(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
stateForkResponseJson := structs.GetStateForkResponse{}
|
stateForkResponseJson := structs.GetStateForkResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
expected := structs.GetStateForkResponse{
|
expected := structs.GetStateForkResponse{
|
||||||
Data: &structs.Fork{
|
Data: &structs.Fork{
|
||||||
@@ -32,7 +32,7 @@ func TestGetFork_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
&stateForkResponseJson,
|
&stateForkResponseJson,
|
||||||
@@ -44,7 +44,7 @@ func TestGetFork_Nominal(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
fork, err := validatorClient.fork(ctx)
|
fork, err := validatorClient.fork(ctx)
|
||||||
@@ -56,11 +56,11 @@ func TestGetFork_Invalid(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -69,7 +69,7 @@ func TestGetFork_Invalid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := validatorClient.fork(ctx)
|
_, err := validatorClient.fork(ctx)
|
||||||
@@ -83,7 +83,7 @@ func TestGetHeaders_Nominal(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
expected := structs.GetBlockHeadersResponse{
|
expected := structs.GetBlockHeadersResponse{
|
||||||
Data: []*structs.SignedBeaconBlockHeaderContainer{
|
Data: []*structs.SignedBeaconBlockHeaderContainer{
|
||||||
@@ -99,7 +99,7 @@ func TestGetHeaders_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
&blockHeadersResponseJson,
|
&blockHeadersResponseJson,
|
||||||
@@ -111,7 +111,7 @@ func TestGetHeaders_Nominal(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
headers, err := validatorClient.headers(ctx)
|
headers, err := validatorClient.headers(ctx)
|
||||||
@@ -123,11 +123,11 @@ func TestGetHeaders_Invalid(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -136,7 +136,7 @@ func TestGetHeaders_Invalid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := validatorClient.headers(ctx)
|
_, err := validatorClient.headers(ctx)
|
||||||
@@ -170,8 +170,8 @@ func TestGetLiveness_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
livenessEndpoint,
|
livenessEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -184,7 +184,7 @@ func TestGetLiveness_Nominal(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
liveness, err := validatorClient.liveness(ctx, 42, indexes)
|
liveness, err := validatorClient.liveness(ctx, 42, indexes)
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -197,8 +197,8 @@ func TestGetLiveness_Invalid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
livenessEndpoint,
|
livenessEndpoint,
|
||||||
nil,
|
nil,
|
||||||
@@ -208,7 +208,7 @@ func TestGetLiveness_Invalid(t *testing.T) {
|
|||||||
errors.New("custom error"),
|
errors.New("custom error"),
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.liveness(ctx, 42, nil)
|
_, err := validatorClient.liveness(ctx, 42, nil)
|
||||||
|
|
||||||
require.ErrorContains(t, "custom error", err)
|
require.ErrorContains(t, "custom error", err)
|
||||||
@@ -237,7 +237,7 @@ func TestGetIsSyncing_Nominal(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
expected := structs.SyncStatusResponse{
|
expected := structs.SyncStatusResponse{
|
||||||
Data: &structs.SyncStatusResponseData{
|
Data: &structs.SyncStatusResponseData{
|
||||||
@@ -247,7 +247,7 @@ func TestGetIsSyncing_Nominal(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -259,7 +259,7 @@ func TestGetIsSyncing_Nominal(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
isSyncing, err := validatorClient.isSyncing(ctx)
|
isSyncing, err := validatorClient.isSyncing(ctx)
|
||||||
@@ -274,11 +274,11 @@ func TestGetIsSyncing_Invalid(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -287,7 +287,7 @@ func TestGetIsSyncing_Invalid(t *testing.T) {
|
|||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
|
|
||||||
isSyncing, err := validatorClient.isSyncing(ctx)
|
isSyncing, err := validatorClient.isSyncing(ctx)
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ var (
|
|||||||
|
|
||||||
type beaconApiNodeClient struct {
|
type beaconApiNodeClient struct {
|
||||||
fallbackClient iface.NodeClient
|
fallbackClient iface.NodeClient
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
genesisProvider GenesisProvider
|
genesisProvider GenesisProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiNodeClient) SyncStatus(ctx context.Context, _ *empty.Empty) (*ethpb.SyncStatus, error) {
|
func (c *beaconApiNodeClient) SyncStatus(ctx context.Context, _ *empty.Empty) (*ethpb.SyncStatus, error) {
|
||||||
syncingResponse := structs.SyncStatusResponse{}
|
syncingResponse := structs.SyncStatusResponse{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v1/node/syncing", &syncingResponse); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v1/node/syncing", &syncingResponse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ func (c *beaconApiNodeClient) Genesis(ctx context.Context, _ *empty.Empty) (*eth
|
|||||||
}
|
}
|
||||||
|
|
||||||
depositContractJson := structs.GetDepositContractResponse{}
|
depositContractJson := structs.GetDepositContractResponse{}
|
||||||
if err = c.jsonRestHandler.Get(ctx, "/eth/v1/config/deposit_contract", &depositContractJson); err != nil {
|
if err = c.handler.Get(ctx, "/eth/v1/config/deposit_contract", &depositContractJson); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ func (c *beaconApiNodeClient) Genesis(ctx context.Context, _ *empty.Empty) (*eth
|
|||||||
|
|
||||||
func (c *beaconApiNodeClient) Version(ctx context.Context, _ *empty.Empty) (*ethpb.Version, error) {
|
func (c *beaconApiNodeClient) Version(ctx context.Context, _ *empty.Empty) (*ethpb.Version, error) {
|
||||||
var versionResponse structs.GetVersionResponse
|
var versionResponse structs.GetVersionResponse
|
||||||
if err := c.jsonRestHandler.Get(ctx, "/eth/v1/node/version", &versionResponse); err != nil {
|
if err := c.handler.Get(ctx, "/eth/v1/node/version", &versionResponse); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,9 +106,9 @@ func (c *beaconApiNodeClient) Peers(ctx context.Context, in *empty.Empty) (*ethp
|
|||||||
// IsReady returns true only if the node is fully synced (200 OK).
|
// IsReady returns true only if the node is fully synced (200 OK).
|
||||||
// A 206 Partial Content response indicates the node is syncing and not ready.
|
// A 206 Partial Content response indicates the node is syncing and not ready.
|
||||||
func (c *beaconApiNodeClient) IsReady(ctx context.Context) bool {
|
func (c *beaconApiNodeClient) IsReady(ctx context.Context) bool {
|
||||||
statusCode, err := c.jsonRestHandler.GetStatusCode(ctx, "/eth/v1/node/health")
|
statusCode, err := c.handler.GetStatusCode(ctx, "/eth/v1/node/health")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithError(err).Error("failed to get health of node")
|
log.WithError(err).WithField("url", c.handler.Host()).Error("failed to get health of node")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Only 200 OK means the node is fully synced and ready.
|
// Only 200 OK means the node is fully synced and ready.
|
||||||
@@ -116,11 +116,11 @@ func (c *beaconApiNodeClient) IsReady(ctx context.Context) bool {
|
|||||||
return statusCode == http.StatusOK
|
return statusCode == http.StatusOK
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNodeClientWithFallback(jsonRestHandler rest.RestHandler, fallbackClient iface.NodeClient) iface.NodeClient {
|
func NewNodeClientWithFallback(handler rest.Handler, fallbackClient iface.NodeClient) iface.NodeClient {
|
||||||
b := &beaconApiNodeClient{
|
b := &beaconApiNodeClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
fallbackClient: fallbackClient,
|
fallbackClient: fallbackClient,
|
||||||
genesisProvider: &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler},
|
genesisProvider: &beaconApiGenesisProvider{handler: handler},
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ func TestGetGenesis(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
depositContractJson := structs.GetDepositContractResponse{}
|
depositContractJson := structs.GetDepositContractResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if testCase.queriesDepositContract {
|
if testCase.queriesDepositContract {
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/config/deposit_contract",
|
"/eth/v1/config/deposit_contract",
|
||||||
&depositContractJson,
|
&depositContractJson,
|
||||||
@@ -137,7 +137,7 @@ func TestGetGenesis(t *testing.T) {
|
|||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{
|
nodeClient := &beaconApiNodeClient{
|
||||||
genesisProvider: genesisProvider,
|
genesisProvider: genesisProvider,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
}
|
}
|
||||||
response, err := nodeClient.Genesis(ctx, &emptypb.Empty{})
|
response, err := nodeClient.Genesis(ctx, &emptypb.Empty{})
|
||||||
|
|
||||||
@@ -201,8 +201,8 @@ func TestGetSyncStatus(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
syncingResponse := structs.SyncStatusResponse{}
|
syncingResponse := structs.SyncStatusResponse{}
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponse,
|
&syncingResponse,
|
||||||
@@ -213,7 +213,7 @@ func TestGetSyncStatus(t *testing.T) {
|
|||||||
testCase.restEndpointResponse,
|
testCase.restEndpointResponse,
|
||||||
)
|
)
|
||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{jsonRestHandler: jsonRestHandler}
|
nodeClient := &beaconApiNodeClient{handler: handler}
|
||||||
syncStatus, err := nodeClient.SyncStatus(ctx, &emptypb.Empty{})
|
syncStatus, err := nodeClient.SyncStatus(ctx, &emptypb.Empty{})
|
||||||
|
|
||||||
if testCase.expectedResponse == nil {
|
if testCase.expectedResponse == nil {
|
||||||
@@ -265,8 +265,8 @@ func TestGetVersion(t *testing.T) {
|
|||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
var versionResponse structs.GetVersionResponse
|
var versionResponse structs.GetVersionResponse
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
versionEndpoint,
|
versionEndpoint,
|
||||||
&versionResponse,
|
&versionResponse,
|
||||||
@@ -277,7 +277,7 @@ func TestGetVersion(t *testing.T) {
|
|||||||
testCase.restEndpointResponse,
|
testCase.restEndpointResponse,
|
||||||
)
|
)
|
||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{jsonRestHandler: jsonRestHandler}
|
nodeClient := &beaconApiNodeClient{handler: handler}
|
||||||
version, err := nodeClient.Version(ctx, &emptypb.Empty{})
|
version, err := nodeClient.Version(ctx, &emptypb.Empty{})
|
||||||
|
|
||||||
if testCase.expectedResponse == nil {
|
if testCase.expectedResponse == nil {
|
||||||
@@ -331,13 +331,14 @@ func TestIsReady(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().GetStatusCode(
|
handler.EXPECT().GetStatusCode(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
healthEndpoint,
|
healthEndpoint,
|
||||||
).Return(tc.statusCode, tc.err)
|
).Return(tc.statusCode, tc.err)
|
||||||
|
handler.EXPECT().Host().Return("http://localhost:3500").AnyTimes()
|
||||||
|
|
||||||
nodeClient := &beaconApiNodeClient{jsonRestHandler: jsonRestHandler}
|
nodeClient := &beaconApiNodeClient{handler: handler}
|
||||||
result := nodeClient.IsReady(ctx)
|
result := nodeClient.IsReady(ctx)
|
||||||
|
|
||||||
assert.Equal(t, tc.expectedResult, result)
|
assert.Equal(t, tc.expectedResult, result)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/OffchainLabs/prysm/v7/api/client/event"
|
"github.com/OffchainLabs/prysm/v7/api/client/event"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/api/fallback"
|
||||||
"github.com/OffchainLabs/prysm/v7/api/rest"
|
"github.com/OffchainLabs/prysm/v7/api/rest"
|
||||||
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
"github.com/OffchainLabs/prysm/v7/encoding/bytesutil"
|
||||||
@@ -23,22 +24,28 @@ type beaconApiValidatorClient struct {
|
|||||||
genesisProvider GenesisProvider
|
genesisProvider GenesisProvider
|
||||||
dutiesProvider dutiesProvider
|
dutiesProvider dutiesProvider
|
||||||
stateValidatorsProvider StateValidatorsProvider
|
stateValidatorsProvider StateValidatorsProvider
|
||||||
jsonRestHandler rest.RestHandler
|
restProvider rest.RestConnectionProvider
|
||||||
|
handler rest.Handler
|
||||||
|
nodeClient *beaconApiNodeClient
|
||||||
beaconBlockConverter BeaconBlockConverter
|
beaconBlockConverter BeaconBlockConverter
|
||||||
prysmChainClient iface.PrysmChainClient
|
prysmChainClient iface.PrysmChainClient
|
||||||
isEventStreamRunning bool
|
isEventStreamRunning bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBeaconApiValidatorClient(jsonRestHandler rest.RestHandler, opts ...ValidatorClientOpt) iface.ValidatorClient {
|
func NewBeaconApiValidatorClient(provider rest.RestConnectionProvider, opts ...ValidatorClientOpt) iface.ValidatorClient {
|
||||||
|
handler := provider.Handler()
|
||||||
|
nc := &beaconApiNodeClient{handler: handler}
|
||||||
c := &beaconApiValidatorClient{
|
c := &beaconApiValidatorClient{
|
||||||
genesisProvider: &beaconApiGenesisProvider{jsonRestHandler: jsonRestHandler},
|
genesisProvider: &beaconApiGenesisProvider{handler: handler},
|
||||||
dutiesProvider: beaconApiDutiesProvider{jsonRestHandler: jsonRestHandler},
|
dutiesProvider: beaconApiDutiesProvider{handler: handler},
|
||||||
stateValidatorsProvider: beaconApiStateValidatorsProvider{jsonRestHandler: jsonRestHandler},
|
stateValidatorsProvider: beaconApiStateValidatorsProvider{handler: handler},
|
||||||
jsonRestHandler: jsonRestHandler,
|
restProvider: provider,
|
||||||
|
handler: handler,
|
||||||
|
nodeClient: nc,
|
||||||
beaconBlockConverter: beaconApiBeaconBlockConverter{},
|
beaconBlockConverter: beaconApiBeaconBlockConverter{},
|
||||||
prysmChainClient: prysmChainClient{
|
prysmChainClient: prysmChainClient{
|
||||||
nodeClient: &beaconApiNodeClient{jsonRestHandler: jsonRestHandler},
|
nodeClient: nc,
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
},
|
},
|
||||||
isEventStreamRunning: false,
|
isEventStreamRunning: false,
|
||||||
}
|
}
|
||||||
@@ -280,8 +287,8 @@ func (c *beaconApiValidatorClient) WaitForChainStart(ctx context.Context, _ *emp
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) StartEventStream(ctx context.Context, topics []string, eventsChannel chan<- *event.Event) {
|
func (c *beaconApiValidatorClient) StartEventStream(ctx context.Context, topics []string, eventsChannel chan<- *event.Event) {
|
||||||
client := &http.Client{} // event stream should not be subject to the same settings as other api calls, so we won't use c.jsonRestHandler.HttpClient()
|
client := &http.Client{} // event stream should not be subject to the same settings as other api calls
|
||||||
eventStream, err := event.NewEventStream(ctx, client, c.jsonRestHandler.Host(), topics)
|
eventStream, err := event.NewEventStream(ctx, client, c.handler.Host(), topics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
eventsChannel <- &event.Event{
|
eventsChannel <- &event.Event{
|
||||||
EventType: event.EventError,
|
EventType: event.EventError,
|
||||||
@@ -329,9 +336,9 @@ func wrapInMetrics[Resp any](action string, f func() (Resp, error)) (Resp, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) Host() string {
|
func (c *beaconApiValidatorClient) Host() string {
|
||||||
return c.jsonRestHandler.Host()
|
return c.handler.Host()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *beaconApiValidatorClient) SwitchHost(host string) {
|
func (c *beaconApiValidatorClient) EnsureReady(ctx context.Context) bool {
|
||||||
c.jsonRestHandler.SwitchHost(host)
|
return fallback.EnsureReady(ctx, c.restProvider, c.nodeClient)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ func TestBeaconApiValidatorClient_GetAttestationDataValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -44,7 +44,7 @@ func TestBeaconApiValidatorClient_GetAttestationDataValid(t *testing.T) {
|
|||||||
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
||||||
).Times(2)
|
).Times(2)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
||||||
|
|
||||||
resp, err := validatorClient.AttestationData(
|
resp, err := validatorClient.AttestationData(
|
||||||
@@ -65,9 +65,9 @@ func TestBeaconApiValidatorClient_GetAttestationDataError(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
produceAttestationDataResponseJson := structs.GetAttestationDataResponse{}
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
fmt.Sprintf("/eth/v1/validator/attestation_data?committee_index=%d&slot=%d", committeeIndex, slot),
|
||||||
&produceAttestationDataResponseJson,
|
&produceAttestationDataResponseJson,
|
||||||
@@ -78,7 +78,7 @@ func TestBeaconApiValidatorClient_GetAttestationDataError(t *testing.T) {
|
|||||||
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
generateValidAttestation(uint64(slot), uint64(committeeIndex)),
|
||||||
).Times(2)
|
).Times(2)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
expectedResp, expectedErr := validatorClient.attestationData(ctx, slot, committeeIndex)
|
||||||
|
|
||||||
resp, err := validatorClient.AttestationData(
|
resp, err := validatorClient.AttestationData(
|
||||||
@@ -139,8 +139,8 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockValid(t *testing.T) {
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -149,7 +149,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockValid(t *testing.T) {
|
|||||||
nil, nil, nil,
|
nil, nil, nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
||||||
ctx,
|
ctx,
|
||||||
ðpb.GenericSignedBeaconBlock{
|
ðpb.GenericSignedBeaconBlock{
|
||||||
@@ -166,8 +166,8 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockError_ThenPass(t *testing.T)
|
|||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -179,7 +179,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockError_ThenPass(t *testing.T)
|
|||||||
},
|
},
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -189,7 +189,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockError_ThenPass(t *testing.T)
|
|||||||
nil,
|
nil,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
expectedResp, expectedErr := validatorClient.proposeBeaconBlock(
|
||||||
ctx,
|
ctx,
|
||||||
ðpb.GenericSignedBeaconBlock{
|
ðpb.GenericSignedBeaconBlock{
|
||||||
@@ -308,10 +308,10 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockAllTypes(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if !tt.wantErr {
|
if !tt.wantErr {
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
tt.expectedPath,
|
tt.expectedPath,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -319,7 +319,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockAllTypes(t *testing.T) {
|
|||||||
).Return(nil, nil, nil).Times(1)
|
).Return(nil, nil, nil).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
||||||
|
|
||||||
if tt.wantErr {
|
if tt.wantErr {
|
||||||
@@ -366,9 +366,9 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockHTTPErrors(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -377,7 +377,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockHTTPErrors(t *testing.T) {
|
|||||||
|
|
||||||
if tt.expectJSON {
|
if tt.expectJSON {
|
||||||
// When SSZ fails, it falls back to JSON
|
// When SSZ fails, it falls back to JSON
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v2/beacon/blocks",
|
"/eth/v2/beacon/blocks",
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -386,7 +386,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockHTTPErrors(t *testing.T) {
|
|||||||
).Return(tt.sszError).Times(1)
|
).Return(tt.sszError).Times(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
_, err := validatorClient.proposeBeaconBlock(
|
_, err := validatorClient.proposeBeaconBlock(
|
||||||
ctx,
|
ctx,
|
||||||
ðpb.GenericSignedBeaconBlock{
|
ðpb.GenericSignedBeaconBlock{
|
||||||
@@ -507,10 +507,10 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockJSONFallback(t *testing.T) {
|
|||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
// SSZ call fails with 406 to trigger JSON fallback
|
// SSZ call fails with 406 to trigger JSON fallback
|
||||||
jsonRestHandler.EXPECT().PostSSZ(
|
handler.EXPECT().PostSSZ(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
tt.expectedPath,
|
tt.expectedPath,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -521,7 +521,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockJSONFallback(t *testing.T) {
|
|||||||
}).Times(1)
|
}).Times(1)
|
||||||
|
|
||||||
// JSON fallback
|
// JSON fallback
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
tt.expectedPath,
|
tt.expectedPath,
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
@@ -529,7 +529,7 @@ func TestBeaconApiValidatorClient_ProposeBeaconBlockJSONFallback(t *testing.T) {
|
|||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
).Return(tt.jsonError).Times(1)
|
).Return(tt.jsonError).Times(1)
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
resp, err := validatorClient.proposeBeaconBlock(ctx, tt.block)
|
||||||
|
|
||||||
if tt.wantErr {
|
if tt.wantErr {
|
||||||
@@ -547,29 +547,12 @@ func TestBeaconApiValidatorClient_Host(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
hosts := []string{"http://localhost:8080", "http://localhost:8081"}
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler.EXPECT().Host().Return("http://localhost:8080").Times(1)
|
||||||
jsonRestHandler.EXPECT().SwitchHost(
|
|
||||||
hosts[0],
|
|
||||||
).Times(1)
|
|
||||||
jsonRestHandler.EXPECT().Host().Return(
|
|
||||||
hosts[0],
|
|
||||||
).Times(1)
|
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := beaconApiValidatorClient{handler: handler}
|
||||||
validatorClient.SwitchHost(hosts[0])
|
|
||||||
host := validatorClient.Host()
|
host := validatorClient.Host()
|
||||||
require.Equal(t, hosts[0], host)
|
require.Equal(t, "http://localhost:8080", host)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().SwitchHost(
|
|
||||||
hosts[1],
|
|
||||||
).Times(1)
|
|
||||||
jsonRestHandler.EXPECT().Host().Return(
|
|
||||||
hosts[1],
|
|
||||||
).Times(1)
|
|
||||||
validatorClient.SwitchHost(hosts[1])
|
|
||||||
host = validatorClient.Host()
|
|
||||||
require.Equal(t, hosts[1], host)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper functions for generating test blocks for newer consensus versions
|
// Helper functions for generating test blocks for newer consensus versions
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func (c *beaconApiValidatorClient) aggregatedSelection(ctx context.Context, sele
|
|||||||
}
|
}
|
||||||
|
|
||||||
var resp aggregatedSelectionResponse
|
var resp aggregatedSelectionResponse
|
||||||
err = c.jsonRestHandler.Post(ctx, "/eth/v1/validator/beacon_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
err = c.handler.Post(ctx, "/eth/v1/validator/beacon_committee_selections", nil, bytes.NewBuffer(body), &resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "error calling post endpoint")
|
return nil, errors.Wrap(err, "error calling post endpoint")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,13 +89,13 @@ func TestGetAggregatedSelections(t *testing.T) {
|
|||||||
for _, test := range testcases {
|
for _, test := range testcases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
reqBody, err := json.Marshal(test.req)
|
reqBody, err := json.Marshal(test.req)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
ctx := t.Context()
|
ctx := t.Context()
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
"/eth/v1/validator/beacon_committee_selections",
|
"/eth/v1/validator/beacon_committee_selections",
|
||||||
nil,
|
nil,
|
||||||
@@ -108,7 +108,7 @@ func TestGetAggregatedSelections(t *testing.T) {
|
|||||||
test.endpointError,
|
test.endpointError,
|
||||||
).Times(1)
|
).Times(1)
|
||||||
|
|
||||||
validatorClient := &beaconApiValidatorClient{jsonRestHandler: jsonRestHandler}
|
validatorClient := &beaconApiValidatorClient{handler: handler}
|
||||||
res, err := validatorClient.AggregatedSelections(ctx, test.req)
|
res, err := validatorClient.AggregatedSelections(ctx, test.req)
|
||||||
if test.expectedErrorMessage != "" {
|
if test.expectedErrorMessage != "" {
|
||||||
require.ErrorContains(t, test.expectedErrorMessage, err)
|
require.ErrorContains(t, test.expectedErrorMessage, err)
|
||||||
|
|||||||
@@ -288,12 +288,12 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if testCase.getSyncingOutput != nil {
|
if testCase.getSyncingOutput != nil {
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -308,7 +308,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
if testCase.getForkOutput != nil {
|
if testCase.getForkOutput != nil {
|
||||||
stateForkResponseJson := structs.GetStateForkResponse{}
|
stateForkResponseJson := structs.GetStateForkResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
&stateForkResponseJson,
|
&stateForkResponseJson,
|
||||||
@@ -323,7 +323,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
if testCase.getHeadersOutput != nil {
|
if testCase.getHeadersOutput != nil {
|
||||||
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
&blockHeadersResponseJson,
|
&blockHeadersResponseJson,
|
||||||
@@ -342,7 +342,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
iface.inputUrl,
|
iface.inputUrl,
|
||||||
nil,
|
nil,
|
||||||
@@ -372,7 +372,7 @@ func TestCheckDoppelGanger_Nominal(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -722,12 +722,12 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
jsonRestHandler := mock.NewMockJsonRestHandler(ctrl)
|
handler := mock.NewMockJsonRestHandler(ctrl)
|
||||||
|
|
||||||
if testCase.getSyncingOutput != nil {
|
if testCase.getSyncingOutput != nil {
|
||||||
syncingResponseJson := structs.SyncStatusResponse{}
|
syncingResponseJson := structs.SyncStatusResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
syncingEndpoint,
|
syncingEndpoint,
|
||||||
&syncingResponseJson,
|
&syncingResponseJson,
|
||||||
@@ -742,7 +742,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
if testCase.getForkOutput != nil {
|
if testCase.getForkOutput != nil {
|
||||||
stateForkResponseJson := structs.GetStateForkResponse{}
|
stateForkResponseJson := structs.GetStateForkResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
forkEndpoint,
|
forkEndpoint,
|
||||||
&stateForkResponseJson,
|
&stateForkResponseJson,
|
||||||
@@ -757,7 +757,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
if testCase.getHeadersOutput != nil {
|
if testCase.getHeadersOutput != nil {
|
||||||
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
blockHeadersResponseJson := structs.GetBlockHeadersResponse{}
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Get(
|
handler.EXPECT().Get(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
headersEndpoint,
|
headersEndpoint,
|
||||||
&blockHeadersResponseJson,
|
&blockHeadersResponseJson,
|
||||||
@@ -790,7 +790,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
marshalledIndexes, err := json.Marshal(iface.inputStringIndexes)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
jsonRestHandler.EXPECT().Post(
|
handler.EXPECT().Post(
|
||||||
gomock.Any(),
|
gomock.Any(),
|
||||||
iface.inputUrl,
|
iface.inputUrl,
|
||||||
nil,
|
nil,
|
||||||
@@ -806,7 +806,7 @@ func TestCheckDoppelGanger_Errors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validatorClient := beaconApiValidatorClient{
|
validatorClient := beaconApiValidatorClient{
|
||||||
jsonRestHandler: jsonRestHandler,
|
handler: handler,
|
||||||
stateValidatorsProvider: stateValidatorsProvider,
|
stateValidatorsProvider: stateValidatorsProvider,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ type dutiesProvider interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type beaconApiDutiesProvider struct {
|
type beaconApiDutiesProvider struct {
|
||||||
jsonRestHandler rest.RestHandler
|
handler rest.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
type attesterDuty struct {
|
type attesterDuty struct {
|
||||||
@@ -279,7 +279,7 @@ func (c beaconApiDutiesProvider) Committees(ctx context.Context, epoch primitive
|
|||||||
committeesRequest := apiutil.BuildURL("/eth/v1/beacon/states/head/committees", committeeParams)
|
committeesRequest := apiutil.BuildURL("/eth/v1/beacon/states/head/committees", committeeParams)
|
||||||
|
|
||||||
var stateCommittees structs.GetCommitteesResponse
|
var stateCommittees structs.GetCommitteesResponse
|
||||||
if err := c.jsonRestHandler.Get(ctx, committeesRequest, &stateCommittees); err != nil {
|
if err := c.handler.Get(ctx, committeesRequest, &stateCommittees); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,7 +309,7 @@ func (c beaconApiDutiesProvider) AttesterDuties(ctx context.Context, epoch primi
|
|||||||
}
|
}
|
||||||
|
|
||||||
attesterDuties := &structs.GetAttesterDutiesResponse{}
|
attesterDuties := &structs.GetAttesterDutiesResponse{}
|
||||||
if err = c.jsonRestHandler.Post(
|
if err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
fmt.Sprintf("/eth/v1/validator/duties/attester/%d", epoch),
|
fmt.Sprintf("/eth/v1/validator/duties/attester/%d", epoch),
|
||||||
nil,
|
nil,
|
||||||
@@ -331,7 +331,7 @@ func (c beaconApiDutiesProvider) AttesterDuties(ctx context.Context, epoch primi
|
|||||||
// ProposerDuties retrieves the proposer duties for the given epoch
|
// ProposerDuties retrieves the proposer duties for the given epoch
|
||||||
func (c beaconApiDutiesProvider) ProposerDuties(ctx context.Context, epoch primitives.Epoch) (*structs.GetProposerDutiesResponse, error) {
|
func (c beaconApiDutiesProvider) ProposerDuties(ctx context.Context, epoch primitives.Epoch) (*structs.GetProposerDutiesResponse, error) {
|
||||||
proposerDuties := &structs.GetProposerDutiesResponse{}
|
proposerDuties := &structs.GetProposerDutiesResponse{}
|
||||||
if err := c.jsonRestHandler.Get(ctx, fmt.Sprintf("/eth/v1/validator/duties/proposer/%d", epoch), proposerDuties); err != nil {
|
if err := c.handler.Get(ctx, fmt.Sprintf("/eth/v1/validator/duties/proposer/%d", epoch), proposerDuties); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ func (c beaconApiDutiesProvider) SyncDuties(ctx context.Context, epoch primitive
|
|||||||
}
|
}
|
||||||
|
|
||||||
syncDuties := structs.GetSyncCommitteeDutiesResponse{}
|
syncDuties := structs.GetSyncCommitteeDutiesResponse{}
|
||||||
if err = c.jsonRestHandler.Post(
|
if err = c.handler.Post(
|
||||||
ctx,
|
ctx,
|
||||||
fmt.Sprintf("/eth/v1/validator/duties/sync/%d", epoch),
|
fmt.Sprintf("/eth/v1/validator/duties/sync/%d", epoch),
|
||||||
nil,
|
nil,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user