mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-02-10 13:05:13 -05:00
Compare commits
12 Commits
feat/proce
...
GetVersion
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b0f34a79f | ||
|
|
bb0f70ad60 | ||
|
|
dc66f8872d | ||
|
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,19 @@ type PeerCount struct {
|
|||||||
Connected string `json:"connected"`
|
Connected string `json:"connected"`
|
||||||
Disconnecting string `json:"disconnecting"`
|
Disconnecting string `json:"disconnecting"`
|
||||||
}
|
}
|
||||||
|
type GetVersionV2Response struct {
|
||||||
|
Data *VersionV2 `json:"data"`
|
||||||
|
}
|
||||||
|
type VersionV2 struct {
|
||||||
|
BeaconNode *ClientVersionV1 `json:"beacon_node"`
|
||||||
|
ExecutionClient []*ClientVersionV1 `json:"execution_client"`
|
||||||
|
}
|
||||||
|
type ClientVersionV1 struct {
|
||||||
|
Code string `json:"code"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Version string `json:"version"`
|
||||||
|
Commit string `json:"commit"`
|
||||||
|
}
|
||||||
|
|
||||||
type GetVersionResponse struct {
|
type GetVersionResponse struct {
|
||||||
Data *Version `json:"data"`
|
Data *Version `json:"data"`
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ go_library(
|
|||||||
"//testing/spectest:__subpackages__",
|
"//testing/spectest:__subpackages__",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//api/server/structs:go_default_library",
|
||||||
"//beacon-chain/blockchain/kzg:go_default_library",
|
"//beacon-chain/blockchain/kzg:go_default_library",
|
||||||
"//beacon-chain/cache:go_default_library",
|
"//beacon-chain/cache:go_default_library",
|
||||||
"//beacon-chain/cache/depositsnapshot:go_default_library",
|
"//beacon-chain/cache/depositsnapshot:go_default_library",
|
||||||
@@ -99,6 +100,7 @@ go_test(
|
|||||||
data = glob(["testdata/**"]),
|
data = glob(["testdata/**"]),
|
||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//api/server/structs:go_default_library",
|
||||||
"//async/event:go_default_library",
|
"//async/event:go_default_library",
|
||||||
"//beacon-chain/blockchain/kzg:go_default_library",
|
"//beacon-chain/blockchain/kzg:go_default_library",
|
||||||
"//beacon-chain/blockchain/testing:go_default_library",
|
"//beacon-chain/blockchain/testing:go_default_library",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/kzg"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/kzg"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/peerdas"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/peerdas"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/execution/types"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/execution/types"
|
||||||
@@ -99,6 +100,8 @@ const (
|
|||||||
GetBlobsV1 = "engine_getBlobsV1"
|
GetBlobsV1 = "engine_getBlobsV1"
|
||||||
// GetBlobsV2 request string for JSON-RPC.
|
// GetBlobsV2 request string for JSON-RPC.
|
||||||
GetBlobsV2 = "engine_getBlobsV2"
|
GetBlobsV2 = "engine_getBlobsV2"
|
||||||
|
// GetClientVersionV1 is the JSON-RPC method that identifies the execution client.
|
||||||
|
GetClientVersionV1 = "engine_getClientVersionV1"
|
||||||
// Defines the seconds before timing out engine endpoints with non-block execution semantics.
|
// Defines the seconds before timing out engine endpoints with non-block execution semantics.
|
||||||
defaultEngineTimeout = time.Second
|
defaultEngineTimeout = time.Second
|
||||||
)
|
)
|
||||||
@@ -135,6 +138,7 @@ type EngineCaller interface {
|
|||||||
GetPayload(ctx context.Context, payloadId [8]byte, slot primitives.Slot) (*blocks.GetPayloadResponse, error)
|
GetPayload(ctx context.Context, payloadId [8]byte, slot primitives.Slot) (*blocks.GetPayloadResponse, error)
|
||||||
ExecutionBlockByHash(ctx context.Context, hash common.Hash, withTxs bool) (*pb.ExecutionBlock, error)
|
ExecutionBlockByHash(ctx context.Context, hash common.Hash, withTxs bool) (*pb.ExecutionBlock, error)
|
||||||
GetTerminalBlockHash(ctx context.Context, transitionTime uint64) ([]byte, bool, error)
|
GetTerminalBlockHash(ctx context.Context, transitionTime uint64) ([]byte, bool, error)
|
||||||
|
GetClientVersionV1(ctx context.Context) ([]*structs.ClientVersionV1, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var ErrEmptyBlockHash = errors.New("Block hash is empty 0x0000...")
|
var ErrEmptyBlockHash = errors.New("Block hash is empty 0x0000...")
|
||||||
@@ -553,6 +557,30 @@ func (s *Service) GetBlobsV2(ctx context.Context, versionedHashes []common.Hash)
|
|||||||
return result, handleRPCError(err)
|
return result, handleRPCError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) GetClientVersionV1(ctx context.Context) ([]*structs.ClientVersionV1, error) {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "powchain.engine-api-client.GetClientVersionV1")
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
var result []*structs.ClientVersionV1
|
||||||
|
err := s.rpcClient.CallContext(
|
||||||
|
ctx,
|
||||||
|
&result,
|
||||||
|
GetClientVersionV1,
|
||||||
|
structs.ClientVersionV1{
|
||||||
|
Code: "PM",
|
||||||
|
Name: "Prysm",
|
||||||
|
Version: version.SemanticVersion(),
|
||||||
|
Commit: version.GitCommit()[:8],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(result) == 0 {
|
||||||
|
return nil, errors.New("execution client returned no result")
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, handleRPCError(err)
|
||||||
|
}
|
||||||
|
|
||||||
// ReconstructFullBlock takes in a blinded beacon block and reconstructs
|
// ReconstructFullBlock takes in a blinded beacon block and reconstructs
|
||||||
// a beacon block with a full execution payload via the engine API.
|
// a beacon block with a full execution payload via the engine API.
|
||||||
func (s *Service) ReconstructFullBlock(
|
func (s *Service) ReconstructFullBlock(
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/kzg"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/kzg"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/peerdas"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/peerdas"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/db/filesystem"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/db/filesystem"
|
||||||
@@ -999,6 +1000,61 @@ func TestClient_HTTP(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.DeepEqual(t, want, resp)
|
require.DeepEqual(t, want, resp)
|
||||||
})
|
})
|
||||||
|
t.Run(GetClientVersionV1, func(t *testing.T) {
|
||||||
|
want := []*structs.ClientVersionV1{{
|
||||||
|
Code: "GE",
|
||||||
|
Name: "go-ethereum",
|
||||||
|
Version: "1.15.11-stable",
|
||||||
|
Commit: "36b2371c",
|
||||||
|
}}
|
||||||
|
|
||||||
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
defer func() {
|
||||||
|
require.NoError(t, r.Body.Close())
|
||||||
|
}()
|
||||||
|
enc, err := io.ReadAll(r.Body)
|
||||||
|
require.NoError(t, err)
|
||||||
|
jsonRequestString := string(enc)
|
||||||
|
|
||||||
|
// We expect the JSON string RPC request contains the right method name.
|
||||||
|
require.Equal(t, true, strings.Contains(
|
||||||
|
jsonRequestString, GetClientVersionV1,
|
||||||
|
))
|
||||||
|
require.Equal(t, true, strings.Contains(
|
||||||
|
jsonRequestString, "\"code\":\"PM\"",
|
||||||
|
))
|
||||||
|
require.Equal(t, true, strings.Contains(
|
||||||
|
jsonRequestString, "\"name\":\"Prysm\"",
|
||||||
|
))
|
||||||
|
require.Equal(t, true, strings.Contains(
|
||||||
|
jsonRequestString, fmt.Sprintf("\"version\":\"%s\"", version.SemanticVersion()),
|
||||||
|
))
|
||||||
|
require.Equal(t, true, strings.Contains(
|
||||||
|
jsonRequestString, fmt.Sprintf("\"commit\":\"%s\"", version.GitCommit()[:8]),
|
||||||
|
))
|
||||||
|
resp := map[string]any{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1,
|
||||||
|
"result": want,
|
||||||
|
}
|
||||||
|
err = json.NewEncoder(w).Encode(resp)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}))
|
||||||
|
defer srv.Close()
|
||||||
|
|
||||||
|
rpcClient, err := rpc.DialHTTP(srv.URL)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer rpcClient.Close()
|
||||||
|
|
||||||
|
service := &Service{}
|
||||||
|
service.rpcClient = rpcClient
|
||||||
|
|
||||||
|
// We call the RPC method via HTTP and expect a proper result.
|
||||||
|
resp, err := service.GetClientVersionV1(ctx)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.DeepEqual(t, want, resp)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestReconstructFullBellatrixBlock(t *testing.T) {
|
func TestReconstructFullBellatrixBlock(t *testing.T) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ go_library(
|
|||||||
"//visibility:public",
|
"//visibility:public",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//api/server/structs:go_default_library",
|
||||||
"//async/event:go_default_library",
|
"//async/event:go_default_library",
|
||||||
"//beacon-chain/core/peerdas:go_default_library",
|
"//beacon-chain/core/peerdas:go_default_library",
|
||||||
"//beacon-chain/execution/types:go_default_library",
|
"//beacon-chain/execution/types:go_default_library",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/peerdas"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/peerdas"
|
||||||
fieldparams "github.com/OffchainLabs/prysm/v7/config/fieldparams"
|
fieldparams "github.com/OffchainLabs/prysm/v7/config/fieldparams"
|
||||||
"github.com/OffchainLabs/prysm/v7/config/params"
|
"github.com/OffchainLabs/prysm/v7/config/params"
|
||||||
@@ -42,6 +43,8 @@ type EngineClient struct {
|
|||||||
ErrorBlobSidecars error
|
ErrorBlobSidecars error
|
||||||
DataColumnSidecars []blocks.VerifiedRODataColumn
|
DataColumnSidecars []blocks.VerifiedRODataColumn
|
||||||
ErrorDataColumnSidecars error
|
ErrorDataColumnSidecars error
|
||||||
|
ClientVersion []*structs.ClientVersionV1
|
||||||
|
ErrorClientVersion error
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPayload --
|
// NewPayload --
|
||||||
@@ -173,3 +176,8 @@ func (e *EngineClient) GetTerminalBlockHash(ctx context.Context, transitionTime
|
|||||||
blk = parentBlk
|
blk = parentBlk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetClientVersionV1 --
|
||||||
|
func (e *EngineClient) GetClientVersionV1(context.Context) ([]*structs.ClientVersionV1, error) {
|
||||||
|
return e.ClientVersion, e.ErrorClientVersion
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -138,6 +138,9 @@ func connect(a, b host.Host) error {
|
|||||||
func (p *TestP2P) ReceiveRPC(topic string, msg proto.Message) {
|
func (p *TestP2P) ReceiveRPC(topic string, msg proto.Message) {
|
||||||
h, err := libp2p.New(libp2p.ResourceManager(&network.NullResourceManager{}))
|
h, err := libp2p.New(libp2p.ResourceManager(&network.NullResourceManager{}))
|
||||||
require.NoError(p.t, err)
|
require.NoError(p.t, err)
|
||||||
|
p.t.Cleanup(func() {
|
||||||
|
require.NoError(p.t, h.Close())
|
||||||
|
})
|
||||||
if err := connect(h, p.BHost); err != nil {
|
if err := connect(h, p.BHost); err != nil {
|
||||||
p.t.Fatalf("Failed to connect two peers for RPC: %v", err)
|
p.t.Fatalf("Failed to connect two peers for RPC: %v", err)
|
||||||
}
|
}
|
||||||
@@ -169,6 +172,9 @@ func (p *TestP2P) ReceiveRPC(topic string, msg proto.Message) {
|
|||||||
func (p *TestP2P) ReceivePubSub(topic string, msg proto.Message) {
|
func (p *TestP2P) ReceivePubSub(topic string, msg proto.Message) {
|
||||||
h, err := libp2p.New(libp2p.ResourceManager(&network.NullResourceManager{}))
|
h, err := libp2p.New(libp2p.ResourceManager(&network.NullResourceManager{}))
|
||||||
require.NoError(p.t, err)
|
require.NoError(p.t, err)
|
||||||
|
p.t.Cleanup(func() {
|
||||||
|
require.NoError(p.t, h.Close())
|
||||||
|
})
|
||||||
ps, err := pubsub.NewFloodSub(context.Background(), h,
|
ps, err := pubsub.NewFloodSub(context.Background(), h,
|
||||||
pubsub.WithMessageSigning(false),
|
pubsub.WithMessageSigning(false),
|
||||||
pubsub.WithStrictSignatureVerification(false),
|
pubsub.WithStrictSignatureVerification(false),
|
||||||
|
|||||||
@@ -405,6 +405,7 @@ func (s *Service) nodeEndpoints() []endpoint {
|
|||||||
MetadataProvider: s.cfg.MetadataProvider,
|
MetadataProvider: s.cfg.MetadataProvider,
|
||||||
HeadFetcher: s.cfg.HeadFetcher,
|
HeadFetcher: s.cfg.HeadFetcher,
|
||||||
ExecutionChainInfoFetcher: s.cfg.ExecutionChainInfoFetcher,
|
ExecutionChainInfoFetcher: s.cfg.ExecutionChainInfoFetcher,
|
||||||
|
ExecutionEngineCaller: s.cfg.ExecutionEngineCaller,
|
||||||
}
|
}
|
||||||
|
|
||||||
const namespace = "node"
|
const namespace = "node"
|
||||||
@@ -469,6 +470,16 @@ func (s *Service) nodeEndpoints() []endpoint {
|
|||||||
handler: server.GetVersion,
|
handler: server.GetVersion,
|
||||||
methods: []string{http.MethodGet},
|
methods: []string{http.MethodGet},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
template: "/eth/v2/node/version",
|
||||||
|
name: namespace + ".GetVersionV2",
|
||||||
|
middleware: []middleware.Middleware{
|
||||||
|
middleware.AcceptHeaderHandler([]string{api.JsonMediaType}),
|
||||||
|
middleware.AcceptEncodingHeaderHandler(),
|
||||||
|
},
|
||||||
|
handler: server.GetVersionV2,
|
||||||
|
methods: []string{http.MethodGet},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
template: "/eth/v1/node/health",
|
template: "/eth/v1/node/health",
|
||||||
name: namespace + ".GetHealth",
|
name: namespace + ".GetHealth",
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ func Test_endpoints(t *testing.T) {
|
|||||||
"/eth/v1/node/peers/{peer_id}": {http.MethodGet},
|
"/eth/v1/node/peers/{peer_id}": {http.MethodGet},
|
||||||
"/eth/v1/node/peer_count": {http.MethodGet},
|
"/eth/v1/node/peer_count": {http.MethodGet},
|
||||||
"/eth/v1/node/version": {http.MethodGet},
|
"/eth/v1/node/version": {http.MethodGet},
|
||||||
|
"/eth/v2/node/version": {http.MethodGet},
|
||||||
"/eth/v1/node/syncing": {http.MethodGet},
|
"/eth/v1/node/syncing": {http.MethodGet},
|
||||||
"/eth/v1/node/health": {http.MethodGet},
|
"/eth/v1/node/health": {http.MethodGet},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ go_library(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"handlers.go",
|
"handlers.go",
|
||||||
"handlers_peers.go",
|
"handlers_peers.go",
|
||||||
|
"log.go",
|
||||||
"server.go",
|
"server.go",
|
||||||
],
|
],
|
||||||
importpath = "github.com/OffchainLabs/prysm/v7/beacon-chain/rpc/eth/node",
|
importpath = "github.com/OffchainLabs/prysm/v7/beacon-chain/rpc/eth/node",
|
||||||
@@ -30,6 +31,7 @@ go_library(
|
|||||||
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
|
"@com_github_ethereum_go_ethereum//common/hexutil:go_default_library",
|
||||||
"@com_github_libp2p_go_libp2p//core/peer:go_default_library",
|
"@com_github_libp2p_go_libp2p//core/peer:go_default_library",
|
||||||
"@com_github_pkg_errors//:go_default_library",
|
"@com_github_pkg_errors//:go_default_library",
|
||||||
|
"@com_github_sirupsen_logrus//:go_default_library",
|
||||||
"@org_golang_google_grpc//:go_default_library",
|
"@org_golang_google_grpc//:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -44,6 +46,7 @@ go_test(
|
|||||||
deps = [
|
deps = [
|
||||||
"//api/server/structs:go_default_library",
|
"//api/server/structs:go_default_library",
|
||||||
"//beacon-chain/blockchain/testing:go_default_library",
|
"//beacon-chain/blockchain/testing:go_default_library",
|
||||||
|
"//beacon-chain/execution/testing:go_default_library",
|
||||||
"//beacon-chain/p2p:go_default_library",
|
"//beacon-chain/p2p:go_default_library",
|
||||||
"//beacon-chain/p2p/peers:go_default_library",
|
"//beacon-chain/p2p/peers:go_default_library",
|
||||||
"//beacon-chain/p2p/testing:go_default_library",
|
"//beacon-chain/p2p/testing:go_default_library",
|
||||||
|
|||||||
@@ -116,6 +116,35 @@ func (*Server) GetVersion(w http.ResponseWriter, r *http.Request) {
|
|||||||
httputil.WriteJson(w, resp)
|
httputil.WriteJson(w, resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetVersionV2 Retrieves structured information about the version of the beacon node and its attached
|
||||||
|
// execution client(s) in the same format as used on the Engine API
|
||||||
|
func (s *Server) GetVersionV2(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx, span := trace.StartSpan(r.Context(), "node.GetVersionV2")
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
elDataList, err := s.ExecutionEngineCaller.GetClientVersionV1(ctx)
|
||||||
|
if err != nil {
|
||||||
|
log.WithError(err).WithField("endpoint", "GetVersionV2").Debug("Could not get execution client version")
|
||||||
|
}
|
||||||
|
|
||||||
|
commit := version.GitCommit()
|
||||||
|
if len(commit) >= 8 {
|
||||||
|
commit = commit[:8]
|
||||||
|
}
|
||||||
|
resp := &structs.GetVersionV2Response{
|
||||||
|
Data: &structs.VersionV2{
|
||||||
|
BeaconNode: &structs.ClientVersionV1{
|
||||||
|
Code: "PM",
|
||||||
|
Name: "Prysm",
|
||||||
|
Version: version.SemanticVersion(),
|
||||||
|
Commit: commit,
|
||||||
|
},
|
||||||
|
ExecutionClient: elDataList,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
httputil.WriteJson(w, resp)
|
||||||
|
}
|
||||||
|
|
||||||
// GetHealth returns node health status in http status codes. Useful for load balancers.
|
// GetHealth returns node health status in http status codes. Useful for load balancers.
|
||||||
func (s *Server) GetHealth(w http.ResponseWriter, r *http.Request) {
|
func (s *Server) GetHealth(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx, span := trace.StartSpan(r.Context(), "node.GetHealth")
|
ctx, span := trace.StartSpan(r.Context(), "node.GetHealth")
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/OffchainLabs/go-bitfield"
|
"github.com/OffchainLabs/go-bitfield"
|
||||||
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
"github.com/OffchainLabs/prysm/v7/api/server/structs"
|
||||||
mock "github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/testing"
|
mock "github.com/OffchainLabs/prysm/v7/beacon-chain/blockchain/testing"
|
||||||
|
mockengine "github.com/OffchainLabs/prysm/v7/beacon-chain/execution/testing"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/p2p"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/p2p"
|
||||||
mockp2p "github.com/OffchainLabs/prysm/v7/beacon-chain/p2p/testing"
|
mockp2p "github.com/OffchainLabs/prysm/v7/beacon-chain/p2p/testing"
|
||||||
"github.com/OffchainLabs/prysm/v7/beacon-chain/rpc/testutil"
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/rpc/testutil"
|
||||||
@@ -90,6 +91,41 @@ func TestGetVersion(t *testing.T) {
|
|||||||
assert.StringContains(t, arch, resp.Data.Version)
|
assert.StringContains(t, arch, resp.Data.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetVersionV2(t *testing.T) {
|
||||||
|
request := httptest.NewRequest(http.MethodGet, "http://example.com/eth/v2/node/version", nil)
|
||||||
|
writer := httptest.NewRecorder()
|
||||||
|
writer.Body = &bytes.Buffer{}
|
||||||
|
|
||||||
|
s := &Server{
|
||||||
|
ExecutionEngineCaller: &mockengine.EngineClient{
|
||||||
|
ClientVersion: []*structs.ClientVersionV1{{
|
||||||
|
Code: "EL",
|
||||||
|
Name: "ExecutionClient",
|
||||||
|
Version: "v1.0.0",
|
||||||
|
Commit: "abcdef12",
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
s.GetVersionV2(writer, request)
|
||||||
|
require.Equal(t, http.StatusOK, writer.Code)
|
||||||
|
|
||||||
|
resp := &structs.GetVersionV2Response{}
|
||||||
|
require.NoError(t, json.Unmarshal(writer.Body.Bytes(), resp))
|
||||||
|
require.NotNil(t, resp)
|
||||||
|
require.NotNil(t, resp.Data)
|
||||||
|
require.NotNil(t, resp.Data.BeaconNode)
|
||||||
|
require.NotNil(t, resp.Data.ExecutionClient)
|
||||||
|
e := resp.Data.ExecutionClient[0]
|
||||||
|
require.Equal(t, "EL", e.Code)
|
||||||
|
require.Equal(t, "ExecutionClient", e.Name)
|
||||||
|
require.Equal(t, "v1.0.0", e.Version)
|
||||||
|
require.Equal(t, "abcdef12", e.Commit)
|
||||||
|
require.Equal(t, "PM", resp.Data.BeaconNode.Code)
|
||||||
|
require.Equal(t, "Prysm", resp.Data.BeaconNode.Name)
|
||||||
|
require.Equal(t, version.SemanticVersion(), resp.Data.BeaconNode.Version)
|
||||||
|
require.Equal(t, true, len(resp.Data.BeaconNode.Commit) <= 8)
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetHealth(t *testing.T) {
|
func TestGetHealth(t *testing.T) {
|
||||||
checker := &syncmock.Sync{}
|
checker := &syncmock.Sync{}
|
||||||
optimisticFetcher := &mock.ChainService{Optimistic: false}
|
optimisticFetcher := &mock.ChainService{Optimistic: false}
|
||||||
|
|||||||
9
beacon-chain/rpc/eth/node/log.go
Normal file
9
beacon-chain/rpc/eth/node/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 node
|
||||||
|
|
||||||
|
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", "beacon-chain/rpc/eth/node")
|
||||||
@@ -26,4 +26,5 @@ type Server struct {
|
|||||||
GenesisTimeFetcher blockchain.TimeFetcher
|
GenesisTimeFetcher blockchain.TimeFetcher
|
||||||
HeadFetcher blockchain.HeadFetcher
|
HeadFetcher blockchain.HeadFetcher
|
||||||
ExecutionChainInfoFetcher execution.ChainInfoFetcher
|
ExecutionChainInfoFetcher execution.ChainInfoFetcher
|
||||||
|
ExecutionEngineCaller execution.EngineCaller
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.
|
||||||
3
changelog/bastin_get-version-v2.md
Normal file
3
changelog/bastin_get-version-v2.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Added
|
||||||
|
|
||||||
|
- New beacon API endpoint `eth/v2/node/version`.
|
||||||
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.
|
||||||
2
changelog/satushh-close-host.md
Normal file
2
changelog/satushh-close-host.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
### Ignored
|
||||||
|
- Close opened host in test helpers
|
||||||
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.
|
||||||
3
changelog/tt_ro-payload-envelope.md
Normal file
3
changelog/tt_ro-payload-envelope.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Added
|
||||||
|
|
||||||
|
- Add read only wrapper for execution payload envelope 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()
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ go_library(
|
|||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
"execution.go",
|
"execution.go",
|
||||||
|
"execution_payload_envelope.go",
|
||||||
"factory.go",
|
"factory.go",
|
||||||
"get_payload.go",
|
"get_payload.go",
|
||||||
"getters.go",
|
"getters.go",
|
||||||
@@ -45,6 +46,7 @@ go_library(
|
|||||||
go_test(
|
go_test(
|
||||||
name = "go_default_test",
|
name = "go_default_test",
|
||||||
srcs = [
|
srcs = [
|
||||||
|
"execution_payload_envelope_test.go",
|
||||||
"execution_test.go",
|
"execution_test.go",
|
||||||
"factory_test.go",
|
"factory_test.go",
|
||||||
"getters_test.go",
|
"getters_test.go",
|
||||||
|
|||||||
131
consensus-types/blocks/execution_payload_envelope.go
Normal file
131
consensus-types/blocks/execution_payload_envelope.go
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
package blocks
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/signing"
|
||||||
|
field_params "github.com/OffchainLabs/prysm/v7/config/fieldparams"
|
||||||
|
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/consensus-types/interfaces"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
|
enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1"
|
||||||
|
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
type signedExecutionPayloadEnvelope struct {
|
||||||
|
s *ethpb.SignedExecutionPayloadEnvelope
|
||||||
|
}
|
||||||
|
|
||||||
|
type executionPayloadEnvelope struct {
|
||||||
|
p *ethpb.ExecutionPayloadEnvelope
|
||||||
|
}
|
||||||
|
|
||||||
|
// WrappedROSignedExecutionPayloadEnvelope wraps a signed execution payload envelope proto in a read-only interface.
|
||||||
|
func WrappedROSignedExecutionPayloadEnvelope(s *ethpb.SignedExecutionPayloadEnvelope) (interfaces.ROSignedExecutionPayloadEnvelope, error) {
|
||||||
|
w := signedExecutionPayloadEnvelope{s: s}
|
||||||
|
if w.IsNil() {
|
||||||
|
return nil, consensus_types.ErrNilObjectWrapped
|
||||||
|
}
|
||||||
|
return w, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// WrappedROExecutionPayloadEnvelope wraps an execution payload envelope proto in a read-only interface.
|
||||||
|
func WrappedROExecutionPayloadEnvelope(p *ethpb.ExecutionPayloadEnvelope) (interfaces.ROExecutionPayloadEnvelope, error) {
|
||||||
|
w := &executionPayloadEnvelope{p: p}
|
||||||
|
if w.IsNil() {
|
||||||
|
return nil, consensus_types.ErrNilObjectWrapped
|
||||||
|
}
|
||||||
|
return w, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Envelope returns the execution payload envelope as a read-only interface.
|
||||||
|
func (s signedExecutionPayloadEnvelope) Envelope() (interfaces.ROExecutionPayloadEnvelope, error) {
|
||||||
|
return WrappedROExecutionPayloadEnvelope(s.s.Message)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signature returns the BLS signature as a 96-byte array.
|
||||||
|
func (s signedExecutionPayloadEnvelope) Signature() [field_params.BLSSignatureLength]byte {
|
||||||
|
return [field_params.BLSSignatureLength]byte(s.s.Signature)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNil reports whether the signed envelope or its contents are invalid.
|
||||||
|
func (s signedExecutionPayloadEnvelope) IsNil() bool {
|
||||||
|
if s.s == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if len(s.s.Signature) != field_params.BLSSignatureLength {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if len(s.s.Message.BeaconBlockRoot) != field_params.RootLength {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if len(s.s.Message.StateRoot) != field_params.RootLength {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if s.s.Message.ExecutionRequests == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if s.s.Message.Payload == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
w := executionPayloadEnvelope{p: s.s.Message}
|
||||||
|
return w.IsNil()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SigningRoot computes the signing root for the signed envelope with the provided domain.
|
||||||
|
func (s signedExecutionPayloadEnvelope) SigningRoot(domain []byte) (root [32]byte, err error) {
|
||||||
|
return signing.ComputeSigningRoot(s.s.Message, domain)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proto returns the underlying protobuf message.
|
||||||
|
func (s signedExecutionPayloadEnvelope) Proto() proto.Message {
|
||||||
|
return s.s
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNil reports whether the envelope or its required fields are invalid.
|
||||||
|
func (p *executionPayloadEnvelope) IsNil() bool {
|
||||||
|
if p.p == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if p.p.Payload == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if len(p.p.BeaconBlockRoot) != field_params.RootLength {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsBlinded reports whether the envelope contains a blinded payload.
|
||||||
|
func (p *executionPayloadEnvelope) IsBlinded() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execution returns the execution payload as a read-only interface.
|
||||||
|
func (p *executionPayloadEnvelope) Execution() (interfaces.ExecutionData, error) {
|
||||||
|
return WrappedExecutionPayloadDeneb(p.p.Payload)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecutionRequests returns the execution requests attached to the envelope.
|
||||||
|
func (p *executionPayloadEnvelope) ExecutionRequests() *enginev1.ExecutionRequests {
|
||||||
|
return ethpb.CopyExecutionRequests(p.p.ExecutionRequests)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BuilderIndex returns the proposer/builder index for the envelope.
|
||||||
|
func (p *executionPayloadEnvelope) BuilderIndex() primitives.BuilderIndex {
|
||||||
|
return p.p.BuilderIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
// BeaconBlockRoot returns the beacon block root referenced by the envelope.
|
||||||
|
func (p *executionPayloadEnvelope) BeaconBlockRoot() [field_params.RootLength]byte {
|
||||||
|
return [field_params.RootLength]byte(p.p.BeaconBlockRoot)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slot returns the slot of the envelope.
|
||||||
|
func (p *executionPayloadEnvelope) Slot() primitives.Slot {
|
||||||
|
return p.p.Slot
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateRoot returns the state root carried by the envelope.
|
||||||
|
func (p *executionPayloadEnvelope) StateRoot() [field_params.RootLength]byte {
|
||||||
|
return [field_params.RootLength]byte(p.p.StateRoot)
|
||||||
|
}
|
||||||
136
consensus-types/blocks/execution_payload_envelope_test.go
Normal file
136
consensus-types/blocks/execution_payload_envelope_test.go
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
package blocks_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/OffchainLabs/prysm/v7/beacon-chain/core/signing"
|
||||||
|
consensus_types "github.com/OffchainLabs/prysm/v7/consensus-types"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/consensus-types/blocks"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
|
enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1"
|
||||||
|
ethpb "github.com/OffchainLabs/prysm/v7/proto/prysm/v1alpha1"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/testing/assert"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/testing/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func validExecutionPayloadEnvelope() *ethpb.ExecutionPayloadEnvelope {
|
||||||
|
payload := &enginev1.ExecutionPayloadDeneb{
|
||||||
|
ParentHash: bytes.Repeat([]byte{0x01}, 32),
|
||||||
|
FeeRecipient: bytes.Repeat([]byte{0x02}, 20),
|
||||||
|
StateRoot: bytes.Repeat([]byte{0x03}, 32),
|
||||||
|
ReceiptsRoot: bytes.Repeat([]byte{0x04}, 32),
|
||||||
|
LogsBloom: bytes.Repeat([]byte{0x05}, 256),
|
||||||
|
PrevRandao: bytes.Repeat([]byte{0x06}, 32),
|
||||||
|
BlockNumber: 1,
|
||||||
|
GasLimit: 2,
|
||||||
|
GasUsed: 3,
|
||||||
|
Timestamp: 4,
|
||||||
|
BaseFeePerGas: bytes.Repeat([]byte{0x07}, 32),
|
||||||
|
BlockHash: bytes.Repeat([]byte{0x08}, 32),
|
||||||
|
Transactions: [][]byte{},
|
||||||
|
Withdrawals: []*enginev1.Withdrawal{},
|
||||||
|
BlobGasUsed: 0,
|
||||||
|
ExcessBlobGas: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
return ðpb.ExecutionPayloadEnvelope{
|
||||||
|
Payload: payload,
|
||||||
|
ExecutionRequests: &enginev1.ExecutionRequests{
|
||||||
|
Deposits: []*enginev1.DepositRequest{
|
||||||
|
{
|
||||||
|
Pubkey: bytes.Repeat([]byte{0x09}, 48),
|
||||||
|
WithdrawalCredentials: bytes.Repeat([]byte{0x0A}, 32),
|
||||||
|
Signature: bytes.Repeat([]byte{0x0B}, 96),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
BuilderIndex: 10,
|
||||||
|
BeaconBlockRoot: bytes.Repeat([]byte{0xAA}, 32),
|
||||||
|
Slot: 9,
|
||||||
|
StateRoot: bytes.Repeat([]byte{0xBB}, 32),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWrappedROExecutionPayloadEnvelope(t *testing.T) {
|
||||||
|
t.Run("returns error on nil payload", func(t *testing.T) {
|
||||||
|
invalid := validExecutionPayloadEnvelope()
|
||||||
|
invalid.Payload = nil
|
||||||
|
_, err := blocks.WrappedROExecutionPayloadEnvelope(invalid)
|
||||||
|
require.Equal(t, consensus_types.ErrNilObjectWrapped, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("returns error on invalid beacon root length", func(t *testing.T) {
|
||||||
|
invalid := validExecutionPayloadEnvelope()
|
||||||
|
invalid.BeaconBlockRoot = []byte{0x01}
|
||||||
|
_, err := blocks.WrappedROExecutionPayloadEnvelope(invalid)
|
||||||
|
require.Equal(t, consensus_types.ErrNilObjectWrapped, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("wraps and exposes fields", func(t *testing.T) {
|
||||||
|
env := validExecutionPayloadEnvelope()
|
||||||
|
wrapped, err := blocks.WrappedROExecutionPayloadEnvelope(env)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, primitives.BuilderIndex(10), wrapped.BuilderIndex())
|
||||||
|
require.Equal(t, primitives.Slot(9), wrapped.Slot())
|
||||||
|
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0xAA}, 32)), wrapped.BeaconBlockRoot())
|
||||||
|
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0xBB}, 32)), wrapped.StateRoot())
|
||||||
|
|
||||||
|
reqs := wrapped.ExecutionRequests()
|
||||||
|
require.NotNil(t, reqs)
|
||||||
|
if len(reqs.Deposits) > 0 {
|
||||||
|
reqs.Deposits[0].Pubkey[0] = 0xFF
|
||||||
|
require.NotEqual(t, reqs.Deposits[0].Pubkey[0], env.ExecutionRequests.Deposits[0].Pubkey[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
exec, err := wrapped.Execution()
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.DeepEqual(t, env.Payload.ParentHash, exec.ParentHash())
|
||||||
|
|
||||||
|
require.Equal(t, false, wrapped.IsBlinded())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWrappedROSignedExecutionPayloadEnvelope(t *testing.T) {
|
||||||
|
t.Run("returns error for invalid signature length", func(t *testing.T) {
|
||||||
|
signed := ðpb.SignedExecutionPayloadEnvelope{
|
||||||
|
Message: validExecutionPayloadEnvelope(),
|
||||||
|
Signature: bytes.Repeat([]byte{0xAA}, 95),
|
||||||
|
}
|
||||||
|
_, err := blocks.WrappedROSignedExecutionPayloadEnvelope(signed)
|
||||||
|
require.Equal(t, consensus_types.ErrNilObjectWrapped, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("returns error on nil envelope", func(t *testing.T) {
|
||||||
|
_, err := blocks.WrappedROSignedExecutionPayloadEnvelope(nil)
|
||||||
|
require.Equal(t, consensus_types.ErrNilObjectWrapped, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("wraps and provides envelope/signing data", func(t *testing.T) {
|
||||||
|
sig := bytes.Repeat([]byte{0xAB}, 96)
|
||||||
|
signed := ðpb.SignedExecutionPayloadEnvelope{
|
||||||
|
Message: validExecutionPayloadEnvelope(),
|
||||||
|
Signature: sig,
|
||||||
|
}
|
||||||
|
|
||||||
|
wrapped, err := blocks.WrappedROSignedExecutionPayloadEnvelope(signed)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
gotSig := wrapped.Signature()
|
||||||
|
assert.DeepEqual(t, [96]byte(sig), gotSig)
|
||||||
|
|
||||||
|
env, err := wrapped.Envelope()
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.DeepEqual(t, [32]byte(bytes.Repeat([]byte{0xAA}, 32)), env.BeaconBlockRoot())
|
||||||
|
|
||||||
|
domain := bytes.Repeat([]byte{0xCC}, 32)
|
||||||
|
wantRoot, err := signing.ComputeSigningRoot(signed.Message, domain)
|
||||||
|
require.NoError(t, err)
|
||||||
|
gotRoot, err := wrapped.SigningRoot(domain)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, wantRoot, gotRoot)
|
||||||
|
|
||||||
|
require.Equal(t, signed, wrapped.Proto())
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -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())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ go_library(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"beacon_block.go",
|
"beacon_block.go",
|
||||||
"error.go",
|
"error.go",
|
||||||
|
"execution_payload_envelope.go",
|
||||||
"light_client.go",
|
"light_client.go",
|
||||||
"signed_execution_payload_bid.go",
|
"signed_execution_payload_bid.go",
|
||||||
"utils.go",
|
"utils.go",
|
||||||
|
|||||||
27
consensus-types/interfaces/execution_payload_envelope.go
Normal file
27
consensus-types/interfaces/execution_payload_envelope.go
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package interfaces
|
||||||
|
|
||||||
|
import (
|
||||||
|
field_params "github.com/OffchainLabs/prysm/v7/config/fieldparams"
|
||||||
|
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
|
||||||
|
enginev1 "github.com/OffchainLabs/prysm/v7/proto/engine/v1"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ROSignedExecutionPayloadEnvelope interface {
|
||||||
|
Envelope() (ROExecutionPayloadEnvelope, error)
|
||||||
|
Signature() [field_params.BLSSignatureLength]byte
|
||||||
|
SigningRoot([]byte) ([32]byte, error)
|
||||||
|
IsNil() bool
|
||||||
|
Proto() proto.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
type ROExecutionPayloadEnvelope interface {
|
||||||
|
Execution() (ExecutionData, error)
|
||||||
|
ExecutionRequests() *enginev1.ExecutionRequests
|
||||||
|
BuilderIndex() primitives.BuilderIndex
|
||||||
|
BeaconBlockRoot() [field_params.RootLength]byte
|
||||||
|
Slot() primitives.Slot
|
||||||
|
StateRoot() [field_params.RootLength]byte
|
||||||
|
IsBlinded() bool
|
||||||
|
IsNil() bool
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -34,8 +34,17 @@ func SemanticVersion() string {
|
|||||||
return gitTag
|
return gitTag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GitCommit returns the current build commit hash.
|
||||||
|
func GitCommit() string {
|
||||||
|
return resolvedGitCommit()
|
||||||
|
}
|
||||||
|
|
||||||
// BuildData returns the git tag and commit of the current build.
|
// BuildData returns the git tag and commit of the current build.
|
||||||
func BuildData() string {
|
func BuildData() string {
|
||||||
|
return fmt.Sprintf("Prysm/%s/%s", gitTag, resolvedGitCommit())
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolvedGitCommit() string {
|
||||||
// if doing a local build, these values are not interpolated
|
// if doing a local build, these values are not interpolated
|
||||||
if gitCommit == "{STABLE_GIT_COMMIT}" {
|
if gitCommit == "{STABLE_GIT_COMMIT}" {
|
||||||
commit, err := exec.Command("git", "rev-parse", "HEAD").Output()
|
commit, err := exec.Command("git", "rev-parse", "HEAD").Output()
|
||||||
@@ -45,5 +54,5 @@ func BuildData() string {
|
|||||||
gitCommit = strings.TrimRight(string(commit), "\r\n")
|
gitCommit = strings.TrimRight(string(commit), "\r\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("Prysm/%s/%s", gitTag, gitCommit)
|
return gitCommit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user